
🔐 CVE-2026-57821 - Apache Fineract SQL Injection Toolkit 📚 نصّان بلغة بايثون للاختبار الأمني المصرح به: verifier.py (كشف آمن دون استخراج) وexploit.py (تحليل عميق). يدعم 11 نوعًا من قواعد البيانات. مثالي لفهم ثغرات حقن SQL. اختبارات قانونية فقط ⚠️ لأغراض تعليمية وبحثية فقط.

⚠️ إشعار قانوني وأخلاقي
تم توفير هذه الأداة لأغراض التعليم والتدريب واختبار الأمان المصرح به فقط.
الاستخدام غير المصرح به ضد أي نظام دون إذن كتابي صريح غير قانوني وينتهك قوانين جرائم الحاسوب.
لا يتحمل المؤلف أي مسؤولية عن إساءة الاستخدام أو الضرر.
أنت وحدك المسؤول عن أفعالك.
CVE-2026-57821 هي ثغرة حقن SQL تم اكتشافها في نقطة نهاية واجهة برمجة التطبيقات الخاصة بقائمة المكاتب في Apache Fineract.
| السمة | التفاصيل |
|---|---|
| نقطة النهاية | /api/v1/offices |
| المعامل | orderBy |
| الطريقة | GET |
| المصادقة المطلوبة | نعم (للمستخدمين المصادق عليهم فقط) |
| الإصدارات المتأثرة | Apache Fineract ≤ 1.14.0 |
| الإصدار المُصحَّح | Apache Fineract 1.15.0 |
توجد الثغرة لأن المعامل orderBy يُدمج مباشرة في استعلامات SQL دون تطهير مناسب. يمكن للمهاجم الذي يمتلك بيانات اعتماد صالحة حقن استعلامات فرعية بين قوسين () في المعامل orderBy.
لماذا يتجاوز هذا الإصلاحات السابقة:
ColumnValidator لتنظيف جمل ORDER BYORDER BYمثال على متجه الهجوم:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
| التأثير | الوصف |
|---|---|
| سرقة البيانات | يمكن لحقن SQL الأعمى القائم على الوقت استخراج محتوى حساس من قاعدة البيانات |
| رفض الخدمة | يمكن للاستعلامات الثقيلة استنزاف موارد مجموعة الاتصالات |
| كشف المعلومات | يمكن للتقنيات القائمة على الأخطاء كشف بنية قاعدة البيانات وبياناتها |
تقوم هذه الأداة تلقائيًا باكتشاف وتكييف تقنيات الاستغلال لما يصل إلى 11 خلفية قاعدة بيانات مختلفة:
يوفر هذا المشروع سكربتين بلغة Python لسيناريوهات تقييم أمان مختلفة:
verifier.py – أداة تحقق آمنة وحد أدنىالغرض: إثبات وجود الثغرة بسرعة دون استخراج أي بيانات.
ما تقوم به:
VULNERABLE أو NOT VULNERABLE لكل نوع قاعدة بيانات✅ المزايا:
📋 حالة الاستخدام: تقييم أولي لتحديد ما إذا كان الهدف معرضًا للثغرة.
exploit.py – محلل أمان شاملالغرض: استغلال الثغرة بالكامل لاستخراج معلومات قاعدة البيانات.
ما يقوم به:
✅ المزايا:
📋 حالة الاستخدام: تحليل أمان متعمق بعد تأكيد الثغرة.
🔍 الفرق الرئيسي: يخبرك
verifierPoC.pyما إذا كانت الثغرة موجودة؛ بينما يُظهر لكexploit.pyما الذي يمكن استخراجه. كلاهما يؤدي أدوارًا متميزة ومتكاملة في سير عمل تقييم الأمان.
requestspip install requests
قم بتحرير المتغيرات التالية في أعلى كلا السكربتين:
1️⃣ exploit.py - الفحص العميق
python3 exploit.py
المخرجات المتوقعة:
CVE-2026-57821 - Apache Fineract Vulnerability Verifier
══════════════════════════════════════════════════════════════════════════════════════
@tc4dy is here :) Good Luck!
CONNECTION SUCCESS
BASELINE: 0.234s
STARTING VULNERABILITY VERIFICATION
VERIFICATION RESULTS
PostgreSQL: VULNERABLE
MySQL: NOT VULNERABLE
MariaDB: NOT VULNERABLE
Oracle: NOT VULNERABLE
MSSQL: NOT VULNERABLE
CONCLUSION: TARGET IS VULNERABLE (CVE-2026-57821 CONFIRMED)
التفسير: إذا ظهرت VULNERABLE لأي نوع قاعدة بيانات، فإن الهدف متأثر.
درجة CVSS المقياس القيمة درجة أساسية CVSS v3.1 8.1 (عالية) المتجه CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H متجه الهجوم شبكة الامتيازات المطلوبة منخفضة تفاعل المستخدم لا شيء درجة EPSS
0.29% (احتمالية الاستغلال خلال 30 يومًا)
تخطيط CWE
CWE‑89: تحييد غير صحيح للعناصر الخاصة المستخدمة في أمر SQL ('حقن SQL')
لماذا تعمل الحمولة
الكود المعرض للثغرة في Apache Fineract 1.14.0:
// Simplified vulnerable logic
String orderBy = request.getParameter("orderBy");
if (ColumnValidator.isValid(orderBy)) {
// VALIDATOR FAILS FOR: "(SELECT ...)"
// Only checks against simple column names
String sql = "SELECT * FROM offices ORDER BY " + orderBy;
// Executes query with user input directly
}
مثال على حمولة المهاجم:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
استعلام SQL الناتج:
SELECT * FROM offices ORDER BY (SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)
يتحقق ColumnValidator من أسماء الأعمدة لكنه يفوّت الاستعلام الفرعي المتداخل، مما يسمح بتنفيذ SQL عشوائي.
| السمة | التفاصيل |
|---|
| المكتشف / المُبلِّغ | Terence Monteiro (فريق Apache Fineract) |
| تاريخ الإفصاح العام | 14 يوليو 2026 |
| الإصدار المُصحَّح | Apache Fineract 1.15.0 |
| الإعلان الرسمي | Apache Mailing List |
| الإصلاح على GitHub | PR #6048 |
| قاعدة البيانات | طريقة الاكتشاف | تقنية الاستغلال |
|---|
| PostgreSQL | قائم على الوقت (pg_sleep) | أعمى زمني |
| MySQL | قائم على الوقت (SLEEP) | أعمى زمني |
| MariaDB | قائم على الوقت + @@version_comment | أعمى زمني |
| MSSQL | قائم على الأخطاء (فشل CONVERT) | قائم على الأخطاء |
| Oracle | قائم على الوقت (DBMS_LOCK.SLEEP) | أعمى زمني |
| SQLite | استعلام ثقيل (انضمام ديكارتي) | أعمى زمني (ثقيل) |
| Firebird | استعلام ثقيل (انضمام ديكارتي) | أعمى زمني (ثقيل) |
| DB2 | استعلام ثقيل (انضمام ديكارتي) | أعمى زمني (ثقيل) |
| Informix | استعلام ثقيل (انضمام ديكارتي) | أعمى زمني (ثقيل) |
| H2 | استعلام ثقيل (انضمام ديكارتي) | أعمى زمني (ثقيل) |
| غير معروف (عام) | الرجوع إلى PostgreSQL | أعمى زمني |
| المتغير | الوصف | الافتراضي |
|---|
TARGET | عنوان URL لواجهة Fineract API | http://localhost:8080/fineract-provider/api/v1/offices |
USERNAME | اسم مستخدم مصادقة API | mifos |
PASSWORD | كلمة مرور مصادقة API | password |
TENANT_ID | معرّف المستأجر | default |
BASE_SLEEP | مدة النوم لاختبارات الوقت (exploit.py) | 6 |
SLEEP_SECONDS | مدة النوم لاختبارات الوقت (verifier.py) | 5 |
TIMEOUT | مهلة طلب HTTP | 25 (exploit) / 15 (verifier) |
MAX_RETRIES | عدد مرات إعادة المحاولة للطلبات الفاشلة | 2 |
| الإجراء | الأولوية |
|---|
| الترقية إلى Apache Fineract 1.15.0+ | 🔴 حرجة |
| تطبيق تصحيح PR #6048 | 🔴 حرجة |
قاعدة WAF: حظر orderBy الذي يحتوي على (SELECT أو SLEEP( أو pg_sleep( أو WAITFOR | 🟠 عالية |
مراقبة السجلات بحثًا عن orderBy مع أقواس أو كلمات استعلام فرعي | 🟠 عالية |
| مراقبة مجموعة اتصالات قاعدة البيانات لاكتشاف استنزاف الموارد | 🟡 متوسطة |