用語辞典10分で読める

パストラバーサルとは:../ を使ってサーバー上の非公開ファイルを読まれる脆弱性

パストラバーサル(ディレクトリトラバーサル)は、ファイル名の入力に ../ などを混ぜて、公開すべきでない場所(.env・設定・鍵・/etc)まで読み書きさせる脆弱性です。仕組みの図解と、基本の防御(入力をパスに使わない・基準ディレクトリ内に閉じ込める)を防御目線で解説します。

本文を読む
公開日
更新日
目次

ファイル名の入力に ../ を混ぜることで、サーバーの奥にある .env まで読めてしまう脆弱性が、パストラバーサルです。仕組みと確実な防ぎ方を解説します(攻撃手順は載せません)。

どこに出るか

「利用者の入力でファイルを選ぶ」場所すべてが候補です。

機能危ない使い方
ダウンロード/プレビュー?file= にファイル名をそのまま使う
画像/添付の表示パスの一部をURLパラメータから組み立てる
アップロード保存先パスにユーザー指定の名前を使う(書き込み型・最も危険)
テンプレート/言語ファイル読込?lang= 等でファイルを動的に選ぶ

なぜ成立するか(仕組み)

../ は「一つ上の階層へ」を意味します。アプリが 公開フォルダ + 利用者入力 をそのまま連結してファイルを開くと、../ を重ねた入力で公開フォルダの外へ出られてしまいます。

想定:/var/www/files/ + 利用者入力
入力に「上の階層へ」を重ねる(../ ../ ../ …)
↓ アプリが正規化せず連結して open()
基準フォルダの外(.env・設定・鍵・/etc)に到達=読み取り/書き込み
基準フォルダに利用者入力をそのまま連結すると、../ の積み重ねで外のファイルへ到達してしまう。

読み取りなら情報漏えい、書き込み(アップロード)なら任意の場所にファイルを置かれ、RCE につながることもあります。

防御:入力をパスにしない+基準内に閉じ込める

1

利用者入力を生のファイルパスにしない(最重要)

公開するファイルは ID→実ファイルの対応表(許可リスト)で引く。利用者が渡すのは「3番」「invoice」等の識別子だけにし、実パスはサーバーが決める。

2

正規化してから“基準ディレクトリの内側か”を必ず確認

言語標準のパス正規化(resolve/realpath 相当)で絶対パス化し、それが許可した基準ディレクトリで始まっているかを検証。外なら拒否。../ の単純な文字列除去はエンコード回避があるため不可。

3

アプリを最小権限で動かす

アプリ実行ユーザーが読めるファイルを業務に必要な範囲へ絞る。万一抜け出されても、そもそも読めなければ被害が出ない。

4

“出してはいけない物”を公開ルートの外へ

.env・.git・鍵・バックアップは、そもそもWebルートやアップロードフォルダに置かない。配置を変えて、攻撃される対象をなくす。

当サイトの視点:配置ミスと同じ種類の問題。対処の順番を間違えない

パストラバーサルは、.env 公開の事故と同じ種類の問題です。どちらも「本来Webから届くべきでない物に、Web経由で届いてしまう」問題。応急処置(ヘッダや単純フィルタ)で表面的に防いでも、コードと配置が直っていなければ別の経路で読まれます。順番は①入力をパスに使わないコード ②基準ディレクトリ内チェック ③そもそも秘密を公開ルート外へ。共有レンタルサーバーでの安全な配置も合わせて読むと、根本対処の方法が分かります。

似た問題との違い

「見せてはいけないファイルが外から読める」という結果は同じでも、原因によって直す場所が違います。

問題原因直す場所
パストラバーサルファイルを指す入力で、許可した場所の外へ出られるアプリのコード(入力をパスに使わない)
ローカルファイルインクルード(LFI)読み込んで実行するファイルを入力で選ばれるアプリのコード(読み込むファイルを固定する)
公開ディレクトリの置き忘れ.env や .git がWebから見える場所にある(→ 公開ディレクトリに置いた秘密情報)配置とWebサーバーの設定
IDORファイルのIDは正しい形式だが、他人のファイルを指せるアプリの権限チェック

具体例:Webサーバーそのものにあった脆弱性

パストラバーサルは自作のアプリだけでなく、広く使われる製品にも見つかります。

  • Apache HTTP Server 2.4.49(2021年):パストラバーサルの脆弱性(CVE-2021-41773)があり、Apacheは「実際に悪用されている」と公表しました。2.4.50で修正されましたが、修正が不十分だったため(CVE-2021-42013)、2.4.51で改めて修正されています。設定によっては、ファイルの読み取りだけでなくRCEにも至りました。
  • WordPress本体(2026年):ページテンプレートを解決する処理のパストラバーサルが、条件付きでRCEに至るファイルインクルードの脆弱性(CVE-2026-87902)につながりました(→ CVE-2026-87902の解説)。

