ディレクトリトラバーサルとも呼ばれるパストラバーサルは、悪意のあるユーザーがユーザー提供データを操作してファイルやディレクトリへの不正アクセスを取得する際に発生します。通常、攻撃者は異なるディレクトリにあるログや認証情報にアクセスしようとします。パストラバーサルは新しい脆弱性ではなく、Webサーバーが普及した90年代以降、活発にエクスプロイトされており、多くのWebサーバーは動的なサーバーサイドコンテンツを実行するためにCommon Gateway Interface (CGI) スクリプトに依存していました。
これほど長い歴史を持つパストラバーサルは、今日でも依然として一般的脅威なのでしょうか? 当社は、オープンソースおよびクローズドソースプロジェクトの両方を対象に調査を実施し、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 "File not found"
変数がURLで提供されているため、これを次のように変更できます。 file=../../../../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%へと急増しました。これは85%の大幅な増加であり、この種の脆弱性に関する憂慮すべき傾向を示しています。
残念ながら、悪いニュースはそれだけではありません。オープンソースプロジェクトで報告される脆弱性の総数は依然として増加傾向にあります。オープンソースプロジェクトで報告されたインジェクション脆弱性の総数は、2023年の742件から2024年これまでに917件に増加しました(1,000件に達すると予想されています)。

パストラバーサルの防止
コマンドインジェクション脆弱性の防止には、多角的なアプローチが必要です。
入力検証
- ユーザー入力をサニタイズする: などの危険な文字を除去またはエンコードする
../,..\,..%2f、またはその他のバリエーション。 - 許可リスト方式: 許可される入力(例:ファイル名やパス)の厳密なセットを定義し、このリストにないものはすべて拒否します。
ファイルアクセスを制限する
- chroot jailまたはサンドボックスを使用する: アプリケーションのファイルアクセスを制限されたディレクトリに限定し、意図されたディレクトリツリーを超えてトラバースできないようにします。
- ルートディレクトリを設定する: ベースディレクトリを定義し、すべてのパスがそれらに対して相対的であることを確認します。これを強制するAPIやフレームワークを使用します。例:
java.nio.file.Paths.get("baseDir").resolve(userInput).normalize()Javaで。os.path.realpath()そしてos.path.commonpath()Pythonで。
安全なファイルアクセスAPI
- 最新のライブラリやフレームワークによって提供される安全なファイルアクセス方法を使用します。In Java、使用します
Files.newInputStream()またはFiles.newBufferedReader()安全なファイル処理のために。
In Pythonファイルパスにアクセスする前に、必ず検証してください。
環境制限を適用します。
- 制限的な ファイルシステム権限アプリケーションが必要最小限の権限のみを持つようにしてください。
機密性の高いディレクトリ(例:/etc,/var,/usr、およびユーザーのホームディレクトリ)。 - Webサーバーやフレームワークの不要な機能(例:シンボリックリンクの追跡)を無効にします。
自動テスト
- これらの脆弱性を発見するために、Aikidoのようなツールを使用してソースコードとアプリケーションをスキャンします。
- 隠れたパス横断脆弱性がないことを確実にするために、SASTツールとDASTツールはドメインスキャンおよびクラウドセキュリティと併せて使用する必要があります。
インアプリファイアウォールを使用します。
- インジェクション攻撃に対する最善の防御策の1つは、悪意のあるコマンドを捕捉してブロックできるインアプリファイアウォールです。
今後の展望
パストラバーサルは、Webアプリケーションの登場以来存在する脆弱性であり、多くの場合非常に単純ですが、非常に壊滅的なエクスプロイトにもなり得ます。これほど多くのプロジェクトが依然としてこのような問題に苦しんでいることは非常に懸念されます。3.5%という数字は高く見えないかもしれませんが、その明確で継続的かつ十分に文書化された脅威にもかかわらず、その人気が高まっていることは非常に注目に値します。
パストラバーサルはなくなることのない脆弱性ですが、幸いなことに、アプリケーション内でこれらの脆弱性を見つけ、発見された問題を修正する明確な方法があります。
ボーナスコンテンツ
実際のインシデント
近年、パス・トラバーサルが主要な侵入経路、または脆弱性連鎖の一部として関与した、いくつかの注目を集める侵害や脆弱性が報告されています。
Microsoft IIS Unicode Exploit (2001)
Microsoft IISサーバーを標的とした初期の注目すべきパス・トラバーサル・エクスプロイトの1つです。攻撃者は、エンコードされたパスを使用して検証メカニズムをバイパスしました(例: %c0%af を表すために /)。これにより、Webルートディレクトリ外のファイルにアクセスし、実行することが可能になりました。
これにより、マルウェアの展開や多数のウェブサイトの改ざんが可能になりました。
Fortinet VPN パストラバーサル (2019年)
FortinetのSSL VPNにディレクトリトラバーサル脆弱性(CVE-2018-13379)が発見されました。攻撃者はこの脆弱性を悪用し、VPNユーザーの平文パスワードなどの機密システムファイルにアクセスしました。
数千ものVPN認証情報がオンラインで漏洩し、組織は不正アクセスやさらなる攻撃に晒されました。
Capital One 情報漏洩 (2019年)
何が起こったか: 主な原因はSSRF脆弱性でしたが、攻撃者はAWS S3バケットのメタデータにアクセスする際にディレクトリトラバーサルも悪用しました。攻撃者は設定ミスをエクスプロイトし、アクセス不能であるべき設定ファイルを取得しました。
これにより、1億600万人のクレジットカード申請者の個人データが流出しました。
Kubernetes Dashboardにおけるパストラバーサル (2020年)
Kubernetes Dashboardにはディレクトリトラバーサルの脆弱性(CVE-2020-8563)がありました。攻撃者はこれをエクスプロイトし、コンテナ内の機密ファイル(保存されているシークレットを含む)を読み取りました。 /etc.

