実演動画あり!パス・トラバーサルとは
パス・トラバーサルとは?
Webアプリケーションロジックにおいて、外部⼊⼒をもとにファイルやフォルダを指定しまう処理を実装すると想定外にサーバー内の情報が開⽰されてしまうことがあります。
このようにファイル名の指定⽅法に問題のある実装を⾏うことで、攻撃者に任意のファイルを指定されて想定していない動作を⾏ってしまう問題をパス・トラバーサル脆弱性と呼び、この問題を狙った攻撃のことをパス・トラバーサル攻撃といいます。
なお、このパス・トラバーサル脆弱性は別名、ディレクトリ・トラバーサルと呼ばれることがありますが、どちらも同じ問題を指す名称です。また、パス・トラバーサル攻撃は能動的攻撃に区分されるため、この問題についても攻撃者に気付かれた時点で、即時、ダイレクトに攻撃を受ける危険性があります。
パス・トラバーサル攻撃の仕組み
パス・トラバーサル脆弱性は、おもにWebアプリケーション内において外部⼊⼒に依存してファイルデータやフォルダデータを指定して⼊出⼒の処理を⾏う際に問題が発⽣します。
・パス・トラバーサル攻撃の概要
- 攻撃者は「../」などのディレクトリを遡るような相対パスに加えて開きたいファイル名を指定した⽂字列を含んだHTTPリクエストを送信する
- 問題のあるWebアプリケーションでは、攻撃者が指定した⽂字列をもとにファイルを指定して処理を実⾏する
- 2の結果を含んだHTTPレスポンスデータを応答として返してしまう
被害事例
近年では固有のサービスでの被害事例はあまり報告されていませんが、以下のように広く使われているCMS(コンテンツ管理システム)などではパス・トラバーサル脆弱性の存在が確認されています。
WordPressプラグイン「Duplicator」ディレクトリトラバーサル(CVE-2020- 11738)
【説明の抜粋】
リモートホストで実⾏されているWordPressアプリケーションには、ユーザー指定の⼊⼒が不適切に検証されているため、duplicator_download関数とduplicator_init関数にあるディレクトリトラバーサル脆弱性の影響を受けるバージョンの「Duplicator」プラグインがあります。認証されていないリモート攻撃者がこの問題を悪⽤し、巧妙に作りこまれたリクエストを送信して、任意のファイルをダウンロードする可能性があります。
リンク元:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11738
EC-CUBEにおけるディレクトリトラバーサルの脆弱性
【説明の抜粋】
EC-CUBE 3系、4.0系、4.1系にEC-CUBEにおけるディレクトリトラバーサルの脆弱性(危険度: 低)があることが判明いたしました。
リンク元:https://www.ec-cube.net/info/weakness/20220909/
なお、上記はあくまで⼀例であり、後述するパス・トラバーサル脆弱性の原因となる実装を⾏っているWebアプリケーションでは、運営主体やサービスの特性に関わらずに同様の問題が発⽣します。
脆弱性の解説動画
パス・トラバーサルが起こる原因
Webアプリケーションの処理において、外部⼊⼒をもとにWebサーバー内のファイルやフォルダアクセスを⾏っていることが原因で発⽣します。
以下は2018年に判明したZip Slipにおけるパス・トラバーサル脆弱性の発⽣原因となったプログラムコードです。
・実際の脆弱性の存在したプログラムコード(Java⾔語)
Enumeration entries==zip・g‘tEntries();trie
while(entries・h∥sMoreElements()){()
ZipEntry e ・‘ntries.nextElement();t(
File f = new File(dir, e.=getName());()
InputStream input ==zip・g‘tInputStream(e);ream
IOUtils・c{py(input, write(f));f)
}
補⾜としてZip SlipはEclipseやJenkinsなどのメジャーな統合環境をはじめ、さまざまなプロジェクトで使われているzipファイルを処理するライブラリであったため、上記の脆弱性の影響は世界中に及びました。
上記の問題のあったプログラムコードではFileオブジェクトを⽣成する際に、eに格納される外部⼊⼒の値をバリデーションせずにそのまま引数として渡していたた め、「../」などを含む相対パスを連結することで任意のファイルを指定してFileオブジェクトを⽣成することができる状態でした。
パス・トラバーサル攻撃への対策⼿法
必須対策1(外部⼊⼒に依存したファイルアクセスの実装を避ける)
外部⼊⼒をもとにアクセスするファイルやフォルダを指定するとパス・トラバーサル脆弱性を招く恐れがあります。そのため、外部パラメータの値からWebサーバー内のファイル名を直接指定する実装が本当に必要か検討の上、他の処理⽅法で代価できる場合は、そちらの実装⽅法を採⽤することが望ましいと⾔えます。
必須対策2(ファイル名にフォルダ名が含まれないようにする)
必須対策1が実施できない場合に、必須対策3とともに⾏う対策となります。Webサイトの仕様上、どうしても外部パラメータからファイル名を指定する必要がある場合、該当パラメータにはファイル名のみを保持します。その上で、Webアプリケーションないで絶対パスとして指定しているパス名に連結する形でファイルアクセスを⾏います。
必須対策3(ファイル名のチェックを⾏う)
必須対策1が実施できない場合に、必須対策2とともに⾏う対策となります。必須対策2で絶対パスとしてファイルを指定する際に「../」や「..¥」を使って相対パスとしてディレクトリを遡られないように、OSのパス名解釈でディレクトリを指定できる
⽂字列が含まれている場合に処理を中断するようにチェック処理を⾏います。
なおチェックの際には「/」や「../」、「..¥」だけではなくURLエンコードした状態の「%2F」、「..%2F」、「..%5C」や⼆重エンコードした「%252F」、「..%252F」、「..%255C」などの⽂字列がファイル指定の⼊⼒値として有効な⽂字列となることがあります。そんため、これらの⽂字列についても併せてチェック対象とすることが必要です。
推奨対策(Webサーバー内のファイルやフォルダのパーミッションを絞る)
Webアプリケーションが配置されているWebサーバー内のファイルやフォルダに対して適切なパーミッション設定を施します。このようにWebサーバー内のリソースに適切にアクセス制限を設けることで、仮にパス・トラバーサル攻撃を受けたとしても被害を最⼩限に抑えることができます。
オプショナルな対策(WAFの導⼊)
Webアプリケーションファイアーウォール(WAF)を導⼊して、Webサイトを保護する⽅法です。この⽅法は⼀定の防御効果が⾒込めますが、製品を導⼊・運⽤していくのに費⽤が掛かることに加えて、理論上、すべてのパス・トラバーサル攻撃を防御することができません。そのため、あくまで前述した対策が実施できない場合などに代価案として実施することが望ましい対策と⾔えます。
まずは手軽にツールで脆弱性診断
上述の対策⼿法が重要となる⼀⽅で、脆弱性が混⼊されていないかを検知する事も重要となります。そのためには脆弱性診断を受診する必要があり、パス・トラバーサルの脆弱性についても脆弱性診断を通じて発⾒する事が出来ます。
脆弱性診断とは何かについて詳しく知りたい方は脆弱性診断とは(エンジニア向け)と脆弱性診断とは(⾮エンジニア向け)もぜひご参照ください。
脆弱性診断ツール「Securify Scan」では、パス・トラバーサルの脆弱性検知も対応しております。脆弱性検知やセキュリティレベルを強化したい企業様はぜひ弊社の脆弱性診断ツール「Securify Scan」を活用ください。
無償でのトライアル実施も行っておりますので、
お気軽にお問い合わせください。