【でぃれくとりとらばーさる】
ディレクトリトラバーサル とは?
最終更新:
💡 ファイルパスの不備を突き、許可した場所の外へアクセスする攻撃
ファイルパスの処理の不備を突き、許可されたディレクトリの外のファイルにアクセスする攻撃。「../」などが使われる。読み取りや書き込みが可能になる範囲は、アプリの処理とOS上の権限にも依存する。
📌 このページのポイント
- 「../」は親ディレクトリを指す。入力をパスとして扱う処理の不備で、許可範囲の外に出ることがある
- 設定ファイルなどが漏れるおそれがある。OSの権限を無条件に突破する攻撃ではない
- 許可するファイルを限定し、パスの参照先が許可範囲内か、利用者に権限があるかを確認する
- パストラバーサル(Path Traversal)とも呼ばれる
ディレクトリトラバーサルってどういう攻撃?
たとえば公開用フォルダー /srv/app/files にある report.pdf を返すアプリを考えよう。入力されたファイル名をそのままつなぐと、../config.env で一つ上の /srv/app/config.env を指せてしまう。範囲を確認しない処理では、公開用フォルダーの外のファイルを返すおそれがあるんだ。
どんなファイルが狙われるの?
接続情報を含む設定ファイルやソースコードなどだよ。ただし、パスを指定できれば何でも読めるわけではない。アプリの実行権限で読めるか、どんなファイル操作をするかにも依存するんだ。書き込み処理に不備があると、許可範囲の外を書き換える危険もあるよ。
どうやって防ぐの?
「../」という文字を拒否するだけじゃだめなの?
それだけでは不十分だよ。URLエンコードなどで表記が変わるからね。%2e%2e%2f は ../ を一度エンコードした例で、..%252f はスラッシュを二重にエンコードした例。デコードと検証の順序をそろえ、検証後にもう一度デコードして危険なパスが現れないようにするんだ。
まとめ:ざっくりこれだけ覚えればOK!
「ディレクトリトラバーサル」って出てきたら「パス処理の不備を突いて、許可した場所の外のファイルにアクセスする攻撃」と思えばだいたいOK!
📖 おまけ:英語の意味
「Directory Traversal」 = ディレクトリの横断
💬 traverse(横断する)が語源。ディレクトリ構造を「横断」してアクセスするイメージだよ