// back

Linux Kernel cpuset tasks Information Disclosure Vulnerability

06.07.07

BACKGROUND

Linux is a clone of the UNIX operating system, written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Internet. The cpuset functionality allows process to be assigned to processors on multi-processor machines.

DESCRIPTION

Local exploitation of an information disclosure vulnerability within the Linux Kernel allows attackers to obtain sensitive information from kernel memory.

This vulnerability specifically exists in the "cpuset_tasks_read" function. This function is responsible for supplying user-land processes with data when they read from the /dev/cpuset/tasks file. The code excerpt below shows the problem area.

 1754 if (*ppos + nbytes > ctr->bufsz) 1755 nbytes = ctr->bufsz - *ppos; 1756 if (copy_to_user(buf, ctr->buf + *ppos, nbytes)) 

By reading from an offset (*ppos) larger than the contents of the file, an attacker can cause an integer underflow to occur in the subtraction on line 1755. This will result in the "copy_to_user" function on line 1756 to be called with a memory address located at a lower address than the start of the intended buffer. This memory could potentially contain sensitive information such as security tokens or passwords.

ANALYSIS

Exploitation of this vulnerability allows attackers to obtain sensitive information from kernel memory.

In order to exploit this vulnerability, an attacker would need access to open the /dev/cpuset/tasks file. It is important to note that this file does not exist unless the cpuset file system has been mounted. Additionally, this functionality is not included by default in a vanilla kernel build.

Furthermore, because of checks at the VFS layer and in the 'copy_to_user()' function, an attacker cannot use arbitrary values. However, on 32-bit systems it is easily exploitable.

DETECTION

iDefense has confirmed the existence of this vulnerability in version 2.6.20 of the Linux Kernel as installed with Fedora CORE 6. It is suspected that previous versions, at least until 2.6.12, are also vulnerable.

WORKAROUND

In order to prevent exploitation of this vulnerability, discontinue use of the cpuset file system. This can be accomplished by un-mounting the file system using the "umount" command.

VENDOR RESPONSE

The Linux kernel team has released versions 2.6.20.13 and 2.6.21.4 to address this vulnerability. More information can be found via the following URLs.

http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.20.13

http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.21.4

CVE INFORMATION

The Common Vulnerabilities and Exposures (CVE) project has assigned the name CVE-2007-2875 to this issue. This is a candidate for inclusion in the CVE list (http://cve.mitre.org/), which standardizes names for security problems.

DISCLOSURE TIMELINE

04/27/2007 Initial vendor notification
06/04/2007 Second vendor notification
06/04/2007 Initial vendor response
06/07/2007 Coordinated public disclosure

CREDIT

The discoverer of this vulnerability wishes to remain anonymous.

Get paid for vulnerability research
http://labs.idefense.com/methodology/vulnerability/vcp.php

Free tools, research and upcoming events
http://labs.idefense.com/

LEGAL NOTICES

Copyright © 2007 Verisign, Inc.

Permission is granted for the redistribution of this alert electronically. It may not be edited in any way without the express written consent of iDefense. If you wish to reprint the whole or any part of this alert in any other medium other than electronically, please e-mail customer service for permission.

Disclaimer: The information in the advisory is believed to be accurate at the time of publishing based on currently available information. Use of the information constitutes acceptance for use in an AS IS condition. There are no warranties with regard to this information. Neither the author nor the publisher accepts any liability for any direct, indirect, or consequential loss or damage arising from use of, or reliance on, this information.