ディレクトリ・トラバーサル(パス・トラバーサル)について調べてみた

ディレクトリ・トラバーサル(パス・トラバーサル)とは

本来、公開されていないURLにアクセスすることを
「ディレクトリ・トラバーサル」
(あるいは、パス・トラバーサル)と言います。
アクセス許可がされていないページやファイルへのアクセスを
許してしまう脆弱性が問題となります。
システム/アプリ内のディレクトリ間を横断(トラバーサル)
するところから来ているそうです。

wikipediaによると、
「ディレクトリトラバーサルにはthe ../ (ドットドットスラッシュ) 攻撃、
ディレクトリクライミング、およびバックトラッキングのような別名がある。」

クロスサイト・スクリプティングや、SQLインジェクションほど有名では
ありませんが、「PHP公式資格教科書」にも載っていますし、
攻略されると悪質なプログラムを設置されたり、UNIX系ではユーザ情報を
格納しているディレクトリを閲覧されてしまうなどの被害を被ることになります。

どんなプログラムが脆弱性を含むのか

require や include で外部ファイルを参照する際、
ファイル名を動的にし、かつGETやPOSTで受け付けていると、
「../../../../../../../../../etc/passwd」といったリクエストにより、
UNIXパスワードファイルをインクルードしてしまい、
結果として画面に出力されるといった甚大な情報漏洩につながります。

もっと簡単にまとめると、
「外部からのパラメータにウェブサーバ内のファイル名を
直接指定しているウェブアプリケーションに起こりうる問題」
(『安全なウェブサイトの作り方』改訂第7版)と言えます。

どのような被害がもたらされるのか。過去の事例

事件、事例としてはGoogleで探しても現在はあまり出てきません。
個人情報の漏えいにつながる案件が多いので、不名誉な過去のニュースは
削除の依頼が多いのかも知れませんね…。
※あまり事例として紹介しすぎると、企業からお小言を頂きそうなので、
数件くらいにしておきます。

・2002年 TBC
使用していたウェブアプリケーションで、
本来利用者にアクセスされてはいけない個人情報を含むファイルを
ウェブサーバのドキュメントルート上に保存していたため、
ウェブサーバ経由で誰でも取得可能になっていたというもの
「サイト脆弱性をチェックしよう!–第7回:「ディレクトリトラバーサル」と「強制ブラウジング」 ZDNet Japan」

・2003年 ACCS
脆弱性のある「csvmail.cgi」がACCSのサイトで使用されており、
Hiddenフィールドで指定したテンプレートを表示する機能を悪用して、
任意のファイルの内容が表示可能となってしまった。
「脆脆弱性コラム – 第7回|AppScan|テクマトリックス株式会社」

記事としては古いものが多いなと思っていたのですが、
2010年以降では、Android のアプリで見つかることも。

・2014年 ES APP Group
ファイル管理用のAndroidアプリ「ES File Explorer」に
ディレクトリトラバーサルの脆弱性が存在。
『Androidアプリ「ES File Explorer」にディレクトリトラバーサルの脆弱性(JVN)』

歴史を追うと、実害を実感できますね。

古くはUNIX系のパスワードファイルの閲覧→ 
情報漏洩というパターンが多いのですが、
最近ではタブレットやスマホのアプリに潜む脆弱性として
改めて台頭してきているイメージがあります。

Webサービスのノウハウを元に、アプリを生成する仕組みがあります。
私も使ってみたいと前から思っていますが、安易に使い、
ディレクトリ・トラバーサルを作りこむことのないよう意識したいと思います。