ぷ~ろぐぷ~ろぐ身辺雑記、アニメ・マンガ、Jリーグ(特に新潟)のこととか。発生箇所ファイル名を外部から指定できるページ影響を受けるページすべてのページが脆弱性の影響を受ける。外部からパラメータでサーバ上のファイル名を指定できるWebアプリケーションでは、ファイル名に対するチェックが不十分であるとアプリケーションの意図しないファイルに対して閲覧や改ざん、削除ができる場合がある。これをディレクトリ・トラバーサル脆弱性と呼ぶ。画面のテンプレートファイルを指定できるスクリプトである。?>以下略</body>このスクリプトの正常系の実行例を示す。http://example.jp/sample.php?template=spring上記のURLでは/var/www/tmpl/spring.htmlが表示される。http://example.jp/sample.php?template=../../../etx/hosts%00この場合、ファイルパスは次のように組み立てられる。/var/www/tmpl/../../../etc/hosts[NULL].html"[NULL]"はヌルバイトを表す。ヌルバイトによりファイル名が終端され、正規化後のパスは/etc/hostsとなり、hostsファイルが表示される。このように、ディレクトリトラバーサル・トラバーサル脆弱性があるとWebサーバ上の任意のファイルにアクセスが可能となる。アプリケーションの実装によっては書き込みや削除が可能となる場合もある。ディレクトリ・トラバーサルを用いてPHPなどのスクリプトファイルに書き込みができると、Webサーバ上で実行することにより任意のスクリプトを実行できる場合があります。この際の影響はOSコマンド・インジェクションと同じで、外部から不正プログラムをダウンロードされたりシステムに対する不正操作が可能となる。脆弱性の原因ファイル名を外部から指定することができる。ファイル名として絶対パスや相対パスの形で異なるディレクトリを指定できる。組み立てたファイル名に対するアクセスの可否をチェックしていない。上記3つをすべて満たす場合にディレクトリ・トラバーサル脆弱性が発生する。上記、であげた原因のうちいずれか1つでも対応すれば脆弱性は解消する。以下、対策を説明する。●外部からファイル名を指定できる仕様を避けるファイル名を外部から指定できなくすれば、ディレクトリ・トラバーサル脆弱性を根本的に解決できる。以下の方法で可能である。・ファイル名を固定にする。・ファイル名を直接指定するのではなく番号などで間接的に指定する。●ファイル名にディレクトリが含まれないようにするファイル名にディレクトリ名が含まれないようにすれば、アプリケーションの想定したディレクトリのみにアクセスすることになりディレクトリ・トラバーサル脆弱性が解消する。ディレクトリを示す文字記号はOSにより異なるので、OSによる違いを吸収できるライブラリを使用するべきである。PHPの場合はbasename()が使用できる。basename()を用いた対策例を以下に示す。使用しても拡張子を変更される場合があるので注意が必要である。いうファイル名ができる。●ファイル名を英数字に限定するファイル名の文字種の仕様を英数字に限定すればディレクトリ・トラバーサル脆弱性への攻撃に用いる記号文字が使えなくなる。テクノポップのカリスマ。