
Apache Traffic Server 10.2.0 - 높음 - 로컬 - 권한 잔여 - JSON-RPC 유닉스 소켓 무제한 모드 0777
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-jsonrpc-unrestricted
분류: 권한 잔여 (정찰) 도달 범위: 로컬
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
JSON-RPC 유닉스 소켓은 기본적으로 restricted_api가 false입니다. 배포된 jsonrpc.yaml은 주석만 포함되어 있어 C++ 초기화 코드가 우선합니다. Linux SO_PEERCRED 바인드 모드는 0777입니다. 런디렉터리 inode에 접근할 수 있는 모든 로컬 uid는 토큰 없이 연결하여 실시간 레코드(SSL 키 경로 포함)와 연결 추적기 5-튜플을 덤프할 수 있습니다. 쓰기는 SO_PEERCRED(euid == 0 또는 ATS euid) 뒤에 유지됩니다. 문서 표에는 true / 0700으로 되어 있지만, 코드와 주석 처리된 예제는 false / 0777입니다.
이는 CVE-2026-58159(HTTP UDS 리스너 ACL)가 아닙니다. TCP/HTTP JSON-RPC는 존재하지 않습니다. 플러그인 로드와 구성 쓰기는 외부 uid에 대해 계속 거부됩니다.
| ID | 아직 CVE 없음 |
| 분류 | 권한 잔여 (정찰) |
| 도달 범위 | 로컬 (ATS 호스트의 비특권 uid) |
| CWE | CWE-276, CWE-284 |
| CVSS | 높음: 7.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| 제품 | Apache Traffic Server |
| 영향 받음 | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) 기본 JSON-RPC 유닉스 |
| 인증 | 무제한 메서드에는 없음. 런디렉터리에 대한 로컬 파일시스템 접근. |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:18720 전용. 이미지 ats-10.2.0-lab:local. |
태그 10.2.0, 커밋 b1df7334b39a878971c376da849e8da4984918b6을 고정했습니다. 소스 빌드 이미지입니다.
ATS 호스트의 로컬 uid(root 아님, ATS euid 아님). RPC 활성화. JSON-RPC 유닉스 활성화. 일반적인 런디렉터리는 0755 ATS 소유. 소켓 $RUNTIMEDIR/jsonrpc20.sock.
| 메서드 | 싱크 | 권한 |
|---|---|---|
0777 jsonrpc20.sock에서 uid 10000으로 admin_lookup_records | 무제한 JSON-RPC (RpcAdminPubHandlers.cc) | 정찰 (랩 입증): 실시간 proxy.config.proxy_name=ATS-JSONRPC-UNRESTRICTED-WITNESS, SSL 키 경로 etc/trafficserver, proxy.config.admin.user_id=nobody. 키 바이트는 레코드에 없음. |
get_connection_tracker_info | 동일 소켓 | 정찰 (랩 입증): 인바운드/아웃바운드 추적기 테이블(부하 없을 때 비어 있음). |
get_server_status, admin_host_get_status, admin_storage_get_device_status, filemanager.get_files_registry | 동일 무제한 비트 | 정찰 (추론): 드레인 상태, 호스트 마크다운, 캐시 디스크 경로, 절대 구성 경로. |
uid 10000으로 admin_config_set_records | SO_PEERCRED 제한 | 무결성: 차단됨 (랩 입증). JSON-RPC 오류 10 Unauthorized, Denied privileged API access for uid=10000. 위트니스 레코드 변경 없음. |
| 드레인 / 캐시 초기화 / 스토리지 오프라인 | 제한된 메서드 | 외부 uid에 대해 가용성: 차단됨 (소스). |
랩 입증 vs 추론: 0777 소켓, uid 10000의 proxy_name / SSL 키 경로 조회, 추적기 테이블, 쓰기 거부, TCP JSON-RPC 부재: 랩. 기타 무제한 읽기 메서드: 동일 게이트에서 추론.
요구 사항: ATS 호스트의 로컬 uid. JSON-RPC 유닉스 활성화(기본). 무제한 바인드가 0777이 되도록 Linux SO_PEERCRED. 런디렉터리 접근 가능(일반적으로 0755).
| 표면 | 실험실 |
|---|---|
uid 10000으로서의 admin_config_set_records | 무단; 증인 레코드 변경되지 않음 |
| TCP / HTTP JSON-RPC | 없음; HTTP 8080 / 18080만 존재 |
RPC를 통한 플러그인 .so 로드 | SO_PEERCRED |
동일 uid traffic_ctl | 의도된 관리자 |
restricted_api가 true일 때 원자적 umask+bind | 0700, CHANGELOG 수정 유지됨 |
| CVE-2026-58159 HTTP UDS 리스너 ACL | 이 소켓 아님 |
rpc.enabled: false가 아니면 RPC가 켜져 있습니다. CommType::UNIX만 존재합니다. 배포된 jsonrpc.yaml.default는 주석만 있습니다. YAML 디코드는 키가 존재할 때만 restrictedAccessApi를 기록합니다. 그렇지 않으면:
bool restrictedAccessApi{
NON_RESTRICTED_API}; // ... 0700(default) or 0777
NON_RESTRICTED_API는 false입니다 (IPCSocketServer.h:128-129). 주석에는 0700이 기본값이라고 나와 있습니다. 초기화 값은 unrestricted 상수입니다.
Bind (IPCSocketServer.cc:310-342): restricted_api가 false이고 SO_PEERCRED가 있으면 모드는 0777입니다. 문서 표의 마지막 문장은 기본값이 true라고 말합니다. 코드와 주석 처리된 예시는 false를 따릅니다.
잘못된 접근: 문서의 true를 기본값으로 간주하기; 이를 RCE라고 부르기(쓰기는 거부됨); CVE-2026-58159가 mgmt JSON-RPC를 포괄한다고 보기; 이전 traffic_manager XMLRPC의 TCP 잔재를 찾기.
극적 검증: uid 10000으로 쓰기. 오라클은 심어 둔 proxy_name과 SSL 키 경로 문자열, 그리고 거부된 집합입니다.
python3 ats-jsonrpc-unrestricted-Abraxas-Labs.py
또는
cd lab
./run.sh
Loopback 127.0.0.1:18720. Compose 프로젝트 ats-jsonrpc-unrestricted. 이미지 ats-10.2.0-lab:local. Lab uid 10000. 소켓 모드 0777. Witness ATS-JSONRPC-UNRESTRICTED-WITNESS. 마지막 줄:
SUCCESS ats-jsonrpc-unrestricted how=uds-0777-unrestricted-jsonrpc uid=10000 sock-mode=0777 lookup-proxy_name=ATS-JSONRPC-UNRESTRICTED-WITNESS ssl-key-path=etc/trafficserver tracker=ok write=unauthorized tcp-jsonrpc=absent ATS-JSONRPC-UNRESTRICTED-WITNESS
restricted_api의 기본값을 true로 설정하고 0700으로 바인딩하여 문서 표와 일치시킵니다. 주석 처리된 jsonrpc.yaml 예제를 정렬합니다. 제한 없는 읽기는 명시적 옵트인 뒤에 유지합니다. 쓰기는 이미 SO_PEERCRED를 요구하므로, 이를 개방하지 않습니다.
b1df7334b39a878971c376da849e8da4984918b6)IPCSocketServer.h restrictedAccessApiIPCSocketServer.cc 바인드 모드 0777RpcAdminPubHandlers.ccjsonrpc.yaml.default