Home / exploitsPDF  

Linux HID steelseries heap overflow

Posted on 03 September 2013

<pre>I've found several issues in the Linux HID code. They are making their way into the Linux kernel via the linux-input tree now: http://marc.info/?l=linux-input&amp;m=137772180514608&amp;w=10001-HID-validate-HID-report-id-size.patch http://marc.info/?l=linux-input&amp;m=137772184614622&amp;w=10005-HID-steelseries-validate-output-report-details.patch CVE-2013-2891 Requires CONFIG_HID_STEELSERIES 16 byte past-end-of-heap-alloc zeroing A HID device could send a malicious output report that would cause the steelseries HID driver to write beyond the output report allocation during initialization, causing a heap overflow: [ 167.981534] usb 1-1: New USB device found, idVendor=1038, idProduct=1410 ... [ 182.050547] BUG kmalloc-256 (Tainted: G W ): Redzone overwritten CVE-2013-2891 Signed-off-by: Kees Cook &lt;keescook@chromium.org&gt; Cc: stable@kernel.org --- drivers/hid/hid-steelseries.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/hid/hid-steelseries.c b/drivers/hid/hid-steelseries.c index d164911..ef42e86 100644 --- a/drivers/hid/hid-steelseries.c +++ b/drivers/hid/hid-steelseries.c @@ -249,6 +249,11 @@ static int steelseries_srws1_probe(struct hid_device *hdev, goto err_free; } + if (!hid_validate_report(hdev, HID_OUTPUT_REPORT, 0, 1, 16)) { + ret = -ENODEV; + goto err_free; + } + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); if (ret) { hid_err(hdev, &quot;hw start failed &quot;); -- Jiri Kosina SUSE Labs </pre>

 

TOP