
Apache Traffic Server 10.2.0 – Hoch – Remote – Verbliebene Berechtigung – ip_allow-Methoden-Groß-/Kleinschreibung
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-ipallow-method-case
Klasse: Privilegien-Rest Reichweite: Remote
Apache Traffic Server 10.2.0 (b1df7334) – Apache Software Foundation
HTTP/1-Methoden mit gemischter Groß-/Kleinschreibung umgehen die standardmäßige ip_allow.yaml-Verweigerung von PURGE/PUSH/DELETE/TRACE und tunneln zum remappten Origin als ATS-uid. YAML- und Remap-@method-Parsing sind nocase. H1 tokenisiert und vergleicht dann die Request-Bytes per strncmp und gibt bei Abweichung der Groß-/Kleinschreibung -1 zurück. Die Deny-Invertierung behandelt dieses unbekannte Token als erlaubt. HTTP/2 :method ist nocase und bleibt verweigert. Cache-PURGE/PUSH benötigen weiterhin einen bekannten wksidx, daher löscht oder pusht die gemischte Schreibweise den Cache nicht.
Dies ist ein Rest der standardmäßigen eingehenden Methoden-ACL, nicht CVE-2026-33267 (hop-by-hop) und nicht die invertierte leere nicht-standardmäßige Remap-ACL (auf diesem Pin geschlossen).
| ID | noch keine CVE |
| Klasse | Privilegien-Rest |
| Reichweite | Remote (unauthentifiziertes HTTP/1 von einem Nicht-Loopback-Client) |
| CWE | CWE-178, CWE-863 |
| CVSS | Hoch: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| Produkt | Apache Traffic Server |
| Betroffen | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) Standard-Reverse-Proxy |
| Auth | keine. Standard-ip_allow.yaml. remap_required: 1 plus ein map. |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1:18710. Image ats-10.2.0-lab:local. |
Ich habe den Tag 10.2.0 gepinnt, Commit b1df7334b39a878971c376da849e8da4984918b6. Neueste stabile Version 17. Aug. 2026. Aus dem Quellcode gebautes Image, kein Gadget.
Einen typischen Reverse-Proxy (remap_required: 1 plus ein map) über HTTP/1 von einer Nicht-Loopback-Adresse erreichen. 127.0.0.1 ist allow ALL. Leere plugin.config. Standard-ip_allow.yaml.
| Methode | Senke | Privileg |
|---|---|---|
HTTP/1 delete / DeLeTe nach Remap von einem 172.x-Sidecar | hdrtoken_method_tokenize, dann process_quick_http_filter, dann METHOD_NOT_SUPPORTED TUNNEL (HdrToken.cc:512-528, HttpTransact.cc:6855-6858) | Integrität (im Lab nachgewiesen): Origin 200 DELETED ATS-IPALLOW-METHOD-CASE-WITNESS. Großgeschriebenes DELETE ist 403. Origin-Methode als ATS-uid. |
HTTP/1 trace | derselbe TUNNEL | Recon (im Lab nachgewiesen): Origin 200 TRACE-OK. ATS baut das TRACE-Echo nicht auf (wksidx ist nicht TRACE). Großgeschriebenes TRACE ist 403. |
HTTP/1 purge / push | TUNNEL für unbekannte Methoden, keine Cache-Operation | Integrität (ATS-Cache): geschlossen (im Lab nachgewiesen). Origin sah PURGE-ORIGIN / PUSH-ORIGIN. Cache-Operationen benötigen einen bekannten wksidx. push_method_enabled Standard 0. |
| Dieselbe Anfrage mit gemischter Schreibweise | ein zusätzlicher Origin-Hop | Verfügbarkeit (im Lab nachgewiesen): kein Prozessabbruch. |
Im Lab nachgewiesen vs. abgeleitet: Verweigerung bei Großschreibung, TUNNEL bei DELETE/TRACE mit gemischter Schreibweise, Cache-PURGE/PUSH geschlossen: Lab. Origin-DELETE/TRACE nur, wenn dieser Origin die Methoden-Groß-/Kleinschreibung faltet (IIS / manche Java). RFC-9110-Origins mit Groß-/Kleinschreibungssensitivität (nginx, httpd, Go) antworten mit 501. Das Lab-Origin faltet die Groß-/Kleinschreibung.
Erfordert: HTTP/1 von einem Nicht-Loopback-Client. remap_required: 1 plus eine map. Standardmäßiges eingehendes Verbot von PURGE/PUSH/DELETE/TRACE. HTTP/2 :method nocase weiterhin verweigert.
| Oberfläche | Lab |
|---|---|
Exakte Groß-/Kleinschreibung DELETE / TRACE von 172.x | 403, Origin nicht erreicht |
HTTP/2 :method gemischte Groß-/Kleinschreibung | nocase-Tokenisierung, weiterhin verweigert |
Gemischt geschriebenes purge / push als ATS-Cache-Operationen | Origin sah das Verb; Cache-Pfad blieb geschlossen |
CONNECT-Ziel-Verbot (0.0.0.0/8, RFC1918, Link-Local, ::ffff:0:0/96) | standardmäßiges ausgehendes ip_allow.yaml |
remap_required: 1-Fehltreffer | 404, kein offenes Relay |
| Invertierte leere nicht-standardmäßige Remap-ACL | CHANGELOG-Fix hielt |
CVE-2026-33267 Hop-by-Hop / @-Strip | geschlossen bei diesem Pin |
Das standardmäßige ip_allow.yaml ist die werksseitige Remote-Methoden-ACL. Das Laden von YAML verwendet hdrtoken_tokenize (nocase). Die DENY-Invertierung setzt dann _method_mask = ALL & ~listed und _deny_nonstandard_methods = true mit einer leeren Nicht-Standard-Liste (IPAllow.cc:545-548).
Die HTTP/1-Analyse tokenisiert mit hdrtoken_method_tokenize. Der DFA ist case-insensitiv; der Helper führt dann strncmp der Anfrage-Bytes gegen den bekannten String aus und gibt bei Groß-/Kleinschreibungs-Abweichung -1 zurück:
retval = hdrtoken_tokenize(string, string_len, &string_out);
if (retval >= 0) {
if (strncmp(string, string_out, string_len) != 0) {
// Not a case match
retval = -1;
}
}
EndRemapRequest fragt isNonstandardMethodAllowed für method == -1 ab (IPAllow.h:365-376). Leeres Nonstandard-Set plus Deny-Nonstandard ergibt !method_in_set, also ist gemischte Groß-/Kleinschreibung erlaubt. is_this_http_method_supported(-1) ist false. METHOD_NOT_SUPPORTED setzt ProxyMode_t::TUNNELLING und gibt true zurück. Die Dokumentation besagt, dass ATS unbekannte Methoden an den Origin weiterleitet. Der Cache-Lookup wird im TUNNELLING-Modus übersprungen.
HTTP/2 :method durchläuft HTTPHdr::method_set -> hdrtoken_tokenize ohne Prüfung der Groß-/Kleinschreibung. H2 delete wird zu DELETE und wird abgelehnt. Dieser Rest stammt aus HTTP/1.
Fehlannahmen: die Annahme, dass RFC-9110-Origins mit Groß-/Kleinschreibungssensitivität die Deny-Liste wirkungslos machen (ATS-Cache-PURGE/PUSH bleiben geschlossen; Origin-DELETE/TRACE ist der Rest); Curling von 127.0.0.1 (allow ALL); die Behauptung eines Cache-Purge; erneutes Einreichen als Hop-by-Hop.
Theater: eine Reverse Shell. Das Orakel ist ein Witness-String am Origin nach einem 403 bei Großschreibung.
python3 ats-ipallow-method-case-Abraxas-Labs.py
oder
cd lab
./run.sh