
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
http_connection OpenSSL::SSL::VERIFY_NONE सेट करता है। GitHub से HTTPS अभी भी एन्क्रिप्टेड रहता है, लेकिन कोई भी सर्टिफिकेट स्वीकार कर लिया जाता है। पथ पर मौजूद कोई सहकर्मी CLI द्वारा भेजे जाने वाले OAuth टोकन को पढ़ सकता है, फिर पीड़ित के gists को पढ़ और बदल सकता है।
| ID | CVE-2026-105221 |
| CWE | CWE-295 |
| CVSS | High: 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) |
| Product | gist |
| Affected | 4.0.0 through 6.0.0. Lab pin 6.0.0. Fixed in 6.1.0 (07ccc1a). |
| Auth | gist CLI का on-path MITM |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
हमलावर पथ पर बैठता है और GitHub टोकन ले लेता है।
CN=mitm.invalid वाला स्व-हस्ताक्षरित सर्टिफिकेट पर्याप्त है।Authorization: token ... पढ़ें। लॉगिन (gist --login) और gist अपलोड/सूची/हटाना सभी http_connection से गुजरते हैं। ~/.gist में मौजूद टोकन उसी सॉकेट पर सवार होता है।gist स्कोप वाला GitHub OAuth क्रेडेंशियल है। निजी gists, अपडेट, डिलीट।उन्हें नेटवर्क स्थिति चाहिए: शत्रुतापूर्ण Wi-Fi, एक प्रॉक्सी, बीच में एक बॉक्स। यह सर्वर के विरुद्ध अनधिकृत रिमोट 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