Secure Pages Include Mixed Content (Including Scripts)

概要

  • 脆弱性の名前: Secure Pages Include Mixed Content (Including Scripts) (安全なページに混在コンテンツ(スクリプトを含む)が含まれている)
  • 問題の要点: HTTPSで提供されるページにHTTPで提供されるリソース(特にスクリプト)が含まれているため、中間者攻撃(Man-in-the-Middle attack)によってスクリプトが改ざんされ、Webサイトのセキュリティが損なわれる可能性がある状態。
  • よくある発生シーン: WebサイトのHTTPS移行時、古いテンプレートやコンテンツが更新されずに残っている場合、CDNの設定ミスなど。クラウド環境では、複数のサービスが連携して動作することが多いため、設定ミスが問題視されています。

背景

HTTPSは、Webサイトとユーザー間の通信を暗号化し、盗聴や改ざんを防ぐためのプロトコルです。しかし、HTTPSで提供されるページにHTTPで提供されるリソースが含まれている場合、そのリソースは暗号化されずにネットワーク上を通過するため、中間者攻撃のリスクに晒されます。
特に、スクリプトが改ざんされた場合、Webサイトの挙動が変更されたり、ユーザーの個人情報が盗まれたりする可能性があります。
近年、Webサイトのセキュリティ対策として、HTTPSの完全な適用が重要視されています。

セキュリティ上のリスク

  • 中間者攻撃による、HTTPリソースの改ざん。
  • 悪意のあるスクリプトの実行による、Webサイトの改ざん、ユーザーの個人情報の詐取。
  • クロスサイトスクリプティング (XSS) 攻撃の誘発。
  • ユーザーのブラウザにセキュリティ警告が表示されることによる、Webサイトの信頼性の低下。

対処方法の具体例

Apache2

誤った設定例

HTTPSで提供されるページで、HTTPで提供されるスクリプトを読み込んでいる例:

<!-- 誤った例: HTTPで提供されるスクリプトを読み込んでいる -->
<script src="http://example.com/script.js"></script>

正しい設定例

HTTPSで提供されるページで、HTTPSで提供されるスクリプトを読み込むように修正する例:

<!-- 正しい例: HTTPSで提供されるスクリプトを読み込んでいる -->
<script src="https://example.com/script.js"></script>

Nginx

誤った設定例

HTTPSで提供されるページで、HTTPで提供されるスクリプトを読み込んでいる例:

<!-- 誤った例: HTTPで提供されるスクリプトを読み込んでいる -->
<script src="http://example.com/script.js"></script>

正しい設定例

HTTPSで提供されるページで、HTTPSで提供されるスクリプトを読み込むように修正する例:

<!-- 正しい例: HTTPSで提供されるスクリプトを読み込んでいる -->
<script src="https://example.com/script.js"></script>

PHP

誤った設定例

PHPスクリプトでHTTPで提供されるリソースを生成している例:

<?php
// 誤った例: HTTPで提供されるリソースを生成している
echo '<script src="http://example.com/script.js"></script>';
?>

正しい設定例

PHPスクリプトでHTTPSで提供されるリソースを生成するように修正する例:

<?php
// 正しい例: HTTPSで提供されるリソースを生成している
echo '<script src="https://example.com/script.js"></script>';
?>

JavaScript

JavaScriptを使用してHTTPリソースを読み込んでいる場合も、HTTPSリソースを読み込むように修正する必要があります。

AWS

正しい設定例

S3バケットに保存されているスクリプトをCloudFront経由で提供する場合、CloudFrontの設定でHTTPSのみを許可するように設定します。

検出方法

OWASP ZAPでの出力例

  • Alert 名: Secure Pages Include Mixed Content (Including Scripts)
  • リスク: Medium
  • URL: 混在コンテンツが含まれているURL
  • パラメータ: なし
  • 詳細: HTTPSで提供されるページにHTTPで提供されるスクリプトが含まれているという情報

手動再現例

  1. Webブラウザの開発者ツールを開き、Securityタブを選択します。
  2. Webサイトにアクセスし、Securityタブに「This page is not fully secure」という警告が表示される場合、混在コンテンツが存在します。
  3. Networkタブを開き、HTTPで読み込まれているリソースを確認します。

まとめ

  • CVSS 基本値: 4.3 (Medium)
  • 運用チームや開発者が意識すべきポイント:
    • Webサイト全体でHTTPSを適用する。
    • HTTPSで提供されるページで、HTTPで提供されるリソースを読み込まないようにする。
    • スクリプト、CSS、画像などのリソースは、常にHTTPSで提供するようにする。
    • CDNの設定を確認し、HTTPSのみを許可するように設定する。
    • 定期的にWebサイトをスキャンし、混在コンテンツがないか確認する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する(Security by Design)。
    • コードレビューを実施し、HTTPリソースの読み込みがないか確認する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • HTTPSを強制するポリシーを適用する。

補足資料・参考URL

以上の対策と検出方法を活用して、Secure Pages Include Mixed Content (Including Scripts)のリスクを低減してください。