Bug 1296466 (CVE-2015-7566)

Summary: CVE-2015-7566 kernel: Crash on invalid USB device descriptors in visor driver
Product: [Other] Security Response Reporter: Adam Mariš <amaris>
Component: vulnerabilityAssignee: Red Hat Product Security <security-response-team>
Status: CLOSED WONTFIX QA Contact:
Severity: low Docs Contact:
Priority: low    
Version: unspecifiedCC: agordeev, aquini, bhu, carnil, dhoward, esammons, fhrbata, iboverma, jkacur, joelsmith, jross, kernel-mgr, kstutsma, lgoncalv, lwang, matt, mcressma, mguzik, nmurray, pholasek, plougher, rvrbovsk, security-response-team, slawomir, slong, vdronov, williams
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
A flaw was found in the way the Linux kernel visor driver handles certain invalid USB device descriptors. The driver assumes that the device always has at least one bulk OUT endpoint. By using a specially crafted USB device (without a bulk OUT endpoint), an unprivileged user with physical access could trigger a kernel NULL-pointer dereference and cause a system panic (denial of service).
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-03-11 13:51:29 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1283371, 1297517    
Bug Blocks: 1296470    

Description Adam Mariš 2016-01-07 10:36:38 UTC
A local kernel crash on invalid USB device requiring the visor driver was reported. The clie_5_attach function of the visor driver, which is called during the driver initialization process, expects an OUT-Bulk-Endpoint. Due to an incomplete sanity check, the visor driver tries to dereference null-pointers, which results in crash. 

Vulnerable code:


**** CentOS-Kernel linux-3.10.0-229.14.1.el7 (drivers/usb/serial/visor.c)
        ...
607
608	pipe = usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress);
609	for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j)
610		port->write_urbs[j]->pipe = pipe;  /* if there is no configured OUT-bulk-endpoint, the kernel tries to dereference null-pointers */
611
612	return 0;
613 }
        ...
****

Reproducer can be found in original bug report:
https://bugzilla.redhat.com/show_bug.cgi?id=1283371

Proposed upstream patch:
http://marc.info/?l=linux-usb&m=145260786729359&w=2

Upstream commit:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=cb3232138e37129e88240a98a1d2aba2187ff57c

Bugtraq:
http://seclists.org/bugtraq/2016/Mar/58

Comment 1 Vladis Dronov 2016-01-08 14:55:38 UTC
Acknowledgements:

Red Hat would like to thank Ralf Spenneberg of OpenSource Security for reporting this issue.

Comment 2 Vladis Dronov 2016-01-08 14:58:00 UTC
Statement:

This issue does not affect the Linux kernel packages as shipped with Red Hat Enterprise Linux 5, 6 as the code with the flaw is not present in the products listed.

This issue affects the Linux kernel packages as shipped with Red Hat Enterprise Linux 7, and MRG-2. This has been rated as having Low security impact and is not currently planned to be addressed in future updates. For additional information, refer to the Red Hat Enterprise Linux Life Cycle: https://access.redhat.com/support/policy/updates/errata/.

Comment 3 Vladis Dronov 2016-01-11 18:28:21 UTC
Created kernel tracking bugs for this issue:

Affects: fedora-all [bug 1297517]

Comment 4 Fedora Update System 2016-01-20 21:51:58 UTC
kernel-4.3.3-301.fc23 has been pushed to the Fedora 23 stable repository. If problems still persist, please make note of it in this bug report.

Comment 5 Fedora Update System 2016-01-26 18:22:53 UTC
kernel-4.3.3-303.fc23 has been pushed to the Fedora 23 stable repository. If problems still persist, please make note of it in this bug report.

Comment 6 Fedora Update System 2016-02-01 06:24:34 UTC
kernel-4.3.4-200.fc22 has been pushed to the Fedora 22 stable repository. If problems still persist, please make note of it in this bug report.