パストラバーサルは、ディレクトリトラバーサルとも呼ばれ、悪意のあるユーザがファイルやディレクトリに不正にアクセスするために、ユーザが提供したデータを操作する場合に発生します。通常、攻撃者は異なるディレクトリにあるログや認証情報にアクセスしようとします。パストラバーサルは新しい脆弱性ではなく、ウェブサーバーが人気を博した90年代から積極的に悪用されてきた。
このような長い歴史を持つパス・トラバーサルは、現在でも人気があるのだろうか?私たちはオープンソースとクローズドソースの両方のプロジェクトで調査を行い、2024年にパス・トラバーサルがどの程度一般的であったか、そして私たちが改善しているかどうか、スポイラーたちは改善していないのか、データを収集した。
パストラバーサル例
では、パストラバーサルは具体的にどのように機能するのだろうか?簡単な例を見てみよう。
この単純なアプリケーションでは、ユーザーはURLの変数を通してダウンロードするファイルを与えられる。

リクエストを処理する簡単なバックエンドのPythonコードがある。
import os
def download_file(file):
base_directory = "/var/www/files"
file_path = os.path.join(base_directory, file)
if os.path.exists(file_path):
with open(file_path, 'rb') as f:
return f.read()
else:
return "ファイルが見つかりません"
変数がURLで提供されているので、次のように変更することができる。 ファイル=.../.../.../etc/passwd

ここで攻撃者は、./../を使ってディレクトリ構造をシステムのルートレベルまでたどり、渡されたファイルにアクセスし、機密情報にアクセスする可能性がある。
この方法がどのように安全なのか知りたい方は、ボーナスコンテンツまでスクロールしてください。
多層のディレクトリやエンコードされた文字を含む、より複雑なシナリオの場合(例. 2e%2e%2f
)、攻撃者は基本的なフィルターを迂回し、ファイルシステムに深くアクセスすることができる。
数字によるパストラバーサル
- 2024年までにオープンソース・プロジェクトで発見された脆弱性の2.7%が パス・トラバーサルだった
- クローズド・ソース・プロジェクトの場合は3.5%!
- オープンソースプロジェクトにおけるパス・トラバーサル脆弱性の総数が742件(2023年)から1,000件 (2024年)に増加する見込み。
- 全脆弱性に占めるパストラバーサル脆弱性の割合は、クローズドソースのプロジェクトが85%と大幅に増加し、より一般的になっている。

私たちの研究は、オープンソースとクローズドソースの両方のプロジェクトを調査し、どれだけの数のプロジェクトにパス・トラバーサル脆弱性が隠れているかを明らかにすることに重点を置いた。
パストラバーサル脆弱性の全体的な数は、コマンドインジェクションやSQLインジェクションなど、我々が調査した他の脆弱性よりも少ない。しかし、この脆弱性が非常に危険であり、それを防ぐための解決策が十分に文書化されていることを考えると、この数字がこれほど高いのは憂慮すべきことです。この脆弱性のトレンドが悪い方向に向かっているのを見るのは、さらに憂慮すべきことだ。
オープンソースプロジェクト
オープンソースプロジェクトでは、2023年に報告された全脆弱性の2.6%をパストラバーサルが占めた。この数値は2024年にわずかに増加し、2.75%に上昇した。この増加は一見わずかなものに見えますが、単純な脆弱性に対してさえオープンソースソフトウェアの安全性を確保する上での継続的な課題を浮き彫りにしています。
クローズド・ソース・プロジェクト
最も顕著な傾向はクローズド・ソース・プロジェクトに見られ、パス・トラバーサル・インシデントが2023年の1.9%から2024年には3.5%に急増した。
悪いニュースは残念ながらこれだけにとどまらない。オープンソース・プロジェクトで報告される脆弱性の数は、全体的に増加の一途をたどっている。オープンソースプロジェクトで報告されたインジェクション脆弱性の総数は、2023年の742件から、2024年の今のところ917件に増加している(1000件に達する見込み)。

