
मास्टर थीसिस अनुसंधान CVE-2024-30051 (Windows DWM Heap Overflow) पर। इसमें स्वचालित हीप स्प्रे अनुकूलन, रीयल-टाइम लॉगिंग, और अनुभवजन्य सफलता-दर विश्लेषण के साथ उच्च-विश्वसनीयता एक्सप्लॉइट शामिल है। पोर्टफोलियो आइटम जो उन्नत Windows बाइनरी एक्सप्लॉइटेशन, हीप लेआउट हेरफेर, और Desktop Window Manager के माध्यम से LPE प्रदर्शित करता है।
विंडोज़ डेस्कटॉप विंडो मैनेजर (
dwmcore.dll) में हीप-आधारित बफ़र ओवरफ़्लो
DWM प्रक्रिया के माध्यम से स्थानीय विशेषाधिकार उन्नयन → Integrity Level SYSTEM
बिल्ड लक्ष्य: विंडोज़ 11 22H2 (10.0.22621.3447) · पैच: KB5037771
इस रिपॉज़िटरी में CVE-2024-30051 पर मेरा मास्टर थीसिस अनुसंधान शामिल है, जो विंडोज़ डेस्कटॉप विंडो मैनेजर कोर लाइब्रेरी (dwmcore.dll) में उच्च-गंभीरता (CVSS 7.8) वाली विशेषाधिकार उन्नयन (Elevation of Privilege) भेद्यता है।
यह भेद्यता CCommandBuffer::Initialize में पूर्णांक विभाजन आकार की गणना त्रुटि से उत्पन्न होती है। इस गणना त्रुटि के कारण new() के लिए उपयोग किया गया आकार और memcpy() के लिए उपयोग किया गया आकार अलग हो जाते हैं, जिससे 0x8F बाइट्स का हीप ओवरफ़्लो उत्पन्न होता है। एक सफल एक्सप्लॉइट dwm.exe को हमलावर-नियंत्रित DLL लोड करने के लिए प्रेरित करता है, जो window manager\dwm-1 खाते के अंतर्गत Integrity Level SYSTEM के साथ मनमाना कोड निष्पादित करता है।
CVE-2024-30051-Masters-Thesis/
├── README.md
├── LICENSE
├── setup.bat # Copies s11.dll to required location
│
├── exploit/
│ ├── C21.sln # Visual Studio 2022 solution
│ ├── exploit_src/
│ │ ├── c26f.vcxproj
│ │ ├── c26f.filters
│ │ └── main.cpp # Exploit — heap spray + hooking + overflow
│ └── payload/
│ ├── payload.vcxproj
│ ├── payload.vcxproj.filters
│ ├── dllmain.cpp # Payload DLL — spawns SYSTEM shell + cleanup
│ ├── framework.h
│ ├── pch.h
│ └── pch.cpp
│
└── docs/
├── screenshots/ # Patch diffing, WinDbg, and forensic captures
└── analysis/
├── 01-root-cause.md # Integer division bug in CCommandBuffer::Initialize
├── 02-heap-spray.md # 50-session empirical data and statistical findings
└── 03-timeline.md # Discovery, disclosure, and patch chronology
Visual Studio 2022 में C21.sln खोलें। payload प्रोजेक्ट को Release x64 में बनाएँ।
रिपॉज़िटरी रूट से setup.bat चलाएँ। यह s11.dll को C:\Users\Public\Documents\s11.dll पर कॉपी करता है (PAYLOAD_DLL_PATH द्वारा परिभाषित पथ)।
⚠️ DLL अनिवार्य रूप से
C26f.exeचलाने से पहले इसी सटीक पथ पर होना चाहिए। इसे एक्सिक्यूटेबल के बगल में रखने से काम नहीं चलेगा।
C26f प्रोजेक्ट को Release x64 में बनाएँ।
x64\Release\C26f.exe
मानक (गैर-एलिवेटेड) CMD से चलाएँ। एक्सप्लॉइट अधिकतम 10 बार स्वतः पुनः प्रयास करता है। सफलता पर, dwm.exe s11.dll लोड करता है और SYSTEM Integrity Level के साथ एक CMD स्पॉन करता है। सत्र लॉग %TEMP%\cve_30051_log.txt में लिखा जाता है।
#define MAX_ATTEMPTS 10 // Max auto-retry attempts per session
#define SPRAY_STEP 0x10 // Hole spacing index (1024 holes)
#define SPRAY_RANGE_START 0x3000 // Spray range start index
#define SPRAY_RANGE_END 0x7000 // Spray range end index
#define SLEEP_POST_SPRAY 0xC8 // ms wait after spray (200ms)
#define SLEEP_POST_HOLES 0xC8 // ms wait after freeing holes (200ms)
#define PAYLOAD_DLL_PATH "C:\\Users\\Public\\Documents\\s11.dll"
CCommandBuffer::Initialize (dwmcore.dll 10.0.22621.3447) में, CD2DSharedBuffer::GetBufferSize को दो बार कॉल किया जाता है। new() को दिया गया आकार गुणन से पहले 0x90 से पूर्णांक विभाजन से गुजरता है, जबकि memcpy() कच्चा मान उपयोग करता है:
buffer_size = GetBufferSize() → e.g. 0x23F
size_new = (0x23F / 0x90) * 0x90 = 0x1B0 ← allocated
size_memcpy = 0x23F ← copied
overflow = 0x23F - 0x1B0 = 0x8F bytes
बिल्ड 10.0.22621.3447 (भेद्य) और 10.0.22621.3593 (पैच किया हुआ) के बीच BinDiff तुलना:
वैश्विक समानता 0.98 के मुकाबले 0.32 का असामान्य स्कोर भेद्यता स्थान का प्रत्यक्ष संकेत है।
1. Hook RtlCreateHeap → capture dwmcore heap handle
2. Hook RtlAllocateHeap → capture base chunk address
3. Hook NtDCompositionCreateChannel → capture MappedAddress (shared memory region)
4. Hook NtDCompositionCommitChannel → overwrite size field (0x120 → 0x23F)
inject additional batch commands
5. Heap spray 0x10000 CHolographicInteropTexture objects (size=0x1B0)
6. Free holes every 0x10 indices → create gaps for overflow landing
7. Write payload into overflow buffer → KCBTable+0x388 + LoadLibraryA + DLL path
8. Release all spray objects → trigger overflow → LoadLibraryA("s11.dll")
9. dwm.exe loads payload DLL → spawns CMD as SYSTEM integrity
क्या उपलब्ध RAM सफल हीप स्प्रे के लिए आवश्यक प्रयासों की संख्या को प्रभावित करती है?
25 सत्रों के दो ब्लॉक। प्रति सत्र प्रोटोकॉल: स्वच्छ पोस्ट-बूट स्नैपशॉट पुनर्स्थापित करें → स्थिरीकरण के लिए 100 सेकंड प्रतीक्षा करें → एक्सप्लॉइट लॉन्च करें → सफल प्रयास दर्ज करें।
| ब्लॉक | RAM | सत्र | सफलताएँ | विफलताएँ |
|---|---|---|---|---|
| A | 8,192 MB | 25 | 24 |
| परीक्षण | सांख्यिकी | p-मान | निष्कर्ष |
|---|---|---|---|
| Mann-Whitney U | U = 184.0 | p = 0.031 | H₀ को अस्वीकार करता है |
| Welch का t-परीक्षण | t(23) = −2.695 | p = 0.011 |
base = heap_base + 0x720 पोस्ट-बूट हीप लेआउट की पुनरुत्पादनीयता की पुष्टि करता है, जो नियतात्मकता का प्राथमिक चालक है — न कि होल घनत्व।पूर्ण कच्चा डेटा, सत्र लॉग प्रारूप और नियतात्मक हीप अवलोकन docs/analysis/02-heap-spray.md में प्रलेखित हैं।
सफलता पर, window manager\dwm-1 के अंतर्गत एक CMD विंडो खुलती है:
=====================================================
CVE-2024-30051 - Windows DWM Heap Overflow EoP
CWE-122 | CVSS 7.8 | Elevation of Privilege
=====================================================
Researched and reproduced by : devianntsec
Original PoC by : Ricardo Narvaja (Fortra)
Target : Windows 11 22H2 (22621.3447)
=====================================================
[*] Current user:
window manager\dwm-1
[*] Mandatory Integrity Level:
Mandatory Label\System Mandatory Level S-1-16-16384
[*] Enabled privileges:
SeImpersonatePrivilege Enabled
=====================================================
Shell running under DWM process - SYSTEM level
=====================================================
आर्टिफ़ैक्ट (s11.dll और .bat स्क्रिप्ट) विलंबित सफाई प्रक्रिया के माध्यम से 5 सेकंड के बाद स्वचालित रूप से हटा दिए जाते हैं।
| दस्तावेज़ | विवरण |
|---|---|
| मूल कारण विश्लेषण |
यह अनुसंधान मेरी साइबर सुरक्षा में मास्टर थीसिस (UCAM — Campus Internacional de Ciberseguridad) का हिस्सा है, जो कई वातावरणों में N-Day भेद्यताओं का विश्लेषण करता है।
यह CVE थीसिस के भीतर विंडोज़ डेस्कटॉप एप्लिकेशन वेक्टर का प्रतिनिधित्व करता है, जो निम्नलिखित प्रदर्शित करता है:
कीवर्ड: EoP · Heap Overflow · DirectComposition · DWM · Patch Diffing ·
BinDiff · WinDbg · Heap Spray · Empirical Analysis · CVE-2024-30051
Annais Molina (devianntsec) — साइबर सुरक्षा में मास्टर छात्र
MIT लाइसेंस — LICENSE देखें
यह रिपॉज़िटरी एक शैक्षणिक मास्टर थीसिस के भाग के रूप में केवल शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए प्रदान की गई है। सभी परीक्षण नेटवर्क एक्सपोज़र के बिना पृथक वर्चुअल मशीनों पर किए गए थे। केवल उन्हीं सिस्टमों पर उपयोग करें जिनके स्वामी आप हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण है। सिस्टमों के विरुद्ध अनधिकृत उपयोग अवैध है और आपराधिक अभियोजन का कारण बन सकता है।
| पहलू | विवरण |
|---|
| पैच डिफ़िंग (Patch diffing) | पूर्ण BinDiff विश्लेषण जो CCommandBuffer::Initialize को सटीक भेद्यता स्थान के रूप में पहचानता है (14,062 मिलान किए गए फ़ंक्शनों में वैश्विक 0.98 की तुलना में समानता स्कोर 0.32) |
| WinDbg गतिशील विश्लेषण | सभी 4 हुकों, आकार फ़ील्ड अधिलेखन और पेलोड निर्माण का चरण-दर-चरण सत्यापन |
| अनुभवजन्य हीप स्प्रे विश्लेषण | औपचारिक सांख्यिकीय परीक्षणों के साथ दो RAM कॉन्फ़िगरेशन (8,192 MB और 4,096 MB) में 50 नियंत्रित सत्र |
| सांख्यिकीय निष्कर्ष | Mann-Whitney U (p = 0.031) और Welch का t-परीक्षण (p = 0.011) RAM प्रभाव की पुष्टि करते हैं; देखे गए माध्य ~64 प्रयासों के सैद्धांतिक अनुमान से 12.9–19× बेहतर हैं |
| पेलोड DLL पथ केंद्रीकृत | हार्डकोडेड पथ को #define PAYLOAD_DLL_PATH प्रीप्रोसेसर स्थिरांक में निकाला गया |
| सत्र लॉगिंग | प्रत्येक सत्र का पूर्ण टाइमस्टैम्प्ड लॉग %TEMP%\cve_30051_log.txt में लिखा जाता है |
| शैक्षणिक दस्तावेज़ीकरण | मूल कारण, 50-सत्र हीप स्प्रे विश्लेषण और CVE समयरेखा |
| मीट्रिक | मान |
|---|
| वैश्विक समानता | 0.98 |
| आत्मविश्वास | 0.99 |
| मिलान किए गए फ़ंक्शन | 14,062 (99.1%) |
CCommandBuffer::Initialize समानता | 0.32 |
| मूल ब्लॉक — भेद्य संस्करण | 4 |
| मूल ब्लॉक — पैच किया गया संस्करण | 20 (16 सत्यापन ब्लॉक जोड़े गए) |
| 1 |
| B | 4,096 MB | 25 | 24 | 1 |
| ब्लॉक | RAM | माध्य प्रयास | मानक विचलन | 95% CI | सिद्धांत (64) के सापेक्ष कारक |
|---|
| A | 8,192 MB | 3.375 | 1.135 | [2.896; 3.854] | ≈ 19× तेज़ |
| B | 4,096 MB | 4.958 | 2.645 | [3.841; 6.076] | ≈ 12.9× तेज़ |
| H₀ को अस्वीकार करता है |
| आर्टिफ़ैक्ट | स्थान | स्थिरता | पहचान उपकरण |
|---|
dwm.exe की चाइल्ड प्रक्रिया cmd.exe | सुरक्षा इवेंट लॉग | हाँ (यदि प्रक्रिया ऑडिटिंग सक्रिय है) | इवेंट ID 4688 |
dwm.exe तक पहुँचने वाली बाहरी प्रक्रिया | Sysmon | हाँ | Sysmon इवेंट ID 10 |
असफल प्रयासों पर dwm.exe क्रैश | एप्लिकेशन इवेंट लॉग | हाँ | इवेंट ID 1000 |
डिस्क पर पेलोड DLL s11.dll | C:\Users\Public\Documents\ | केवल पहले ~5 सेकंड | SHA-256 मॉनिटरिंग |
CCommandBuffer::Initialize में पूर्णांक विभाजन बग, पैच डिफ़िंग पद्धति |
| हीप स्प्रे विश्लेषण | 50-सत्र अनुभवजन्य डेटा, कच्चा सत्र डेटा, सांख्यिकीय परीक्षण |
| CVE समयरेखा | खोज, प्रकटीकरण और पैच कालक्रम |