Webアプリケーション攻撃

パストラバーサル ぱすとらばーさる

ディレクトリトラバーサルファイルインクルードパス操作不正アクセスサニタイズCWE-22
パストラバーサルについて教えて

簡単に言うとこんな感じ!

Webサイトに「../../secret/password.txt」みたいな「上の階層に戻る呪文」を送りつけて、本来は見せてもらえないはずのファイルを盗み見る攻撃だよ。ファイルの棚を無断でこじ開けるようなイメージ!


パストラバーサルとは

パストラバーサル(Path Traversal)とは、Webアプリケーションへのリクエストに「../(ドット・ドット・スラッシュ)」などの特殊な文字列を埋め込み、本来アクセスを許可されていないディレクトリやファイルへ不正にたどり着く攻撃手法です。ディレクトリトラバーサル(Directory Traversal) とも呼ばれます。

例えば、Webサーバーが「/var/www/html/uploads/」フォルダ内のファイルだけを返すつもりで作られていても、攻撃者が ../../../etc/passwd のようなパスを送り込むと、サーバーのOSユーザー情報ファイルを読み取れてしまうことがあります。

この攻撃は特別なツールが不要で、URLやフォームのテキスト欄に文字を入力するだけで試みられます。対策が不十分なシステムは情報漏えいや設定ファイルの流出につながるため、IPAの「安全なウェブサイトの作り方」でも必ず対策すべき脆弱性として挙げられています。


仕組みと攻撃の流れ

攻撃者は「ファイル名を外部から指定できる」機能を悪用します。よくある踏み台になる実装と攻撃例を見てみましょう。

踏み台になりやすい機能具体例
ファイルダウンロード機能download.php?file=report.pdf
画像・テンプレート読み込みpage.php?template=top
ログ・設定ファイルの表示view.php?log=access.log

攻撃の典型的な流れ:

[正常なリクエスト]
https://example.com/download.php?file=report.pdf
→ /var/www/html/files/report.pdf を返す(正常)

[攻撃リクエスト]
https://example.com/download.php?file=../../../etc/passwd
→ /var/www/html/files/../../../etc/passwd
         = /etc/passwd を返してしまう(危険!)

../ の意味を覚えるコツ

ファイルシステムの階層を「ビルの階」に例えると覚えやすいです。

/var/www/html/files/   ← 今いる場所(4階)
../                    ← 1つ上の階(3階)へ
../../                 ← 2つ上の階(2階)へ
../../../etc/passwd    ← 3つ上がってetcフォルダへ潜入!

..(ドット2つ)=親ディレクトリへ戻る」というOSの基本ルールを悪用しているわけです。

エンコードによる検出回避

単純な ../ フィルタリングだけでは防ぎきれないことがあります。攻撃者は以下のようにエンコードして検出を回避します。

表現実際の意味
../通常のパストラバーサル
%2e%2e%2fURLエンコード版
..%2f混合エンコード版
....//フィルター迂回パターン
%252e%252e%252f二重エンコード版

歴史と背景

  • 1990年代後半 — CGIスクリプトが普及し始め、ファイル名をURLパラメータで指定する実装が増加。パストラバーサル攻撃が認識される
  • 2000年 — IIS(MicrosoftのWebサーバー)の深刻なディレクトリトラバーサル脆弱性(MS00-078)が公開。世界中のWindowsサーバーに影響
  • 2001年 — CERT/CCがディレクトリトラバーサルをアドバイザリとして正式に注意喚起
  • 2007年 — IPAが「安全なウェブサイトの作り方」初版を公開し、パストラバーサル対策を必須項目として掲載
  • 2010年代〜 — クラウド・コンテナ環境の普及により、設定ファイルや認証情報ファイルへのアクセスリスクが一層増大
  • 現在OWASP Top 10の「A01:2021 アクセス制御の不備」に分類。CWE(脆弱性タイプ辞典)では CWE-22 として登録され、継続的に上位のリスクに挙げられている

対策と関連技術

パストラバーサルへの対策は「入力値の検証」と「ファイルアクセス設計」の2層で行うのが鉄則です。

パストラバーサル 対策の2層構造 【第1層】入力値の検証・サニタイズ ホワイトリスト検証 許可するファイル名を あらかじめ限定する (最も安全) 危険文字の除去 ../ ..\ %2e 等を 正規化後に除去 (単独では不十分) パスの正規化 絶対パスに変換後 許可ディレクトリ配下か をチェックする 【第2層】ファイルアクセス設計 chroot / jail Webサーバーの動作を 専用ディレクトリ内に 閉じ込める 最小権限の原則 Webサーバーの実行 ユーザーに不要な ファイル権限を与えない 間接参照の利用 ファイル名をURLに 直接使わずIDで マッピングする 第1層・第2層を組み合わせることで多層防御を実現する

発注・選定時のチェックポイント:

チェック項目確認すべき内容
ファイル操作機能の有無ファイルダウンロード・アップロード・テンプレート指定機能はあるか
入力値検証の実装パラメータにファイル名・パスが含まれる場合に検証しているか
WAFの導入Webアプリケーションファイアウォール../ 等を遮断しているか
脆弱性診断の実施開発完了後にパストラバーサルを含む診断を受けているか
OSS・ライブラリの更新利用しているフレームワークのパス処理に既知の脆弱性がないか

関連する規格・RFC

規格・番号内容
CWE-22Improper Limitation of a Pathname to a Restricted Directory(パストラバーサルの脆弱性タイプ定義)
OWASP Top 10 A01:2021アクセス制御の不備(パストラバーサルを含む)
IPA「安全なウェブサイトの作り方」ディレクトリトラバーサルの対策を必須項目として解説
CVE-2021-41773Apache HTTP Server 2.4.49のパストラバーサル脆弱性(実例)

関連用語