
CakePHP 5.4.2 - उच्च - रिमोट - कुकी - Http Client कुकी जार डोमेन को regex प्रत्यय के रूप में मिलाता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · cakephp-cookie-suffix
वर्ग: कुकी लीक / प्लांट पहुँच: रिमोट
CakePHP 5.4.2 (887b641) - Cake Software Foundation
CookieCollection::findMatchingCookies preg_match('/' . preg_quote($domain) . '$/', $host) का उपयोग करता है। यह एक स्ट्रिंग सफ़िक्स है, RFC 6265 डोमेन-मैच नहीं। api.partner.com के लिए एक कुकी evilapi.partner.com को भेजी जाती है। bank.com के लिए एक कुकी notbank.com को भेजी जाती है।
Cookie::createFromHeaderString() भी Set-Cookie Domain= को प्रतिक्रिया होस्ट के विरुद्ध किसी जाँच के बिना कॉपी करता है। attacker.test से Domain=victim.internal के साथ addFromResponse उस कुकी को संग्रहीत करता है और बाद में इसे victim.internal से जोड़ता है।
एक ऐप जो डिफ़ॉल्ट जार के साथ Cake\Http\Client का उपयोग एक से अधिक होस्ट पर करता है, एक पार्टनर सेशन कुकी को सफ़िक्स-भ्रमित सहोदर को लीक कर सकता है, या हमलावर URL प्राप्त करने के बाद आंतरिक होस्ट पर एक कुकी प्लांट कर सकता है। other.com मेल नहीं खाता। यह ब्राउज़र कुकी बग नहीं है। स्टॉक cakephp/app स्वयं दूसरे होस्ट को कॉल नहीं करता।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | कुकी लीक / प्लांट (regex सफ़िक्स डोमेन मैच) |
| पहुँच | रिमोट (ऐप होस्ट्स पर Http Client जार का उपयोग करता है) |
| CWE | CWE-565, CWE-201 |
| CVSS | उच्च: 8.2 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N |
| उत्पाद | CakePHP |
| प्रभावित | 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63) |
| प्रमाणीकरण | ऐप होस्ट्स पर डिफ़ॉल्ट कुकी जार के साथ Cake\Http\Client का उपयोग करता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
एक ऐसे एप्लिकेशन की आवश्यकता है जो एक से अधिक होस्ट पर Cake\Http\Client कुकीज़ रखता है (OAuth, वेबहुक, उपयोगकर्ता-प्रदत्त URL, दूसरा API)।
| विशेषाधिकार | विधि / सिंक | लैब-प्रमाणित या अनुमानित |
|---|---|---|
| संग्रहीत कुकी को सफ़िक्स-भ्रमित सहोदर को लीक करना | api.partner.com डोमेन वाली कुकी के बाद https://evilapi.partner.com/ के लिए CookieCollection::addToRequest | लैब-प्रमाणित। अनुरोध Cookie sid=SECRET है। RFC 6265 मेल नहीं खाएगा |
| पंजीकरण योग्य सफ़िक्स के लिए समान लीक | कुकी डोमेन bank.com, अनुरोध होस्ट notbank.com | लैब-प्रमाणित। अनुरोध Cookie sid=SECRET है |
| नकारात्मक नियंत्रण | अनुरोध होस्ट other.com | लैब-प्रमाणित। कोई Cookie हेडर नहीं |
| आंतरिक होस्ट के लिए कुकी प्लांट करना | https://attacker.test/ से Set-Cookie: sid=x; Domain=victim.internal का addFromResponse | लैब-प्रमाणित। संग्रहीत डोमेन victim.internal है; उस होस्ट को अगला अनुरोध sid=x भेजता है |
| अगली Client कॉल पर सेशन फिक्सेशन / चोरी किया गया पार्टनर सेशन | प्लांटेड या लीक किया गया sid API सेशन के रूप में उपयोग किया गया | अनुमानित। लैब Cookie हेडर ओरेकल पर रुकती है |
| समान-होस्ट भेजना अभी भी काम करता है | कुकी डोमेन api.partner.com से होस्ट api.partner.com | लैब-प्रमाणित। अपेक्षित, बग नहीं |
इस अवशेष पर बंद: other.com मेल नहीं खाता। ब्राउज़र कुकी जार यह बग नहीं हैं। कोई शेल नहीं। स्केलेटन ऐप पर अनप्रमाणित RCE नहीं।
मैंने GHSA-2qh5, GHSA-fxf7, GHSA-vjqc, और 5.4.2 filename= नोट के बाद cakephp/cakephp 5.4.2 को पिन किया। Http Client कुकी मैचिंग एक regex सफ़िक्स है:
$pattern = '/' . preg_quote($domain, '/') . '$/';
if (!preg_match($pattern, $host)) {
continue;
}
addFromResponse अनुरोध होस्ट को केवल डिफ़ॉल्ट के रूप में पास करता है। Set-Cookie से एक Domain= एट्रिब्यूट इसे ओवरराइट करता है और संग्रहीत किया जाता है।
पहले से दर्ज गलत मोड़: इसे ब्राउज़र कुकी बग मानना; यह दावा करना कि other.com भी मेल खाता है; Cookie हेडर ओरेकल को ATO तक बढ़ाना बिना ऐसे ऐप के जो होस्ट्स पर जार का उपयोग करता हो। नाटक: एक रिवर्स शेल।
python3 cakephp-cookie-suffix-Abraxas-Labs.py
या
cd lab
./run.sh
PHP 8.3 में Git क्लोन टैग 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)। 127.0.0.1:19420 पर लूपबैक ओरेकल HTTP। कोई अतिरिक्त HTTP ओरिजिन आवश्यक नहीं; ओरेकल पिन से CookieCollection चलाता है।
sid=SECRET डोमेन api.partner.com जोड़ें। addToRequest https://evilapi.partner.com/ -> Cookie: sid=SECRET।https://other.com/ -> कोई Cookie हेडर नहीं।https://api.partner.com/ अभी भी sid=SECRET भेजता है।bank.com -> https://notbank.com/ sid=SECRET भेजता है।https://attacker.test/ से Set-Cookie: sid=x; Domain=victim.internal; Path=/ के साथ addFromResponse। अगला https://victim.internal/ sid=x भेजता है।SUCCESS cakephp-cookie-suffix suffix-leak=yes control-other=yes plant-domain=yes how=cakephp-5.4.2 CAKEPHP-COOKIE-SUFFIX-WITNESS
RFC 6265 डोमेन-मैच (host === domain || str_ends_with($host, '.' . $domain))। जब Domain छोड़ा जाए तो होस्ट-ओनली कुकीज़। अनुरोध होस्ट से डोमेन-मैच न करने वाले Domain को अस्वीकार करें। सार्वजनिक सफ़िक्स को अस्वीकार करें।
887b641de9f7aba06071f98f17edcbc573cbcf63)src/Http/Cookie/CookieCollection.php · src/Http/Cookie/Cookie.phpGNU Affero GPL v3.0। LICENSE देखें। केवल लूपबैक लैब। कोई वारंटी नहीं।