米国のCISAとFBIは2024年5月、この種類の脆弱性をなくすよう製品の作り手に求める注意喚起を出しました。その時点で、CISAのKEV(実際に悪用が確認された脆弱性の一覧)には、ディレクトリトラバーサルの脆弱性が55件載っていたとしています。MITREが2025年12月に公表した「CWE Top 25」でも、パストラバーサル(CWE-22)は6位です。

自分のサイトで確認する方法

1

ファイルを開く処理に入力が入る箇所を探す

ソースコードで、ファイルを開く・送る関数(open・readFile・sendFile・include など)や、パスを組み立てる関数(path.join など)に、リクエストの値が入る箇所を探す。

2

チェックの順番を確認する

入力を使う箇所で、パスを正規化(path.resolve や realpath)した後に、基準ディレクトリの内側かを確かめているかを見る。正規化の前に文字列を調べているだけなら、順番を直す。

3

Webサーバーと製品の版を確認する

Apache 2.4.49・2.4.50 のように、パストラバーサルが知られている版を使っていないかを確認する。CVE / KEV ルックアップで、使っている製品の既知の脆弱性を調べられる。

4

外から見えてはいけないファイルを確認する

サイト総合セキュリティ診断で、.env・.git・データベースのダンプが外から読めないかを点検する。読めた場合は、パストラバーサルとは別に、配置を直す。

出典(一次情報)

  • CISA・FBI「Secure by Design Alert: Eliminating Directory Traversal Vulnerabilities in Software」(2024年5月2日) — cisa.gov(KEVに55件、ランダムな識別子を使う対策)
  • Apache HTTP Server「Apache HTTP Server 2.4 vulnerabilities」 — httpd.apache.org(CVE-2021-41773・CVE-2021-42013)
  • MITRE「2025 CWE Top 25 Most Dangerous Software Weaknesses」(2025年12月) — cwe.mitre.org(CWE-22 が6位)
  • OWASP「Path Traversal」 — owasp.org
  • IPA「安全なウェブサイトの作り方」 — ipa.go.jp(パス名パラメータの未チェック/ディレクトリ・トラバーサル)

次に読む

分類番号

CWE は脆弱性の原因となる弱点の種類を、MITRE ATT&CK は攻撃者の手口を分類した番号体系です。どちらも MITRE が管理し、脆弱性情報や検知ルールの分類に広く使われています。

CWE™: Copyright © 2006–2026, The MITRE Corporation. CWE is a trademark of The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. Any copy you make for such purposes is authorized on the condition that you reproduce MITRE’s copyright designation and this license in any such copy. CWE Terms of Use

よくある質問

Qパストラバーサルで何が漏れる?
A

本来そのアプリが触らせるべきでないファイルです。代表例は .env(DB認証・APIキー)、設定ファイル、秘密鍵、ソースコード、OSの /etc 配下など。読み取りだけでなく、アップロード先のパス指定に悪用されると任意の場所へ書き込まれ、RCE(任意コード実行)に発展することもあります。

Q一番の防御は?
A

『利用者の入力を、そのままファイルパスに使わない』ことです。どうしても使うなら、許可リスト(IDやファイル名の固定セット)に変換し、ライブラリでパスを正規化したうえで『基準ディレクトリの内側に収まっているか』を必ず確認します。拡張子チェックや ../ の単純除去だけでは回避されます。

Q.htaccess やヘッダで塞げばいい?
A

それは“出してはいけないファイルが公開ディレクトリにある”という別問題への応急処置です。根本は『アプリ本体・.env・.git を公開ルートの外に置く』配置の是正と、入力をパスに使わないコードです。応急処置と根本対処は別作業です。

Qディレクトリトラバーサルとパストラバーサルは同じ?
A

同じものを指します。IPAの「安全なウェブサイトの作り方」は「ディレクトリ・トラバーサル」、MITREの分類(CWE-22)は「Path Traversal」と呼んでいます。どちらも、ファイルを指す入力で、許可した場所の外のファイルに届いてしまう脆弱性です。

Qファイル名をランダムなIDにすれば防げる?
A

有効な方法です。米国のCISAとFBIは2024年5月の注意喚起で、ファイルごとにランダムな識別子を作り、元のファイル名などの情報は別に保存する方法を挙げています。利用者の入力がパスに入らなくなるため、この種類の脆弱性が起きる余地がなくなります。

Qローカルファイルインクルード(LFI)との違いは?
A

パストラバーサルは、許可した場所の外のファイルを読み書きされる問題です。LFIは、プログラムが読み込んで実行するファイルを入力で選ばれてしまう問題で、外のファイルを指すためにパストラバーサルが使われることがよくあります。LFIは、読まれるだけでなくコードとして実行されるため、RCEにつながりやすくなります。