Shikata Ga Nai

Private? There is no such things.

パストラバーサル(Path Traversal)とは?攻撃者が狙うサーバーファイル読み取り・書き換え脆弱性

Hello there, ('ω')ノ

✅ パストラバーサル(別名:ディレクトリトラバーサル)とは?

パストラバーサル(Path Traversal)は、 Webアプリケーションが外部からの入力値(パスやファイル名)を適切に検証せずに使用することで、 攻撃者が本来アクセスできないサーバー上のファイルやディレクトリに不正アクセスできる脆弱性です。


🎯 攻撃者が取得・改ざんできる情報

タイプ
✅ アプリケーションコード index.php, config.php など
✅ データファイル アップロードファイル、ユーザーデータなど
✅ バックエンドシステム認証情報 データベースの接続情報やAPIキー
✅ OSの機密ファイル UNIX/Linux → /etc/passwd, Windows → C:\Windows\System32\config\SAM
✅ 書き込み権限を得た場合 アプリの振る舞い改ざん → サーバー乗っ取りも可能

📋 攻撃パターンの例

✅ 典型的なリクエスト例

GET /download?file=../../../../etc/passwd HTTP/1.1

サーバーがこのfileパラメータをそのままファイルパスに結び付けると

  • ../../../..親ディレクトリにどんどん移動
  • 最終的に /etc/passwd に到達 → ファイル内容を取得

✅ 変種表現

  • ..%2f..%2f..%2fetc/passwd(URLエンコード版)
  • %2e%2e%2f%2e%2e%2fetc/passwd
  • Windowsでは ..\..\..\windows\system.ini

⚠️ パストラバーサルの影響

レベル 攻撃結果
読み取り アプリソース・設定ファイル・秘密キー・ユーザーデータ取得
書き込み アプリコードや設定ファイルの改ざん → サーバー制御権奪取
組み合わせ LFI(Local File Inclusion)+ パストラバーサル → RCEへ発展するケースも

✅ 防御策(開発者向け)

対策 説明
入力値の正規化 OSのrealpath()関数などでパスを絶対パスに変換しチェック
../..%2fの除去 ユーザー入力からのパストラバーサル文字列をブロック
ファイルアクセスのホワイトリスト化 アプリが扱うファイルの種類や場所を限定
ファイル名を外部入力に依存させない ユーザー入力値を直接ファイルパスに結びつけない
適切なファイルシステムパーミッション Webアプリユーザーに最低限の権限のみ付与

✅ まとめ

  • パストラバーサルは最も古く・今も頻繁に発見される脆弱性の1つ
  • 読み取りだけでなく書き込み可能なケースではサーバー完全制御にもつながる
  • ファイルパスの正規化・除去・アクセス制限が最大の防御策

「ユーザー入力値は絶対にファイルパスにそのまま渡してはいけない!」 これがパストラバーサル対策の鉄則です。

Best regards, (^^ゞ