
Apache Traffic Server 10.2.0 - Élevé - Distant - Résidu de privilèges - préfixe authproxy
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-authproxy-prefix
Classe : Résidu de privilège Portée : Distante
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
L'option --forward-header-prefix d'authproxy copie les champs d'identité d'un helper d'authentification renvoyant un 2xx sur la requête du client. HttpSetMimeHeader ne trouve et n'écrase que le premier champ portant ce nom. Les copies supplémentaires du client subsistent. Une origine qui applique la règle du dernier gagnant sur le même en-tête traite la valeur du client comme une identité.
Le plugin.config par défaut est vide. Ce résidu nécessite que le plugin soit chargé sur un remap avec l'option de préfixe. Le client doit tout de même passer l'authentification (2xx). Un 403 d'authentification n'atteint jamais l'origine.
| ID | pas encore de CVE |
| Classe | Résidu de privilège (implantation d'en-tête d'identité) |
| Portée | Distante (HTTP via authproxy avec --forward-header-prefix) |
| CWE | CWE-444, CWE-863 |
| CVSS | Élevé : 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Produit | Apache Traffic Server |
| Affecté | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) superposition de préfixe authproxy |
| Auth | client qui obtient déjà un 2xx du helper d'authentification. Plugin activé. |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1:18760 uniquement |
J'ai épinglé le tag public 10.2.0 dépouillé en b1df7334. Le lab est un proxy inverse ats-10.2.0-lab:local compilé depuis les sources sur loopback. Helper d'authentification 2xx vs 403. Origine en dernier-gagnant sur X-Auth-User.
Atteindre un remap ATS qui charge authproxy.so avec --forward-header-prefix=X-Auth-. Envoyer deux lignes X-Auth-User sur une requête que le helper accepte en 2xx.
| Méthode | Point d'impact | Privilège |
|---|---|---|
X-Auth-User dupliqué après un helper d'authentification 2xx | Superposition StateAuthorized puis HttpSetMimeHeader (authproxy.cc:660-690, utils.cc:87-102) | Intégrité (prouvé en lab) : origine en dernier-gagnant. Lab : X-Auth-User-0: realuser plus X-Auth-User-1: ATS-AUTHPROXY-PREFIX-WITNESS. Le CONTRÔLE aucun/unique reste REALUSER-ONLY. |
| Même implantation | ACL d'origine / recherche d'utilisateur basée sur cet en-tête | Reconnaissance (déduit) : tout ce que cette identité implantée peut lire à l'origine. Pas un vidage de tas. Pas la configuration ATS. |
| Helper d'authentification 403 avec les mêmes doublons | StateUnauthorized ; origine non réactivée | Fermé (prouvé en lab) : les accès à l'origine restent inchangés. Client 403. Le témoin n'est pas dans le corps. |
Prouvé en lab vs déduit : le dernier-gagnant en doublon, l'écrasement unique, l'absence et le 403 non atteint sont prouvés en lab. Le privilège à l'origine après implantation est déduit de l'identité en dernier-gagnant.
Nécessite : authproxy.so avec --forward-header-prefix. Le client doit passer l'authentification (2xx). L'origine doit traiter ces en-têtes de préfixe comme une identité (la raison d'être de l'option). Non chargé dans le plugin.config par défaut.
| Surface | Lab |
|---|---|
| Aucun en-tête de préfixe client | CONTROL none : origine REALUSER-ONLY |
| Préfixe client unique | CONTROL single : premier champ écrasé ; le témoin ne survit pas |
| Assistant d'authentification 403 | origine non atteinte (control-403=yes) |
| Plugin non chargé | le résidu ne s'applique pas |
En-têtes hop-by-hop / @ | supprimés avant les hooks du plugin (CVE-2026-33267) |
| Liste d'en-têtes de réponse d'authentification vide | n'affirme plus (changelog) |
SNI du certificateur / url_sig C= | fermé sur cette épingle (CVE-2026-58162 / 58181) |
Pas CVE-2026-58162. SHA-256/SHA-512 uniquement sur uri_signing. Le délimiteur manquant dans url_sig C= refuse toujours.
python3 ats-authproxy-prefix-Abraxas-Labs.py
ou
cd lab
./run.sh
Loopback 127.0.0.1:18760 (origine 18761, assistant d'authentification 18762). Projet Compose ats-authproxy-prefix. Image ats-10.2.0-lab:local. Témoin ATS-AUTHPROXY-PREFIX-WITNESS. Dernière ligne :
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
Supprimer chaque champ client dont le nom commence par --forward-header-prefix avant l'overlay. HttpRemoveMimeHeader parcourt déjà TSMimeHdrFieldFind jusqu'à ce qu'il n'en reste plus (utils.cc:104-114). L'utiliser sur la requête client pour le préfixe configuré, puis définir. Faire en sorte que HttpSetMimeHeader détruise les extras TSMimeHdrFieldNextDup de la même manière que origin_server_auth set_header et access_control setHeader le font déjà.
En attendant, ne pointez pas l'ACL d'origine vers les en-têtes de préfixe d'authproxy à moins que l'origine ne donne la priorité au premier arrivé, ou rejetez les noms de préfixe en double au niveau de l'origine.
b1df7334b39a878971c376da849e8da4984918b6)plugins/authproxy/authproxy.cc StateAuthorizedplugins/authproxy/utils.cc HttpSetMimeHeader / HttpRemoveMimeHeaderorigin_server_auth.cc set_header parcourt NextDup