
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. اتصال HTTPS إلى GitHub لا يزال مشفّرًا، لكن أي شهادة تُقبل. يمكن لقرين على المسار قراءة رمز OAuth الذي يرسله CLI، ثم قراءة وتغيير gists الخاصة بالضحية.
| المعرّف | 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). |
| المصادقة | MITM على المسار لـ gist CLI |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
المهاجم يجلس على المسار ويستولي على رمز GitHub.
CN=mitm.invalid كافية.Authorization: token .... تسجيل الدخول (gist --login) ورفع/سرد/حذف gist كلها تمر عبر http_connection. الرمز في ~/.gist ينتقل عبر ذلك المقبس.gist. 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 http_connection على 6.0.0:
if uri.scheme == "https"
connection.use_ssl = true
connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
6.1.0 هي VERIFY_PEER.
المختبر ذو الحلقة الراجعة هو عبارة عن بديل HTTPS وهمي لـ GitHub Enterprise بشهادة موقعة ذاتيًا. 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 ويكتب الشاهد. يفشل 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 وخطأ TLS الموقّع ذاتيًا على 6.1.0.
cd lab
./run.sh
استهدف فقط https://127.0.0.1:18210 (الحاوية 8443). يقوم run.sh بتثبيت gist 6.0.0 و6.1.0 من RubyGems، ويقدّم الـ stub داخل الحاوية، ثم يزيل الحزمة بالكامل. شهادة موقّعة ذاتيًا. لا يوجد GitHub حقيقي.
قم بترقية gem الخاص بـ gist إلى 6.1.0 أو أحدث.
lib/gist.rb v6.0.0 L466-L468