
Apache Traffic Server 10.2.0 - उच्च - रिमोट - SSRF - ESI unix recvport
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-esi-unix-recvport
वर्ग: SSRF पहुँच: रिमोट
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
ESI FetchSM PluginVC गंतव्य पोर्ट 0 की रिपोर्ट करता है। Remap पोर्ट 0 को UDS मानता है और include स्कीम को http+unix में बदल देता है ताकि यह map_with_recv_port http+unix:// नियमों से मेल खाए, जो केवल UDS लिसनर के लिए हैं। फिर एक सार्वजनिक-दिखने वाला esi:include जो http://www.example.com/secret का है, unix-socket ओरिजिन पर पहुँच जाता है। TCP GET /secret TCP मैप पर ही रहता है। unix recv-port मैप के बिना CONTROL TCP ओरिजिन को इनलाइन करता है (कोई witness नहीं)। include स्कीम http+unix स्वयं जुलाई 2026 वैलिडेटर में BAD_SCHEME है।
सामान्य esi.so और एक map इस पर नहीं पहुँचता। ESI के साथ कम से कम एक map_with_recv_port http+unix:// पंक्ति चाहिए। डिफ़ॉल्ट remap_required: 1 और number_of_redirections: 0।
यह CVE-2026-58178 नहीं है (private literals, file://, nested comments, depth cap बंद)।
| ID | अभी कोई CVE नहीं |
| वर्ग | SSRF |
| पहुँच | रिमोट (ESI vhost पर अनप्रमाणित HTTP) |
| CWE | CWE-918 |
| CVSS | उच्च: 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| उत्पाद | Apache Traffic Server |
| प्रभावित | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) ESI के साथ map_with_recv_port http+unix |
| प्रमाणीकरण | कोई नहीं। ESI प्लगइन। Recv-port unix मैप। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18750 / 18751। इमेज ats-10.2.0-lab:local। |
मैंने टैग 10.2.0, कमिट b1df7334b39a878971c376da849e8da4984918b6 पिन किया। सोर्स-बिल्ट इमेज।
ESI vhost पर अनप्रमाणित HTTP, जिसके remap में map_with_recv_port http+unix:// है। src शामिल करें जिसे हमलावर प्रभावित कर सके (समझौता किया गया ओरिजिन, संग्रहीत ESI, या $(HTTP_HEADER{...}))।
| विधि | सिंक | विशेषाधिकार |
|---|---|---|
अनप्रमाणित GET /page ESI include http://www.example.com/secret | FetchSM गंतव्य पोर्ट 0 map_with_recv_port http+unix://www.example.com/ से मेल खाता है (RemapProcessor.cc:87-114, PluginVC.h:274-278) | Recon / SSRF (लैब-प्रमाणित): क्लाइंट बॉडी में UDS ओरिजिन से ATS-ESI-UNIX-RECVPORT-WITNESS इनलाइन हुआ। |
| वही | first-order write / shell | Integrity: कोई नहीं। कोई first-order write नहीं। कोई shell नहीं। |
CONTROL GET /page बिना unix recv-port मैप के | TCP ओरिजिन include | बंद (लैब-प्रमाणित): TCP-ORIGIN-OK इनलाइन करता है, कोई witness नहीं। |
poc vhost पर TCP क्लाइंट GET /secret | TCP मैप | बंद (लैब-प्रमाणित): TCP-ORIGIN-OK, कोई witness नहीं। |
लैब-प्रमाणित बनाम अनुमानित: control में कोई witness नहीं, poc पेज में witness, poc TCP /secret में कोई witness नहीं: लैब। संग्रहीत ESI या हेडर विस्तार के माध्यम से src को प्रभावित करना ESI का प्रलेखित ट्रस्ट मॉडल है, यहाँ पुनः सिद्ध नहीं किया गया। लैब include /page पर एक स्थिर http://www.example.com/secret है।
आवश्यक: ESI प्लगइन के साथ map_with_recv_port http+unix। डिफ़ॉल्ट remap_required: 1। number_of_redirections: 0।
| सतह | लैब |
|---|---|
| unix recv-port मैप के बिना CONTROL | control-no-witness=yes, इनलाइन TCP-ORIGIN-OK |
TCP क्लाइंट GET /secret | poc-tcp-secret-no-witness=yes |
स्कीम शामिल करें http+unix | वैलिडेटर BAD_SCHEME |
file://, निजी लिटरल, नेस्टेड टिप्पणियाँ, गहराई सीमा | CVE-2026-58178 बंद |
| DNS के बिना होस्टनेम डिनाइलिस्ट | प्रलेखित; remap_required: 1 पर निष्क्रिय |
remap_required: 1 मिस | 404 |
number_of_redirections: 0 | Location फ़ॉलो बंद |
PluginVCCore passive_addr_struct को शून्य करता है। PluginHttpConnectInternal केवल active_addr (मूल क्लाइंट) सेट करता है। FetchSM का HttpSM passive PluginVC पर चलता है। attach_client_session netvc->get_local_addr() को client_info.dst_addr में कॉपी करता है। Passive लोकल addr शून्य किया गया स्ट्रक्चर है। host_order_port() 0 है।
Remap लुकअप (RemapProcessor.cc:87-114): पोर्ट 0 का अर्थ UDS है। स्कीम को http -> http+unix में फिर से लिखा जाता है ताकि map_with_recv_port http+unix:// मेल खाए। यूनिट टेस्ट test_RemapRules.cc:237-240 इसे प्रलेखित करता है।
जुलाई वैलिडेटर इंक्लूड स्कीम http+unix को अस्वीकार करता है। यह ऐसे http:// इंक्लूड को अस्वीकार नहीं करता जिसका आंतरिक remap हॉप unix बन गया क्योंकि dest पोर्ट 0 था।
गलत रास्ते: सामान्य esi.so + एक map को इस अवशेष के रूप में मानना (CONTROL सिद्ध करता है कि ऐसा नहीं है); DNS के बिना होस्टनेम डिनाइलिस्ट दर्ज करना (प्रलेखित, remap_required=1 पर निष्क्रिय); यह दावा करना कि file:// अभी भी काम करता है; TCP /secret के unix मैप का पालन करने की अपेक्षा करना।
नाटक: एक रिवर्स शेल। ऑरेकल UDS ओरिजिन से एक इनलाइन विटनेस है, जिसमें TCP /secret अभी भी TCP है।
python3 ats-esi-unix-recvport-Abraxas-Labs.py
या
cd lab
./run.sh
Loopback poc 127.0.0.1:18750, control 127.0.0.1:18751. Compose प्रोजेक्ट ats-esi-unix-recvport. इमेज ats-10.2.0-lab:local. विटनेस ATS-ESI-UNIX-RECVPORT-WITNESS. अंतिम पंक्ति:
SUCCESS ats-esi-unix-recvport control-no-witness=yes poc-page-witness=yes poc-tcp-secret-no-witness=yes ATS-ESI-UNIX-RECVPORT-WITNESS
FetchSM PluginVC dest port 0 को UDS recv-port मैच के रूप में न मानें। वास्तविक UDS लिसनर के लिए map_with_recv_port http+unix:// रखें। http://host/ के ESI इन्क्लूड्स को TCP मैप पर ही रहना चाहिए, भले ही उस होस्ट के लिए http+unix recv-port नियम मौजूद हो।
b1df7334b39a878971c376da849e8da4984918b6)PluginVC.h शून्य किया गया passive addrPluginHttpConnect.ccRemapProcessor.cc port 0 -> http+unixtest_RemapRules.cc