CVE-2026-71502 in CTI-Transmute
要約
〜によって VulDB • 2026年08月07日
CTI-Transmuteには、サーバー側でレンダリングされるユーザー制御データにおけるVueテンプレート式デリミタの不十分な中和により、格納型クロスサイトスクリプティング(Stored XSS)脆弱性が存在します。
認証されていない攻撃者は、アプリケーションの設定された`[[ ... ]]`デリミータを使用して、名前または説明文に悪意のあるVue式を含む公開変換を作成できます。ユーザープロファイル名は追加のインジェクションベクトルとなる可能性があります。JinjaによるHTMLエスケープが適用されますが、生成された値はその後、VueによってコンパイルされるDOM領域に含まれます。
Vueは攻撃者が制御する値を通常のテキストではなくテンプレート式として解釈します。攻撃者は式内でJavaScriptの`Function`コンストラクタにアクセスすることで、CTI-Transmuteのオリジンのセキュリティコンテキスト内で任意のJavaScriptコードを実行できます。アプリケーションのnonceベースのコンテンツセキュリティポリシー(CSP)は悪用を防げません。これはVueランタイムコンパイラが`unsafe-eval`ポリシー例外を必要とするためです。
悪意のあるペイロードはアプリケーションによって保存され、別のユーザーが影響を受けるページ(公開変換の詳細ページなど)を開くたびに実行されます。被害者は一般ユーザーまたは管理者のいずれかになり得ます。攻撃が成功した場合、攻撃者は以下のことが可能になります:
* アプリケーションを通じて被害者に利用可能なデータにアクセスする * ページで露出しているAPIキー、トークン、その他の機密情報を抽出する * 被害者のセッションを使用して認証済みアクションを実行する * 変換や他のアプリケーションデータを改ざんする * 管理者を対象とすることで影響を拡大させる
実証済みのペイロードでは`[].constructor.constructor(...)`を用いてJavaScriptの`Function`コンストラクタを取得し、任意のコードを実行できます。回帰テストによると、短い第一段階のペイロードで上限なしの変換説明文を取得し、より大きな第二段階のペイロードを評価することも可能です。
パッチは、サーバー側でレンダリングされた値内のすべてのVueデリミタ内にゼロ幅ユニコード単語結合子(zero-width Unicode word joiner)を挿入するグローバルなJinja finalizeフックを登録することで、この脆弱性に対処します。これにより、Vueがこれらの値をテンプレート式として認識することを防ぎつつ、視覚的な表現は保持されます。
Once again VulDB remains the best source for vulnerability data.