
Apache Traffic Server 10.2.0 - Élevé - Distant - SSRF - redirection 0.0.0.0/8
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-redirect-zero-net
Classe : SSRF Portée : Distante
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
La valeur par défaut routable:follow de redirect.actions classe 0.0.0.0/8 (sauf INADDR_ANY) comme FOLLOW. Le loopback n'est que 127.0.0.0/8 et ::1. Le refus de destination CONNECT par défaut et le IncludeUrlValidator d'ESI rejettent déjà 0.0.0.0/8. Le suivi de redirection le rouvre.
La valeur par défaut de number_of_redirections est 0, donc la table n'est pas évaluée tant que le suivi n'est pas activé. Un plugin chargé qui appelle TSHttpTxnRedirectUrlSet force tout de même un saut même lorsque le compteur est à 0 (la réinitialisation du compteur de CVE-2026-58189 est corrigée).
| ID | pas encore de CVE |
| Classe | SSRF (le suivi de redirection manque 0.0.0.0/8) |
| Portée | Distante (Location de l'origine après activation du suivi) |
| CWE | CWE-918 |
| CVSS | Élevé : 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| Produit | Apache Traffic Server |
| Affecté | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) remplissage routable de redirect.actions |
| Auth | aucune. Le suivi doit être activé (number_of_redirections=1 dans le lab). |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1:18790 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 le loopback. Loopback RETURN. 0.0.0.0 400. 0.0.0.1 FOLLOW. Remap ignoré sur le saut de suivi.
Faire suivre à ATS Location: http://0.0.0.1/ après number_of_redirections=1 (ou après un plugin TSHttpTxnRedirectUrlSet). Sous Linux, 0.0.0.1 est local.
| Méthode | Cible | Privilège |
|---|---|---|
GET non authentifié ; origine 302 Location: http://0.0.0.1:18080/w avec number_of_redirections=1 | remplissage ROUTABLE de parse_redirect_actions (HttpConfig.cc:1782-1787) ; table d'actions OSDNSLookup | Recon / SSRF (prouvé en lab) : ATS suit en tant que ROUTABLE. Corps client ATS-REDIRECT-ZERO-NET-WITNESS. Remap ignoré sur le saut de suivi. |
Même saut ; Authorization / Cookie copiés | HttpSM::redirect_request | Intégrité (déduit) : ces en-têtes ne sont pas supprimés sur le saut de suivi. Non exercé en tant qu'écriture. |
::ffff:0:0/96 mappé IPv4 | même remplissage de ::/0 | Recon (déduit) : homologue du refus de destination CONNECT. Non exercé. |
Prouvé en lab vs déduit : le suivi de 0.0.0.1, le RETURN du loopback, le FOLLOW routable, le 400 de INADDR_ANY sont prouvés en lab. Le mappage IPv4 et la transmission des identifiants sont déduits.
Nécessite : redirect.actions routable:follow (valeur par défaut à la compilation) et number_of_redirections > 0, ou un plugin qui définit une URL de redirection. Le compteur par défaut est 0.
| Surface | Lab |
|---|---|
Loopback 127.0.0.1 | RETURN. Le client n'a jamais vu LOOPBACK-ONLY-SECRET. Resté en 302. |
0.0.0.0 INADDR_ANY | 400 avant la table d'actions |
number_of_redirections=0 par défaut | routable:follow non évalué |
RFC1918 / CGNAT / link-local / ::1 | RETURN via le remplissage DEFAULT |
Refus de destination CONNECT 0.0.0.0/8 | déjà dans ip_allow.yaml par défaut |
Validateur d'inclusion ESI 0.0.0.0/8 | déjà privé (CVE-2026-58178) |
| Réinitialisation du compteur de redirection du plugin | corrigée (CVE-2026-58189) |
Ce n'est pas CVE-2026-58189. Ce n'est pas CVE-2026-58178. Ces plages ont été nommées sur CONNECT et ESI. Follow-redirect ne les a pas obtenues.
python3 ats-redirect-zero-net-Abraxas-Labs.py
ou
cd lab
./run.sh
Loopback 127.0.0.1:18790. Projet Compose ats-redirect-zero-net. Image ats-10.2.0-lab:local. Témoin ATS-REDIRECT-ZERO-NET-WITNESS. Dernière ligne :
SUCCESS ats-redirect-zero-net follow-0.0.0.1=yes loopback-return=yes routable-follow=yes inaddr-any=400 remap_required=1 ATS-REDIRECT-ZERO-NET-WITNESS
Marquer 0.0.0.0/8 et ::ffff:0:0/96 (IPv4 mappé) de la même manière que le refus par défaut de destination CONNECT et le IncludeUrlValidator d'ESI le font déjà. Le loopback n'est pas seulement 127/8. Le rejet de 0.0.0.0 par ats_is_ip_any ne suffit pas.
En attendant, laissez number_of_redirections à 0, ou définissez redirect.actions de sorte que routable soit RETURN. Un plugin TSHttpTxnRedirectUrlSet force toujours un saut.
b1df7334b39a878971c376da849e8da4984918b6)src/proxy/http/HttpConfig.cc parse_redirect_actionssrc/records/RecordsConfig.cc number_of_redirections / redirect.actionssrc/api/InkAPI.cc incrément d'un saut de TSHttpTxnRedirectUrlSetconfigs/ip_allow.yaml.defaultIncludeUrlValidator 0.0.0.0/8 privé (CVE-2026-58178)