.htaccess Information Leak

概要

  • 脆弱性の名前: .htaccess Information Leak
  • 問題の要点: Webサーバーの設定ファイルである.htaccessが、Webブラウザからアクセス可能になっている状態。
  • よくある発生シーン: Webサーバーの設定ミス、不適切なファイル配置、アクセス制限の設定漏れなど

背景

.htaccessファイルは、Apache Webサーバーで使用される設定ファイルで、ディレクトリごとにアクセス制限、リダイレクト、エラー処理などの設定を記述できます。
このファイルがWebブラウザからアクセス可能になっていると、Webサーバーの構成情報や設定内容が漏洩し、攻撃者に悪用される可能性があります。
特に、クラウド環境では、設定ミスによる情報漏洩が問題視されています。

セキュリティ上のリスク

  • Webサーバーの構成情報や設定内容が漏洩し、攻撃者が脆弱性を特定しやすくなる。
  • データベースのパスワードやAPIキーなどの機密情報が漏洩する可能性がある。
  • Webサイトの改ざんや不正なコンテンツの表示。

対処方法の具体例

Apache2

誤った設定例

.htaccessファイルへのアクセス制限が設定されていない例:

# 誤った例: アクセス制限なし

正しい設定例

.htaccessファイルへのアクセスを禁止する設定:

# 正しい例: アクセス制限
<Files ".htaccess">
    Require all denied
</Files>

または、より厳格な設定として:

<Files ".htaccess">
    Order Allow,Deny
    Deny from all
</Files>

Nginx

Nginxは.htaccessファイルを直接サポートしていませんが、同様の設定をNginxの設定ファイルで行う必要があります。

正しい設定例

.htaccessファイルへのアクセスを禁止する設定:

# 正しい例: アクセス制限
location ~ /\.ht {
    deny all;
}

WordPress

WordPressサイトの場合、.htaccessファイルが重要な役割を果たしています。
WordPressのデフォルト設定では、.htaccessファイルへのアクセスは禁止されていますが、設定が変更されている場合は注意が必要です。

正しい設定例

WordPressの.htaccessファイルが適切に設定されていることを確認する:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

AWS

正しい設定例

S3バケットに.htaccessファイルを保存する場合は、アクセス制限を厳格に設定する:

  • バケットポリシーを使用して、.htaccessファイルへのアクセスを特定のIAMロールまたはユーザーに制限する。
  • .htaccessファイルを暗号化して保存する。

検出方法

OWASP ZAPでの出力例

  • Alert 名: .htaccess Information Leak
  • リスク: Low
  • URL: .htaccessファイルがアクセス可能なURL
  • パラメータ: なし
  • 詳細: .htaccessファイルがダウンロード可能であるという情報

手動再現例

  1. Webブラウザで/.htaccessにアクセスします。
  2. ファイルがダウンロードできる場合、またはファイルの内容が表示される場合、.htaccess Information Leakの脆弱性が存在します。
curl -I https://example.com/.htaccess

上記コマンドを実行し、200 OKなどのステータスコードが返ってくる場合、脆弱性が存在する可能性があります。

まとめ

  • CVSS 基本値: 5.3 (Medium)
  • 運用チームや開発者が意識すべきポイント:
    • .htaccessファイルへのアクセス制限を適切に設定する。
    • Webサーバーの設定ファイルを適切に管理する。
    • クラウドストレージに設定ファイルを保存する場合は、アクセス制限を厳格に設定する。
    • 定期的にセキュリティ監査を実施し、脆弱性を特定する。
  • 再発防止:
    • Webサーバーの設定に関するドキュメントを整備し、設定ミスを防止する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • 開発者向けのセキュリティトレーニングを実施する。

補足資料・参考URL

以上の対策と検出方法を活用して、.htaccess Information Leakのリスクを低減してください。