• 診断項目 No.110/127
  • 公開ファイル・情報露出
  • 重大度 中(medium)

Webサーバー/CMSのデフォルトファイルとは?公開のリスク・削除と拒否の設定方法・診断基準

Webサーバー/CMSのデフォルトファイル(Apacheの/icons/・/server-info、WordPressのreadme.html等)が残ると製品や設定が特定されます。リスク、Apache・nginx・IISでの消し方、診断基準を解説します。

結論(Webサーバー/CMSのデフォルトファイル)

Webサーバー/CMSのデフォルトファイルとは、WebサーバーやCMSがインストール直後の動作確認や説明のために用意しているアイコン一覧、README、サーバー情報ページなどのことです。代表例はApacheの /icons/ と /server-info、WordPressの /readme.html です。本番で公開されたままだと、使用ソフトウェアの種類やモジュール構成、設定内容が外部から分かり、攻撃者が既知の脆弱性を絞り込む材料になるため、削除するかアクセスを拒否します。

この記事のポイント

  • Apacheの/icons/・/icons/README、mod_infoの/server-info、WordPressの/readme.htmlが代表的なデフォルトファイルです。
  • 特に/server-infoは読み込みモジュールや設定ディレクティブ、設定ファイルのパスまで表示し、情報量が多くなります。
  • リンクしていなくても直接URLを指定すれば閲覧でき、デフォルトパスは一般的な攻撃ツールや脆弱性スキャナーの辞書に含まれています。
  • /icons/と/server-infoはサーバー設定で処理されるため、ドキュメントルートの.htaccessでは止められません。
  • セキュリティAIチェッカーは4パスを確認し、HTTP 200かつ内容署名に一致するものが1件でもあれば×と判定します。
診断項目名Webサーバー/CMSのデフォルトファイル
項目IDpublic.server-default-artifacts
分類公開ファイル・情報露出
重大度・配点の重み中(medium) 重み 3
関連する標準・ガイドラインOWASP ASVS 5.0.0 V13.4.2(本番環境でデバッグ機能を無効化/L2)・V13.4.5(内部向け文書や監視エンドポイントを意図せず公開しない/L2)・V13.4.6(バックエンドの詳細なバージョン情報を公開しない/L3)、OWASP WSTG-CONF-02(アプリケーション基盤の設定:既定・サンプル・既知ファイルの除去)、CWE-497(Exposure of Sensitive System Information to an Unauthorized Control Sphere)、CWE-1188、IPA「安全なウェブサイトの作り方」2.1(不要なサービスの停止、公開を想定しないファイルを置かない)

Webサーバー/CMSのデフォルトファイルとは

Webサーバー/CMSのデフォルトファイルとは、Webサーバーやコンテンツ管理システム(CMS)が、インストール直後の動作確認や説明のために用意しているアイコン一覧、README、サーバー情報ページなどのファイルです。

本番運用でこれらが公開されたままだと、使用しているソフトウェアの種類、モジュール構成、設定内容が外部から分かり、攻撃者が既知の脆弱性を絞り込む材料になります。特にApacheの /server-info は、読み込んでいるモジュールと設定ディレクティブの一覧を表示するため、情報量が多くなります。

セキュリティAIチェッカーのこの項目は、代表的な4つのパスに限定してアクセスし、デフォルトコンテンツ特有の内容が返らないかを確認します。

代表的なデフォルトファイル

パス由来公開時に分かること
/icons/Apache httpdの httpd-autoindex.conf にある Alias /icons/ と、その <Directory> の Options Indexes MultiViewsApacheであること、アイコンディレクトリの一覧
/icons/README上記ディレクトリ内の説明ファイル(見出し「Public Domain Icons」)Apache同梱物が残っていること
/readme.htmlWordPress本体に同梱(タイトル「WordPress › ReadMe」、「Semantic Personal Publishing Platform」)WordPressであること、運用状況の推測材料
/server-infoApacheの mod_info(SetHandler server-info、ページタイトル「Server Information」)読み込みモジュール、設定ディレクティブ、設定ファイルのパス

Apache httpd同梱の httpd-info.conf は、/server-info と /server-status を Require host .example.com と Require ip 127 に制限した例を示しています。この制限を外したり、Require all granted にしたりすると、誰でも閲覧できる状態になります。

なぜデフォルトファイルを残してはいけないのか

OWASP WSTG-CONF-02は、アプリケーション基盤の設定確認として、既定・サンプル・既知ファイルの除去を求めています。OWASP ASVS 5.0.0も、内部向け文書や監視エンドポイントを意図せず公開しないこと(V13.4.5)、バックエンドの詳細なバージョン情報を公開しないこと(V13.4.6)、本番環境でデバッグ機能を無効化すること(V13.4.2)を求めています。

