CVE Vulnerabilities

CVE-2018-12931

Out-of-bounds Write

Published: Jun 28, 2018 | Modified: Nov 21, 2024
CVSS 3.x
7.8
HIGH
Source:
NVD
CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS 2.x
7.2 HIGH
AV:L/AC:L/Au:N/C:C/I:C/A:C
RedHat/V2
RedHat/V3
4.6 LOW
CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Ubuntu
LOW
root.io logo minimus.io logo echo.ai logo

ntfs_attr_find in the ntfs.ko filesystem driver in the Linux kernel 4.15.0 allows attackers to trigger a stack-based out-of-bounds write and cause a denial of service (kernel oops or panic) or possibly have unspecified other impact via a crafted ntfs filesystem.

Weakness

The product writes data past the end, or before the beginning, of the intended buffer.

Affected Software

NameVendorStart VersionEnd Version
Ubuntu_linuxCanonical16.04.4 (including)16.04.4 (including)
Linux_kernelLinux4.15 (including)4.15 (including)
Red Hat Enterprise MRG 2RedHatkernel-rt-1:3.10.0-693.46.1.rt56.639.el6rt*
LinuxUbuntuartful*
LinuxUbuntubionic*
LinuxUbuntucosmic*
LinuxUbuntudisco*
LinuxUbuntueoan*
LinuxUbuntufocal*
LinuxUbuntugroovy*
LinuxUbuntuhirsute*
LinuxUbuntuimpish*
LinuxUbuntukinetic*
LinuxUbuntulunar*
LinuxUbuntumantic*
LinuxUbuntuoracular*
LinuxUbuntuplucky*
LinuxUbuntuprecise/esm*
LinuxUbuntutrusty*
LinuxUbuntutrusty/esm*
LinuxUbuntuxenial*
Linux-allwinnerUbuntukinetic*
Linux-allwinnerUbuntulunar*
Linux-allwinnerUbuntuupstream*
Linux-allwinner-5.19Ubuntujammy*
Linux-allwinner-5.19Ubuntuupstream*
Linux-awsUbuntubionic*
Linux-awsUbuntucosmic*
Linux-awsUbuntudisco*
Linux-awsUbuntueoan*
Linux-awsUbuntufocal*
Linux-awsUbuntugroovy*
Linux-awsUbuntuhirsute*
Linux-awsUbuntuimpish*
Linux-awsUbuntukinetic*
Linux-awsUbuntulunar*
Linux-awsUbuntumantic*
Linux-awsUbuntuoracular*
Linux-awsUbuntuplucky*
Linux-awsUbuntutrusty*
Linux-awsUbuntutrusty/esm*
Linux-awsUbuntuxenial*
Linux-aws-5.0Ubuntubionic*
Linux-aws-5.0Ubuntuesm-infra/bionic*
Linux-aws-5.0Ubuntuupstream*
Linux-aws-5.11Ubuntuesm-infra/focal*
Linux-aws-5.11Ubuntufocal*
Linux-aws-5.11Ubuntuupstream*
Linux-aws-5.13Ubuntuesm-infra/focal*
Linux-aws-5.13Ubuntufocal*
Linux-aws-5.13Ubuntuupstream*
Linux-aws-5.15Ubuntufocal*
Linux-aws-5.19Ubuntujammy*
Linux-aws-5.19Ubuntuupstream*
Linux-aws-5.3Ubuntubionic*
Linux-aws-5.3Ubuntuesm-infra/bionic*
Linux-aws-5.3Ubuntuupstream*
Linux-aws-5.4Ubuntubionic*
Linux-aws-5.8Ubuntuesm-infra/focal*
Linux-aws-5.8Ubuntufocal*
Linux-aws-5.8Ubuntuupstream*
Linux-aws-6.2Ubuntujammy*
Linux-aws-6.2Ubuntuupstream*
Linux-aws-6.5Ubuntujammy*
Linux-aws-6.5Ubuntuupstream*
Linux-aws-fipsUbuntufips-updates/bionic*
Linux-aws-fipsUbuntufips/bionic*
Linux-aws-hweUbuntuxenial*
Linux-azureUbuntubionic*
Linux-azureUbuntucosmic*
Linux-azureUbuntudisco*
Linux-azureUbuntueoan*
Linux-azureUbuntuesm-infra/bionic*
Linux-azureUbuntufocal*
Linux-azureUbuntugroovy*
Linux-azureUbuntuhirsute*
Linux-azureUbuntuimpish*
Linux-azureUbuntukinetic*
Linux-azureUbuntulunar*
Linux-azureUbuntumantic*
Linux-azureUbuntuoracular*
Linux-azureUbuntuplucky*
Linux-azureUbuntutrusty*
Linux-azureUbuntutrusty/esm*
Linux-azureUbuntuxenial*
Linux-azure-4.15Ubuntubionic*
Linux-azure-5.11Ubuntuesm-infra/focal*
Linux-azure-5.11Ubuntufocal*
Linux-azure-5.11Ubuntuupstream*
Linux-azure-5.13Ubuntuesm-infra/focal*
Linux-azure-5.13Ubuntufocal*
Linux-azure-5.13Ubuntuupstream*
Linux-azure-5.15Ubuntufocal*
Linux-azure-5.19Ubuntujammy*
Linux-azure-5.19Ubuntuupstream*
Linux-azure-5.4Ubuntubionic*
Linux-azure-5.8Ubuntuesm-infra/focal*
Linux-azure-5.8Ubuntufocal*
Linux-azure-5.8Ubuntuupstream*
Linux-azure-6.2Ubuntujammy*
Linux-azure-6.2Ubuntuupstream*
Linux-azure-6.5Ubuntujammy*
Linux-azure-6.5Ubuntuupstream*
Linux-azure-edgeUbuntubionic*
Linux-azure-edgeUbuntuesm-infra/bionic*
Linux-azure-edgeUbuntuupstream*
Linux-azure-fdeUbuntuesm-infra/focal*
Linux-azure-fdeUbuntufocal*
Linux-azure-fdeUbuntuplucky*
Linux-azure-fde-5.15Ubuntufocal*
Linux-azure-fde-5.19Ubuntujammy*
Linux-azure-fde-5.19Ubuntuupstream*
Linux-azure-fde-6.2Ubuntujammy*
Linux-azure-fde-6.2Ubuntuupstream*
Linux-azure-fipsUbuntufips-updates/bionic*
Linux-azure-fipsUbuntufips/bionic*
Linux-bluefieldUbuntufocal*
Linux-dell300xUbuntubionic*
Linux-dell300xUbuntuupstream*
Linux-euclidUbuntuxenial*
Linux-fipsUbuntufips-updates/bionic*
Linux-fipsUbuntufips-updates/xenial*
Linux-fipsUbuntufips/bionic*
Linux-fipsUbuntufips/xenial*
Linux-floUbuntutrusty*
Linux-floUbuntuxenial*
Linux-gcpUbuntubionic*
Linux-gcpUbuntucosmic*
Linux-gcpUbuntudisco*
Linux-gcpUbuntueoan*
Linux-gcpUbuntuesm-infra/bionic*
Linux-gcpUbuntufocal*
Linux-gcpUbuntugroovy*
Linux-gcpUbuntuhirsute*
Linux-gcpUbuntuimpish*
Linux-gcpUbuntukinetic*
Linux-gcpUbuntulunar*
Linux-gcpUbuntumantic*
Linux-gcpUbuntuoracular*
Linux-gcpUbuntuplucky*
Linux-gcpUbuntuxenial*
Linux-gcp-4.15Ubuntubionic*
Linux-gcp-5.11Ubuntuesm-infra/focal*
Linux-gcp-5.11Ubuntufocal*
Linux-gcp-5.11Ubuntuupstream*
Linux-gcp-5.13Ubuntuesm-infra/focal*
Linux-gcp-5.13Ubuntufocal*
Linux-gcp-5.13Ubuntuupstream*
Linux-gcp-5.15Ubuntufocal*
Linux-gcp-5.19Ubuntujammy*
Linux-gcp-5.19Ubuntuupstream*
Linux-gcp-5.3Ubuntubionic*
Linux-gcp-5.3Ubuntuesm-infra/bionic*
Linux-gcp-5.3Ubuntuupstream*
Linux-gcp-5.4Ubuntubionic*
Linux-gcp-5.8Ubuntuesm-infra/focal*
Linux-gcp-5.8Ubuntufocal*
Linux-gcp-5.8Ubuntuupstream*
Linux-gcp-6.2Ubuntujammy*
Linux-gcp-6.2Ubuntuupstream*
Linux-gcp-6.5Ubuntujammy*
Linux-gcp-6.5Ubuntuupstream*
Linux-gcp-edgeUbuntubionic*
Linux-gcp-fipsUbuntufips-updates/bionic*
Linux-gcp-fipsUbuntufips/bionic*
Linux-gkeUbuntuesm-infra/focal*
Linux-gkeUbuntufocal*
Linux-gkeUbuntuxenial*
Linux-gke-4.15Ubuntubionic*
Linux-gke-4.15Ubuntuesm-infra/bionic*
Linux-gke-4.15Ubuntuupstream*
Linux-gke-5.0Ubuntubionic*
Linux-gke-5.0Ubuntuupstream*
Linux-gke-5.15Ubuntuesm-infra/focal*
Linux-gke-5.15Ubuntufocal*
Linux-gke-5.15Ubuntuupstream*
Linux-gke-5.3Ubuntubionic*
Linux-gke-5.3Ubuntuupstream*
Linux-gke-5.4Ubuntubionic*
Linux-gke-5.4Ubuntuesm-infra/bionic*
Linux-gke-5.4Ubuntuupstream*
Linux-gkeopUbuntufocal*
Linux-gkeop-5.15Ubuntuesm-infra/focal*
Linux-gkeop-5.15Ubuntufocal*
Linux-gkeop-5.4Ubuntubionic*
Linux-gkeop-5.4Ubuntuesm-infra/bionic*
Linux-gkeop-5.4Ubuntuupstream*
Linux-goldfishUbuntutrusty*
Linux-goldfishUbuntuxenial*
Linux-grouperUbuntutrusty*
Linux-hweUbuntubionic*
Linux-hweUbuntuesm-infra/bionic*
Linux-hweUbuntuxenial*
Linux-hwe-5.11Ubuntuesm-infra/focal*
Linux-hwe-5.11Ubuntufocal*
Linux-hwe-5.11Ubuntuupstream*
Linux-hwe-5.13Ubuntuesm-infra/focal*
Linux-hwe-5.13Ubuntufocal*
Linux-hwe-5.13Ubuntuupstream*
Linux-hwe-5.15Ubuntufocal*
Linux-hwe-5.19Ubuntujammy*
Linux-hwe-5.19Ubuntuupstream*
Linux-hwe-5.4Ubuntubionic*
Linux-hwe-5.8Ubuntuesm-infra/focal*
Linux-hwe-5.8Ubuntufocal*
Linux-hwe-5.8Ubuntuupstream*
Linux-hwe-6.2Ubuntujammy*
Linux-hwe-6.2Ubuntuupstream*
Linux-hwe-edgeUbuntubionic*
Linux-hwe-edgeUbuntuesm-infra/bionic*
Linux-hwe-edgeUbuntuesm-infra/xenial*
Linux-hwe-edgeUbuntuupstream*
Linux-hwe-edgeUbuntuxenial*
Linux-ibmUbuntufocal*
Linux-ibmUbuntukinetic*
Linux-ibmUbuntulunar*
Linux-ibmUbuntumantic*
Linux-ibm-5.15Ubuntuesm-infra/focal*
Linux-ibm-5.15Ubuntufocal*
Linux-ibm-5.4Ubuntubionic*
Linux-ibm-5.4Ubuntuesm-infra/bionic*
Linux-intel-5.13Ubuntuesm-infra/focal*
Linux-intel-5.13Ubuntufocal*
Linux-intel-5.13Ubuntuupstream*
Linux-intel-iot-realtimeUbuntujammy*
Linux-intel-iotg-5.15Ubuntufocal*
Linux-iotUbuntufocal*
Linux-kvmUbuntubionic*
Linux-kvmUbuntucosmic*
Linux-kvmUbuntudisco*
Linux-kvmUbuntueoan*
Linux-kvmUbuntufocal*
Linux-kvmUbuntugroovy*
Linux-kvmUbuntuhirsute*
Linux-kvmUbuntuimpish*
Linux-kvmUbuntukinetic*
Linux-kvmUbuntulunar*
Linux-kvmUbuntuxenial*
Linux-laptopUbuntumantic*
Linux-lowlatencyUbuntukinetic*
Linux-lowlatencyUbuntulunar*
Linux-lowlatencyUbuntumantic*
Linux-lowlatencyUbuntuoracular*
Linux-lowlatency-hwe-5.15Ubuntufocal*
Linux-lowlatency-hwe-5.19Ubuntujammy*
Linux-lowlatency-hwe-5.19Ubuntuupstream*
Linux-lowlatency-hwe-6.2Ubuntujammy*
Linux-lowlatency-hwe-6.2Ubuntuupstream*
Linux-lts-trustyUbuntuprecise/esm*
Linux-lts-utopicUbuntutrusty*
Linux-lts-utopicUbuntutrusty/esm*
Linux-lts-vividUbuntutrusty*
Linux-lts-vividUbuntutrusty/esm*
Linux-lts-wilyUbuntutrusty*
Linux-lts-wilyUbuntutrusty/esm*
Linux-lts-xenialUbuntutrusty*
Linux-lts-xenialUbuntutrusty/esm*
Linux-maguroUbuntutrusty*
Linux-makoUbuntutrusty*
Linux-makoUbuntuxenial*
Linux-mantaUbuntutrusty*
Linux-nvidia-6.11Ubuntunoble*
Linux-nvidia-6.2Ubuntujammy*
Linux-nvidia-6.2Ubuntuupstream*
Linux-nvidia-tegra-5.15Ubuntuesm-infra/focal*
Linux-nvidia-tegra-5.15Ubuntufocal*
Linux-oemUbuntubionic*
Linux-oemUbuntucosmic*
Linux-oemUbuntudisco*
Linux-oemUbuntueoan*
Linux-oemUbuntuesm-infra/bionic*
Linux-oemUbuntuupstream*
Linux-oemUbuntuxenial*
Linux-oem-5.10Ubuntuesm-infra/focal*
Linux-oem-5.10Ubuntufocal*
Linux-oem-5.10Ubuntuupstream*
Linux-oem-5.14Ubuntuesm-infra/focal*
Linux-oem-5.14Ubuntufocal*
Linux-oem-5.14Ubuntuupstream*
Linux-oem-5.17Ubuntujammy*
Linux-oem-5.17Ubuntukinetic*
Linux-oem-5.17Ubuntuupstream*
Linux-oem-5.6Ubuntuesm-infra/focal*
Linux-oem-5.6Ubuntufocal*
Linux-oem-5.6Ubuntuupstream*
Linux-oem-6.0Ubuntujammy*
Linux-oem-6.0Ubuntuupstream*
Linux-oem-6.1Ubuntujammy*
Linux-oem-6.1Ubuntuupstream*
Linux-oem-6.5Ubuntujammy*
Linux-oem-6.5Ubuntuupstream*
Linux-oem-osp1Ubuntubionic*
Linux-oem-osp1Ubuntudisco*
Linux-oem-osp1Ubuntueoan*
Linux-oem-osp1Ubuntuupstream*
Linux-oracleUbuntubionic*
Linux-oracleUbuntucosmic*
Linux-oracleUbuntudisco*
Linux-oracleUbuntueoan*
Linux-oracleUbuntufocal*
Linux-oracleUbuntugroovy*
Linux-oracleUbuntuhirsute*
Linux-oracleUbuntuimpish*
Linux-oracleUbuntukinetic*
Linux-oracleUbuntulunar*
Linux-oracleUbuntumantic*
Linux-oracleUbuntuoracular*
Linux-oracleUbuntuplucky*
Linux-oracleUbuntuxenial*
Linux-oracle-5.0Ubuntubionic*
Linux-oracle-5.0Ubuntuesm-infra/bionic*
Linux-oracle-5.0Ubuntuupstream*
Linux-oracle-5.11Ubuntuesm-infra/focal*
Linux-oracle-5.11Ubuntufocal*
Linux-oracle-5.11Ubuntuupstream*
Linux-oracle-5.13Ubuntuesm-infra/focal*
Linux-oracle-5.13Ubuntufocal*
Linux-oracle-5.13Ubuntuupstream*
Linux-oracle-5.15Ubuntufocal*
Linux-oracle-5.3Ubuntubionic*
Linux-oracle-5.3Ubuntuesm-infra/bionic*
Linux-oracle-5.3Ubuntuupstream*
Linux-oracle-5.4Ubuntubionic*
Linux-oracle-5.8Ubuntuesm-infra/focal*
Linux-oracle-5.8Ubuntufocal*
Linux-oracle-5.8Ubuntuupstream*
Linux-oracle-6.5Ubuntujammy*
Linux-oracle-6.5Ubuntuupstream*
Linux-raspiUbuntufocal*
Linux-raspiUbuntugroovy*
Linux-raspiUbuntuhirsute*
Linux-raspiUbuntuimpish*
Linux-raspiUbuntukinetic*
Linux-raspiUbuntulunar*
Linux-raspiUbuntumantic*
Linux-raspiUbuntuoracular*
Linux-raspiUbuntuplucky*
Linux-raspi-5.4Ubuntubionic*
Linux-raspi-realtimeUbuntunoble*
Linux-raspi2Ubuntuartful*
Linux-raspi2Ubuntubionic*
Linux-raspi2Ubuntucosmic*
Linux-raspi2Ubuntudisco*
Linux-raspi2Ubuntueoan*
Linux-raspi2Ubuntuesm-infra/focal*
Linux-raspi2Ubuntufocal*
Linux-raspi2Ubuntuupstream*
Linux-raspi2Ubuntuxenial*
Linux-raspi2-5.3Ubuntubionic*
Linux-raspi2-5.3Ubuntuupstream*
Linux-realtimeUbuntujammy*
Linux-realtimeUbuntunoble*
Linux-realtimeUbuntuoracular*
Linux-realtimeUbuntuplucky*
Linux-realtime-6.14Ubunturealtime/noble*
Linux-riscvUbuntuesm-infra/focal*
Linux-riscvUbuntufocal*
Linux-riscvUbuntugroovy*
Linux-riscvUbuntuhirsute*
Linux-riscvUbuntuimpish*
Linux-riscvUbuntujammy*
Linux-riscvUbuntukinetic*
Linux-riscvUbuntulunar*
Linux-riscvUbuntumantic*
Linux-riscvUbuntuoracular*
Linux-riscvUbuntuplucky*
Linux-riscv-5.11Ubuntuesm-infra/focal*
Linux-riscv-5.11Ubuntufocal*
Linux-riscv-5.11Ubuntuupstream*
Linux-riscv-5.15Ubuntufocal*
Linux-riscv-5.19Ubuntujammy*
Linux-riscv-5.19Ubuntuupstream*
Linux-riscv-5.8Ubuntuesm-infra/focal*
Linux-riscv-5.8Ubuntufocal*
Linux-riscv-5.8Ubuntuupstream*
Linux-riscv-6.14Ubuntunoble*
Linux-riscv-6.5Ubuntujammy*
Linux-riscv-6.5Ubuntuupstream*
Linux-snapdragonUbuntuartful*
Linux-snapdragonUbuntubionic*
Linux-snapdragonUbuntudisco*
Linux-snapdragonUbuntuupstream*
Linux-snapdragonUbuntuxenial*
Linux-starfiveUbuntukinetic*
Linux-starfiveUbuntulunar*
Linux-starfiveUbuntumantic*
Linux-starfive-5.19Ubuntujammy*
Linux-starfive-5.19Ubuntuupstream*
Linux-starfive-6.2Ubuntujammy*
Linux-starfive-6.2Ubuntuupstream*
Linux-starfive-6.5Ubuntujammy*
Linux-starfive-6.5Ubuntuupstream*
Linux-xilinxUbuntuplucky*
Linux-xilinx-zynqmpUbuntufocal*

