CVE-2024-26996·Kernel vulnerability
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: f_ncm: Fix UAF ncm object at re-bind after usb ep transport error When ncm function is working and then stop usb0 interface for link down, eth_stop() is called. At this piont, accidentally if usb transport error should happen in usb_ep_enable(), 'in_ep' and/or 'out_ep' may not be enabled. After that, ncm_disable() is called to disable for ncm unbind but gether_disconnect() is never called since 'in_ep' is not enabled. As the result, ncm object is released in ncm unbind but 'dev->port_usb' associated to 'ncm->port' is not NULL. And when ncm bind again to recover netdev, ncm object is reallocated but usb0 interface is already associated to previous released ncm object. Therefore, once usb0 interface is up and eth_start_xmit() is called, released ncm object is dereferrenced and it might cause use-after-free memory. [function unlink via configfs] usb0: eth_stop dev->port_usb=ffffff9b179c3200 --> error happens in usb_ep_enable(). NCM: ncm_disable: ncm=ffffff9b179c3200 --> no gether_disconnect() since ncm->port.in_ep->enabled is false. NCM: ncm_unbind: ncm unbind ncm=ffffff9b179c3200 NCM: ncm_free: ncm free ncm=ffffff9b179c3200 <-- released ncm [function link via configfs] NCM: ncm_alloc: ncm alloc ncm=ffffff9ac4f8a000 NCM: ncm_bind: ncm bind ncm=ffffff9ac4f8a000 NCM: ncm_set_alt: ncm=ffffff9ac4f8a000 alt=0 usb0: eth_open dev->port_usb=ffffff9b179c3200 <-- previous released ncm usb0: eth_start dev->port_usb=ffffff9b179c3200 <-- eth_start_xmit() --> dev->wrap() Unable to handle kernel paging request at virtual address dead00000000014f This patch addresses the issue by checking if 'ncm->netdev' is not NULL at ncm_disable() to call gether_disconnect() to deassociate 'dev->port_usb'. It's more reasonable to check 'ncm->netdev' to call gether_connect/disconnect rather than check 'ncm->port.in_ep->enabled' since it might not be enabled but the gether connection might be established.
- Severity
- high
- Software
- Kernel
- Fixed in
- 6.8.8
- Published
How likely is exploitation
FIRST's Exploit Prediction Scoring System puts the probability of this CVE being exploited in the next 30 days at <0.1% — higher than 1% of all published CVEs. EPSS is an independent forecast of exploitation, not a severity rating: it says nothing about how much damage a successful attack does, which is what a CVSS score measures.
Read the two together. CVE-2024-26996 scores 7.8 on CVSS, so a successful attack would be serious — but at <0.1%, almost nobody is currently attempting it. That is a different situation from a flaw under mass exploitation, and it is usually the difference between patching on your next maintenance window and patching tonight.
Affected versions
From: 6.7
Until: 6.8.8
Fixed in: 6.8.8
How to fix this CVE
Update your Linux kernel to version 6.8.8 or later to resolve a use-after-free vulnerability in the USB NCM gadget driver. This vulnerability occurs when USB endpoint transport errors prevent proper cleanup during interface unbinding, leaving dangling references that can be dereferenced on subsequent rebinding. Kernel updates should be applied promptly, especially on systems with USB gadget functionality enabled.
sudo dnf update kernel kernel-develDefensia detects this vulnerability
How to check if you are affected
- Check installed kernel version with: uname -r
- Verify if NCM gadget module is loaded with: lsmod | grep g_ncm or cat /proc/config.gz | grep -i CONFIG_USB_CONFIGFS_NCM
- Monitor system logs for kernel oops related to USB gadget: sudo journalctl -k | grep -i 'paging request\|UAF\|use.after.free'
- Confirm the patch is applied by checking kernel source: grep -r 'gether_disconnect' /lib/modules/$(uname -r)/kernel/drivers/usb/gadget/ or verify kernel release date is after the fix commit timestamp
FAQ
What is CVE-2024-26996?
CVE-2024-26996 is a use-after-free vulnerability in the Linux kernel's USB NCM (Network Control Model) gadget driver that occurs when USB endpoint errors prevent proper cleanup during function unbinding, allowing the same network interface to reference freed memory objects on rebind.
Is CVE-2024-26996 being actively exploited?
No, CVE-2024-26996 is not listed in the CISA Known Exploited Vulnerabilities catalog and no public exploits are currently available.
What versions of Kernel are affected by CVE-2024-26996?
Linux kernel versions 6.7 through 6.8.7 are affected; version 6.8.8 and later contain the fix.
How do I check if my server is vulnerable to CVE-2024-26996?
Run 'uname -r' to check your kernel version—if it is 6.7.x through 6.8.7, you are vulnerable. Additionally, verify if NCM gadget functionality is enabled with 'grep CONFIG_USB_CONFIGFS_NCM /boot/config-$(uname -r)'.
Does Defensia detect CVE-2024-26996?
Yes — Defensia's CVE advisory scanner compares installed kernel package versions against the NVD database. If Linux kernel is installed on a monitored server, CVE-2024-26996 will appear in your dashboard with remediation steps.
Related Kernel CVEs
References
- https://git.kernel.org/stable/c/0588bbbd718a8130b98c54518f1e0b569ce60a93
- https://git.kernel.org/stable/c/6334b8e4553cc69f51e383c9de545082213d785e
- https://git.kernel.org/stable/c/7250326cbb1f4f90391ac511a126b936cefb5bb7
- https://git.kernel.org/stable/c/7f67c2020cb08499c400abf0fc32c65e4d9a09ca
- https://git.kernel.org/stable/c/f356fd0cbd9c9cbd0854657a80d1608d0d732db3
Track CVEs across your fleet automatically
Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2024-26996. Free for 1 server.
Get started free