デフォルトファイルについてよくある誤解

  • 「リンクしていないから見られない」:IPAの「安全なウェブサイトの作り方」2.1は、公開ディレクトリのファイルはリンクがなくても直接指定すれば閲覧できるとして、公開を想定しないファイルを置かないよう求めています。デフォルトパスは一般的な攻撃ツールや脆弱性スキャナーの辞書に含まれています。
  • 「バージョンが書かれていないから無害」:ソフトウェアの種類が特定できるだけでも、攻撃対象の選別や、その製品に特化した攻撃(WordPressのプラグイン探索など)の起点になります。
  • 「/icons/ はただの画像」:画像自体は無害ですが、ディレクトリ一覧が有効になっていることや、同梱物を整理していない運用状態を示します。

下層ディレクトリの一覧表示は「ディレクトリ一覧を公開していない」、CMSのインストーラーや管理入口は「CMSセットアップ/管理入口の露出」、Serverヘッダーのバージョンは「サーバーバージョンを露出していない」、下層ページやエラー応答のバージョン情報は「下層・エラー応答のバージョン/デバッグ情報」で確認します。このページは「同梱のデフォルトファイル」に絞って解説します。

Webサーバー/CMSのデフォルトファイルの診断基準(セキュリティAIチェッカー)

取得対象

外部診断強化モジュールが、診断対象の最終URLのオリジンに対して次の4パスへGETします。リダイレクトは追跡せず(followRedirects: false)、タイムアウトは1リクエストあたり5秒です。180KBを超える応答は先頭180KBだけを取得して判定します。

/icons/、/icons/README、/readme.html、/server-info

内容署名

応答がHTTP 200で、本文が次のいずれかの内容署名(大文字小文字を区別しない正規表現)に一致した場合を「デフォルトコンテンツ」と数えます。

