
Apache Traffic Server 10.2.0 - 높음 - 원격 - 크래시 - Cripts From/To URL UAF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-cripts-rri-uaf
분류: 크래시 도달 범위: 원격
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
Cripts Remap::From / To URL은 TSRemapDoRemap이 반환된 후에도 스택의 TSRemapRequestInfo를 계속 다시 읽습니다. RemapPlugins는 rri를 스택에 할당합니다. 컨텍스트는 그 포인터를 유지합니다. reset()이 unique_ptr들을 해제하고, 이후 Get() / Host::GetSV가 죽은 RRI를 TSUrlHostGet에 넘깁니다. 이어서 Fatal: sdk_sanity_check_mbuffer 후 SIGABRT가 발생합니다.
Client::URL은 그렇게 하지 않도록 패치되었습니다. Lua는 리맵 후 rri를 정리했습니다. Cripts From/To는 그렇게 하지 않았습니다. 기본값 ENABLE_CRIPTS는 꺼져 있습니다. 스톡 리맵에는 cripts가 없습니다.
| ID | 아직 CVE 없음 |
| 분류 | 크래시 (스택 RRI의 UAF) |
| 도달 범위 | 원격 (From/To 리맵 후 cript를 통한 비인증 HTTP) |
| CWE | CWE-416 |
| CVSS | 높음: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| 제품 | Apache Traffic Server |
| 영향 받음 | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) DoRemap 이후 Cripts From/To URL |
| 인증 | 없음 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:18780 전용 |
공개 태그 10.2.0의 커밋 b1df7334를 고정했습니다. 랩은 Cripts를 켠 RelWithDebInfo 소스 빌드입니다. CONTROL Client::URL은 200, 프로세스는 계속 살아 있었습니다. POC Host ats-poc는 SIGABRT 종료 코드 134였습니다.
do_remap 이후(랩에서는 do_send_response) From/To URL을 건드리는 리맵 cript를 호출하면 됩니다. 비인증 GET으로 충분합니다.
| 방법 | 싱크 | 권한 |
|---|---|---|
Remap::From::URL::Get / To::URL::Get을 호출하는 do_send_response cript를 통해 비인증 GET Host ats-poc | 스택 TSRemapRequestInfo (RemapPlugins.cc:41-65); rriValid() 역참조 (Context.hpp:70-73); _initialize (Urls.cc:525-561) | 가용성 (랩에서 입증): SIGABRT, 종료 코드 134, 연결 재설정. traffic_server가 죽습니다. |
| 동일 | SDK Fatal 중단 | 무결성: RIP 제어 아님. 분류는 크래시로 유지. 랩. |
랩 입증 vs 추론: 프로세스 사망은 랩에서 입증됨(RelWithDebInfo SIGABRT). RIP까지의 메모리 손상은 주장하지 않습니다.
요구 사항: Cripts 빌드(ENABLE_CRIPTS=ON) 및 DoRemap 이후 From/To URL을 건드리는 리맵 cript. 기본값: 없음.
| 표면 | 랩 |
|---|---|
| CONTROL Client::URL만 | 200, 프로세스 계속 살아 있음 |
| File::Path::Rebase jail | 이 고정에서 닫힘 (CVE-2026-58177 이슈 32) |
| Geo IPEndpoint sockaddr | 닫힘 |
| Query-key 중단 | 닫힘 (누락된 해시 건너뜀) |
| 전역 cripts | rri == nullptr; rriValid()가 역참조 없이 fail-closed |
| 인스턴스 OOB / Release 이후 DoRemap | 닫힘 (CVE-2026-58177) |
스톡 리맵 / ENABLE_CRIPTS 꺼짐 | 잔여물 적용 안 됨 |
공개된 CVE-2026-58177은 아닙니다. Lua는 리맵 후 rri를 정리했습니다; Cripts From/To는 그렇게 하지 않았습니다.
python3 ats-cripts-rri-uaf-Abraxas-Labs.py
또는
cd lab
./run.sh
Loopback 127.0.0.1:18780. Compose 프로젝트 ats-cripts-rri-uaf. RelWithDebInfo 이미지. Witness ATS-CRIPTS-RRI-UAF-WITNESS. 마지막 줄:
SUCCESS ats-cripts-rri-uaf control-http=200 control-alive=yes poc-crash=sigabrt poc-http=None reset=1 ATS-CRIPTS-RRI-UAF-WITNESS
Lua가 하는 것처럼 TSRemapDoRemap이 반환될 때 Context rri를 null로 설정합니다. 또는 From/To URL을 Client::URL처럼 취급하여 이후 훅에서 RRI로부터 재초기화하지 않도록 합니다. rriValid()는 죽은 구조체를 역참조해서는 안 됩니다. 리맵 이후의 From/To가 기능이라면 do_remap 중에 mapFromUrl / mapToUrl을 소유된 MLoc로 복사합니다.
그때까지는 do_post_remap / do_send_request / do_read_response / do_send_response / do_cache_lookup에서 %{FROM-URL:...} / %{TO-URL:...}을 평가하지 마십시오(또는 해당 URL 객체를 빌려오지 마십시오).
b1df7334b39a878971c376da849e8da4984918b6)src/proxy/http/remap/RemapPlugins.ccinclude/cripts/Epilogue.hppsrc/cripts/Urls.cc Remap::From::URL / To::URLinclude/cripts/Context.hpp rriValid../, Geo sockaddr, 쿼리 키 중단, Client::URL MLoc