パス・トラバーサルの防止
コマンド・インジェクションの脆弱性を防ぐには、多面的なアプローチが必要だ:
入力検証
- ユーザー入力のサニタイズ:などの危険な文字を取り除くか、エンコードする。
../
,..\
,..%2f
その他のバリエーションもある。 - Allowlistアプローチ:許容される入力(ファイル名やパスなど)の厳密なセットを定義し、このリスト以外のものを拒否する。
ファイルアクセスの制限
- chroot jailまたはサンドボックスを使用します:アプリケーションのファイルアクセスを制限されたディレクトリに制限し、意図したディレクトリツリーを越えてトラバースできないようにします。
- ルートディレクトリの設定:ベース・ディレクトリを定義し、すべてのパスがそれに対する相対パスであることを保証する。これを強制するAPIやフレームワークを使用する:
java.nio.file.Paths.get("baseDir").resolve(userInput).normalize()。
Javaで。os.path.realpath()
そしてos.path.commonpath()
Pythonで。
セキュアなファイルアクセスAPI
- 最新のライブラリやフレームワークが提供する安全なファイルアクセス方法を使用する。 ジャワ使用する
Files.newInputStream()
またはFiles.newBufferedReader()
安全なファイル操作のために。
で パイソンファイルにアクセスする前に、ファイルのパスを検証してください。
使用環境の制限
- 制限を設ける ファイルシステムのパーミッションアプリケーションに必要最低限の権限しかないようにする。
機密性の高いディレクトリへのアクセスを拒否する(例、/etc
,/var
,/usr
およびユーザーホームディレクトリ)。 - ウェブサーバーやフレームワークの不要な機能(シンボリックリンクのフォローなど)を無効にする。
自動テスト
- Aikido ようなツールを使ってソースコードとアプリケーションをスキャンし、これらの脆弱性を発見してください。
- SASTとDASTの両ツールは、ドメインスキャンやクラウドセキュリティとともに使用し、隠れたパストラバーサル脆弱性がないことを確認する必要がある。
アプリ内ファイアウォールを使用する
- インジェクション攻撃に対する最善の防御策のひとつは、悪意のあるコマンドをキャッチしてブロックできるアプリ内ファイアウォール だ。
前進への道
パストラバーサルは、ウェブアプリケーションの初期から存在する脆弱性であり、非常に単純であることが多い一方で、非常に壊滅的な悪用になることもあります。そのため、非常に多くのプロジェクトがいまだにこのような問題に悩まされていることが気になる。3.5%は高い数字ではないように思えるが、その脅威が明らかに継続し、十分に文書化されているにもかかわらず、この数字が増加していることは非常に注目に値する。
パストラバーサルは、消えてなくなる脆弱性ではありませんが、良いニュースは、アプリケーションでこれらの脆弱性を見つけ、見つけた問題を修正することができる明確な方法があるということです。
ボーナス・コンテンツ
実際の事件
近年、いくつかの有名な侵害や脆弱性があり、それらは侵入の主要なポイントとして、あるいは脆弱性の連鎖の一部として、パス・トラバーサルに関与していた。
Microsoft IIS Unicode Exploit(2001)
Microsoft IIS サーバーを標的とした、最も初期の著名なパストラバーサル悪用の1つである。攻撃者はエンコードされたパスを使用して、検証メカニズム(たとえば c0%af
を表します。 /
).これにより、ウェブのルート・ディレクトリ外のファイルにアクセスし、実行することが可能になった。
これにより、マルウェアの展開や多数のウェブサイトの改ざんが可能になった。
フォーティネットVPNパストラバーサル(2019年)
フォーティネットのSSL VPNにディレクトリトラバーサルの脆弱性(CVE-2018-13379)があることが判明しました。攻撃者はこの欠陥を悪用し、VPNユーザーの平文パスワードなど、機密性の高いシステムファイルにアクセスしていました。
何千ものVPN認証情報がネット上に流出し、組織は不正アクセスやさらなる攻撃にさらされることになった。
キャピタル・ワン流出事件(2019年)
何が起こったか主な原因はSSRFの脆弱性であったが、攻撃者はAWS S3バケットのメタデータにアクセスする際にディレクトリトラバーサルも利用していた。攻撃者は設定ミスを悪用し、本来アクセスできないはずの設定ファイルを取得した。
これにより、1億600万人のクレジットカード申込者の個人情報が流出した。
Kubernetesダッシュボードにおけるパストラバーサル(2020)
Kubernetes Dashboard にはディレクトリトラバーサルの不具合(CVE-2020-8563)がありました。攻撃者はこれを悪用して、コンテナ内の機密ファイルを読み取る。 /etc
.