ディレクトリトラバーサル
ディレクトリトラバーサル (英語: directory traversal) とは、利用者が供給した入力ファイル名のセキュリティ検証/無害化が不十分であるため、ファイルAPIに対して「親ディレクトリへの横断 (traverse)」を示すような文字がすり抜けて渡されてしまうような攻撃手法のことである。
この攻撃の目標は、アクセス可能にすることを意図していないファイルへのアクセスをアプリケーションに命令することである。この攻撃は、コードに含まれるバグの攻撃とは対照的に、セキュリティの欠如 (ソフトウェアがまさにそう振る舞うことになっている動作) を攻撃する。
ディレクトリトラバーサルには ../ (ドットドットスラッシュ) 攻撃、 ディレクトリクライミング、およびバックトラッキングのような別名がある。この攻撃の一部の形態は、正規化攻撃でもある。
PHPによる脆弱なアプリケーションの典型例を以下に示す:
このシステムに対する攻撃として、以下のようなHTTP要求の送信が考えられる:
生成されるサーバの応答は以下のようになる:
/home/users/phpguru/templates/ の後に繰り返される ../ 文字列がルートディレクトリへさかのぼるinclude()を引き起こし、それからUNIXパスワードファイル /etc/passwd をインクルードする。
UNIX /etc/passwd はクラッカーがパスワードクラッキングにしばしば使うため、ディレクトリトラバーサルの実演でよく使われるファイルである。