指定されたディレクトリの外にあるファイルを読み込ませる攻撃である。WebブラウザからのURL指定によるアクセスはDocumentRootで指定されたディレクトリよりも上にあるファイルにはアクセスできないが、Webアプリケーションでは通常どのファイルにもアクセスできる。これを利用して、Webアプリケーションに「../../../etc/passwd」のようなパラメータを渡すことで、不正にアクセスする攻撃である。
URLパラメータで明示的に指定されたファイルを表示するアプリケーションが主なものだろう。これは、第1回「サーバのファイルが丸見え?!」で紹介したアプリケーションである。
html.cgi?file=aboutme
上記のように指定するとaboutme.htmlというファイルを読み込んで表示する仕様である。このような作りであってもfileの値としてファイル名以外は指定できなくなっていれば問題は発生しない。
前述したように想定している文字以外は受け付けないようにする。ファイルを表示するだけのアプリケーションであれば英数字だけを受け付けるようにすれば、ほぼ問題ないだろう。
特に言語に依存するものでもないためperlの例だけを示しておこう。
perl
# 入力チェック(ファイル名は、英数字のみ) if($file =~ /^[0-9a-zA-Z]+$/){ # ok }else{ # ng }
バックドアは開発者が不正に作り込んだ裏口、デバッグオプションは開発時のデバッグ用のコードがそのまま残ってしまっているものである。バックドアに関しては発見するのはかなり難しいが、デバッグオプションについては後述する「クライアント側コメント」によって発見されることがある。
完全に開発者に依存するため推測は不可能である。使途不明のパラメータが存在する場合、この脆弱性が隠れている可能性がある。
コーディングで防げるものではない。開発段階でのソースコードチェックなどで見つけ出すしかないのではないかと思う。
言語に依存する脆弱性ではない。
Copyright © ITmedia, Inc. All Rights Reserved.