
Apache Traffic Server 10.2.0 - उच्च - रिमोट - विशेषाधिकार अवशेष - ip_allow विधि केस
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-ipallow-method-case
वर्ग: विशेषाधिकार अवशेष पहुँच: रिमोट
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
HTTP/1 मिश्रित-केस मेथड्स डिफ़ॉल्ट ip_allow.yaml के PURGE/PUSH/DELETE/TRACE के डिनाई को बायपास करते हैं और रीमैप किए गए ओरिजिन तक ATS uid के रूप में TUNNEL करते हैं। YAML और रीमैप @method पार्स नोकेस होते हैं। H1 टोकनाइज़ करता है फिर रिक्वेस्ट बाइट्स पर strncmp करता है और केस मिसमैच पर -1 लौटाता है। डिनाई इनवर्ट उस अज्ञात टोकन को अनुमत मानता है। HTTP/2 :method नोकेस होता है और डिनाई ही रहता है। कैश PURGE/PUSH को अभी भी एक सुविदित wksidx चाहिए, इसलिए मिश्रित-केस कैश को पर्ज या पुश नहीं करता।
यह डिफ़ॉल्ट इनबाउंड मेथड ACL का अवशेष है, न कि CVE-2026-33267 (हॉप-बाय-हॉप) और न ही इनवर्टेड खाली-गैर-मानक रीमैप ACL (इस पिन पर बंद)।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | विशेषाधिकार अवशेष |
| पहुँच | रिमोट (गैर-लूपबैक क्लाइंट से अनऑथेंटिकेटेड HTTP/1) |
| CWE | CWE-178, CWE-863 |
| CVSS | उच्च: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| उत्पाद | Apache Traffic Server |
| प्रभावित | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) डिफ़ॉल्ट रिवर्स प्रॉक्सी |
| प्रमाणीकरण | कोई नहीं। डिफ़ॉल्ट ip_allow.yaml। remap_required: 1 और एक map। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18710। इमेज ats-10.2.0-lab:local। |
मैंने टैग 10.2.0, कमिट b1df7334b39a878971c376da849e8da4984918b6 पिन किया। नवीनतम स्थिर 17 अगस्त 2026। सोर्स-बिल्ट इमेज, गैजेट नहीं।
HTTP/1 पर एक गैर-लूपबैक पते से एक सामान्य रिवर्स प्रॉक्सी (remap_required: 1 और एक map) तक पहुँचें। 127.0.0.1 सभी को अनुमति है। खाली plugin.config। डिफ़ॉल्ट ip_allow.yaml।
| मेथड | सिंक | विशेषाधिकार |
|---|---|---|
172.x साइडकार से रीमैप के बाद HTTP/1 delete / DeLeTe | hdrtoken_method_tokenize फिर process_quick_http_filter फिर METHOD_NOT_SUPPORTED TUNNEL (HdrToken.cc:512-528, HttpTransact.cc:6855-6858) | अखंडता (लैब-प्रमाणित): ओरिजिन 200 DELETED ATS-IPALLOW-METHOD-CASE-WITNESS। अपरकेस DELETE 403 है। ओरिजिन मेथड ATS uid के रूप में। |
HTTP/1 trace | वही TUNNEL | रीकॉन (लैब-प्रमाणित): ओरिजिन 200 TRACE-OK। ATS TRACE इको नहीं बनाता (wksidx TRACE नहीं है)। अपरकेस TRACE 403 है। |
HTTP/1 purge / push | अज्ञात-मेथड TUNNEL, कैश ऑप नहीं | अखंडता (ATS कैश): बंद (लैब-प्रमाणित)। ओरिजिन ने PURGE-ORIGIN / PUSH-ORIGIN देखा। कैश ऑप्स को सुविदित wksidx चाहिए। push_method_enabled डिफ़ॉल्ट 0। |
| वही मिश्रित-केस रिक्वेस्ट | एक अतिरिक्त ओरिजिन हॉप | उपलब्धता (लैब-प्रमाणित): प्रोसेस डेथ नहीं। |
लैब-प्रमाणित बनाम अनुमानित: अपरकेस डिनाई, मिश्रित-केस DELETE/TRACE टनल, कैश PURGE/PUSH बंद: लैब। ओरिजिन DELETE/TRACE केवल तब यदि वह ओरिजिन मेथड केस को फोल्ड करता है (IIS / कुछ Java)। RFC 9110 केस-सेंसिटिव ओरिजिन (nginx, httpd, Go) 501 उत्तर देते हैं। लैब ओरिजिन केस फोल्ड करता है।
आवश्यक: गैर-loopback क्लाइंट से HTTP/1। remap_required: 1 और एक map। PURGE/PUSH/DELETE/TRACE का डिफ़ॉल्ट इनबाउंड deny। HTTP/2 :method nocase अभी भी अस्वीकृत।
| सतह | लैब |
|---|---|
172.x से सटीक-केस DELETE / TRACE | 403, ओरिजिन हिट नहीं हुआ |
HTTP/2 :method मिश्रित-केस | nocase टोकनाइज़, अभी भी अस्वीकृत |
ATS कैश ऑप्स के रूप में मिश्रित-केस purge / push | ओरिजिन ने क्रिया देखी; कैश पथ बंद रहा |
CONNECT गंतव्य deny (0.0.0.0/8, RFC1918, link-local, ::ffff:0:0/96) | डिफ़ॉल्ट ip_allow.yaml आउटबाउंड |
remap_required: 1 मिस | 404, ओपन रिले नहीं |
| उलटा खाली-गैरमानक remap ACL | CHANGELOG फ़िक्स कायम रहा |
CVE-2026-33267 hop-by-hop / @ स्ट्रिप | इस पिन पर बंद |
डिफ़ॉल्ट ip_allow.yaml स्टॉक रिमोट मेथड ACL है। YAML लोड hdrtoken_tokenize (nocase) का उपयोग करता है। DENY इनवर्ट फिर _method_mask = ALL & ~listed और _deny_nonstandard_methods = true को खाली गैरमानक सूची के साथ सेट करता है (IPAllow.cc:545-548)।
HTTP/1 पार्स hdrtoken_method_tokenize के साथ टोकनाइज़ करता है। DFA केस-असंवेदनशील है; हेल्पर फिर अनुरोध बाइट्स को ज्ञात स्ट्रिंग के विरुद्ध strncmp करता है और केस बेमेल पर -1 लौटाता है:
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 method == -1 के लिए isNonstandardMethodAllowed को कॉल करता है (IPAllow.h:365-376)। खाली nonstandard सेट और deny-nonstandard मिलकर !method_in_set बनते हैं, इसलिए mixed-case अनुमत है। is_this_http_method_supported(-1) false है। METHOD_NOT_SUPPORTED ProxyMode_t::TUNNELLING सेट करता है और true लौटाता है। दस्तावेज़ कहते हैं कि ATS अज्ञात methods को origin तक अग्रेषित करता है। TUNNELLING में cache lookup छोड़ दिया जाता है।
HTTP/2 :method बिना किसी case जाँच के HTTPHdr::method_set -> hdrtoken_tokenize से होकर जाता है। H2 delete DELETE बन जाता है और अस्वीकार कर दिया जाता है। यह बचा हुआ मामला HTTP/1 का है।
गलत रास्ते: RFC 9110 के case-sensitive origins को यह मान लेना कि deny सूची को निष्प्रभावी बना देता है (ATS cache PURGE/PUSH बंद ही रहते हैं; origin DELETE/TRACE ही बचा हुआ मामला है); 127.0.0.1 से curl करना (allow ALL); cache purge का दावा करना; hop-by-hop को फिर से दर्ज करना।
नाटक: एक reverse shell। oracle, uppercase 403 के बाद origin पर एक witness string है।
python3 ats-ipallow-method-case-Abraxas-Labs.py
or
cd lab
./run.sh
Loopback 127.0.0.1:18710. Compose प्रोजेक्ट ats-ipallow-method-case. इमेज ats-10.2.0-lab:local (10.2.0 का सोर्स बिल्ड). 172.x पर हमलावर साइडकार ताकि localhost ALL deny को छिपा न सके. Origin method case को फोल्ड करता है. विटनेस ATS-IPALLOW-METHOD-CASE-WITNESS. अंतिम पंक्ति:
SUCCESS ats-ipallow-method-case how=live control=DELETE/TRACE-403 poc=delete/DeLeTe/trace-tunneled cache-purge-push=closed ATS-IPALLOW-METHOD-CASE-WITNESS
HTTP/1 मेथड्स को उसी तरह टोकनाइज़ करें जैसे YAML और HTTP/2 पहले से करते हैं (nocase), या अज्ञात-मेथड TUNNEL से पहले ip_allow.yaml के deny नामों को nocase में मिलाएँ। cache PURGE/PUSH को well-known wksidx पर ही रखें। किसी अस्वीकृत well-known मेथड के case variant को नया मेथड न मानें।