
Apache Traffic Server 10.2.0 - 높음 - 원격 - 권한 잔여 - authproxy 접두사
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-authproxy-prefix
분류: 권한 잔여물 도달 범위: 원격
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
authproxy --forward-header-prefix는 2xx auth helper의 신원 필드를 클라이언트 요청에 복사합니다. HttpSetMimeHeader는 해당 이름의 첫 번째 필드만 찾아 덮어씁니다. 클라이언트가 추가로 보낸 복사본은 살아남습니다. 동일한 헤더에 대해 last-wins를 적용하는 origin은 클라이언트 값을 신원으로 취급합니다.
기본 plugin.config는 비어 있습니다. 이 잔여물은 prefix 옵션과 함께 remap에 플러그인이 필요합니다. 클라이언트는 여전히 인증(2xx)을 통과해야 합니다. Auth 403은 origin에 도달하지 않습니다.
| ID | 아직 CVE 없음 |
| 분류 | 권한 잔여물 (신원 헤더 주입) |
| 도달 범위 | 원격 (--forward-header-prefix를 사용하는 authproxy를 통한 HTTP) |
| CWE | CWE-444, CWE-863 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 제품 | Apache Traffic Server |
| 영향 받음 | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) authproxy prefix 오버레이 |
| 인증 | auth helper로부터 이미 2xx를 받은 클라이언트. 플러그인 활성화 상태. |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:18760 전용 |
공개 태그 10.2.0의 peel b1df7334를 고정했습니다. 랩은 루프백에서 소스 빌드된 ats-10.2.0-lab:local 리버스 프록시입니다. Auth helper 2xx 대 403. Origin은 X-Auth-User에 last-wins를 적용합니다.
--forward-header-prefix=X-Auth-와 함께 authproxy.so를 로드하는 ATS remap에 도달합니다. helper가 2xx로 수락하는 요청에 두 개의 X-Auth-User 라인을 보냅니다.
| 방법 | 싱크 | 권한 |
|---|---|---|
2xx auth helper 이후 중복된 X-Auth-User | StateAuthorized 오버레이 후 HttpSetMimeHeader (authproxy.cc:660-690, utils.cc:87-102) | 무결성 (랩 입증): origin last-wins. 랩: X-Auth-User-0: realuser 및 X-Auth-User-1: ATS-AUTHPROXY-PREFIX-WITNESS. CONTROL none/single은 REALUSER-ONLY로 유지됨. |
| 동일한 주입 | 해당 헤더를 키로 하는 origin ACL / 사용자 조회 | 정찰 (추론): 주입된 신원이 origin에서 읽을 수 있는 모든 것. 힙 덤프 아님. ATS 설정 아님. |
| 동일한 중복을 가진 auth helper 403 | StateUnauthorized; origin 재활성화되지 않음 | 차단됨 (랩 입증): origin 히트 변화 없음. 클라이언트 403. Witness가 본문에 없음. |
랩 입증 vs 추론: 중복 last-wins, 단일 덮어쓰기, none, 403-미도달은 랩 결과입니다. 주입 후 origin 권한은 last-wins 신원으로부터 추론됩니다.
요구 사항: --forward-header-prefix와 함께 authproxy.so. 클라이언트는 인증(2xx)을 통과해야 함. Origin은 해당 prefix 헤더를 신원으로 취급해야 함(옵션이 존재하는 이유). 기본 plugin.config에는 로드되지 않음.
| 표면 | 실험실 |
|---|---|
| 클라이언트 접두사 헤더 없음 | CONTROL none: origin REALUSER-ONLY |
| 단일 클라이언트 접두사 | CONTROL single: 첫 번째 필드 덮어쓰기; witness가 유지되지 않음 |
| 인증 헬퍼 403 | origin에 도달하지 않음 (control-403=yes) |
| 플러그인 미로드 | 잔여물이 적용되지 않음 |
홉별 / @ 헤더 | 플러그인 훅 전에 제거됨 (CVE-2026-33267) |
| 빈 인증 응답 헤더 목록 | 더 이상 어서트하지 않음 (변경 로그) |
certifier SNI / url_sig C= | 이 핀에서 종료됨 (CVE-2026-58162 / 58181) |
CVE-2026-58162가 아님. uri_signing에서는 SHA-256/SHA-512만 사용. url_sig C=에 구분 기호가 없으면 여전히 거부됨.
python3 ats-authproxy-prefix-Abraxas-Labs.py
또는
cd lab
./run.sh
Loopback 127.0.0.1:18760 (origin 18761, auth helper 18762). Compose 프로젝트 ats-authproxy-prefix. 이미지 ats-10.2.0-lab:local. Witness ATS-AUTHPROXY-PREFIX-WITNESS. 마지막 줄:
SUCCESS ats-authproxy-prefix pin=10.2.0 control-none=REALUSER-ONLY control-single=REALUSER-ONLY control-403=yes dup-last-wins=yes ATS-AUTHPROXY-PREFIX-WITNESS
오버레이 전에 이름이 --forward-header-prefix로 시작하는 모든 클라이언트 필드를 제거합니다. HttpRemoveMimeHeader는 이미 TSMimeHdrFieldFind를 남는 필드가 없을 때까지 순회합니다(utils.cc:104-114). 구성된 접두사에 대해 클라이언트 요청에 이를 사용한 다음 설정합니다. HttpSetMimeHeader가 origin_server_auth의 set_header와 access_control의 setHeader가 이미 하는 방식대로 TSMimeHdrFieldNextDup 추가 필드를 파괴하도록 만듭니다.
그때까지는 오리진이 먼저 온 필드를 우선하지 않는 한, 또는 오리진에서 중복 접두사 이름을 거부하지 않는 한, 오리진 ACL을 authproxy 접두사 헤더에 지정하지 마십시오.
b1df7334b39a878971c376da849e8da4984918b6)plugins/authproxy/authproxy.cc StateAuthorizedplugins/authproxy/utils.cc HttpSetMimeHeader / HttpRemoveMimeHeaderorigin_server_auth.cc set_header는 NextDup를 순회함