
Apache Traffic Server 10.2.0 - Élevé - À distance - Plantage - Cripts From/To URL UAF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-cripts-rri-uaf
Classe : Crash Portée : Distant
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
Cripts Remap::From / To URL relit encore la pile TSRemapRequestInfo après le retour de TSRemapDoRemap. RemapPlugins alloue rri sur la pile. Le contexte conserve le pointeur. reset() libère les unique_ptrs ; ensuite Get() / Host::GetSV transmet le RRI mort à TSUrlHostGet. Fatal: sdk_sanity_check_mbuffer puis SIGABRT.
Client::URL a été corrigé pour ne pas le faire. Lua effaçait rri après le remap. Cripts From/To ne le faisait pas. ENABLE_CRIPTS est désactivé par défaut. Aucun cripts sur le remap standard.
| ID | pas encore de CVE |
| Classe | Crash (UAF de RRI sur la pile) |
| Portée | Distant (HTTP non authentifié via un cript From/To post-remap) |
| CWE | CWE-416 |
| CVSS | Élevé : 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| Produit | Apache Traffic Server |
| Affecté | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) Cripts From/To URL après DoRemap |
| Auth | aucune |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1:18780 uniquement |
J'ai épinglé le tag public 10.2.0 peel b1df7334. Le lab est une compilation source RelWithDebInfo avec Cripts activé. CONTROL Client::URL 200, le processus est resté actif. POC Host ats-poc SIGABRT code de sortie 134.
Atteindre un cript de remap qui touche l'URL From/To après do_remap (do_send_response dans le lab). Un GET non authentifié suffit.
| Méthode | Point de chute | Privilège |
|---|---|---|
GET non authentifié Host ats-poc via un cript do_send_response qui appelle Remap::From::URL::Get / To::URL::Get | pile TSRemapRequestInfo (RemapPlugins.cc:41-65) ; déréférencement rriValid() (Context.hpp:70-73) ; _initialize (Urls.cc:525-561) | Disponibilité (prouvé en lab) : SIGABRT, code de sortie 134, connexion réinitialisée. traffic_server meurt. |
| Idem | Abandon Fatal du SDK | Intégrité : pas de contrôle RIP. La classe reste Crash. Lab. |
Prouvé en lab vs déduit : la mort du processus est prouvée en lab (RelWithDebInfo SIGABRT). La corruption mémoire jusqu'à RIP n'est pas revendiquée.
Nécessite : Cripts compilé (ENABLE_CRIPTS=ON) et un cript de remap qui touche l'URL From/To après DoRemap. Par défaut : non.
| Surface | Lab |
|---|---|
| CONTROL Client::URL uniquement | 200, le processus est resté actif |
| Prison File::Path::Rebase | fermée sur cette épingle (CVE-2026-58177 issue 32) |
| sockaddr Geo IPEndpoint | fermée |
| abandon de clé de requête | fermée (hash manquant ignoré) |
| cripts globaux | rri == nullptr ; rriValid() échoue en fermeture sans déréférencement |
| Instance OOB / DoRemap-after-Release | fermée (CVE-2026-58177) |
remap standard / ENABLE_CRIPTS désactivé | le résidu ne s'applique pas |
Pas CVE-2026-58177 tel que divulgué. Lua effaçait rri après le remap ; Cripts From/To ne le faisait pas.
python3 ats-cripts-rri-uaf-Abraxas-Labs.py
ou
cd lab
./run.sh
Loopback 127.0.0.1:18780. Projet Compose ats-cripts-rri-uaf. Image RelWithDebInfo. Témoin ATS-CRIPTS-RRI-UAF-WITNESS. Dernière ligne :
SUCCESS ats-cripts-rri-uaf control-http=200 control-alive=yes poc-crash=sigabrt poc-http=None reset=1 ATS-CRIPTS-RRI-UAF-WITNESS
Mettre à null le rri du Context au retour de TSRemapDoRemap, comme le fait Lua. Ou traiter l'URL From/To comme Client::URL : ne pas réinitialiser depuis le RRI dans les hooks ultérieurs. rriValid() ne doit pas déréférencer une structure morte. Copier mapFromUrl / mapToUrl dans des MLocs possédés pendant do_remap si le From/To post-remap est une fonctionnalité.
En attendant, ne pas évaluer %{FROM-URL:...} / %{TO-URL:...} (ni emprunter ces objets URL) sur do_post_remap / do_send_request / do_read_response / do_send_response / do_cache_lookup.
b1df7334b39a878971c376da849e8da4984918b6)src/proxy/http/remap/RemapPlugins.ccinclude/cripts/Epilogue.hppsrc/cripts/Urls.cc Remap::From::URL / To::URLinclude/cripts/Context.hpp rriValid../, Geo sockaddr, abort sur clé de requête, Client::URL MLoc