
Apache Traffic Server 10.2.0 – Hoch – Remote – Verbleibende Berechtigungen – realip PLUGIN ACL fail-open
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-realip-plugin-acl
Klasse: Privilegien-Rest Reichweite: Remote
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
Das experimentelle realip zusammen mit dem dokumentierten acl.subjects: PLUGIN führt zu Fail-open bei Remap-@src_ip. Wenn realip TSHttpTxnVerifiedAddrSet nicht aufruft, bleibt _verified_addr auf AF_UNSPEC. Das PLUGIN-Subjekt ist nie nullptr, daher wird der PEER-Fallback nie ausgeführt. ats_is_ip ist false, @src_ip wird übersprungen, ip_matches bleibt true. Eine Remap-Allow-List stimmt mit dem nicht vertrauenswürdigen Client überein.
Der Standardwert von acl.subjects ist PEER. realip ist nicht in der Standard-plugin.config enthalten. Das Sitzungs-ip_allow.yaml liest niemals PLUGIN. Das klassische X-Forwarded-For-von-jedermann ist geschlossen (trustedAddress erforderlich; der Header muss eine einzelne inet_pton-Adresse sein).
| ID | noch keine CVE |
| Klasse | Privilegien-Rest (Remap-ACL-Fail-open) |
| Reichweite | Remote (unauthentifiziertes HTTP von außerhalb trustedAddress) |
| CWE | CWE-863 |
| CVSS | Hoch: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Produkt | Apache Traffic Server |
| Betroffen | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) experimentelles realip + PLUGIN-Subjekte |
| Auth | keine. Der Client ist nicht in trustedAddress. |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1:18770 |
Ich habe das öffentliche Tag 10.2.0 gepinnt und b1df7334 ausgecheckt. Das Lab ist ein aus dem Quellcode gebauter ats-10.2.0-lab:local-Reverse-Proxy auf Loopback. CONTROL PEER 403. PLUGIN 200. Sitzungs-PURGE weiterhin 403.
ATS mit geladenem experimentellem realip.so und proxy.config.acl.subjects: PLUGIN (oder PLUGIN,PEER) erreichen. Remap-Allow für @src_ip=10.0.0.0/8. Von einer Adresse außerhalb von trustedAddress verbinden.
| Methode | Senke | Privileg |
|---|---|---|
HTTP von 172.x außerhalb von trustedAddress an Remap @src_ip=10.0.0.0/8 | realip überspringt TSHttpTxnVerifiedAddrSet (address_setter.cc:29-38); PLUGIN-Subjekt immer vorhanden (UrlRewrite.cc:462-473); @src_ip übersprungen, wenn !ats_is_ip (:495-514) | Integrität (im Lab nachgewiesen): Remap-ACL stimmt überein. Origin 200 ATS-REALIP-PLUGIN-ACL-WITNESS. CONTROL acl.subjects=PEER ist 403. |
Dasselbe plus Client-IP: 10.1.2.3 vom nicht vertrauenswürdigen Peer | simple.cc verify false; Header ignoriert | Integrität (im Lab nachgewiesen): weiterhin Fail-open 200. Kein Spoofing der verifizierten Adresse. |
Derselbe Client PURGE | Sitzungs-ip_allow.yaml PEER | Geschlossen (im Lab nachgewiesen): 403. PLUGIN schreibt die Verbindungs-ACL nie um. |
Host ohne @src_ip | Standard-Map | Geschlossen (im Lab nachgewiesen): Body DENIED, kein Witness. |
Im Lab nachgewiesen vs. abgeleitet: PLUGIN 200, PEER 403, PURGE 403, verweigerte Map, Fail-open bei nicht vertrauenswürdigem Header sind Lab. Was das Origin dann gewährt, ist aus dem Remap abgeleitet, das eigentlich nur für 10/8 gedacht war.
Erfordert: experimentelles realip.so plus acl.subjects=PLUGIN (oder PLUGIN,PEER). Remap der @src_ip-Allow-List. Nicht Standard.
| Oberfläche | Lab |
|---|---|
CONTROL acl.subjects=PEER | 403 auf derselben @src_ip-Map |
Session ip_allow.yaml | Angreifer-PURGE 403 |
Map ohne @src_ip | DENIED |
Leeres trustedAddress | verifiziert nie; weiterhin fail-open nur, wenn subjects PLUGIN ist |
| Klassisches XFF-von-jedem | geschlossen. Header muss eine einzelne inet_pton-Adresse von einem vertrauenswürdigen Peer sein |
SNI ip_allow | nur PEER/PROXY; Handshake erfolgt vor HTTP-Headern |
Standard-Subjects PEER | Überbleibsel greift nicht |
Nicht das klassische Überbleibsel „X-Forwarded-For von jedem vertrauen“. Das Überbleibsel ist der dokumentierte PLUGIN-Remap-ACL-Pfad.
python3 ats-realip-plugin-acl-Abraxas-Labs.py
oder
cd lab
./run.sh
Loopback 127.0.0.1:18770 (Origin 18771). Compose-Projekt ats-realip-plugin-acl. Image ats-10.2.0-lab:local. Angreifer-Sidecar 172.x. Witness ATS-REALIP-PLUGIN-ACL-WITNESS. Letzte Zeile:
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
Behandle PLUGIN als nicht verfügbar, wenn get_verified_client_addr AF_UNSPEC ist (oder lasse den Getter nullptr zurückgeben, passend zu TSHttpTxnVerifiedAddrGet). Dann greift der PEER-Fallback. Überspringe @src_ip nicht, wenn der Subject-Zeiger nicht null, aber keine IP ist. Bei einer Allow-Liste fail-closed verhalten.
Bis dahin lasse acl.subjects auf PEER, wenn du realip nur für Logging lädst. Setze PLUGIN nicht, es sei denn, jeder Client, der das Remap erreichen kann, ist bereits ein vertrauenswürdiger Proxy.
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/realip/address_setter.ccsrc/proxy/http/remap/UrlRewrite.cc PerformACLFilteringinclude/proxy/ProxyTransaction.h get_verified_client_addr