
Apache Traffic Server 10.2.0 - Alta - Remoto - Privilegi residui - ACL del plugin realip con fail-open
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-realip-plugin-acl
Classe: Privilegio residuo Portata: Remota
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
realip sperimentale più il documentato acl.subjects: PLUGIN fail-open sul remap @src_ip. Se realip non chiama TSHttpTxnVerifiedAddrSet, _verified_addr resta AF_UNSPEC. Il soggetto PLUGIN non è mai nullptr, quindi il fallback PEER non viene mai eseguito. ats_is_ip è falso, @src_ip viene saltato, ip_matches resta vero. Una allow-list di remap corrisponde al client non attendibile.
Il valore predefinito di acl.subjects è PEER. realip non è nel plugin.config standard. Il file di sessione ip_allow.yaml non legge mai PLUGIN. Il classico X-Forwarded-For-da-chiunque è chiuso (trustedAddress richiesto; l'header deve essere un singolo indirizzo inet_pton).
| ID | nessuna CVE al momento |
| Classe | Privilegio residuo (fail-open dell'ACL di remap) |
| Portata | Remota (HTTP non autenticato dall'esterno di trustedAddress) |
| CWE | 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) realip sperimentale + soggetti PLUGIN |
| Auth | nessuna. Il client non è in trustedAddress. |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:18770 |
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. CONTROL PEER 403. PLUGIN 200. La PURGE di sessione resta 403.
Raggiungere ATS con realip.so sperimentale caricato e proxy.config.acl.subjects: PLUGIN (o PLUGIN,PEER). Remap @src_ip=10.0.0.0/8 consentito. Connettersi da un indirizzo esterno a trustedAddress.
| Metodo | Sink | Privilegio |
|---|---|---|
HTTP da 172.x esterno a trustedAddress verso il remap @src_ip=10.0.0.0/8 | realip salta TSHttpTxnVerifiedAddrSet (address_setter.cc:29-38); il soggetto PLUGIN è sempre presente (UrlRewrite.cc:462-473); salta @src_ip quando !ats_is_ip (:495-514) | Integrità (dimostrata in lab): l'ACL di remap corrisponde. Origin 200 ATS-REALIP-PLUGIN-ACL-WITNESS. CONTROL acl.subjects=PEER è 403. |
Come sopra più Client-IP: 10.1.2.3 dal peer non attendibile | simple.cc verify falso; header ignorato | Integrità (dimostrata in lab): comunque fail-open 200. Non è uno spoof dell'indirizzo verificato. |
Stessa PURGE del client | ip_allow.yaml di sessione PEER | Chiuso (dimostrato in lab): 403. PLUGIN non riscrive mai l'ACL di connessione. |
Host senza @src_ip | mappa predefinita | Chiuso (dimostrato in lab): body DENIED, nessun witness. |
Dimostrato in lab vs dedotto: PLUGIN 200, PEER 403, PURGE 403, mappa negata, fail-open dell'header non attendibile sono da lab. Ciò che l'origin concede poi è dedotto dal remap che doveva essere solo 10/8.
Richiede: realip.so sperimentale più acl.subjects=PLUGIN (o PLUGIN,PEER). Rimappa la allow-list @src_ip. Non predefinito.
| Superficie | Lab |
|---|---|
CONTROL acl.subjects=PEER | 403 sulla stessa mappa @src_ip |
Sessione ip_allow.yaml | PURGE dell'attaccante 403 |
Mappa senza @src_ip | DENIED |
trustedAddress vuoto | non verifica mai; resta fail-open solo quando subjects è PLUGIN |
| XFF classico da chiunque | chiuso. L'header deve essere un singolo indirizzo inet_pton da un peer attendibile |
SNI ip_allow | solo PEER/PROXY; l'handshake avviene prima degli header HTTP |
Subjects predefiniti PEER | il residuo non si applica |
Non è il classico residuo "fidati di X-Forwarded-For da chiunque". Il residuo è il percorso ACL di rimappatura PLUGIN documentato.
python3 ats-realip-plugin-acl-Abraxas-Labs.py
o
cd lab
./run.sh
Loopback 127.0.0.1:18770 (origine 18771). Progetto Compose ats-realip-plugin-acl. Immagine ats-10.2.0-lab:local. Sidecar dell'attaccante 172.x. Testimone ATS-REALIP-PLUGIN-ACL-WITNESS. Ultima riga:
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
Trattare PLUGIN come non disponibile quando get_verified_client_addr è AF_UNSPEC (oppure fare in modo che il getter restituisca nullptr, in linea con TSHttpTxnVerifiedAddrGet). In tal caso viene eseguito il fallback su PEER. Non saltare @src_ip quando il puntatore del subject è non-null ma non è un IP. In caso di errore, negare l'accesso su una allow-list.
Fino ad allora, lasciare acl.subjects impostato su PEER se si carica realip solo per il logging. Non impostare PLUGIN a meno che ogni client che può raggiungere il remap non sia già un proxy fidato.
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/realip/address_setter.ccsrc/proxy/http/remap/UrlRewrite.cc PerformACLFilteringinclude/proxy/ProxyTransaction.h get_verified_client_addr