Vulnerabilities > CVE-2017-0633 - Information Exposure vulnerability in Linux Kernel 3.10/3.18

047910
CVSS 2.6 - LOW
Attack vector
NETWORK
Attack complexity
HIGH
Privileges required
NONE
Confidentiality impact
PARTIAL
Integrity impact
NONE
Availability impact
NONE
network
high complexity
linux
CWE-200

Summary

An information disclosure vulnerability in the Broadcom Wi-Fi driver could enable a local malicious component to access data outside of its permission levels. This issue is rated as Moderate because it first requires compromising a privileged process. Product: Android. Versions: Kernel-3.10, Kernel-3.18. Android ID: A-36000515. References: B-RB#117131.

Vulnerable Configurations

Part Description Count
OS
Linux
2

Common Weakness Enumeration (CWE)

Common Attack Pattern Enumeration and Classification (CAPEC)

  • Subverting Environment Variable Values
    The attacker directly or indirectly modifies environment variables used by or controlling the target software. The attacker's goal is to cause the target software to deviate from its expected operation in a manner that benefits the attacker.
  • Footprinting
    An attacker engages in probing and exploration activity to identify constituents and properties of the target. Footprinting is a general term to describe a variety of information gathering techniques, often used by attackers in preparation for some attack. It consists of using tools to learn as much as possible about the composition, configuration, and security mechanisms of the targeted application, system or network. Information that might be collected during a footprinting effort could include open ports, applications and their versions, network topology, and similar information. While footprinting is not intended to be damaging (although certain activities, such as network scans, can sometimes cause disruptions to vulnerable applications inadvertently) it may often pave the way for more damaging attacks.
  • Exploiting Trust in Client (aka Make the Client Invisible)
    An attack of this type exploits a programs' vulnerabilities in client/server communication channel authentication and data integrity. It leverages the implicit trust a server places in the client, or more importantly, that which the server believes is the client. An attacker executes this type of attack by placing themselves in the communication channel between client and server such that communication directly to the server is possible where the server believes it is communicating only with a valid client. There are numerous variations of this type of attack.
  • Browser Fingerprinting
    An attacker carefully crafts small snippets of Java Script to efficiently detect the type of browser the potential victim is using. Many web-based attacks need prior knowledge of the web browser including the version of browser to ensure successful exploitation of a vulnerability. Having this knowledge allows an attacker to target the victim with attacks that specifically exploit known or zero day weaknesses in the type and version of the browser used by the victim. Automating this process via Java Script as a part of the same delivery system used to exploit the browser is considered more efficient as the attacker can supply a browser fingerprinting method and integrate it with exploit code, all contained in Java Script and in response to the same web page request by the browser.
  • Session Credential Falsification through Prediction
    This attack targets predictable session ID in order to gain privileges. The attacker can predict the session ID used during a transaction to perform spoofing and session hijacking.

Seebug

bulletinFamilyexploit
descriptionAn information disclosure vulnerability in the Broadcom Wi-Fi driver could enable a local malicious component to access data outside of its permission levels. This issue is rated as Moderate because it first requires compromising a privileged process. Product: Android. Versions: Kernel-3.10, Kernel-3.18. Android ID: A-36000515. References: B-RB#117131. Broadcom produces Wi-Fi HardMAC SoCs which are used to handle the PHY and MAC layer processing. These chips are present in both mobile devices and Wi-Fi routers, and are capable of handling many Wi-Fi related events without delegating to the host OS. On Android devices, the "bcmdhd" driver is used in order to communicate with the Wi-Fi SoC (also referred to as "dongle"). Along with the regular flow of frames transferred between the host and the dongle, the two communicate with one another via a set of "ioctls" which can be issued to read or write dongle configuration from the host. This information is exchanged using the SDIO "control" channel (SDPCM_CONTROL_CHANNEL) rather than the regular "data" and "glom" channels (which are used to transfer frames). When the "bcmdhd" driver wishes to send a ioctl to the dongle, it does so by calling "wldev_ioctl". This function has the following signature: s32 wldev_ioctl(struct net_device *dev, u32 cmd, void *arg, u32 len, u32 set) Where "arg" is a pointer to the argument supplied to the ioctl call, and "len" indicates the length of this argument. This function transfers the supplied buffer over SDIO to the dongle, where it is handled by the dongle's ioctl handler function. The "bcmdhd" driver issues many such ioctls, either when accessing iovars, or when reading and writing configuration used by the dongle. However, in all of these cases, "bcmdhd" neglects to clear the unused memory in the supplied argument buffer before calling "wldev_ioctl". As a result, the buffers transferred via the ioctl calls contain uninitialised memory, including pointers and other information processed by the driver. To demonstrate this issue, I've located the needed symbols on the Nexus 6P (NUF26K, BCM4358 version 7.112.201.1). The dongle's ioctl handler is at located at ROM address 0x19734, and the pointer to the registered ioctl handler is located in RAM address 0x214BF0. By patching the RAM address to point to a newly allocated code stub, we are able to intercept the ioctl handler on the dongle. I've written a small code stub which instruments the ioctl handler in order to dump the contents of the buffers passed in by the host. Here's a small sample of these log dumps: ``` (1237) ioctl - code: 262, length: 512 (1238) 0 : 6f737361 (1239) 4 : 65725f63 (1240) 8 : 65695f71 ... (1404) 148 : ffffffc0 (1405) 152 : 00cdd204 (1406) 156 : ffffffc0 (1407) 160 : 5bd4b6f0 (1408) 164 : ffffffc0 (1409) 168 : 003ee868 (1410) 172 : ffffffc0 (1411) 176 : 5bd4b7e0 (1412) 180 : ffffffc0 (1413) 184 : 5bd4b810 (1414) 188 : ffffffc0 (1415) 192 : 5bd4b790 (1416) 196 : ffffffc0 ``` As can be seen in the log above, the buffer contains multiple pointers from the host's kernel. This issue can be addressed by clearing the unused memory in the passed in argument buffers prior to calling "wldev_ioctl".
idSSV:93160
last seen2017-11-19
modified2017-05-27
published2017-05-27
reporterRoot
titleGoogle Android Broadcom Wi-fi Driver Information Disclosure Vulnerability(CVE-2017-0633)