用語「Path Traversal」について
Path Traversal (ぱすとらばーさる)
ここでの traverse は横切る、通過するというような意味で、パスの指定が制作者の意図しない部分にまで到達してしまうという脆弱性です。
良くあるのは、テンプレートなどのファイルを指定するパス指定が貫通してしまうパターンです。たとえば、以下のような URL で動作する PHP があったとします。
https://inquiry.example.com/index.php?TEMPLATE=foo.tmpl
ここでは、TEMPLATE= の後ろにテンプレートのファイル名が指定されています。index.php と同じディレクトリにある foo.tmpl の内容を読み込み、必要な部分を置換して表示するようになっているわけです。
さて、ここで以下のような URL にアクセスするとどうなるでしょうか?
https://inquiry.example.com/index.php?TEMPLATE=/etc/passwd
Path Traversal の対策を何も行っていない場合、これで /etc/passwd の中身が見えてしまうことがあります。全く同じようにして、任意のファイルが読めてしまうことがあります。実際、私はこのようにして /etc/passwd の内容が読めてしまったシステムを知っています。
なお、"/" で始まる絶対パスだけでなく、"../" を使ってディレクトリをさかのぼるという技もありますので、単に "/" で始まる文字列をチェックするだけでは不十分です。そもそも、ディレクトリをまたがって読みに行けるような設計をすべきではありません。
上記の例は PHP スクリプトの問題でしたが、Web サーバ自体にこの欠陥があると、もっと大変なことが起きる場合があります。実際に昔の IIS にはこの欠陥があり、その結果として Code Red ワームが蔓延するという事態が起きました。IIS のこの欠陥は Unicode Web Traversal として知られていますが、これも Path Traversal の一種です。
「Path Traversal」に関連する用語
- 「Path Traversal」にコメントを書く