■ディレクトリ・トラバース(directory traverse)
相対パス記法などを使うことで、本来はアクセスが許可されていないWebページやファイルへのアクセスを許してしまう脆弱性。システム内のディレクトリ間を横断(トラバース)可能とすることからディレクトリ・トラバースと呼ばれる。ディレクトリ・トラバーサル(directory
traversal)ともいう。
例えば、以下のようなフォルダに対して、dataフォルダの下のみアクセス可能に設定していたとする。
/ ------- home ---- data (アクセス許可あり)
|
------ passwd -- passdata (アクセス許可なし) |
このとき、dataフォルダは、/home/data/と表され、Perlでは以下のような文法で$fileに入力されたファイルを開くことが可能だ。
$filepath = "/home/data/".$file;
open(DATA, $filepath, O_RDONLY); |
ここで、$fileに「../../passwd/passdata」が入力された場合、$filepathには「/home/data/../../passwd/passdata」が入力されることになる。このパスは、「/passwd/passdata」と等価であることから、openでは「/passwd/passdata」が開かれることになり、本来はアクセスを許可していないファイルが開かれてしまう。
この例は、もっとも単純なディレクトリ・トラバースの脆弱性だが、ディレクトリ区切り文字として使用される「\」を「%5c」という文字列にエンコードして記述することで、URLのパスを変更するといった手法などもある。これ以外にも、ディレクトリ・トラバースの脆弱性を悪用する手法は多く存在する。プログラムの記述時にパスやURLの検証を十分に行わないと、思わぬ攻撃を受けてしまう結果となるので注意したい。
|