Secure Pages Include Mixed Content

概要

  • 脆弱性の名前: Secure Pages Include Mixed Content (セキュアページにおける混在コンテンツ)
  • 問題の要点: HTTPSで提供されているページに、HTTPで提供されるコンテンツ(画像、スクリプト、スタイルシートなど)が含まれている状態。これにより、ページ全体のセキュリティが低下する。
  • よくある発生シーン: WebサイトをHTTPSに移行する際に、HTTPで配信されている古いリソースが残ってしまったり、CDNや外部APIからのコンテンツがHTTPで提供されている場合に発生しやすい。クラウド環境では、複数のサービスを組み合わせる際に、それぞれの設定が統一されていない場合に発生することがあります。

背景

HTTPSは、Webサイトとユーザー間の通信を暗号化し、盗聴や改ざんを防ぐためのプロトコルです。しかし、HTTPSページにHTTPコンテンツが混在すると、HTTPで提供されるコンテンツは暗号化されずに転送されるため、中間者攻撃のリスクが生じます。
ブラウザは、セキュリティ上の理由から、混在コンテンツをブロックすることがありますが、完全にブロックされない場合もあります。
近年、WebサイトのHTTPS化が進むにつれて、混在コンテンツの問題がより重要視されるようになっています。

セキュリティ上のリスク

  • 中間者攻撃(Man-in-the-Middle Attack)によるコンテンツの改ざん。
  • ユーザーのCookieやセッション情報の窃取。
  • 悪意のあるスクリプトの実行(XSS攻撃)。
  • ユーザーのプライバシー侵害。

対処方法の具体例

Apache2

.htaccessでの設定

.htaccessファイルに以下の記述を追加することで、HTTPリクエストをHTTPSにリダイレクトします。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Content Security Policy (CSP) の設定

httpd.conf または .htaccess ファイルに CSP を設定し、HTTPSリソースのみを許可します。

Header set Content-Security-Policy "upgrade-insecure-requests;"

Nginx

nginx.confでの設定

nginx.confファイルに以下の記述を追加することで、HTTPリクエストをHTTPSにリダイレクトします。

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

Content Security Policy (CSP) の設定

nginx.conf ファイルに CSP を設定し、HTTPSリソースのみを許可します。

add_header Content-Security-Policy "upgrade-insecure-requests;";

WordPress

Really Simple SSLプラグインの利用

WordPressのプラグイン「Really Simple SSL」を利用することで、簡単にHTTPS化と混在コンテンツの修正を行うことができます。

functions.phpでの設定

functions.phpに以下のコードを追加することで、コンテンツ内のHTTP URLをHTTPSに置換します。

function replace_http_with_https($content) {
    if (is_ssl()) {
        $content = str_replace('http://', 'https://', $content);
    }
    return $content;
}
add_filter('the_content', 'replace_http_with_https');

PHP

Content Security Policy (CSP) の設定

PHPでHTTPヘッダーを設定し、HTTPSリソースのみを許可します。

header("Content-Security-Policy: upgrade-insecure-requests");

JavaScript

HTTPSへのリダイレクト

JavaScriptを使用して、HTTPページからHTTPSページへリダイレクトします。

if (location.protocol !== 'https:') {
    location.replace(`https://${location.hostname}${location.pathname}`);
}

AWS

CloudFrontの設定

CloudFrontを使用している場合、HTTPSでのみアクセスを許可するように設定します。

Load Balancerの設定

ロードバランサー(ALB/ELB)を使用している場合、HTTPSリスナーを設定し、HTTPリクエストをHTTPSにリダイレクトします。

検出方法

OWASP ZAP での出力例

  • Alert 名: Secure Pages Include Mixed Content
  • リスク: Low
  • URL: 混在コンテンツが含まれているURL
  • パラメータ: 混在コンテンツのURL
  • 詳細: HTTPSページにHTTPコンテンツが含まれているという情報

手動再現例

  1. Webブラウザの開発者ツールを開き、Networkタブを選択します。
  2. HTTPSで提供されているページにアクセスし、HTTPで読み込まれているリソースがないか確認します。
  3. HTTPで読み込まれているリソースがある場合、混在コンテンツが存在します。

まとめ

  • CVSS 基本値: 3.0 (Low)
  • 運用チームや開発者が意識すべきポイント:
    • Webサイト全体でHTTPSを適用する。
    • HTTPで提供されているリソースをHTTPSに移行する。
    • Content Security Policy (CSP) を設定し、HTTPSリソースのみを許可する。
    • 定期的にWebサイトのコンテンツをスキャンし、混在コンテンツがないか確認する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する (Security by Design)。
    • コードレビューを実施し、HTTPリソースの使用を避ける。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • HTTPS化に関するポリシーを策定し、遵守する。

補足資料・参考URL

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