Information Disclosure - Debug Error Messages

概要

  • 脆弱性の名前: Information Disclosure - Debug Error Messages (情報漏洩 - デバッグエラーメッセージ)
  • 問題の要点: 本番環境でデバッグエラーメッセージが表示されることで、攻撃者にシステムの内部情報(ファイルパス、データベース構造、使用しているライブラリのバージョンなど)が漏洩するリスクがある状態。
  • よくある発生シーン: 開発環境から本番環境への移行時に、デバッグモードが無効化されていない場合や、エラーハンドリングが適切に設定されていない場合に発生しやすい。クラウド環境では、設定ファイルや環境変数の管理ミスが原因となることがあります。

背景

デバッグエラーメッセージは、開発者がアプリケーションの問題を特定しやすくするために提供されるものですが、本番環境で公開されると、攻撃者にとって有益な情報源となります。
これらのメッセージには、システムの構成、使用しているソフトウェアのバージョン、データベースの構造などが含まれることがあり、攻撃者はこれらの情報を利用して、より効果的な攻撃を仕掛けることができます。
近年、Web アプリケーションのセキュリティ対策として、本番環境でのデバッグエラーメッセージの非表示が重要視されています。

セキュリティ上のリスク

  • システム内部情報の漏洩。
  • 攻撃者が脆弱性を特定しやすくなる。
  • SQL インジェクション攻撃の成功率が向上する。
  • リモートコード実行 (RCE) 攻撃のリスクが高まる。

対処方法の具体例

PHP

誤った設定例

php.inidisplay_errorsOn になっている場合:

; 誤った例: display_errors が On になっている
display_errors = On

正しい設定例

php.inidisplay_errorsOff に設定し、エラーログを有効にする:

; 正しい例: display_errors を Off に設定し、エラーログを有効にする
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log

または

<?php
// 本番環境でのエラー表示を抑制する
error_reporting(0);
ini_set('display_errors', 0);
?>

Python

誤った設定例

Flask アプリケーションで debug=True になっている場合:

# 誤った例: debug=True になっている
app = Flask(__name__)
app.debug = True
app.run()

正しい設定例

Flask アプリケーションで debug=False に設定する:

# 正しい例: debug=False に設定する
app = Flask(__name__)
app.debug = False
app.run()

Java

誤った設定例

Spring Boot アプリケーションで debug=true になっている場合:

# 誤った例: debug=true になっている
debug=true

正しい設定例

Spring Boot アプリケーションで debug=false に設定する:

# 正しい例: debug=false に設定する
debug=false

AWS

CloudWatch Logs の設定

AWS CloudWatch Logs を使用して、アプリケーションのエラーログを収集し、監視します。

検出方法

OWASP ZAP での出力例

  • Alert 名: Information Disclosure - Debug Error Messages
  • リスク: Low
  • URL: エラーメッセージが表示されている URL
  • パラメータ: なし
  • 詳細: デバッグエラーメッセージが表示されているという情報

手動再現例

  1. Web ブラウザでアプリケーションにアクセスし、エラーが発生する可能性のある操作を行います。
  2. エラーメッセージが表示された場合、その内容を確認し、機密情報が含まれていないか確認します。

まとめ

  • CVSS 基本値: 5.3 (Medium)
  • 運用チームや開発者が意識すべきポイント:
    • 本番環境では、デバッグモードを無効化する。
    • エラーハンドリングを適切に設定し、エラーログを収集する。
    • エラーメッセージに機密情報が含まれていないか確認する。
    • 定期的にアプリケーションのセキュリティテストを実施する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する (Security by Design)。
    • コードレビューを実施し、エラーハンドリングの設定を確認する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • 本番環境でのエラー表示に関するポリシーを策定し、遵守する。

以上の対策と検出方法を活用して、Information Disclosure - Debug Error Messages のリスクを低減してください。