X-Content-Type-Options Header Missing

概要

  • 脆弱性の名前: X-Content-Type-Options Header Missing (X-Content-Type-Optionsヘッダー未設定)
  • 問題の要点: X-Content-Type-Options ヘッダーが設定されていないため、ブラウザがMIMEタイプを推測(MIMEスニッフィング)し、意図しないファイル形式として解釈されるリスクがある状態。
  • よくある発生シーン: Webサーバーの設定がデフォルトのままになっている場合や、アプリケーションフレームワークが自動的にヘッダーを設定しない場合に発生しやすい。クラウド環境では、複数のサービスを組み合わせる際に、各サービスの設定が統一されていない場合に発生することがあります。

背景

X-Content-Type-Options ヘッダーは、ブラウザにサーバーが指定したMIMEタイプを尊重させ、MIMEスニッフィングを無効にするためのセキュリティヘッダーです。MIMEスニッフィングとは、ブラウザがファイルの内容を解析してMIMEタイプを推測する機能のことです。
この機能が悪用されると、例えば、画像ファイルとしてアップロードされた悪意のあるスクリプトが、ブラウザによってJavaScriptとして実行される可能性があります。
X-Content-Type-Options ヘッダーを設定することで、このようなリスクを軽減し、Webサイトのセキュリティを向上させることができます。

セキュリティ上のリスク

  • クロスサイトスクリプティング(XSS)攻撃のリスク。
  • 悪意のあるファイルが意図しない形式で実行される可能性。
  • Webサイトの改ざん。

対処方法の具体例

Apache2

httpd.confでの設定

httpd.conf または vhost.conf に以下の記述を追加することで、X-Content-Type-Options ヘッダーを設定します。

# httpd.conf または vhost.conf
<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
</IfModule>

Nginx

nginx.confでの設定

nginx.conf に以下の記述を追加することで、X-Content-Type-Options ヘッダーを設定します。

# nginx.conf
server {
    listen 443 ssl;
    add_header X-Content-Type-Options "nosniff";
    ...
}

WordPress

.htaccessでの設定

.htaccess に以下の記述を追加することで、X-Content-Type-Options ヘッダーを設定します。

<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
</IfModule>

functions.phpでの設定

functions.php に以下のコードを追加することで、X-Content-Type-Options ヘッダーを設定します。

<?php
// functions.php
add_action('send_headers', function() {
    header('X-Content-Type-Options: nosniff');
});

PHP

PHPコードでの設定

PHPコード内で header() 関数を使用することで、X-Content-Type-Options ヘッダーを設定します。

<?php
// PHPコード
header('X-Content-Type-Options: nosniff');
?>

JavaScript (Node.js / Express)

Express.jsでの設定

Express.js で helmet ミドルウェアを使用することで、X-Content-Type-Options ヘッダーを簡単に設定できます。

const express = require('express');
const helmet = require('helmet');
const app = express();

app.use(helmet.noSniff());

AWS

CloudFrontの設定

CloudFrontを使用している場合、カスタムヘッダーポリシーを設定し、X-Content-Type-Options ヘッダーを追加します。

Load Balancerの設定

ロードバランサー(ALB/ELB)を使用している場合、HTTPヘッダーの書き換えルールを設定し、X-Content-Type-Options ヘッダーを追加します。

検出方法

OWASP ZAP での出力例

  • Alert 名: X-Content-Type-Options Header Missing
  • リスク: Low
  • URL: X-Content-Type-Options ヘッダーが設定されていないURL
  • パラメータ: なし
  • 詳細: レスポンスヘッダーに X-Content-Type-Options が含まれていないという情報

手動再現例

  1. Webブラウザの開発者ツールを開き、Networkタブを選択します。
  2. Webサイトにアクセスし、HTTPレスポンスヘッダーに X-Content-Type-Options ヘッダーが含まれているか確認します。
  3. curl コマンドを使用して、HTTPレスポンスヘッダーを確認します。
curl -I https://example.com

まとめ

  • CVSS 基本値: 4.0 (Medium)
  • 運用チームや開発者が意識すべきポイント:
    • Webサーバーの設定を確認し、X-Content-Type-Options ヘッダーを設定する。
    • アプリケーションフレームワークの設定を確認し、X-Content-Type-Options ヘッダーを設定する。
    • 定期的にWebサイトのセキュリティ診断を実施する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する (Security by Design)。
    • コードレビューを実施し、X-Content-Type-Options ヘッダーの設定を確認する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • セキュリティに関するポリシーを策定し、遵守する。

補足資料・参考 URL

以上の対策と検出方法を活用して、X-Content-Type-Options Header Missing のリスクを低減してください。