
Apache Traffic Server 10.2.0 - Élevé - À distance - Résidu de privilèges - ACL du PLUGIN realip en fail-open
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-realip-plugin-acl
Classe : Privilège résiduel Portée : Distante
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
realip expérimental plus le acl.subjects: PLUGIN documenté échoue en mode ouvert (fail-open) sur le remap @src_ip. Si realip n'appelle pas TSHttpTxnVerifiedAddrSet, _verified_addr reste AF_UNSPEC. Le sujet PLUGIN n'est jamais nullptr, donc le repli PEER ne s'exécute jamais. ats_is_ip est faux, @src_ip est ignoré, ip_matches reste vrai. Une liste d'autorisation de remap correspond au client non fiable.
La valeur par défaut de acl.subjects est PEER. realip n'est pas dans le plugin.config standard. Le ip_allow.yaml de session ne lit jamais PLUGIN. Le classique X-Forwarded-For-depuis-n'importe-qui est fermé (trustedAddress requis ; l'en-tête doit être une adresse unique inet_pton).
| ID | pas encore de CVE |
| Classe | Privilège résiduel (fail-open de l'ACL de remap) |
| Portée | Distante (HTTP non authentifié depuis l'extérieur de trustedAddress) |
| CWE | 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) realip expérimental + sujets PLUGIN |
| Auth | aucune. Le client n'est pas dans trustedAddress. |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1:18770 uniquement |
J'ai épinglé le tag public 10.2.0 peel b1df7334. Le lab est un proxy inverse ats-10.2.0-lab:local compilé depuis les sources sur loopback. CONTROL PEER 403. PLUGIN 200. Session PURGE toujours 403.
Atteindre ATS avec le realip.so expérimental chargé et proxy.config.acl.subjects: PLUGIN (ou PLUGIN,PEER). Remap @src_ip=10.0.0.0/8 autorisé. Se connecter depuis une adresse hors de trustedAddress.
| Méthode | Point d'aboutissement | Privilège |
|---|---|---|
HTTP depuis 172.x hors de trustedAddress vers le remap @src_ip=10.0.0.0/8 | realip ignore TSHttpTxnVerifiedAddrSet (address_setter.cc:29-38) ; le sujet PLUGIN est toujours présent (UrlRewrite.cc:462-473) ; ignore @src_ip quand !ats_is_ip (:495-514) | Intégrité (prouvée en lab) : l'ACL de remap correspond. Origine 200 ATS-REALIP-PLUGIN-ACL-WITNESS. CONTROL acl.subjects=PEER est 403. |
Idem plus Client-IP: 10.1.2.3 depuis le pair non fiable | simple.cc verify faux ; en-tête ignoré | Intégrité (prouvée en lab) : toujours fail-open 200. Ce n'est pas une usurpation de l'adresse vérifiée. |
Même client PURGE | ip_allow.yaml de session PEER | Fermé (prouvé en lab) : 403. PLUGIN ne réécrit jamais l'ACL de connexion. |
Hôte sans @src_ip | map par défaut | Fermé (prouvé en lab) : corps DENIED, aucun témoin. |
Prouvé en lab vs déduit : PLUGIN 200, PEER 403, PURGE 403, map refusée, fail-open de l'en-tête non fiable sont prouvés en lab. Ce que l'origine accorde ensuite est déduit du remap qui était censé être réservé à 10/8.
Nécessite : realip.so expérimental ainsi que acl.subjects=PLUGIN (ou PLUGIN,PEER). Remappe la liste d'autorisation @src_ip. Non activé par défaut.
| Surface | Lab |
|---|---|
CONTROL acl.subjects=PEER | 403 sur la même table @src_ip |
Session ip_allow.yaml | PURGE de l'attaquant 403 |
Table sans @src_ip | DENIED |
trustedAddress vide | ne vérifie jamais ; reste fail-open uniquement lorsque subjects est PLUGIN |
| XFF classique depuis n'importe qui | fermé. L'en-tête doit être une adresse unique inet_pton provenant d'un pair de confiance |
SNI ip_allow | PEER/PROXY uniquement ; la poignée de main précède les en-têtes HTTP |
Subjects par défaut PEER | le reliquat ne s'applique pas |
Ce n'est pas le reliquat classique « faire confiance à X-Forwarded-For depuis n'importe qui ». Le reliquat est le chemin ACL de remap PLUGIN documenté.
python3 ats-realip-plugin-acl-Abraxas-Labs.py
ou
cd lab
./run.sh
Loopback 127.0.0.1:18770 (origine 18771). Projet Compose ats-realip-plugin-acl. Image ats-10.2.0-lab:local. Sidecar attaquant 172.x. Témoin ATS-REALIP-PLUGIN-ACL-WITNESS. Dernière ligne :
SUCCESS ats-realip-plugin-acl control-http=403 poc-http=200 purge-http=403 denied-http=200 spoof-http=200 trusted-http=200 ATS-REALIP-PLUGIN-ACL-WITNESS
Traiter PLUGIN comme indisponible lorsque get_verified_client_addr vaut AF_UNSPEC (ou faire en sorte que le getter renvoie nullptr, à l'image de TSHttpTxnVerifiedAddrGet). Le repli sur PEER s'exécute alors. Ne pas ignorer @src_ip lorsque le pointeur de sujet est non nul mais ne correspond pas à une IP. Échouer en mode fermé sur une liste d'autorisation.
En attendant, laissez acl.subjects à PEER si vous chargez realip uniquement pour la journalisation. Ne définissez pas PLUGIN à moins que chaque client susceptible d'atteindre le remap soit déjà un proxy de confiance.
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/realip/address_setter.ccsrc/proxy/http/remap/UrlRewrite.cc PerformACLFilteringinclude/proxy/ProxyTransaction.h get_verified_client_addr