The remote Ubuntu 16.04 LTS host has a package installed that is affected by multiple vulnerabilities as referenced in the USN-3509-1 advisory.
The Linux Kernel versions 2.6.38 through 4.14 have a problematic use of pmd_mkdirty() in the touch_pmd() function inside the THP implementation. touch_pmd() can be reached by get_user_pages(). In such case, the pmd will become dirty. This scenario breaks the new can_follow_write_pmd()'s logic - pmd can become dirty without going through a COW cycle. This bug is not as severe as the original Dirty cow because an ext4 file (or any other regular file) cannot be mapped using THP. Nevertheless, it does allow us to overwrite read-only huge pages. For example, the zero huge page and sealed shmem files can be overwritten (since their mapping can be populated using THP). Note that after the first write page-fault to the zero page, it will be replaced with a new fresh (and zeroed) thp. (CVE-2017-1000405)
The assoc_array_insert_into_terminal_node function in lib/assoc_array.c in the Linux kernel before 4.13.11 mishandles node splitting, which allows local users to cause a denial of service (NULL pointer dereference and panic) via a crafted application, as demonstrated by the keyring key type, and key addition and link creation operations. (CVE-2017-12193)
The parse_hid_report_descriptor function in drivers/input/tablet/gtco.c in the Linux kernel before 4.13.11 allows local users to cause a denial of service (out-of-bounds read and system crash) or possibly have unspecified other impact via a crafted USB device. (CVE-2017-16643)
The XFRM dump policy implementation in net/xfrm/xfrm_user.c in the Linux kernel before 4.13.11 allows local users to gain privileges or cause a denial of service (use-after-free) via a crafted SO_RCVBUF setsockopt system call in conjunction with XFRM_MSG_GETPOLICY Netlink messages. (CVE-2017-16939)
Note that Nessus has not tested for these issues but has instead relied only on the application’s self-reported version number.
#
# (C) Tenable Network Security, Inc.
#
# The descriptive text and package checks in this plugin were
# extracted from Ubuntu Security Notice USN-3509-1. The text
# itself is copyright (C) Canonical, Inc. See
# <http://www.ubuntu.com/usn/>. Ubuntu(R) is a registered
# trademark of Canonical, Inc.
#
include('compat.inc');
if (description)
{
script_id(105104);
script_version("3.13");
script_set_attribute(attribute:"plugin_modification_date", value:"2024/01/09");
script_cve_id(
"CVE-2017-1000405",
"CVE-2017-12193",
"CVE-2017-16643",
"CVE-2017-16939"
);
script_xref(name:"USN", value:"3509-1");
script_name(english:"Ubuntu 16.04 LTS : Linux kernel vulnerabilities (USN-3509-1)");
script_set_attribute(attribute:"synopsis", value:
"The remote Ubuntu host is missing one or more security updates.");
script_set_attribute(attribute:"description", value:
"The remote Ubuntu 16.04 LTS host has a package installed that is affected by multiple vulnerabilities as referenced in
the USN-3509-1 advisory.
- The Linux Kernel versions 2.6.38 through 4.14 have a problematic use of pmd_mkdirty() in the touch_pmd()
function inside the THP implementation. touch_pmd() can be reached by get_user_pages(). In such case, the
pmd will become dirty. This scenario breaks the new can_follow_write_pmd()'s logic - pmd can become dirty
without going through a COW cycle. This bug is not as severe as the original Dirty cow because an ext4
file (or any other regular file) cannot be mapped using THP. Nevertheless, it does allow us to overwrite
read-only huge pages. For example, the zero huge page and sealed shmem files can be overwritten (since
their mapping can be populated using THP). Note that after the first write page-fault to the zero page, it
will be replaced with a new fresh (and zeroed) thp. (CVE-2017-1000405)
- The assoc_array_insert_into_terminal_node function in lib/assoc_array.c in the Linux kernel before 4.13.11
mishandles node splitting, which allows local users to cause a denial of service (NULL pointer dereference
and panic) via a crafted application, as demonstrated by the keyring key type, and key addition and link
creation operations. (CVE-2017-12193)
- The parse_hid_report_descriptor function in drivers/input/tablet/gtco.c in the Linux kernel before 4.13.11
allows local users to cause a denial of service (out-of-bounds read and system crash) or possibly have
unspecified other impact via a crafted USB device. (CVE-2017-16643)
- The XFRM dump policy implementation in net/xfrm/xfrm_user.c in the Linux kernel before 4.13.11 allows
local users to gain privileges or cause a denial of service (use-after-free) via a crafted SO_RCVBUF
setsockopt system call in conjunction with XFRM_MSG_GETPOLICY Netlink messages. (CVE-2017-16939)
Note that Nessus has not tested for these issues but has instead relied only on the application's self-reported version
number.");
script_set_attribute(attribute:"see_also", value:"https://ubuntu.com/security/notices/USN-3509-1");
script_set_attribute(attribute:"solution", value:
"Update the affected kernel package.");
script_set_cvss_base_vector("CVSS2#AV:L/AC:L/Au:N/C:C/I:C/A:C");
script_set_cvss_temporal_vector("CVSS2#E:H/RL:OF/RC:C");
script_set_cvss3_base_vector("CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H");
script_set_cvss3_temporal_vector("CVSS:3.0/E:H/RL:O/RC:C");
script_set_attribute(attribute:"cvss_score_source", value:"CVE-2017-16939");
script_set_attribute(attribute:"exploitability_ease", value:"Exploits are available");
script_set_attribute(attribute:"exploit_available", value:"true");
script_set_attribute(attribute:"exploited_by_malware", value:"true");
script_set_attribute(attribute:"in_the_news", value:"true");
script_set_attribute(attribute:"vuln_publication_date", value:"2017/11/07");
script_set_attribute(attribute:"patch_publication_date", value:"2017/12/07");
script_set_attribute(attribute:"plugin_publication_date", value:"2017/12/08");
script_set_attribute(attribute:"plugin_type", value:"local");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1012-kvm");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-generic");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-generic-lpae");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-lowlatency");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-powerpc-e500mc");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-powerpc-smp");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-powerpc64-emb");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-powerpc64-smp");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1043-aws");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1079-raspi2");
script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1081-snapdragon");
script_set_attribute(attribute:"cpe", value:"cpe:/o:canonical:ubuntu_linux:16.04:-:lts");
script_set_attribute(attribute:"generated_plugin", value:"current");
script_end_attributes();
script_category(ACT_GATHER_INFO);
script_family(english:"Ubuntu Local Security Checks");
script_copyright(english:"Ubuntu Security Notice (C) 2017-2024 Canonical, Inc. / NASL script (C) 2017-2024 and is owned by Tenable, Inc. or an Affiliate thereof.");
script_dependencies("ssh_get_info.nasl", "linux_alt_patch_detect.nasl");
script_require_keys("Host/cpu", "Host/Ubuntu", "Host/Ubuntu/release", "Host/Debian/dpkg-l");
exit(0);
}
include('debian_package.inc');
include('ksplice.inc');
if ( ! get_kb_item('Host/local_checks_enabled') ) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
var os_release = get_kb_item('Host/Ubuntu/release');
if ( isnull(os_release) ) audit(AUDIT_OS_NOT, 'Ubuntu');
os_release = chomp(os_release);
if (! ('16.04' >< os_release)) audit(AUDIT_OS_NOT, 'Ubuntu 16.04', 'Ubuntu ' + os_release);
if ( ! get_kb_item('Host/Debian/dpkg-l') ) audit(AUDIT_PACKAGE_LIST_MISSING);
var cpu = get_kb_item('Host/cpu');
if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
if ('x86_64' >!< cpu && cpu !~ "^i[3-6]86$" && 's390' >!< cpu && 'aarch64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'Ubuntu', cpu);
var kernel_mappings = {
'16.04': {
'4.4.0': {
'generic': '4.4.0-103',
'generic-lpae': '4.4.0-103',
'lowlatency': '4.4.0-103',
'powerpc-e500mc': '4.4.0-103',
'powerpc-smp': '4.4.0-103',
'powerpc64-emb': '4.4.0-103',
'powerpc64-smp': '4.4.0-103',
'kvm': '4.4.0-1012',
'aws': '4.4.0-1043',
'raspi2': '4.4.0-1079',
'snapdragon': '4.4.0-1081'
}
}
};
var host_kernel_release = get_kb_item('Host/uptrack-uname-r');
if (empty_or_null(host_kernel_release)) host_kernel_release = get_kb_item_or_exit('Host/uname-r');
var host_kernel_base_version = get_kb_item_or_exit('Host/Debian/kernel-base-version');
var host_kernel_type = get_kb_item_or_exit('Host/Debian/kernel-type');
if(empty_or_null(kernel_mappings[os_release][host_kernel_base_version][host_kernel_type])) audit(AUDIT_INST_VER_NOT_VULN, 'kernel ' + host_kernel_release);
var extra = '';
var kernel_fixed_version = kernel_mappings[os_release][host_kernel_base_version][host_kernel_type] + "-" + host_kernel_type;
if (deb_ver_cmp(ver1:host_kernel_release, ver2:kernel_fixed_version) < 0)
{
extra = extra + 'Running Kernel level of ' + host_kernel_release + ' does not meet the minimum fixed level of ' + kernel_fixed_version + ' for this advisory.\n\n';
}
else
{
audit(AUDIT_PATCH_INSTALLED, 'Kernel package for USN-3509-1');
}
if (get_one_kb_item('Host/ksplice/kernel-cves'))
{
var cve_list = make_list('CVE-2017-12193', 'CVE-2017-16643', 'CVE-2017-16939', 'CVE-2017-1000405');
if (ksplice_cves_check(cve_list))
{
audit(AUDIT_PATCH_INSTALLED, 'KSplice hotfix for USN-3509-1');
}
else
{
extra = extra + ksplice_reporting_text();
}
}
if (extra) {
security_report_v4(
port : 0,
severity : SECURITY_HOLE,
extra : extra
);
exit(0);
}
Vendor | Product | Version | CPE |
---|---|---|---|
canonical | ubuntu_linux | linux-image-4.4.0-1012-kvm | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1012-kvm |
canonical | ubuntu_linux | linux-image-4.4.0-103-generic | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-generic |
canonical | ubuntu_linux | linux-image-4.4.0-103-generic-lpae | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-generic-lpae |
canonical | ubuntu_linux | linux-image-4.4.0-103-lowlatency | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-lowlatency |
canonical | ubuntu_linux | linux-image-4.4.0-103-powerpc-e500mc | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-powerpc-e500mc |
canonical | ubuntu_linux | linux-image-4.4.0-103-powerpc-smp | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-powerpc-smp |
canonical | ubuntu_linux | linux-image-4.4.0-103-powerpc64-emb | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-powerpc64-emb |
canonical | ubuntu_linux | linux-image-4.4.0-103-powerpc64-smp | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-103-powerpc64-smp |
canonical | ubuntu_linux | linux-image-4.4.0-1043-aws | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1043-aws |
canonical | ubuntu_linux | linux-image-4.4.0-1079-raspi2 | p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1079-raspi2 |