
CVE-2026-100671 के लिए केवल-स्थानीय प्रूफ-ऑफ-कॉन्सेप्ट सत्यापनकर्ता, जो लूपबैक लक्ष्यों के विरुद्ध Grav Twig पेज-कैश सत्र-कुकी प्रकटीकरण और पुनःप्ले को पुनरुत्पादित करता है।
Grav 2.0.25 में ठीक किए गए Grav content-Twig/page-cache सत्र अधिग्रहण के लिए न्यूनतम, केवल-स्थानीय सत्यापनकर्ता।
सलाहकार:
exploit.py जानबूझकर लूपबैक लक्ष्यों तक सीमित है:
127.0.0.1::1localhostयह रिमोट होस्ट्स को अस्वीकार करता है, केवल लूपबैक रीडायरेक्ट्स का पालन करता है, Python मानक लाइब्रेरी HTTP क्लाइंट्स का उपयोग करता है, अनुरोध टाइमआउट लागू करता है, और कभी भी bearer टोकन, कुकीज़, या प्रतिक्रिया निकायों को प्रिंट नहीं करता है।
केवल उस Grav इंस्टेंस के विरुद्ध उपयोग करें जिसका आप स्वामी हैं या जिसका परीक्षण करने के लिए आपको स्पष्ट रूप से अधिकृत किया गया है। स्क्रिप्ट स्थानीय लैब में एक सार्वजनिक प्रूफ पेज बनाती है। यदि लैब रन के बीच सामग्री रखती है तो परीक्षण के बाद उस पेज को हटा दें।
get_cookie() सर्वर-साइड पर विज़िटिंग एडमिनिस्ट्रेटर की सत्र कुकी पढ़ता है।पेज-राइट खाते को केवल प्रलेखित निम्न-विशेषाधिकार राइट पथ की आवश्यकता होती है। इसे api.pages.read, admin.*, या सुपर-एडमिन एक्सेस की आवश्यकता नहीं है। पीड़ित एडमिन को केवल एक बार सार्वजनिक पेज पर जाना होता है।
2.0.19 से 2.0.24 तक: शिप किए गए डिफ़ॉल्ट content-Twig कॉन्फ़िगरेशन के साथ भेद्य।2.0.0 से 2.0.18 तक, और 1.7.x: केवल तब प्रभावित जब content Twig स्पष्ट रूप से सक्षम किया गया हो।2.0.25: ठीक किया गया।निम्नलिखित के साथ एक स्थानीय Grav लैब चलाएँ:
यह दो-फ़ाइल रिपॉज़िटरी Grav, PHP, प्लगइन्स, या खाते प्रदान नहीं करती है।
क्रेडेंशियल्स को पर्यावरण चर के माध्यम से सेट करें ताकि वे कभी स्रोत नियंत्रण में न आएँ:
export GRAV_BASE_URL=http://127.0.0.1:8080
export GRAV_WRITER_USERNAME=low
export GRAV_WRITER_PASSWORD='local-writer-password'
export GRAV_ADMIN_USERNAME=admin
export GRAV_ADMIN_PASSWORD='local-admin-password'
python3 exploit.py
बेस URL लूपबैक ही रहना चाहिए। डिफ़ॉल्ट रूट यादृच्छिक है। रन की तुलना करते समय एक निश्चित रूट चुना जा सकता है:
python3 exploit.py --route /cookie-proof-24
अपेक्षित भेद्य परिणाम:
page_create_status=201
admin_login_status=200
victim_page_status=200
attacker_page_status=200
cached_victim_cookie_visible_to_attacker=yes
admin_cookie_value_match=yes
replayed_cookie_api_status=200
result=VULNERABLE
जब अपेक्षित परिणाम पुनरुत्पादित होता है तो कमांड 0 के साथ बाहर निकलती है, जब यह पुनरुत्पादित नहीं होता तो 1, और सेटअप या ट्रांसपोर्ट त्रुटि के लिए 2।
Grav 2.0.25 के विरुद्ध वही कमांड चलाएँ:
python3 exploit.py --expect fixed
अपेक्षित ठीक किया गया व्यवहार: कोई हमलावर-दृश्यमान सत्र मान नहीं और कोई सफल सत्र रीप्ले नहीं। एक स्वच्छ ठीक किया गया परिणाम --expect fixed के साथ 0 के साथ बाहर निकलता है।
Grav 2.0.25 या बाद के संस्करण में अपग्रेड करें। पुराने परिनियोजन के लिए, सलाहकार इन अस्थायी नियंत्रणों को सूचीबद्ध करता है:
security.twig_content.process_enabled: false के साथ content Twig अक्षम करें; याsystem.pages.never_cache_twig: true सेट करें;HttpOnly, Secure, या SameSite को समाधान न मानें: भेद्य कुकी पढ़ना Twig रेंडरिंग के दौरान सर्वर-साइड पर होता है।
canhieu द्वारा रिपोर्ट किया गया। यह रिपॉज़िटरी पहले से सार्वजनिक सलाहकार के लिए एक पुनरुत्पादन सहायता है, न कि एक रिमोट स्कैनर या क्रेडेंशियल-हार्वेस्टिंग टूल।