CVE Vulnerabilities

CVE-2018-1120

Heap-based Buffer Overflow

Published: Jun 20, 2018 | Modified: Nov 21, 2024
CVSS 3.x
5.3
MEDIUM
Source:
NVD
CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS 2.x
3.5 LOW
AV:N/AC:M/Au:S/C:N/I:N/A:P
RedHat/V2
RedHat/V3
2.8 MODERATE
CVSS:3.0/AV:L/AC:L/PR:L/UI:R/S:U/C:N/I:N/A:L
Ubuntu
MEDIUM
root.io logo minimus.io logo echo.ai logo

A flaw was found affecting the Linux kernel before version 4.17. By mmap()ing a FUSE-backed file onto a processs memory containing command line arguments (or environment strings), an attacker can cause utilities from psutils or procps (such as ps, w) or any other program which makes a read() call to the /proc//cmdline (or /proc//environ) files to block indefinitely (denial of service) or for some controlled time (as a synchronization primitive for other attacks).

Weakness

A heap overflow condition is a buffer overflow, where the buffer that can be overwritten is allocated in the heap portion of memory, generally meaning that the buffer was allocated using a routine such as malloc().

Affected Software

NameVendorStart VersionEnd Version
Linux_kernelLinux*4.17 (excluding)
Red Hat Enterprise Linux 7RedHatkernel-rt-0:3.10.0-957.rt56.910.el7*
Red Hat Enterprise Linux 7RedHatkernel-alt-0:4.14.0-115.el7a*
Red Hat Enterprise Linux 7RedHatkernel-0:3.10.0-957.el7*
Red Hat Enterprise Linux 7.4 Advanced Update SupportRedHatkernel-0:3.10.0-693.76.1.el7*
Red Hat Enterprise Linux 7.4 Telco Extended Update SupportRedHatkernel-0:3.10.0-693.76.1.el7*
Red Hat Enterprise Linux 7.4 Update Services for SAP SolutionsRedHatkernel-0:3.10.0-693.76.1.el7*
Red Hat Enterprise MRG 2RedHatkernel-rt-1:3.10.0-693.76.1.rt56.676.el6rt*
LinuxUbuntuartful*
LinuxUbuntubionic*
LinuxUbuntuesm-infra-legacy/trusty*
LinuxUbuntuesm-infra/bionic*
LinuxUbuntuesm-infra/xenial*
LinuxUbuntuprecise/esm*
LinuxUbuntutrusty*
LinuxUbuntutrusty/esm*
LinuxUbuntuupstream*
LinuxUbuntuxenial*
Linux-awsUbuntubionic*
Linux-awsUbuntuesm-infra-legacy/trusty*
Linux-awsUbuntuesm-infra/bionic*
Linux-awsUbuntuesm-infra/xenial*
Linux-awsUbuntutrusty*
Linux-awsUbuntutrusty/esm*
Linux-awsUbuntuupstream*
Linux-awsUbuntuxenial*
Linux-aws-5.15Ubuntuupstream*
Linux-aws-5.4Ubuntuupstream*
Linux-aws-6.14Ubuntuupstream*
Linux-aws-6.8Ubuntuupstream*
Linux-aws-fipsUbuntutrusty*
Linux-aws-fipsUbuntuupstream*
Linux-aws-fipsUbuntuxenial*
Linux-aws-hweUbuntuupstream*
Linux-azureUbuntubionic*
Linux-azureUbuntuesm-infra/bionic*
Linux-azureUbuntuesm-infra/xenial*
Linux-azureUbuntuupstream*
Linux-azureUbuntuxenial*
Linux-azure-4.15Ubuntuupstream*
Linux-azure-5.15Ubuntuupstream*
Linux-azure-5.4Ubuntuupstream*
Linux-azure-6.11Ubuntunoble*
Linux-azure-6.11Ubuntuupstream*
Linux-azure-6.8Ubuntuupstream*
Linux-azure-edgeUbuntubionic*
Linux-azure-edgeUbuntuesm-infra/bionic*
Linux-azure-edgeUbuntuupstream*
Linux-azure-fdeUbuntuesm-infra/focal*
Linux-azure-fdeUbuntufocal*
Linux-azure-fdeUbuntuupstream*
Linux-azure-fde-5.15Ubuntuesm-infra/focal*
Linux-azure-fde-5.15Ubuntufocal*
Linux-azure-fde-5.15Ubuntuupstream*
Linux-azure-fipsUbuntutrusty*
Linux-azure-fipsUbuntuupstream*
Linux-azure-fipsUbuntuxenial*
Linux-azure-nvidiaUbuntuupstream*
Linux-bluefieldUbuntuupstream*
Linux-euclidUbuntuupstream*
Linux-euclidUbuntuxenial*
Linux-fipsUbuntufips-updates/xenial*
Linux-fipsUbuntufips/xenial*
Linux-fipsUbuntuupstream*
Linux-floUbuntutrusty*
Linux-floUbuntuupstream*
Linux-floUbuntuxenial*
Linux-gcpUbuntubionic*
Linux-gcpUbuntuesm-infra/bionic*
Linux-gcpUbuntuesm-infra/xenial*
Linux-gcpUbuntuupstream*
Linux-gcpUbuntuxenial*
Linux-gcp-4.15Ubuntuupstream*
Linux-gcp-5.15Ubuntuupstream*
Linux-gcp-5.4Ubuntuupstream*
Linux-gcp-6.11Ubuntunoble*
Linux-gcp-6.11Ubuntuupstream*
Linux-gcp-6.14Ubuntuupstream*
Linux-gcp-6.8Ubuntuupstream*
Linux-gcp-edgeUbuntuupstream*
Linux-gcp-fipsUbuntutrusty*
Linux-gcp-fipsUbuntuupstream*
Linux-gcp-fipsUbuntuxenial*
Linux-gkeUbuntuesm-infra/focal*
Linux-gkeUbuntufocal*
Linux-gkeUbuntuupstream*
Linux-gkeUbuntuxenial*
Linux-gkeopUbuntuupstream*
Linux-gkeop-5.15Ubuntuupstream*
Linux-goldfishUbuntutrusty*
Linux-goldfishUbuntuupstream*
Linux-goldfishUbuntuxenial*
Linux-grouperUbuntutrusty*
Linux-grouperUbuntuupstream*
Linux-hweUbuntuesm-infra/xenial*
Linux-hweUbuntuupstream*
Linux-hweUbuntuxenial*
Linux-hwe-5.15Ubuntuupstream*
Linux-hwe-5.4Ubuntuupstream*
Linux-hwe-6.11Ubuntunoble*
Linux-hwe-6.11Ubuntuupstream*
Linux-hwe-6.14Ubuntuupstream*
Linux-hwe-6.8Ubuntuupstream*
Linux-hwe-edgeUbuntuesm-infra/xenial*
Linux-hwe-edgeUbuntuupstream*
Linux-hwe-edgeUbuntuxenial*
Linux-ibmUbuntuupstream*
Linux-ibm-5.15Ubuntuupstream*
Linux-ibm-5.4Ubuntuupstream*
Linux-ibm-6.8Ubuntuupstream*
Linux-intelUbuntuupstream*
Linux-intel-iot-realtimeUbuntujammy*
Linux-intel-iot-realtimeUbuntuupstream*
Linux-intel-iotgUbuntuupstream*
Linux-intel-iotg-5.15Ubuntuupstream*
Linux-iotUbuntuupstream*
Linux-kvmUbuntubionic*
Linux-kvmUbuntuesm-infra/bionic*
Linux-kvmUbuntuesm-infra/xenial*
Linux-kvmUbuntuupstream*
Linux-kvmUbuntuxenial*
Linux-lowlatencyUbuntuupstream*
Linux-lowlatency-hwe-5.15Ubuntuupstream*
Linux-lowlatency-hwe-6.11Ubuntunoble*
Linux-lowlatency-hwe-6.11Ubuntuupstream*
Linux-lowlatency-hwe-6.8Ubuntuupstream*
Linux-lts-trustyUbuntuprecise/esm*
Linux-lts-trustyUbuntuupstream*
Linux-lts-utopicUbuntutrusty*
Linux-lts-utopicUbuntutrusty/esm*
Linux-lts-utopicUbuntuupstream*
Linux-lts-vividUbuntutrusty*
Linux-lts-vividUbuntutrusty/esm*
Linux-lts-vividUbuntuupstream*
Linux-lts-wilyUbuntutrusty*
Linux-lts-wilyUbuntutrusty/esm*
Linux-lts-wilyUbuntuupstream*
Linux-lts-xenialUbuntuesm-infra-legacy/trusty*
Linux-lts-xenialUbuntutrusty*
Linux-lts-xenialUbuntutrusty/esm*
Linux-lts-xenialUbuntuupstream*
Linux-maguroUbuntutrusty*
Linux-maguroUbuntuupstream*
Linux-makoUbuntutrusty*
Linux-makoUbuntuupstream*
Linux-makoUbuntuxenial*
Linux-mantaUbuntutrusty*
Linux-mantaUbuntuupstream*
Linux-nvidiaUbuntuupstream*
Linux-nvidia-6.11Ubuntuupstream*
Linux-nvidia-6.5Ubuntuupstream*
Linux-nvidia-6.8Ubuntuupstream*
Linux-nvidia-lowlatencyUbuntuupstream*
Linux-nvidia-tegraUbuntuupstream*
Linux-nvidia-tegra-5.15Ubuntuupstream*
Linux-nvidia-tegra-igxUbuntuupstream*
Linux-oemUbuntubionic*
Linux-oemUbuntuesm-infra/bionic*
Linux-oemUbuntuupstream*
Linux-oemUbuntuxenial*
Linux-oem-6.11Ubuntuupstream*
Linux-oem-6.14Ubuntuupstream*
Linux-oem-6.8Ubuntuupstream*
Linux-oracleUbuntuupstream*
Linux-oracle-5.15Ubuntuupstream*
Linux-oracle-5.4Ubuntuupstream*
Linux-oracle-6.14Ubuntuupstream*
Linux-oracle-6.8Ubuntuupstream*
Linux-raspiUbuntuupstream*
Linux-raspi-5.4Ubuntuupstream*
Linux-raspi-realtimeUbuntunoble*
Linux-raspi-realtimeUbuntuupstream*
Linux-raspi2Ubuntuartful*
Linux-raspi2Ubuntubionic*
Linux-raspi2Ubuntuesm-infra/focal*
Linux-raspi2Ubuntufocal*
Linux-raspi2Ubuntuupstream*
Linux-raspi2Ubuntuxenial*
Linux-realtimeUbuntujammy*
Linux-realtimeUbuntuupstream*
Linux-realtime-6.14Ubuntuupstream*
Linux-realtime-6.8Ubuntuupstream*
Linux-riscvUbuntuesm-infra/focal*
Linux-riscvUbuntufocal*
Linux-riscvUbuntujammy*
Linux-riscvUbuntuupstream*
Linux-riscv-5.15Ubuntuupstream*
Linux-riscv-6.14Ubuntuupstream*
Linux-riscv-6.8Ubuntuupstream*
Linux-snapdragonUbuntuartful*
Linux-snapdragonUbuntubionic*
Linux-snapdragonUbuntuupstream*
Linux-snapdragonUbuntuxenial*
Linux-xilinx-zynqmpUbuntuupstream*

Potential Mitigations

  • 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.
  • 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].

References