
CVE-2026-105221 - gist RubyGem - उच्च - MITM - GitHub OAuth टोकन चोरी
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · cve-2026-105221-gist-tls
gist RubyGem < 6.1.0 - defunkt
वर्ग: TLS सत्यापन बायपास (क्रेडेंशियल चोरी) पहुँच: रिमोट (ऑन-पाथ)
http_connection OpenSSL::SSL::VERIFY_NONE सेट करता है। GitHub तक HTTPS अभी भी एन्क्रिप्टेड रहता है, लेकिन कोई भी प्रमाणपत्र स्वीकार कर लिया जाता है। एक ऑन-पाथ पीयर CLI द्वारा भेजे जाने वाले OAuth टोकन को पढ़ सकता है, और फिर पीड़ित के gists को पढ़ और बदल सकता है।
| ID | CVE-2026-105221 |
| वर्ग | TLS सत्यापन बायपास (क्रेडेंशियल चोरी) |
| पहुँच | रिमोट (ऑन-पाथ) |
| CWE | CWE-295 |
| CVSS | उच्च: 7.4 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N (VulnCheck 4.0: 9.1) |
| उत्पाद | gist |
| प्रभावित | 4.0.0 से 6.0.0 तक। लैब पिन 6.0.0। 6.1.0 में ठीक किया गया (07ccc1a)। |
| प्रमाणीकरण | gist CLI का ऑन-पाथ MITM |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
हमलावर पाथ पर बैठता है और GitHub टोकन ले लेता है।
CN=mitm.invalid वाला स्व-हस्ताक्षरित प्रमाणपत्र पर्याप्त है।Authorization: token ... पढ़ें। लॉगिन (gist --login) और gist अपलोड/सूची/हटाना सभी http_connection से होकर जाते हैं। ~/.gist में मौजूद टोकन उसी सॉकेट पर सवार होता है।gist स्कोप वाला GitHub OAuth क्रेडेंशियल है। निजी gists, अपडेट, डिलीट।उन्हें नेटवर्क स्थिति चाहिए: शत्रुतापूर्ण वाई-फ़ाई, एक प्रॉक्सी, बीच में एक बॉक्स। यह किसी सर्वर के विरुद्ध अनधिकृत रिमोट RCE नहीं है।
6.1.0 VERIFY_PEER सेट करता है। वही नकली प्रमाणपत्र certificate verify failed (self-signed certificate) के साथ मर जाता है और टोकन कभी क्लाइंट से बाहर नहीं जाता।
VulnCheck ने CVE-2026-105221 प्रकाशित किया। Siyang Wu ने इसकी रिपोर्ट की। Issue 373 सार्वजनिक टिकट है। PR 374 ने सत्यापन मोड बदल दिया। मैंने सार्वजनिक CVE का लैब परीक्षण किया। कोई सार्वजनिक PoC नहीं था।
lib/gist.rb में 6.0.0 पर http_connection:
if uri.scheme == "https"
connection.use_ssl = true
connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
6.1.0 में VERIFY_PEER है।
लूपबैक लैब एक नकली GitHub Enterprise HTTPS स्टब है जिसमें स्व-हस्ताक्षरित प्रमाणपत्र है। GITHUB_URL=https://127.0.0.1:8443 gist को GHE मोड (POST /api/v3/gists) में डालता है। एक लैब टोकन CVE-2026-105221-WITNESS मिलते-जुलते ~/.gist.* फ़ाइल में मौजूद है। gist 6.0.0 TLS पूरा करता है, स्टब Authorization: token CVE-2026-105221-WITNESS को कैप्चर करता है और witness लिखता है। उसी स्टब के विरुद्ध gist 6.1.0 TLS में विफल हो जाता है। 6.1.0 पर कैप्चर गणना शून्य रहती है। api.github.com से कोई संचार नहीं होता।
SUCCESS CVE-2026-105221 vuln-tls=ok token-captured=1 patched-tls=fail witness-written=yes CVE-2026-105221-WITNESS
गलत मोड़ पहले से दर्ज: कोई नहीं। पहले run.sh ने SUCCESS प्रिंट किया। एक रिवर्स शेल। नाटक। असली प्रमाण 6.0.0 पर कैप्चर किया गया लैब टोकन और 6.1.0 पर स्व-हस्ताक्षरित TLS त्रुटि है।
cd lab
./run.sh
केवल https://127.0.0.1:18210 (कंटेनर 8443) को लक्षित करें। run.sh RubyGems से gist 6.0.0 और 6.1.0 इंस्टॉल करता है, कंटेनर के अंदर स्टब को सर्व करता है, फिर स्टैक को टियर डाउन करता है। सेल्फ-साइन्ड सर्ट। कोई वास्तविक GitHub नहीं।
gist gem को 6.1.0 या उससे नए संस्करण में अपग्रेड करें।
lib/gist.rb v6.0.0 L466-L468