
Apache Traffic Server 10.2.0 - Alta - Remoto - Privilegi residui - prefisso authproxy
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-authproxy-prefix
Classe: Residuo di privilegio Portata: Remota
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
--forward-header-prefix di authproxy copia i campi di identità da un auth helper 2xx sulla richiesta del client. HttpSetMimeHeader trova e sovrascrive solo il primo campo con quel nome. Le copie extra del client sopravvivono. Un origin che applica last-wins sullo stesso header tratta il valore del client come identità.
Il plugin.config predefinito è vuoto. Questo residuo richiede il plugin su un remap con l'opzione prefix. Il client deve comunque superare l'autenticazione (2xx). L'auth 403 non raggiunge mai l'origin.
| ID | nessuna CVE al momento |
| Classe | Residuo di privilegio (impianto di header di identità) |
| Portata | Remota (HTTP attraverso authproxy con --forward-header-prefix) |
| CWE | CWE-444, CWE-863 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Prodotto | Apache Traffic Server |
| Affetto | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) overlay prefix di authproxy |
| Auth | client che ottiene già un 2xx dall'auth helper. Plugin attivo. |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:18760 |
Ho fissato il tag pubblico 10.2.0 peel b1df7334. Il lab è un reverse proxy ats-10.2.0-lab:local compilato dai sorgenti su loopback. Auth helper 2xx vs 403. Origin last-wins su X-Auth-User.
Raggiungere un remap ATS che carica authproxy.so con --forward-header-prefix=X-Auth-. Inviare due righe X-Auth-User su una richiesta che l'helper accetta come 2xx.
| Metodo | Sink | Privilegio |
|---|---|---|
X-Auth-User duplicato dopo un auth helper 2xx | overlay StateAuthorized poi HttpSetMimeHeader (authproxy.cc:660-690, utils.cc:87-102) | Integrità (provata in lab): origin last-wins. Lab: X-Auth-User-0: realuser più X-Auth-User-1: ATS-AUTHPROXY-PREFIX-WITNESS. I CONTROL none/single restano REALUSER-ONLY. |
| Stesso impianto | ACL dell'origin / lookup utente basato su quell'header | Ricognizione (inferita): qualunque cosa quell'identità impiantata possa leggere sull'origin. Non un heap dump. Non la config di ATS. |
| Auth helper 403 con gli stessi duplicati | StateUnauthorized; origin non riabilitato | Chiuso (provato in lab): hit sull'origin invariati. Client 403. Witness non nel body. |
Provato in lab vs inferito: duplicato last-wins, sovrascrittura singola, none e 403-non-raggiunto sono da lab. Il privilegio sull'origin dopo l'impianto è inferito dall'identità last-wins.
Richiede: authproxy.so con --forward-header-prefix. Il client deve superare l'autenticazione (2xx). L'origin deve trattare quegli header prefix come identità (la ragione per cui l'opzione esiste). Non caricato nel plugin.config predefinito.
| Superficie | Lab |
|---|---|
| Nessun header di prefisso client | CONTROL none: origine REALUSER-ONLY |
| Prefisso client singolo | CONTROL single: primo campo sovrascritto; il witness non sopravvive |
| Auth helper 403 | origine non raggiunta (control-403=yes) |
| Plugin non caricato | il residuo non si applica |
Header hop-by-hop / @ | rimossi prima degli hook del plugin (CVE-2026-33267) |
| Lista vuota di header auth-response | non più asserito (changelog) |
certifier SNI / url_sig C= | chiuso su questo pin (CVE-2026-58162 / 58181) |
Non CVE-2026-58162. Solo SHA-256/SHA-512 su uri_signing. url_sig C= con delimitatore mancante nega comunque.
python3 ats-authproxy-prefix-Abraxas-Labs.py
o
cd lab
./run.sh
Loopback 127.0.0.1:18760 (origine 18761, helper di autenticazione 18762). Progetto Compose ats-authproxy-prefix. Immagine ats-10.2.0-lab:local. Witness ATS-AUTHPROXY-PREFIX-WITNESS. Ultima riga:
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
Rimuovi ogni campo client il cui nome inizia con --forward-header-prefix prima dell'overlay. HttpRemoveMimeHeader percorre già TSMimeHdrFieldFind finché non ne rimangono più (utils.cc:104-114). Usalo sulla richiesta client per il prefisso configurato, poi imposta. Fai in modo che HttpSetMimeHeader distrugga i campi extra TSMimeHdrFieldNextDup come già fanno set_header di origin_server_auth e setHeader di access_control.
Fino ad allora, non puntare l'ACL dell'origin verso gli header di prefisso di authproxy a meno che l'origin non applichi il first-wins, oppure rifiuta i nomi di prefisso duplicati presso l'origin.
b1df7334b39a878971c376da849e8da4984918b6)plugins/authproxy/authproxy.cc StateAuthorizedplugins/authproxy/utils.cc HttpSetMimeHeader / HttpRemoveMimeHeaderorigin_server_auth.cc set_header percorre NextDup