
مختبر + تقرير لـ CVE-2026-44166: اختطاف حساب OAuth2 مسبق في PocketBase عبر createData.email غير المصادق عليه
مجموعة مصادقة في PocketBase مع تمكين OAuth2 تسمح للعميل بتمرير كائن createData عند التسجيل. لا يتم التحقق من البريد الإلكتروني داخل createData مقابل البريد الإلكتروني الذي تحقق منه موفر OAuth2. يمكن لأي شخص لديه حساب على موفر مُكوّن تسجيل سجل يحمل بريدًا إلكترونيًا لشخص آخر، مرتبط بهوية OAuth2 الخاصة به.
مع موفر واحد مُكوّن، يتم حظر المالك الحقيقي. مع اثنين أو أكثر، يسجل المالك الدخول لاحقًا عبر موفر مختلف وينتهي به الأمر مشاركة الحساب مع المهاجم.
المتأثرة: < 0.22.42 و >= 0.30.0, < 0.37.4. تم الإصلاح في 0.22.42 و 0.37.4.
التنبيه: GHSA-pq7p-mc74-g65w. CWE-287. CVSS 4.0 6.1.
الكتابة الكاملة: WRITEUP.md
python fetch_binaries.py # pulls vulnerable 0.37.3 + patched 0.37.4 for your OS
python poc.py # pre-claim and lockout against the vulnerable build
python verify_fix.py 0.37.4 # same steps on the patched build, attacker gets evicted
بايثون 3.8+، مكتبة قياسية فقط. يتم تشغيل الإثبات (PoC) دون اتصال ضد موفر OAuth2 تجريبي مدمج، لذلك لا يوجد موفر هوية حقيقي أو هدف شبكي.
البناء الضعيف 0.37.3:
[1] Attacker token issued for: [email protected] (verified=False)
[2] Victim login: HTTP 400 -- Failed to authenticate.
[3] Attacker re-auth: [email protected] -- same record: True
البناء المُصحح 0.37.4:
[1] Attacker pre-claims: [email protected] verified=False id=...
[2] Victim login: SUCCESS verified=True id=... => victim owns the account
[3] Attacker re-auth: [email protected] id=... same-as-victim=False
للتعليم واختبار الأمان المصرح به: مختبرك الخاص، صناديق CTF و HTB، أهداف مكافآت الثغرات ضمن النطاق. المختبر يعمل دون اتصال ولا يلمس أي شيء لا تقوم بتشغيله بنفسك.
| الملف | الغرض |
|---|
WRITEUP.md | تحليل السبب الجذري، كلا نوعي الهجوم، المعالجة، الكشف |
fetch_binaries.py | يقوم بتنزيل ملفات 0.37.3 / 0.37.4 الثنائية لنظام التشغيل / البنية الخاصة بك |
mock_oauth2_server.py | موفر OAuth2 تجريبي صغير دون اتصال (رمز + معلومات المستخدم) |
poc.py | الاستغلال ضد البناء الضعيف |
verify_fix.py | يشغل نفس الخطوات على أي بناء ويبلغ عن النتيجة |