Chrome DevTools での自己 XSS 攻撃の防御

Wolfgang Beyer
Wolfgang Beyer

自己 XSS 攻撃とは

自己 XSS(自己クロスサイト スクリプティング)はソーシャル エンジニアリング攻撃の一種で、ユーザーを騙してウェブブラウザで悪意のあるコードを実行させます。ウェブ アプリケーションの脆弱性を利用して攻撃者が悪意のあるコードを挿入できるようにする通常の XSS 攻撃とは異なり、自己 XSS 攻撃は潜在的なコード実行アクションに依存します。

自己 XSS 攻撃では通常、攻撃者がユーザーをだまして、ブラウザの DevTools コンソールに悪意のあるコードをコピーして貼り付けさせます。攻撃者は通常、なんらかの報酬を約束することでこれを実現します。例:

  • このコードによって、隠れた機能やバーチャル特典にアクセスできることを約束する。
  • そのコードがセキュリティ テストやバグの修正であるかのように装う。
  • そのコードが、自分の利益のためにウェブサイトにハッキングできると約束する。

コードを実行すると、攻撃者はアカウントを乗っ取ることができます。その結果、攻撃者は次のことが可能になります。

  • 名前、住所、クレジット カード番号などの個人情報を盗む。
  • 不正なメッセージやコメントを代理で投稿する。
  • ソーシャル メディア アカウントを管理します。
  • 他のユーザーにマルウェアを拡散する。

Chrome DevTools で自己 XSS 攻撃を軽減する仕組みを教えてください。

ユーザーが DevTools にコードを貼り付けて実行させるのは、本質的にリスクがあります。しかし、Chrome DevTools のコア機能の一つでもあります。そのため、潜在的な自己 XSS 攻撃を軽減することと、ウェブサイトのデバッグだけを行うデベロッパーの作業を妨げないことのバランスを取る必要がありました。

デベロッパーは通常、ウェブで見つけたコードをコピーして DevTools に貼り付けて、コードの動作を確認するまでは行いません。ほとんどの開発者は、Web の不完全なところで見つけたコードを実行するセキュリティリスクを非常に認識しています。

Chrome DevTools は、デベロッパーに作業内容の確認を信頼します。開発者がコードをコピーして貼り付けるときに、開発者の作業を遅らせたり注意をそらしたりするのは避けたいと考えています。

開発者でない方が自己 XSS 攻撃の被害に遭うリスクははるかに高くなると考えられます。Google は、ユーザーを守るため、危険と思われる行為を中断することは許容され、有益であると考えています。経験の浅いユーザーが DevTools にコードを貼り付けようとしていることを検出すると、Chrome DevTools が停止して警告が表示されます。

DevTools に自己 XSS 警告が表示されるのはどのような場合ですか?

DevTools では、ユーザー プロファイルのコンソール履歴に基づいて、非常にシンプルなヒューリスティックを使用して、自己 XSS 警告を表示するかどうかを決定します。

プロファイルのコンソール履歴に 5 つ以上のエントリがある場合、DevTools では警告やポップアップは表示されません。コンソール履歴は、コンソールで入力および実行したコマンドのリストです。これらのコマンドは、[コンソール] にカーソルを置き、上矢印キーを押すと表示されます。

自己 XSS 警告はどのように表示されますか?

経験の浅いユーザーがコンソールにコードを貼り付けようとすると、この操作はブロックされ、代わりにコンソールに警告が表示されます。

コンソールの自己 XSS に関する警告。

この警告を無視して貼り付けを有効にすることができます。ただし、その場合は「ペーストを許可」と入力する必要があります。

経験の浅いユーザーが DevTools コードエディタ(Sources パネルなど)にコードを貼り付ける場合、ユーザー エクスペリエンスはよく似ています。警告の代わりにモーダル ダイアログが表示されます。

[Sources] パネルのセルフ XSS モーダル ダイアログ

繰り返しになりますが、このダイアログを閉じるだけでは貼り付けを有効にするには不十分です。この警告を無視するには、入力フィールドに「allow 貼り付け」と入力する必要があります。

この設定は 1 回限りですか?

はい。貼り付けを許可すると、自己 XSS 警告は今後表示されなくなります。

これにより、利便性と煩わしさの適切なトレードオフを実現できれば幸いです。摩擦を追加することで、警告を読む可能性が高くなるため、自己 XSS 攻撃が成功する可能性が低くなります。

Chrome DevTools では、Chrome プロファイルに自己 XSS 警告を表示するかどうかを指定するフラグが保持されます。そのため、新しいプロファイルを作成してすぐに DevTools へのコードの貼り付けを開始すると、貼り付けはブロックされ、代わりに自己 XSS 警告が表示されます。

テスト自動化のために無効にできますか?

では、自動テストについてはどうでしょうか。多くのテストツールでは、テストを実行するたびに新しい一時プロファイルが作成されます。そのため、DevTools を使用して自動テストをデバッグする場合、最初は [Console] への貼り付けがブロックされます。

この問題を回避するには、次のいずれかを行います。

  • Chrome for Testing を使用します。Chrome for Testing は、テストと自動化用に設計された Chrome の各種サービスです。自己 XSS 警告はオフになります。

  • その他の Chrome リリース チャンネルの場合は、--unsafely-disable-devtools-self-xss-warnings コマンドライン フラグを Chrome に渡して、self-xss 警告ダイアログを完全に無効にします。

おわりに

自己 XSS 攻撃を軽減するためのこの戦略についてどう思いますか?ご意見やご提案がございましたら、こちらのバグにコメントするか、以下のいずれかの方法でご連絡ください。

特に、コンソールログを通じて自己 XSS 攻撃について警告するウェブサイトをご使用の場合、Google の取り組みの調整や、自己 XSS 軽減策の影響の測定についてお話しさせていただければと思います。

プレビュー チャンネルをダウンロードする

デフォルトの開発ブラウザとして Chrome の CanaryDev、または Beta を使用することを検討してください。これらのプレビュー チャンネルを使用すると、DevTools の最新機能にアクセスしたり、最先端のウェブ プラットフォーム API をテストしたり、ユーザーに先駆けてサイトの問題を検出したりできます。

Chrome DevTools チームへのお問い合わせ

以下のオプションを使用して、投稿の新機能や変更点、または DevTools に関連するその他のことについて話し合います。

  • ご提案やフィードバックは、crbug.com からお送りください。
  • DevTools の [More options] その他   > [Help] > [Report a DevTools issues] を使用して、DevTools の問題を報告します。
  • @ChromeDevTools でツイートしてください。
  • DevTools の新機能に関する YouTube 動画または DevTools のヒントの YouTube 動画にコメントを残してください。