CVE-2024-25087
Executive Summary
CVE-2024-25087 is a Denial of Service (DoS) vulnerability in Jungo WinDriver, a popular driver development toolkit. The flaw allows a local attacker to trigger a Windows Blue Screen of Death (BSOD), leading to system instability and service disruption. The vulnerability resides in the kernel-mode driver component (windrvr6.sys), which fails to properly validate input from user-mode applications. This can be exploited by a malicious process running with standard user privileges to crash the operating system.
The vulnerability is currently unpatched in versions prior to 12.7.0. No public exploit code or proof-of-concept (PoC) has been released, but the attack vector is well-understood. The EPSS score is 0.0%, indicating low exploitation activity in the wild, but the risk is significant for environments where untrusted users have local access.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability does not affect NPM, PyPI, Go, or Ruby packages. It is a kernel-mode driver component distributed as part of the Jungo WinDriver SDK.
CVSS Breakdown & Threat Level
The CVSS score is listed as 0.0, which is likely a placeholder. Based on the vulnerability characteristics, a reasonable CVSS v3.1 vector would be:
- Attack Vector (AV): Local (L)
- Attack Complexity (AC): Low (L)
- Privileges Required (PR): Low (L)
- User Interaction (UI): None (N)
- Scope (S): Unchanged (U)
- Confidentiality (C): None (N)
- Integrity (I): None (N)
- Availability (A): High (H)
CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Base Score: 5.5 (Medium)
Threat Level: Medium. The vulnerability requires local access, but no special privileges beyond standard user rights. Exploitation results in a complete denial of service.
Deep Dive & Mechanics
The vulnerability is a classic input validation failure in the Jungo WinDriver kernel driver (windrvr6.sys). WinDriver allows user-mode applications to interact with hardware devices via a kernel driver. The driver exposes IOCTL (Input/Output Control) interfaces that user-mode processes can call.
The specific flaw occurs when a user-mode application sends a malformed or specially crafted IOCTL request to the driver. The driver fails to validate the size or content of the input buffer before using it in a kernel operation. This can cause a memory corruption or an invalid memory access, leading to a system crash (BSOD).
Attack Flow:
- An attacker gains local access to a Windows system (e.g., via a compromised user account or malware).
- The attacker enumerates the WinDriver device object (e.g.,
\\.\WinDriver). - The attacker sends a crafted IOCTL code with an oversized or malformed input buffer.
- The kernel driver processes the request without proper bounds checking.
- The invalid operation triggers a bug check (BSOD), crashing the system.
The vulnerability is classified under CWE-20 (Improper Input Validation). The attack does not require administrative privileges because the driver is accessible to any user who can open a handle to the device.
Vulnerable vs. Patched Code
Since the source code for WinDriver is proprietary, we cannot provide exact code snippets. However, the fix in version 12.7.0 likely involves adding input validation checks in the IOCTL handler.
Vulnerable (Pre-12.7.0):
// Pseudo-code for vulnerable IOCTL handler
NTSTATUS DriverDispatch(Irp, IoStack) {
switch (IoStack->Parameters.DeviceIoControl.IoControlCode) {
case IOCTL_WINDRIVER_OPERATION:
// No validation of input buffer length
UserBuffer = Irp->AssociatedIrp.SystemBuffer;
// Directly use UserBuffer in kernel operation
PerformKernelOperation(UserBuffer);
break;
}
}
Patched (12.7.0+):
// Pseudo-code for patched IOCTL handler
NTSTATUS DriverDispatch(Irp, IoStack) {
switch (IoStack->Parameters.DeviceIoControl.IoControlCode) {
case IOCTL_WINDRIVER_OPERATION:
// Validate input buffer length
if (IoStack->Parameters.DeviceIoControl.InputBufferLength < MIN_SIZE ||
IoStack->Parameters.DeviceIoControl.InputBufferLength > MAX_SIZE) {
return STATUS_INVALID_PARAMETER;
}
UserBuffer = Irp->AssociatedIrp.SystemBuffer;
PerformKernelOperation(UserBuffer);
break;
}
}
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- Windows 10/11 or Windows Server 2016/2019/2022
- Jungo WinDriver version < 12.7.0 installed
- Local user account (non-admin)
Exploitation Steps:
- Identify the driver: Check if
windrvr6.sysis loaded.Get-WmiObject Win32_SystemDriver | Where-Object {$_.Name -like "*windrvr*"} - Open a handle to the device:
HANDLE hDevice = CreateFile("\\\\.\\WinDriver", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); - Send a malformed IOCTL: Craft an IOCTL request with an invalid buffer size.
#define IOCTL_WINDRIVER_CRASH CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_NEITHER, FILE_ANY_ACCESS) char buffer[1] = {0}; DWORD bytesReturned; DeviceIoControl(hDevice, IOCTL_WINDRIVER_CRASH, buffer, sizeof(buffer), NULL, 0, &bytesReturned, NULL); - Observe BSOD: The system will crash with a bug check (e.g.,
0x000000D1- DRIVER_IRQL_NOT_LESS_OR_EQUAL).
Note: No public exploit code is available. The above is a conceptual example.
Blue Team (Defensive)
Detection & Prevention:
- Monitor for unusual IOCTL calls: Use Sysmon or ETW to log
DeviceIoControlcalls to\\.\WinDriver. - Audit driver loading: Ensure only trusted versions of
windrvr6.sysare loaded. - Restrict local access: Implement least privilege and application whitelisting.
- Enable Driver Signature Enforcement: Ensure only signed drivers are loaded.
- Use Windows Defender Application Control (WDAC): Block unsigned or untrusted kernel drivers.
Hunting Query (Kusto):
DeviceEvents
| where ActionType == "DriverLoad"
| where FileName == "windrvr6.sys"
| where FileVersion < "12.7.0"
| project Timestamp, DeviceName, FileName, FileVersion
Indicators of Compromise (IOCs)
| Type | Indicator | Description |
|---|---|---|
| File | windrvr6.sys |
Vulnerable kernel driver (versions < 12.7.0) |
| Registry | HKLM\SYSTEM\CurrentControlSet\Services\windrvr6 |
Driver service entry |
| Event ID | 1001 (Windows Error Reporting) | System crash (BSOD) |
| Event ID | 7034 (Service Control Manager) | Driver service unexpected stop |
| Bug Check Code | 0x000000D1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL) |
Common crash code |
| Bug Check Code | 0x00000050 (PAGE_FAULT_IN_NONPAGED_AREA) |
Possible crash code |
Detection Engineering
YARA Rule
rule CVE_2024_25087_WinDriver_BSOD {
meta:
description = "Detects vulnerable Jungo WinDriver kernel driver (windrvr6.sys) versions < 12.7.0"
author = "Valters IT"
date = "2024-01-01"
hash = "sha256:EXAMPLE"
strings:
$driver_name = "windrvr6.sys" nocase
$version_string = "12.6" nocase
$version_string2 = "12.5" nocase
$version_string3 = "12.4" nocase
condition:
$driver_name and ($version_string or $version_string2 or $version_string3)
}
Sigma Rule
title: CVE-2024-25087 - WinDriver BSOD Exploitation Attempt
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects potential exploitation of CVE-2024-25087 via malformed IOCTL to WinDriver
author: Valters IT
date: 2024-01-01
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 11 # FileCreate
TargetFilename|endswith: 'windrvr6.sys'
condition: selection
falsepositives:
- Legitimate WinDriver updates
level: high
Suricata Rule
alert ip any any -> any any (msg:"CVE-2024-25087 - WinDriver BSOD Exploitation Attempt"; content:"|5c 00 5c 00 2e 00 5c 00 57 00 69 00 6e 00 44 00 72 00 69 00 76 00 65 00 72 00|"; sid:1000001; rev:1;)
Note: This rule detects the Unicode string \\.\WinDriver in network traffic (unlikely for local exploitation, but included for completeness).
Remediation & Mitigation
Immediate Actions:
- Upgrade WinDriver: Update to version 12.7.0 or later from the official Jungo website.
- Block vulnerable driver: Use Windows Defender Application Control (WDAC) or a driver blocklist to prevent
windrvr6.sysversions < 12.7.0 from loading. - Restrict local access: Implement strict user access controls and application whitelisting.
Long-term Measures:
- Vendor notification: Ensure Jungo provides a permanent fix and security advisory.
- Driver hardening: Implement input validation and secure coding practices for kernel drivers.
- Monitoring: Deploy detection rules (YARA, Sigma) to identify vulnerable driver instances.
Workaround: If upgrading is not possible, consider disabling the WinDriver service:
sc stop windrvr6
sc config windrvr6 start= disabled
Note: This may break applications that depend on WinDriver.
Valters IT
Securing Digital Frontiers