CVE-2020-11668 Overview
CVE-2020-11668 is a null pointer dereference vulnerability in the Linux kernel affecting versions before 5.6.1. The flaw exists in drivers/media/usb/gspca/xirlink_cit.c, the Xirlink camera USB driver, which mishandles invalid descriptors when processing USB device endpoint information. This vulnerability can be exploited by a local attacker with physical access or the ability to connect malicious USB devices, potentially leading to system crashes or memory corruption.
Critical Impact
Local attackers can trigger a null pointer dereference by connecting a malicious USB device with invalid descriptors, causing denial of service or potential integrity compromise on affected Linux systems.
Affected Products
- Linux Kernel versions before 5.6.1
- Debian-based distributions (addressed in DSA-4698)
- Ubuntu distributions (addressed in USN-4345-1, USN-4364-1, USN-4368-1, USN-4369-1)
Discovery Timeline
- April 9, 2020 - CVE-2020-11668 published to NVD
- November 21, 2024 - Last updated in NVD database
Technical Details for CVE-2020-11668
Vulnerability Analysis
This vulnerability is classified as CWE-476 (Null Pointer Dereference) and affects the Xirlink camera USB driver in the Linux kernel. The driver fails to properly validate USB endpoint descriptors before accessing them, leading to a null pointer dereference condition. The attack requires local access, making it exploitable in scenarios where an attacker has physical access to the system or can connect USB devices remotely through USB-over-IP implementations.
The vulnerability allows an attacker to compromise both the integrity and availability of the system. An attacker can craft a malicious USB device with invalid descriptors that, when connected, causes the kernel to access memory at invalid locations. This can result in kernel panics, system crashes, or potential memory corruption that could be leveraged for further exploitation.
Root Cause
The root cause lies in the cit_get_packet_size() function within the Xirlink camera driver. The function retrieves the maximum packet size from a USB endpoint descriptor but fails to verify that the endpoint actually exists before accessing it. When a USB device presents a configuration with bNumEndpoints set to zero or with missing endpoint descriptors, the driver attempts to access alt->endpoint[0].desc.wMaxPacketSize without first checking if endpoint[0] is valid, resulting in a null pointer dereference.
Attack Vector
The attack vector is local, requiring either physical access to connect a malicious USB device or the ability to inject USB traffic through software means. An attacker would craft a USB device descriptor that advertises the Xirlink camera vendor/product IDs but provides an interface with zero endpoints. When the driver initializes and calls cit_get_packet_size(), it blindly accesses the non-existent endpoint descriptor, triggering the vulnerability.
return -EIO;
}
+ if (alt->desc.bNumEndpoints < 1)
+ return -ENODEV;
+
return le16_to_cpu(alt->endpoint[0].desc.wMaxPacketSize);
}
Source: GitHub Linux Commit a246b4d54770
The patch adds a sanity check to verify that at least one endpoint exists (bNumEndpoints < 1) before attempting to access the endpoint descriptor. If no endpoints are present, the function returns -ENODEV instead of proceeding to access invalid memory.
Detection Methods for CVE-2020-11668
Indicators of Compromise
- Kernel panic or oops messages referencing xirlink_cit or cit_get_packet_size in system logs
- Unexpected system reboots or crashes when USB devices are connected
- Dmesg output showing null pointer dereference in drivers/media/usb/gspca/xirlink_cit.c
- USB device connection events for devices with Xirlink vendor ID followed by system instability
Detection Strategies
- Monitor kernel logs (/var/log/kern.log, dmesg) for null pointer dereference exceptions in USB subsystem drivers
- Implement USB device monitoring to detect devices claiming Xirlink camera IDs with suspicious descriptors
- Deploy kernel tracing (ftrace, eBPF) to monitor calls to cit_get_packet_size() and related functions
- Use SentinelOne's kernel-level monitoring to detect anomalous USB driver behavior and system stability issues
Monitoring Recommendations
- Enable comprehensive USB device logging to track all device connections and their descriptor properties
- Configure syslog alerting for kernel oops and panic events mentioning media/usb/gspca drivers
- Implement USB device whitelisting in high-security environments to prevent connection of unknown devices
- Deploy endpoint detection and response (EDR) solutions capable of monitoring kernel-level events
How to Mitigate CVE-2020-11668
Immediate Actions Required
- Update the Linux kernel to version 5.6.1 or later which contains the security fix
- Apply distribution-specific security updates from Debian (DSA-4698), Ubuntu (USN-4345-1, USN-4364-1, USN-4368-1, USN-4369-1), or your distribution's security repository
- Review and apply the NetApp Security Advisory ntap-20200430-0004 if running affected NetApp systems
- Prioritize patching systems with physical USB ports accessible to untrusted users
Patch Information
The vulnerability is addressed in Linux kernel version 5.6.1 through commit a246b4d547708f33ff4d4b9a7a5dbac741dc89d8. The fix adds proper descriptor sanity checks to verify endpoint existence before accessing endpoint descriptors.
Detailed patch information is available at:
Distribution-specific patches:
Workarounds
- Disable or blacklist the gspca_xirlink_cit kernel module if Xirlink cameras are not in use: echo "blacklist gspca_xirlink_cit" >> /etc/modprobe.d/blacklist.conf
- Restrict physical USB port access through USB authorization policies or physical security controls
- Implement USB device filtering using udev rules to block unrecognized USB devices from being initialized
- Use USBGuard or similar tools to enforce USB device whitelisting policies
# Configuration example
# Blacklist the vulnerable Xirlink camera driver
echo "blacklist gspca_xirlink_cit" | sudo tee /etc/modprobe.d/blacklist-xirlink.conf
# Unload the module if currently loaded
sudo modprobe -r gspca_xirlink_cit
# Verify the module is not loaded
lsmod | grep xirlink
# Optional: Block the module from loading at boot
echo "install gspca_xirlink_cit /bin/false" | sudo tee -a /etc/modprobe.d/blacklist-xirlink.conf
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


