
Apache Traffic Server 10.2.0 - 높음 - 원격 - SSRF - ESI unix recvport
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-esi-unix-recvport
분류: SSRF 도달 범위: 원격
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
ESI FetchSM PluginVC가 대상 포트를 0으로 보고합니다. Remap은 포트 0을 UDS로 취급하고 include 스킴을 http+unix로 재작성하여, UDS 리스너 전용으로 의도된 map_with_recv_port http+unix:// 규칙과 일치하게 만듭니다. 그러면 겉보기에 공개된 것처럼 보이는 http://www.example.com/secret의 esi:include가 유닉스 소켓 오리진에 도달합니다. TCP GET /secret은 TCP 맵에 그대로 머무릅니다. 유닉스 recv-port 맵이 없는 CONTROL은 TCP 오리진을 인라인합니다(증거 없음). include 스킴 http+unix 자체는 2026년 7월 검증기에서 BAD_SCHEME입니다.
일반적인 esi.so와 map 하나로는 이 문제가 발생하지 않습니다. ESI와 최소 하나의 map_with_recv_port http+unix:// 줄이 필요합니다. 기본값은 remap_required: 1 및 number_of_redirections: 0입니다.
이것은 CVE-2026-58178이 아닙니다(비공개 리터럴, file://, 중첩 주석, 깊이 제한은 종료됨).
| ID | 아직 CVE 없음 |
| 분류 | SSRF |
| 도달 범위 | 원격 (ESI vhost에 대한 비인증 HTTP) |
| CWE | CWE-918 |
| CVSS | 높음: 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| 제품 | Apache Traffic Server |
| 영향 받음 | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) ESI 및 map_with_recv_port http+unix |
| 인증 | 없음. ESI 플러그인. Recv-port 유닉스 맵. |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:18750 / 18751 전용. 이미지 ats-10.2.0-lab:local. |
태그 10.2.0, 커밋 b1df7334b39a878971c376da849e8da4984918b6을 고정했습니다. 소스 빌드 이미지입니다.
remap에 map_with_recv_port http+unix://가 있는 ESI vhost에 대한 비인증 HTTP. 공격자가 영향을 줄 수 있는 include src(침해된 오리진, 저장된 ESI 또는 $(HTTP_HEADER{...})).
| 방법 | 싱크 | 권한 |
|---|---|---|
비인증 GET /page ESI include http://www.example.com/secret | FetchSM 대상 포트 0이 map_with_recv_port http+unix://www.example.com/과 일치 (RemapProcessor.cc:87-114, PluginVC.h:274-278) | 정찰 / SSRF (랩 입증): 클라이언트 본문이 UDS 오리진의 ATS-ESI-UNIX-RECVPORT-WITNESS를 인라인함. |
| 동일 | 1차 쓰기 / 셸 | 무결성: 없음. 1차 쓰기 없음. 셸 없음. |
CONTROL 유닉스 recv-port 맵 없는 GET /page | TCP 오리진 include | 차단됨 (랩 입증): TCP-ORIGIN-OK를 인라인하며 증거 없음. |
poc vhost에서 TCP 클라이언트 GET /secret | TCP 맵 | 차단됨 (랩 입증): TCP-ORIGIN-OK, 증거 없음. |
랩 입증 vs 추론: 대조군 증거 없음, poc 페이지 증거 있음, poc TCP /secret 증거 없음: 랩. 저장된 ESI 또는 헤더 확장을 통한 src 영향은 문서화된 ESI 신뢰 모델이며 여기서 재입증되지 않았습니다. 랩 include는 /page의 정적 http://www.example.com/secret입니다.
필요 사항: ESI 플러그인 및 map_with_recv_port http+unix. 기본값 remap_required: 1. number_of_redirections: 0.
| 표면 | 실습 |
|---|---|
| unix recv-port 맵이 없는 CONTROL | control-no-witness=yes, TCP-ORIGIN-OK 인라인 |
TCP 클라이언트 GET /secret | poc-tcp-secret-no-witness=yes |
스킴 http+unix 포함 | 검증기 BAD_SCHEME |
file://, 사설 리터럴, 중첩 주석, 깊이 상한 | CVE-2026-58178 종료됨 |
| DNS 없는 호스트명 거부 목록 | 문서화됨; remap_required: 1에서 무효 |
remap_required: 1 미스 | 404 |
number_of_redirections: 0 | Location 추적 꺼짐 |
PluginVCCore는 passive_addr_struct를 0으로 초기화합니다. PluginHttpConnectInternal은 active_addr(원래 클라이언트)만 설정합니다. FetchSM의 HttpSM은 passive PluginVC에서 실행됩니다. attach_client_session은 netvc->get_local_addr()을 client_info.dst_addr에 복사합니다. passive 로컬 주소는 0으로 초기화된 구조체입니다. host_order_port()는 0입니다.
리맵 조회(RemapProcessor.cc:87-114): 포트 0은 UDS를 의미합니다. 스킴은 http -> http+unix로 재작성되어 map_with_recv_port http+unix://가 일치합니다. 단위 테스트 test_RemapRules.cc:237-240이 이를 문서화합니다.
7월 검증기는 include 스킴 http+unix를 거부합니다. 그러나 dest 포트가 0이어서 내부 리맵 홉이 unix가 된 http:// include는 거부하지 않습니다.
잘못된 접근: 일반적인 esi.so + 하나의 map을 이 잔여물로 간주한 것(CONTROL이 아님을 증명함); DNS 없는 호스트명 거부 목록을 제출한 것(문서화됨, remap_required=1에서 무효); file://이 여전히 작동한다고 주장한 것; TCP /secret이 unix 맵을 따를 것으로 기대한 것.
극적인 요소: 리버스 셸. 오라클은 UDS 오리진에서 인라인된 증인이며, TCP /secret은 여전히 TCP입니다.
python3 ats-esi-unix-recvport-Abraxas-Labs.py
또는
cd lab
./run.sh
루프백 poc 127.0.0.1:18750, 제어 127.0.0.1:18751. Compose 프로젝트 ats-esi-unix-recvport. 이미지 ats-10.2.0-lab:local. Witness ATS-ESI-UNIX-RECVPORT-WITNESS. 마지막 줄:
SUCCESS ats-esi-unix-recvport control-no-witness=yes poc-page-witness=yes poc-tcp-secret-no-witness=yes ATS-ESI-UNIX-RECVPORT-WITNESS
FetchSM PluginVC 대상 포트 0을 UDS 수신 포트 일치로 취급하지 마십시오. 실제 UDS 리스너에 대해서는 map_with_recv_port http+unix://를 유지하십시오. http://host/의 ESI 포함은 해당 호스트에 대한 http+unix 수신 포트 규칙이 존재하더라도 TCP 맵에 남아 있어야 합니다.
b1df7334b39a878971c376da849e8da4984918b6)PluginVC.h 제로화된 수동 주소PluginHttpConnect.ccRemapProcessor.cc 포트 0 -> http+unixtest_RemapRules.cc