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, (^^ゞ