Potential Mitigations

  • Use a language that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.

  • For example, many languages that perform their own memory management, such as Java and Perl, are not subject to buffer overflows. Other languages, such as Ada and C#, typically provide overflow protection, but the protection can be disabled by the programmer.

  • Be wary that a language’s interface to native code may still be subject to overflows, even if the language itself is theoretically safe.

  • Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.

  • Examples include the Safe C String Library (SafeStr) by Messier and Viega [REF-57], and the Strsafe.h library from Microsoft [REF-56]. These libraries provide safer versions of overflow-prone string-handling functions.

  • Use automatic buffer overflow detection mechanisms that are offered by certain compilers or compiler extensions. Examples include: the Microsoft Visual Studio /GS flag, Fedora/Red Hat FORTIFY_SOURCE GCC flag, StackGuard, and ProPolice, which provide various mechanisms including canary-based detection and range/index checking.

  • D3-SFCV (Stack Frame Canary Validation) from D3FEND [REF-1334] discusses canary-based detection in detail.

  • Consider adhering to the following rules when allocating and managing an application’s memory:

  • Run or compile the software using features or extensions that randomly arrange the positions of a program’s executable and libraries in memory. Because this makes the addresses unpredictable, it can prevent an attacker from reliably jumping to exploitable code.

  • Examples include Address Space Layout Randomization (ASLR) [REF-58] [REF-60] and Position-Independent Executables (PIE) [REF-64]. Imported modules may be similarly realigned if their default memory addresses conflict with other modules, in a process known as “rebasing” (for Windows) and “prelinking” (for Linux) [REF-1332] using randomly generated addresses. ASLR for libraries cannot be used in conjunction with prelink since it would require relocating the libraries at run-time, defeating the whole purpose of prelinking.

  • For more information on these techniques see D3-SAOR (Segment Address Offset Randomization) from D3FEND [REF-1335].

  • Use a CPU and operating system that offers Data Execution Protection (using hardware NX or XD bits) or the equivalent techniques that simulate this feature in software, such as PaX [REF-60] [REF-61]. These techniques ensure that any instruction executed is exclusively at a memory address that is part of the code segment.

  • For more information on these techniques see D3-PSEP (Process Segment Execution Prevention) from D3FEND [REF-1336].

References