[解説] n8nのHTMLプレビュー機能におけるDOM-Based XSS脆弱性(GHSA-p3rg-hrf9-w9gj / CVE-2026-65597)について
はじめに
日本のフロントエンドエンジニアの皆さん、こんにちは。今回は、Webアプリケーションの自動化ツールとして利用されるn8nのHTMLプレビュー機能において発見された、重要なセキュリティ脆弱性について解説します。GHSA-p3rg-hrf9-w9gj(CVE-2026-65597)として識別されるこの脆弱性は、深刻度「高」と評価されており、皆さんの開発環境や運用中のシステムに直接的な影響を及ぼす可能性があります。具体的にどのような問題で、どう対策すべきか、フロントエンドの視点から見ていきましょう。
脆弱性の概要:DOM-Based XSSとは?
この脆弱性は、n8nのHTMLプレビュー機能が、ワークフローの実行結果を`iframe`内に表示する際に発生します。問題の核心は、この`iframe`が`srcdoc`属性を利用しつつも、セキュリティ強化のための`sandbox`属性が適切に設定されていなかった点にあります。
通常、`iframe`の`sandbox`属性は、埋め込まれたコンテンツが親ドキュメントとの相互作用を制限するための重要なセキュリティ機構です。例えば、スクリプトの実行を禁止したり、フォームの送信を制限したり、オリジンを分離したりできます。しかし、n8nのプレビュー機能ではこの設定が不足していたため、攻撃者はサニタイズ(セキュリティフィルター)を迂回するような悪意のあるスクリプトを挿入し、それをn8nエディタと同じオリジンで実行させることが可能でした。これが、**DOM-Based XSS**と呼ばれる脆弱性の典型的なパターンです。
具体的な影響と悪用シナリオ
この脆弱性が悪用されると、以下のような深刻な影響が考えられます。
もし被害者が、この悪意のあるコードが埋め込まれたHTMLプレビューを開いてしまった場合、実行されたスクリプトは被害者のセッション情報を利用して、n8nの認証済みAPIを不正に呼び出す可能性があります。これにより、攻撃者は被害者になりすまして、n8nのワークフローを操作したり、機密情報を取得したり、様々な不正行為を行うことができてしまいます。特に、`global:member`以上の権限を持つアカウントが悪用された場合、その影響は非常に大きくなるでしょう。
フロントエンド開発者として、ユーザーのセッションハイジャックや、CSRFに似たAPI不正操作の可能性をイメージすると、その危険性がより明確になるかと思います。
フロントエンドエンジニアとして考えるべきこと:`iframe`とCSPの重要性
今回の件は、`iframe`を安全に利用することの重要性を改めて示しています。特にユーザーが生成したコンテンツを`iframe`内で表示する際には、必ず`sandbox`属性を適切に設定し、必要最小限の権限のみを与えるようにしましょう。例えば、`sandbox="allow-scripts allow-same-origin"`のように、必要な機能だけを許可し、それ以外はブロックする運用が基本です。
また、Webアプリケーション全体のセキュリティ強化には、**Content Security Policy (CSP)**の導入も非常に有効です。CSPは、ウェブサイトが読み込むリソース(スクリプト、スタイルシート、画像など)のオリジンを制限することで、XSS攻撃などによって悪意のあるリソースがロードされるのを防ぎます。n8nのケースでも、緊急時の回避策としてCSPの適用が挙げられていますね。
推奨される対応策:今すぐアップグレードを!
この脆弱性は、n8nの以下のバージョンで修正済みです。セキュリティを確保するため、**これらのバージョン以降に速やかにアップグレードすることが強く推奨されます。**
<ul><li>`1.123.64`</li><li>`2.29.8`</li><li>`2.30.1`</li></ul>
緊急時の回避策(一時的な対応)
もしすぐにアップグレードが難しい場合は、以下の暫定的な対策を検討してください。ただし、これらは一時的なものであり、完全なリスク軽減にはならないことに注意してください。
<ul><li>n8nインスタンスへのアクセスを、完全に信頼できるユーザーのみに制限する。</li><li>環境変数`N8N_CONTENT_SECURITY_POLICY`を設定し、インラインスクリプトの実行をブロックするContent Security Policy (CSP) を適用する。(例: `default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';` など、厳格なポリシーを検討してください)</li><li>外部から制御された入力(信頼できないユーザーが提供するデータなど)をHTMLノードやバイナリHTMLプレビューでレンダリングするワークフローを、信頼できないユーザーに公開しないようにする。</li></ul>
まとめ
n8nのHTMLプレビュー機能におけるDOM-Based XSS脆弱性は、認証情報の不正利用という深刻なリスクをはらんでいます。フロントエンドエンジニアとして、`iframe`の`sandbox`属性やCSPなどのセキュリティ対策の重要性を再認識し、皆さんの開発するアプリケーションにおいても適切な防御策を講じていきましょう。そして何よりも、提供元から提供されるセキュリティパッチを速やかに適用することが、最も確実な対策です。ぜひ早急なアップグレードをご検討ください。