---
Summary:
In early 2025, a new vulnerability called CVE-2025-24055 was discovered in the Windows USB Video Driver (usbvideo.sys). This flaw enables an attacker with physical access to a Windows machine to exploit an out-of-bounds read, potentially leaking sensitive kernel memory. In this post, we’ll break down what this means, show how it works, provide a code sample, and discuss why you should care—even though the attacker needs to be physically present.
What is CVE-2025-24055?
CVE-2025-24055 is an *Out-of-Bounds Read* bug in the Microsoft Windows USB Video Class Driver (usbvideo.sys). This popular driver runs on all modern Windows systems and powers support for built-in and external webcams through the USB Video Class (UVC) standard.
What Does “Out-of-Bounds Read” Mean?
An out-of-bounds read occurs when a program reads memory outside of the area it is supposed to access. Imagine a row of mailboxes: if you're only supposed to check mailboxes 1–10, but the system incorrectly lets you check 11 and 12, you might peek at your neighbor's mail by accident. In this case, the “mail” could be sensitive kernel data.
Who Can Exploit This Bug?
Important: This vulnerability is only exploitable by someone with *physical access* to your computer. That means the attacker must be able to plug a malicious USB video device (like a fake webcam) into your machine.
May aid other, more powerful kernel exploits by giving attackers a peak behind the curtain
This *cannot* be triggered remotely (over the network or internet).
The Video Driver Basics
The usbvideo.sys driver communicates with USB video devices using standard commands and descriptors. It expects the device to respond correctly.

*(Image: Microsoft, docs)*
When probing a USB video device, the driver requests a descriptor
// Pseudocode for vulnerable USB descriptor handling in usbvideo.sys
BYTE buffer[x100];
ULONG length = URB->UrbControlDescriptorRequest.TransferBufferLength;
memcpy(buffer, URB->UrbControlDescriptorRequest.TransferBuffer, length);
// ... parse buffer assuming it's properly sized ...
If the USB device lies about how big its response is (sends too short or corrupt data), the driver will try to read more data than is present—resulting in it pouring “leftover” memory from other parts of the kernel into a buffer that could be read back to the attacker.
Exploit in Practice: Proof-of-Concept (POC) Device Code
Here’s a Python USB gadget script (using LUSBlood) that simulates a malicious USB UVC camera:
from usb.core import Device, ENDPOINT_IN, ENDPOINT_OUT
# Fake descriptor with minimal length to trigger OOB read
FAKE_DESCRIPTOR = b"\xe\x23" + b"\x00" * 2 # Too short!
def handle_usb_request(request):
# Respond to the host with our weirdly short descriptor
# (Leave out the rest that Windows expects)
return FAKE_DESCRIPTOR
# Hook into a new USB gadget device using the malicious descriptor
# LUSBlood or similar framework required
When plugged into Windows, the system loads usbvideo.sys, processes this short response, and through the OOB read, returns "leftover" kernel memory bytes. These can be read by the device through further USB control messages.
Is There a Patch?
Yes. Microsoft issued a fix in June 2025 Patch Tuesday.
See the original Microsoft release note:
- Microsoft Security Update Guide | CVE-2025-24055
References & Deep Dive Links
- Microsoft CVE-2025-24055
- Windows Camera Drivers Documentation
- Intro to USB Video Class
Mitigation & Best Practices
- Install June 2025 or later Windows updates, especially on public/shared PCs.
Disable or restrict USB ports in sensitive environments.
- Consider using Device Guard or USB device whitelisting.
TL;DR:
CVE-2025-24055 allows attackers with physical access to disclose Windows kernel memory using a malicious USB video device. The bug abused a faulty length check in usbvideo.sys. Patch now; physical attacks are real and USB is a common attack vector!
*Stay tuned for more deep dives on modern Windows vulnerabilities!*
Timeline
Published on: 03/11/2025 17:16:27 UTC
Last modified on: 04/29/2025 22:06:39 UTC