署名想定する対象
index of /iconsApacheのアイコン一覧(ディレクトリ一覧)
public domain iconsApacheの /icons/README(.html版も同じ見出し)
apache http serverApacheの既定ページ・同梱文書
wordpress の後40字以内(タグをまたがない)に version または installationWordPress同梱文書の旧形式
wordpress › readme(&#8250; 表記を含む)、semantic personal publishing platformWordPressの readme.html
server informationApache mod_info のページ

判定条件

判定条件得点への影響
○ 問題なし(pass)4パスのいずれも署名に一致しない(404、403、リダイレクト、通信失敗を含む)重み3を満点で加算
△ 要確認(warn)使用しない—
× 要改善(fail)1件以上が200かつ署名に一致重み3に対して0点
対象外(na)使用しない—

ステータスだけでなく内容署名を必須にしているため、存在しないパスにもトップページを200で返す「soft-404」のサイトでも、返る本文に署名の語句(apache http server、server information など)が含まれない限り×にはなりません。リダイレクトを追跡しないので、ログイン画面やトップへの転送も○になります。根拠欄には「n/4件でデフォルトコンテンツの内容署名が一致」のように件数を表示します。

判定の範囲と限界

  • 確認するのは代表的な4パスだけです。IISの iisstart.htm、Tomcatのサンプル、phpinfo.php、/server-status などは本項目では確認しません(/server-status や管理画面の一部は他の公開ファイル系項目で扱います)。
  • 署名にない独自のデフォルトページは検出できません。

自治体サイトでの判定例

状況判定
Apache上の公式サイトで /icons/ がアイコン一覧を返す×
WordPressで構築した観光サイトの /readme.html が残っている×
4パスとも404、またはCMSのエラーページ○

デフォルトファイルを公開しているとどんなリスクがあるか

  • 攻撃対象の特定:ApacheやWordPressであることが確定すると、攻撃者はその製品の既知脆弱性やプラグインの探索に集中できます。
  • 設定情報の露出:/server-info はモジュール一覧や設定ディレクティブを表示し、設定ファイルのパス、仮想ホスト構成、アクセス制御の内容が分かる場合があります。
  • 運用水準の推測:デフォルトファイルが残っているサイトは、パッチ適用や不要機能の削除が徹底されていない可能性が高いと見なされ、標的として選ばれやすくなります。

単独では直接の侵入につながらないため重大度はmediumですが、他の脆弱性と組み合わさると被害を拡大させます。

デフォルトファイルの削除・拒否の設定方法(Apache・nginx・IIS・WordPress・Next.js)

Apache httpd

# httpd.conf:autoindexの読み込みをやめる(/icons/ のAliasを無効化)
#Include conf/extra/httpd-autoindex.conf

# mod_infoを使わないなら読み込まない
#LoadModule info_module modules/mod_info.so

# 使う場合は管理端末だけに限定
<Location /server-info>
    SetHandler server-info
    Require ip 192.0.2.10
</Location>

Debian/Ubuntu系では、/icons/ は alias モジュールの設定(alias.conf)で定義されています。このファイル内の Alias /icons/ 行と対応する <Directory> ブロックをコメントアウトします(a2dismod alias はほかの Alias・Redirect も止めるため避けます)。

共有レンタルサーバーで httpd.conf を編集できない場合、ドキュメントルートに実在する readme.html は .htaccess で拒否できます(<Files> は下層ディレクトリの同名ファイルにも適用されます)。

# .htaccess(ドキュメントルート)
<Files "readme.html">
  Require all denied
</Files>

一方、/icons/ と /server-info は、サーバー設定の Alias や <Location> によってドキュメントルートの外で処理されるため、ドキュメントルートの .htaccess に書いた拒否設定やリダイレクトは適用されません。サーバー設定を変更できない場合は、ホスティング事業者に無効化を依頼してください。

nginx

location = /readme.html { return 404; }
location ^~ /icons/      { return 404; }

nginx自体は /server-info を持ちませんが、stub_status を公開している場合は allow/deny で管理端末に限定します。

IIS

既定の iisstart.htm と画像を削除し、<requestFiltering> の hiddenSegments や URL書き換えで不要パスを404にします。

<system.webServer>
  <security>
    <requestFiltering>
      <hiddenSegments>
        <add segment="readme.html" />
      </hiddenSegments>
    </requestFiltering>
  </security>
</system.webServer>

WordPress

  • readme.html、license.txt、wp-config-sample.php はコアの更新で再配置されるため、更新後に削除するか、上記の .htaccess で恒久的に拒否します。
  • wp-admin/install.php は「CMSセットアップ/管理入口の露出」で別途確認します。

Next.js(Vercel)

フレームワーク自体はこれらのデフォルトファイルを公開しません。public/ ディレクトリにテンプレート由来の不要ファイル(next.svg、vercel.svg など)が残っていないかを確認します。

修正後の確認方法

for p in /icons/ /icons/README /readme.html /server-info; do
  printf "%-16s " "$p"
  curl -s -o /dev/null -w "%{http_code}\n" "https://www.example.lg.jp$p"
done

200が返った場合は、本文を確認してデフォルトコンテンツかどうかを判断します。修正後はセキュリティAIチェッカーで再診断し、この項目が○になることを確認します。

サイトを壊さないための注意点

  • /icons/ を消すと、ディレクトリ一覧や一部の古いページがアイコン画像を参照している場合に画像が表示されなくなります。参照の有無を grep -r "/icons/" で確認してください。
  • .htaccess で Require を使うには AllowOverride AuthConfig(または All)が必要です。許可されていないと500エラーになるため、変更直後にトップページと主要ページの表示を確認します。
  • httpd.conf を変更した場合は、apachectl configtest で構文を確認してから再読み込みします。

よくある質問(FAQ)

Apacheの /icons/ を公開していると何が問題ですか?

画像自体は無害ですが、Apacheであることが分かり、ディレクトリ一覧が有効になっていることや同梱物を整理していない運用状態を示します。攻撃対象の選別に使われるため、Aliasを無効化します。

/server-info とは何ですか?

Apacheのmod_infoが提供するサーバー情報ページで、読み込んでいるモジュールや設定ディレクティブの一覧を表示します。設定ファイルのパスや仮想ホスト構成が分かる場合もあるため、使わないならモジュールを読み込まず、使うなら管理端末のIPに限定します。

WordPressの readme.html は削除してよいですか?

削除して問題ありませんが、readme.html・license.txt・wp-config-sample.php はコアの更新で再配置されます。更新後に削除するか、.htaccessの Files ディレクティブで恒久的に拒否します。

バージョンが書かれていなければ無害ではありませんか?

ソフトウェアの種類が特定できるだけでも、攻撃対象の選別や、その製品に特化した攻撃(WordPressのプラグイン探索など)の起点になります。

レンタルサーバーで httpd.conf を編集できない場合は?

ドキュメントルートに実在する readme.html は .htaccess で拒否できます。/icons/ と /server-info はサーバー設定のAliasやLocationで処理されるため .htaccess では止められず、ホスティング事業者に無効化を依頼します。

Webサーバー/CMSのデフォルトファイルは、セキュリティAIチェッカーでどう判定されますか?

/icons/、/icons/README、/readme.html、/server-info の4パスへリダイレクトを追跡せずにGETし、HTTP 200かつデフォルトコンテンツの内容署名に一致するものが1件でもあれば「× 要改善」、なければ「○ 問題なし」です。内容署名を必須にしているため、存在しないURLにトップページなどを200で返すsoft-404のサイトでも、その本文に署名の語句が含まれない限り×にはなりません。

セキュリティAIチェッカーを利用する

この項目を含む127項目を、URLを入れるだけで無料診断します。

参考資料