
📌 概要
ERPNext (v15.67.0) / Frappe (v15.72.4) のブログモジュールに、保存型クロスサイトスクリプティング (XSS) の脆弱性が存在します。ブログ記事を作成または編集できる認証済みユーザーは、content フィールドに細工した HTML/JavaScript を注入できます。このペイロードは保存され、ブログ記事ページを閲覧したすべてのユーザーのブラウザで実行されます。これにより、任意のスクリプト実行、情報漏えい、サービス拒否、その他のクライアントサイド攻撃が可能になります。管理者権限は厳密には必要ありません — ブログ記事の作成・編集権限を持つユーザーであれば誰でも悪用できます。
脆弱性の種類: 保存型クロスサイトスクリプティング (CWE‑79)
影響を受ける製品: ERPNext / Frappe
影響を受けるバージョン (報告時点):
影響を受けるコンポーネント: ERPNext ブログモジュール
ルート: /app/blog-post/<blog_name>
脆弱なフィールド: content (ブログ記事の作成・編集フォーム)
攻撃種別: リモート (認証とブログ記事作成権限が必要)
深刻度: 高 (クライアントサイドでのコード実行、データ窃取、セッションハイジャックの可能性)
推定 CVSS v3.1 スコア: 7.5 (高) — 推定値。最終スコアは正式な採点機関が算出する必要があります
ステータス: 未修正 (報告時点)
発見者: Mohammed Aloli
発見日: 指定なし
CVE ID: CVE-2025-56379
認可された環境・ラボ環境でのみテストしてください。所有していない、または明示的なテスト許可を得ていないシステムに対して実行しないでください。
再現手順
ブログ記事の作成・編集権限を持つユーザーとして、対象の ERPNext インスタンスに認証します。
ブログの記事作成・編集ルートに移動します。例:
/app/blog-post/<blog_name>
content フィールドにペイロードを挿入し、記事を保存します:
別のユーザー (または新しいブラウザの同じユーザー) としてブログ記事ページ (/app/blog-post/<blog_name>) を開きます。ペイロードは閲覧者のブラウザで実行されます (ここでは alert("xss"))。
注記: PoC では単純な onerror アラートを使用しています。実際の攻撃では Cookie の窃取、被害者に代わった操作、リモートスクリプトの読み込みなどが可能です (CSP と Cookie フラグに依存します)。
ブログ記事を作成・編集できる攻撃者は、content フィールドに悪意のあるスクリプトを保存します。管理者を含むすべてのユーザーがブログ記事ページを訪問すると、攻撃者のスクリプトがそのユーザーのブラウザコンテキストで実行されます。結果として、セッション窃取 (Cookie が HttpOnly でない場合)、被害者のセッションでの強制操作、攻撃者がアクセスできるページからのデータ漏えい、UI リドレス攻撃、クライアントサイドコンポーネントの DoS などが発生する可能性があります。
content HTML を入力時にサニタイズし、出力時にエスケープします (on* 属性、javascript: URI、<script>、`` などを除去)。十分にメンテナンスされたライブラリを使用することを推奨します。<p>、<b>、<i>、<ul>、<li>、厳格な href 検証付きの <a href>)。インラインイベントハンドラは禁止します。'unsafe-inline' を避け、必要に応じて nonce/ハッシュベースのスクリプト許可を使用)。HttpOnly にし、適切な SameSite 属性を設定して、Cookie 窃取と CSRF 類似リスクを軽減します。https://github.com/frappe/erpnexthttps://github.com/frappe/frappehttps://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html著者 : Mohammed Aloli
この文書は、防御、是正、および啓発のみを目的としています。所有していない、またはテストの明示的な許可を得ていないシステムに対して、この脆弱性を悪用しようとしないでください。ERPNext/Frappe を運用している場合は、修正を適用し、サニタイズを実施し、上記の緩和ガイダンスに従ってください。