ディレクトリ トラバーサル(またはパス トラバーサル) 攻撃は、ユーザー指定のファイル名のセキュリティ検証またはサニタイズが不十分なことを悪用し、「親ディレクトリへのトラバース」を表す文字がオペレーティング システムのファイル システム APIに渡されます。影響を受けるアプリケーションは、ファイル システムへの不正アクセスに悪用される可能性があります。
例
PHPの場合
PHPコード 内の脆弱なアプリケーションの典型的な例は次のとおりです。
<?php
$template = 'red.php' ;
if ( isset ( $_COOKIE [ 'TEMPLATE' ])) {
$template = $_COOKIE [ 'TEMPLATE' ];
}
include "/home/users/phpguru/templates/" . $template ;
このシステムに対する攻撃は、次の HTTP リクエストを送信することによる可能性があります。
GET /vulnerable.php HTTP / 1.0
Cookie : TEMPLATE=../../../../../../../../../etc/passwd
サーバーは次のような応答を生成します。
HTTP / 1.0 200 OK
コンテンツタイプ: text/html
サーバー: Apache
ルート:fi3sED95ibqR6:0:1:システムオペレータ:/:/bin/ksh
デーモン:*:1:1::/tmp:
phpguru:f8fk3j1OIf31.:182:100:開発者:/home/users/phpguru/:/bin/csh
後の繰り返し../文字により、/home/users/phpguru/templates/ルート
include()ディレクトリに移動し、Unix パスワード ファイルが含まれます/etc/passwd。
Unix は/etc/passwdディレクトリ トラバーサルのデモンストレーションによく使用されるファイルで、クラッカーがパスワードを解読するためによく使用されます。ただし、最近の Unix システムでは、/etc/passwdハッシュ化されたパスワードはファイルに含まれておらず、/etc/shadowマシン上の権限のないユーザーが読み取ることができないファイル内に格納されています。ただし、その場合でも、読み取る/etc/passwdとユーザー アカウントの一覧が表示されます。
Zip Slip の脆弱性
もう1つの例は、 ZIPなどのいくつかのアーカイブファイル形式に影響を及ぼすZip Slip脆弱性です。[1]
バリエーション
最も単純な形式のディレクトリ トラバーサルでは、../パターンを使用します。一般的なバリエーションをいくつか以下に示します。
マイクロソフトウィンドウズ
Microsoft WindowsとDOSのディレクトリトラバーサルでは、..\または../パターンが使用されます。[2]
各パーティションには個別のルート ディレクトリ (ラベルはC:\C で、任意のパーティション) があり、その上に共通のルート ディレクトリはありません。つまり、Windows のほとんどのディレクトリ脆弱性に対する攻撃は、単一のパーティションに限定されます。
ディレクトリトラバーサルは、数多くのMicrosoftの脆弱性の原因となっている。[3] [4]
URI のパーセントエンコーディング
一部のウェブアプリケーションは、リクエストURIのパスをスキャンしてなどのパターンを探すことでディレクトリトラバーサルを防止しようとします。../このチェックは、パーセントデコードの前に誤って などのパターンを含むURIが、実際に使用される前に%2e%2e/にデコードされているにもかかわらず受け入れられてしまうことがあります。 [5]../
二重エンコーディング
パーセントデコードは誤って複数回実行される可能性があります。検証前に1回、検証後にもう一度実行されると、アプリケーションは二重パーセントエンコーディング攻撃[6]に対して脆弱になります。この攻撃では、不正な文字が二重パーセントエンコードされた形式に置き換えられ、セキュリティ対策が回避されます。[7]たとえば、二重パーセントエンコーディング攻撃では、../が二重パーセントエンコードされた形式に置き換えられる可能性があります%252E%252E%252F。[8]この種の脆弱性は、 MicrosoftのIIS Webサーバーソフトウェアのバージョン5.0以前に大きな影響を与えました。[9]
UTF-8
不適切に実装されたUTF-8デコーダーは、必要以上に多くのバイトを使用してエンコードされた文字を受け入れる可能性があり、 や などの代替文字表現につながります。これらは両方%2eとも%c0%aeを表します.。これは UTF-8 標準で明確に禁止されていますが、[10] IIS Web サーバーなどのソフトウェアでディレクトリ トラバーサルの脆弱性を引き起こします。[11]
アーカイブ
zipなどの一部のアーカイブ形式では、ディレクトリ トラバーサル攻撃が可能です。アーカイブ内のファイルは、バックトラックによってファイル システム上のファイルを上書きするように記述できます。アーカイブ ファイルを抽出するコードは、アーカイブ内のファイルのパスがパス トラバーサルを行っていないことを確認するように記述できます。
防止
ディレクトリトラバーサルを防止するためのアルゴリズムとしては、次のようなものが考えられます。
- 以下に進む前に、ファイル要求につながらない URI 要求 (ユーザー コードへのフックの実行など) を処理します。
- ファイル/ディレクトリの URI 要求を行うときは、ファイル/ディレクトリが存在する場合はその完全なパスを構築し、すべての文字を正規化します (たとえば、
%20スペースに変換します)。 - 'Document Root' の完全修飾された正規化されたパスが既知であり、この文字列の長さがNであると想定します。このディレクトリ外のファイルは提供できないものとします。
- 要求されたファイルへの完全修飾パスの最初のN文字が「ドキュメント ルート」とまったく同じであることを確認します。
- そうであれば、ファイルを返却することを許可します。
- そうでない場合は、リクエストが Web サーバーが提供できる範囲外であることは明らかなので、エラーを返します。
ハードコードされた定義済みのファイル拡張子を使用してパスを末尾に追加しても、攻撃の範囲がそのファイル拡張子のファイルに限定されるとは限りません。
<?php
include ( $_GET [ 'file' ] . '.html' );
ユーザーは、 .以降のすべてをバイパスするために、NULL 文字$_GET(文字列の終わりを示す) を使用できます(これは PHP 固有です)。
参照
- chroot jail は、誤って作成された場合、ディレクトリ トラバーサルの影響を受ける可能性があります。ディレクトリ トラバーサル攻撃ベクトルとして考えられるのは、jail 外のディレクトリへのオープンファイル記述子です。作業ディレクトリも、考えられる攻撃ベクトルの 1 つです。
- 安全でない直接オブジェクト参照
参考文献
- ^ 「Zip Slip 脆弱性」。Snyk。
この脆弱性は、ディレクトリ トラバーサル ファイル名 (例: ../../evil.sh) を保持する特別に細工されたアーカイブを使用して悪用されます。Zip Slip 脆弱性は、tar、jar、war、cpio、apk、rar、7z など、多数のアーカイブ形式に影響を与える可能性があります。
- ^ 「ファイル、パス、および名前空間の命名」。Microsoft。Windows
API のファイル I/O 関数は、名前を NT スタイルの名前に変換する過程で '/' を '\' に変換します。
- ^ Burnett, Mark (2004年12月20日). 「Security Holes That Run Deep」. SecurityFocus . 2021年2月2日時点のオリジナルよりアーカイブ。 2016年3月22日閲覧。
- ^ 「Microsoft: セキュリティの脆弱性 (ディレクトリ トラバーサル)」。CVE の詳細。
- ^ 「パストラバーサル」。OWASP。
- ^ 「CWE-174: 同一データの二重デコード」cwe.mitre.org . 2022年7月24日閲覧。
ソフトウェアは同じ入力を2回デコードするため、デコード操作の間に行われる保護メカニズムの有効性が制限される可能性があります。
- ^ 「CAPEC-120: 二重エンコーディング」。capec.mitre.org 。 2022年7月23日閲覧。
この[二重エンコーディング]により、トラバーサル攻撃やインジェクション攻撃で使用される可能性のある不正な文字や文字列を検出しようとするフィルターを、攻撃者が回避できる可能性があります。[...] フィルターを回避するために、入力の一部に二重エンコーディングを試みてください。
- ^ 「二重エンコーディング」。owasp.org 。 2022年7月23日閲覧。
たとえば、../ (ドット・ドット・スラッシュ) 文字は、16進数表現で %2E%2E%2F を表します。% 記号が再度エンコードされると、16進コードでの表現は %25 になります。二重エンコード処理の結果、../ (ドット・ドット・スラッシュ) は %252E%252E%252F になります。
- ^ 「CVE-2001-0333」。共通脆弱性識別子。
- ^ Yergeau, F. (2003). 「RFC 2279 - UTF-8、ISO 10646 の変換形式」. IETF . doi : 10.17487/RFC3629 .
- ^ 「CVE-2002-1744」。共通脆弱性識別子。
リソース
- オープン Web アプリケーション セキュリティ プロジェクト
- WASC 脅威分類 – パストラバーサル
- パストラバーサル脆弱性の悪用と修復[永久リンク切れ]
- CWE 共通脆弱性列挙 - パストラバーサル
外部リンク
- DotDotPwn – ディレクトリ トラバーサル ファザー
- ディレクトリトラバーサルを使用したことに対する有罪判決。
- 「悪法から利益を得るのは悪人だけ」 。comment.zdnet.co.uk 。2005年 10 月 7 日。2006 年 10 月 8 日のオリジナルよりアーカイブ。
- Bugtraq: IIS %c1%1c リモート コマンド実行
- Cryptogramニュースレター 2001年7月。
