[緊急警報] Typebotの評価ブロックにおける高リスクXSS脆弱性 (CVE-2026-28445)
脆弱性の概要と深刻度
本日、Typebotの評価ブロック機能における深刻なXSS(クロスサイトスクリプティング)脆弱性「GHSA-6m7c-xfhp-p9fh / CVE-2026-28445」が公表されました。CVSSスコア8.7の「高」リスクと評価されており、日本のフロントエンドエンジニアの皆さんにとって見過ごせない内容です。
この脆弱性は、Typebotの「評価ブロック」内でカスタムアイコンを設定する機能に存在します。攻撃者がこの機能を利用して悪意のあるHTMLやSVGコードを埋め込むことで、アプリケーションのプレビュー時にそのコードが実行されてしまい、ユーザーのセッション情報が盗まれる可能性があります。最悪の場合、アカウント乗っ取りや権限昇格といった甚大な被害に繋がるため、迅速な対応が不可欠です。
具体的な技術的メカニズム
この脆弱性の核心は、Typebotの評価ブロックにおける`customIcon.svg`フィールドの処理方法にあります。ユーザーが入力したHTMLやSVGデータが、Solid.jsの`innerHTML`ディレクティブを通じて、適切なサニタイズ(無害化)なしに直接DOMに挿入されてしまう点が問題です。
フロントエンドエンジニアであればご存知の通り、`innerHTML`は強力なAPIである一方で、悪意のあるコンテンツが挿入されるとXSS脆弱性の温床となりやすい危険な特性を持っています。今回のケースでは、攻撃者はカスタムアイコンとして`<script>alert(document.cookie)</script>`のようなJavaScriptコードを含むSVGをアップロードするだけで、そのコードを被害者のブラウザ上で実行させることが可能になります。
さらに深刻なのは、Typebotが備える「`isUnsafe` Web Workerサンドボックス」というセキュリティ機構が、この`innerHTML`によるXSSを完全に迂回してしまう点です。Web Workerサンドボックスは通常、分離された環境でスクリプトを実行することで安全性を高めますが、`innerHTML`はメインスレッドで直接DOMを操作するため、サンドボックスによる防御が機能しません。これにより、本来守られるべき認証コンテキストが危険に晒されます。
攻撃シナリオと潜在的影響
この脆弱性は主にTypebotの「ビルダープレビュー」機能(開発環境)で悪用されることが想定されます。具体的な攻撃シナリオとしては、以下のケースが考えられます。
1. **悪意のあるTypebotのインポート**: 攻撃者が不正なカスタムアイコンを含むTypebotのテンプレートを作成し、ユーザーがそれをインポートしてプレビューを開いた際にXSSが発動する。
2. **共同作業者による不正な設定**: ワークスペースの共同作業者が(悪意を持って、あるいはアカウントが乗っ取られて)評価ブロックのカスタムアイコンを不正なSVGに設定し、他の共同作業者がプレビューを開いた際にXSSが発動する。
被害者がプレビュー画面を開くと、埋め込まれた悪性コードがユーザーの認証コンテキストで実行されます。これにより、攻撃者は以下の重大な被害を引き起こす可能性があります。
フロントエンドエンジニアとして取るべき対策
この脆弱性への対策は、フロントエンド開発におけるセキュリティのベストプラクティスを再確認する良い機会となります。
1. **最も効果的な対策: `dompurify`によるサニタイズの徹底**: 最も推奨される対策は、カスタムアイコンのSVGデータを`innerHTML`でレンダリングする直前に、`dompurify`のような信頼性の高いライブラリを使用してサニタイズを行うことです。`dompurify`は、既知のXSSベクトルを排除し、安全なHTML/SVGのみを許可する強力な機能を提供します。これにより、どのような経路でデータが入ってきても、レンダリング時に安全な形に変換されます。
2. **入力検証の強化**: TypebotのスキーマやAPIレベルでSVGコンテンツの入力検証(バリデーション)を追加することも有効です。ただし、これは新規のデータにのみ適用されるため、既存の不正なデータに対する防御としては不十分です。そのため、レンダリング時のサニタイズと併用することで、より強固な防御が実現できます。
3. **既存コードの監査**: 皆さんのプロジェクトや利用している他のコンポーネントで、ユーザー入力や外部からのデータが`innerHTML`を通じてDOMに直接挿入されている箇所がないか、今一度コードベース全体を監査することを強くお勧めします。同様の脆弱性が潜んでいる可能性を排除するためです。
4. **Typebotのアップデート**: Typebotを利用している場合は、脆弱性が修正された最新バージョンがリリースされ次第、速やかにアップデートを適用してください。
まとめ
今回のTypebotの脆弱性は、`innerHTML`のようなDOM操作APIを扱う際のセキュリティ上のリスクと、信頼できるサニタイズライブラリの重要性を改めて浮き彫りにしました。特に、クライアントサイドのサンドボックス機構であっても、メインスレッドでの不適切なDOM操作には無力であるという教訓は、フロントエンド開発者にとって深く心に留めておくべきでしょう。
安全なWebアプリケーション開発のためには、常に最新の脆弱性情報を追跡し、入力検証と出力サニタイズを徹底することが不可欠です。この記事が、皆さんのプロジェクトのセキュリティ強化の一助となれば幸いです。