パストラバーサル ぱすとらばーさる
簡単に言うとこんな感じ!
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%2f | URLエンコード版 |
..%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層で行うのが鉄則です。
発注・選定時のチェックポイント:
| チェック項目 | 確認すべき内容 |
|---|---|
| ファイル操作機能の有無 | ファイルダウンロード・アップロード・テンプレート指定機能はあるか |
| 入力値検証の実装 | パラメータにファイル名・パスが含まれる場合に検証しているか |
| WAFの導入 | Webアプリケーションファイアウォールで ../ 等を遮断しているか |
| 脆弱性診断の実施 | 開発完了後にパストラバーサルを含む診断を受けているか |
| OSS・ライブラリの更新 | 利用しているフレームワークのパス処理に既知の脆弱性がないか |
関連する規格・RFC
| 規格・番号 | 内容 |
|---|---|
| CWE-22 | Improper Limitation of a Pathname to a Restricted Directory(パストラバーサルの脆弱性タイプ定義) |
| OWASP Top 10 A01:2021 | アクセス制御の不備(パストラバーサルを含む) |
| IPA「安全なウェブサイトの作り方」 | ディレクトリトラバーサルの対策を必須項目として解説 |
| CVE-2021-41773 | Apache HTTP Server 2.4.49のパストラバーサル脆弱性(実例) |
関連用語
- SQLインジェクション — 入力値にSQL文を埋め込む攻撃。入力値検証が不十分という根本原因は共通
- XSS(クロスサイトスクリプティング) — 入力値を悪用する攻撃の代表格。パストラバーサルと並ぶWebの基本的な脆弱性
- WAF(Webアプリケーションファイアウォール) — パストラバーサルを含む攻撃パターンを検知・遮断する防御機器
- サニタイズ — 入力値から危険な文字列を除去・無害化する処理
- 最小権限の原則 — 必要最低限の権限のみ付与するセキュリティ設計原則
- OWASP Top 10 — Webアプリケーションの重大な脆弱性ランキング。パストラバーサルが含まれる