Linux kernel mremap(2) system call does not properly check return value from do_munmap() function

2004-03-10T00:00:00
ID VU:981222
Type cert
Reporter CERT
Modified 2004-03-25T00:00:00

Description

Overview

A vulnerability in the Linux mremap(2) system call could allow an authenticated, local attacker to execute arbitrary code with root privileges.

Description

The Linux kernel uses a linked list of vitrual memory area (VMA) descriptors to reference valid regions of the page table for a given process. VMA descriptors include information about the memory area such as start address, length, and page protection flags. A VMA effectively contains a range of page table entries (PTEs) that make up part of the page table.

The mremap(2) system call has the ability to resize or move a VMA or part of a VMA within a process' memory space. mremap(2) contains a function called do_munmap() that is used to unmap regions of memory during resize or move operations. There is a limit on the number of VMA descriptors that can exist at one time, and do_munmap() does not create a new VMA descriptor if doing so would exceed this limit.

In certain cases, mremap(2) does not properly check the return value from the do_munmap() function, and will map PTEs to new locations even though the expected VMAs have not been created or updated. By carefully manipulating VMA to PTE relationships, a local attacker can read from or write to memory owned by a process running with different privileges.

Further technical details are available in an advisory from iSEC. Note that this vulnerability is distinct from the one described in VU#490620/CAN-2003-0985.


Impact

An authenticated, local attacker could execute arbitrary code with root privileges.


Solution

Patch or Upgrade

Apply a patch or upgrade as specified by your vendor. This issue is resolved in Linux kernels 2.2.26, 2.4.25, and 2.6.3 from the Linux Kernel Archives.


Systems Affected

Vendor| Status| Date Notified| Date Updated
---|---|---|---
Astaro| | -| 25 Mar 2004
Conectiva| | 10 Mar 2004| 11 Mar 2004
Debian| | 10 Mar 2004| 11 Mar 2004
Fedora Legacy Project| | -| 25 Mar 2004
Fedora Project| | -| 25 Mar 2004
Gentoo Linux| | -| 11 Mar 2004
Linux Kernel Archives| | -| 10 Mar 2004
Linux Netwosix| | -| 25 Mar 2004
MandrakeSoft| | 10 Mar 2004| 25 Mar 2004
Openwall GNU/*/Linux| | 10 Mar 2004| 25 Mar 2004
Red Hat Inc.| | 10 Mar 2004| 11 Mar 2004
SGI| | 10 Mar 2004| 25 Mar 2004
Slackware| | -| 25 Mar 2004
SmoothWall| | -| 11 Mar 2004
Sun Microsystems Inc.| | 10 Mar 2004| 25 Mar 2004
If you are a vendor and your product is affected, let us know.

CVSS Metrics

Group | Score | Vector
---|---|---
Base | N/A | N/A
Temporal | N/A | N/A
Environmental | N/A | N/A

References

  • <http://www.kernel.org/>
  • <http://isec.pl/vulnerabilities/isec-0014-mremap-unmap.txt>
  • <http://www.securityfocus.com/archive/1/354284>
  • <http://www.securityfocus.com/archive/1/355781>
  • <http://www.securityfocus.com/bid/9686>
  • <http://xforce.iss.net/xforce/xfdb/15244>
  • <http://secunia.com/advisories/10897/>

Credit

This vulnerability was researched and reported by Paul Starzetz of iSEC.

This document was written by Art Manion.

Other Information

  • CVE IDs: CAN-2004-0077
  • Date Public: 18 Feb 2004
  • Date First Published: 10 Mar 2004
  • Date Last Updated: 25 Mar 2004
  • Severity Metric: 26.52
  • Document Revision: 26