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で提供されるスクリプトが含まれているという情報
手動再現例
- Webブラウザの開発者ツールを開き、Securityタブを選択します。
- Webサイトにアクセスし、Securityタブに「This page is not fully secure」という警告が表示される場合、混在コンテンツが存在します。
- 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)のリスクを低減してください。