
Apache Traffic Server 10.2.0 - Alta - Remota - Privilegios residuales - fallo abierto de ACL en el PLUGIN realip
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-realip-plugin-acl
Clase: Privilegio residual Alcance: Remoto
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
realip experimental más el acl.subjects: PLUGIN documentado abre por defecto (fail-open) el remapeo de @src_ip. Si realip no llama a TSHttpTxnVerifiedAddrSet, _verified_addr permanece en AF_UNSPEC. El sujeto PLUGIN nunca es nullptr, por lo que el respaldo PEER nunca se ejecuta. ats_is_ip es falso, se omite @src_ip, ip_matches permanece verdadero. Una lista de permitidos de remapeo coincide con el cliente no confiable.
El valor predeterminado de acl.subjects es PEER. realip no está en el plugin.config estándar. El ip_allow.yaml de sesión nunca lee PLUGIN. El clásico X-Forwarded-For-de-cualquiera está cerrado (se requiere trustedAddress; el encabezado debe ser una única dirección inet_pton).
| ID | aún sin CVE |
| Clase | Privilegio residual (fail-open de ACL de remapeo) |
| Alcance | Remoto (HTTP no autenticado desde fuera de 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 |
| Producto | Apache Traffic Server |
| Afectado | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) realip experimental + sujetos PLUGIN |
| Autenticación | ninguna. El cliente no está en trustedAddress. |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1:18770 |
Fijé la etiqueta pública 10.2.0 y el commit b1df7334. El laboratorio es un proxy inverso ats-10.2.0-lab:local compilado desde el código fuente en loopback. CONTROL PEER 403. PLUGIN 200. La sesión PURGE sigue siendo 403.
Alcanzar ATS con el realip.so experimental cargado y proxy.config.acl.subjects: PLUGIN (o PLUGIN,PEER). Remapear la lista de permitidos @src_ip=10.0.0.0/8. Conectarse desde una dirección fuera de trustedAddress.
| Método | Destino | Privilegio |
|---|---|---|
HTTP desde 172.x fuera de trustedAddress hacia el remapeo @src_ip=10.0.0.0/8 | realip omite TSHttpTxnVerifiedAddrSet (address_setter.cc:29-38); el sujeto PLUGIN siempre está presente (UrlRewrite.cc:462-473); omite @src_ip cuando !ats_is_ip (:495-514) | Integridad (probado en laboratorio): la ACL de remapeo coincide. Origen 200 ATS-REALIP-PLUGIN-ACL-WITNESS. CONTROL acl.subjects=PEER es 403. |
Lo mismo más Client-IP: 10.1.2.3 desde el par no confiable | simple.cc verify falso; encabezado ignorado | Integridad (probado en laboratorio): sigue siendo fail-open 200. No es una suplantación de la dirección verificada. |
Mismo cliente PURGE | ip_allow.yaml de sesión PEER | Cerrado (probado en laboratorio): 403. PLUGIN nunca reescribe la ACL de conexión. |
Host sin @src_ip | mapa predeterminado | Cerrado (probado en laboratorio): cuerpo DENIED, sin testigo. |
Probado en laboratorio vs inferido: PLUGIN 200, PEER 403, PURGE 403, mapa denegado, fail-open de encabezado no confiable son de laboratorio. Lo que el origen concede después se infiere del remapeo que se suponía era solo 10/8.
Requiere: realip.so experimental más acl.subjects=PLUGIN (o PLUGIN,PEER). Reasigna la lista de permitidos @src_ip. No es predeterminado.
| Superficie | Laboratorio |
|---|---|
CONTROL acl.subjects=PEER | 403 en el mismo mapa @src_ip |
Sesión ip_allow.yaml | PURGE del atacante 403 |
Mapa sin @src_ip | DENIED |
trustedAddress vacío | nunca verifica; aún así fail-open solo cuando subjects es PLUGIN |
| XFF clásico desde cualquiera | cerrado. El encabezado debe ser una única dirección inet_pton de un par confiable |
SNI ip_allow | solo PEER/PROXY; el handshake es antes de los encabezados HTTP |
Subjects predeterminados PEER | el remanente no aplica |
No es el clásico remanente de "confiar en X-Forwarded-For desde cualquiera". El remanente es la ruta ACL de remapeo PLUGIN documentada.
python3 ats-realip-plugin-acl-Abraxas-Labs.py
o
cd lab
./run.sh
Loopback 127.0.0.1:18770 (origen 18771). Proyecto de Compose ats-realip-plugin-acl. Imagen ats-10.2.0-lab:local. Sidecar atacante 172.x. Testigo ATS-REALIP-PLUGIN-ACL-WITNESS. Última línea:
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
Trata PLUGIN como no disponible cuando get_verified_client_addr es AF_UNSPEC (o haz que el getter devuelva nullptr, coincidiendo con TSHttpTxnVerifiedAddrGet). Entonces se ejecuta el fallback a PEER. No omitas @src_ip cuando el puntero del sujeto no es nulo pero no es una IP. Falla de forma cerrada ante una lista de permitidos.
Hasta entonces, deja acl.subjects en PEER si cargas realip solo para el registro. No establezcas PLUGIN a menos que cada cliente que pueda alcanzar el remap ya sea un proxy de confianza.
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/realip/address_setter.ccsrc/proxy/http/remap/UrlRewrite.cc PerformACLFilteringinclude/proxy/ProxyTransaction.h get_verified_client_addr