概要
ウェブアプリケーションの中には、外部からのパラメータにウェブサーバ内のファイル名を直接指定しているものがあります。このようなウェブアプリケーションでは、ファイル名指定の実装に問題がある場合、攻撃者に任意のファイルを指定され、ウェブアプリケーションが意図しない処理を行ってしまう可能性があります。このような問題の一種を「ディレクトリ・トラバーサルの脆弱性」と呼び、この問題を悪用した攻撃手法の一つに、「ディレクトリ・トラバーサル攻撃」があります。
発生しうる脅威
本脆弱性を悪用した攻撃により、発生しうる脅威は次のとおりです。
- サーバ内ファイルの閲覧、改ざん、削除
・ 重要情報の漏えい
・ 設定ファイル、データファイル、プログラムのソースコード等の改ざん、削除
注意が必要なウェブサイトの特徴
運営主体やウェブサイトの性質を問わず、外部からのパラメータにウェブサーバ内のファイル名を直接指定しているウェブアプリケーションに起こりうる問題です。個人情報等の重要情報をウェブサーバ内にファイルとして保存しているサイトは、特に注意が必要です。
- サーバ内ファイルを利用するウェブアプリケーションの例
・ ウェブページのデザインテンプレートをファイルから読み込む
・ 利用者からの入力内容を指定のファイルへ書き込む 等
届出状況
パス名パラメータに関する脆弱性の届出がウェブサイトの届出全体に占める割合は、数パーセントと多くはありません。しかしながら、これらの脆弱性については受付開始当初から継続して届出を受けています。下記は、IPAが届出を受け、同脆弱性の対策が施されたソフトウェア製品の例です。
- シンクグラフィカ製「ダウンロードログCGI」におけるディレクトリ・トラバーサルの脆弱性
https://jvndb.jvn.jp/jvndb/JVNDB-2015-000006 - 「Spring Framework」におけるディレクトリ・トラバーサルの脆弱性
https://jvndb.jvn.jp/jvndb/JVNDB-2014-000054
- 「VMware ESX および ESXi」におけるディレクトリ・トラバーサルの脆弱性
https://jvndb.jvn.jp/jvndb/JVNDB-2013-000084
根本的解決
3-(i)-a
外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装を避ける。
外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装では、そのパラメータが改変され、任意のファイル名を指定されることにより公開を想定しないファイルが外部から閲覧される可能性があります。たとえば、HTML中のhiddenパラメータでウェブサーバ内のファイル名を指定し、そのファイルをウェブページのテンプレートとして使用する実装では、そのパラメータが改変されることで、任意のファイルをウェブページとして出力してしまう等の可能性があげられます。
外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装が本当に必要か、他の処理方法で代替できないか等、仕様や設計から見直すことをお勧めします。
3-(i)-b
ファイルを開く際は、固定のディレクトリを指定し、かつファイル名にディレクトリ名が含まれないようにする。
たとえば、カレントディレクトリ上のファイル「filename」を開くつもりで、open(filename) の形式でコーディングしている場合、open(filename) のfilenameに絶対パス名が渡されることにより、任意ディレクトリのファイルが開いてしまう可能性があります。この絶対パス名による指定を回避する方法として、あらかじめ固定のディレクトリ「dirname」を指定し、open(dirname+filename) のような形でコーディングする方法があります。しかし、これだけでは、「../」等を使用したディレクトリ・トラバーサル攻撃を回避できません。これを回避するために、basename() 等の、パス名からファイル名のみを取り出すAPIを利用して、open(dirname+basename(filename)) のような形でコーディングして、filenameに与えられたパス名からディレクトリ名を取り除くようにします(*1)。
保険的対策
3-(ii)
ウェブサーバ内のファイルへのアクセス権限の設定を正しく管理する。
ウェブサーバ内に保管しているファイルへのアクセス権限が正しく管理されていれば、ウェブアプリケーションが任意ディレクトリのファイルを開く処理を実行しようとしても、ウェブサーバ側の機能でそのアクセスを拒否できる場合があります。
3-(iii)
ファイル名のチェックを行う。
ファイル名を指定した入力パラメータの値から、「/」、「../」、「..\」等、OSのパス名解釈でディレクトリを指定できる文字列を検出した場合は、処理を中止します。ただし、URLのデコード処理を行っている場合は、URLエンコードした「%2F」、「..%2F」、「..%5C」、さらに二重エンコードした「%252F」、「..%252F」、「..%255C」がファイル指定の入力値として有効な文字列となる場合があります。チェックを行うタイミングに注意してください。
以上の対策により、パス名パラメータを悪用した攻撃に対する安全性の向上が期待できます。本脆弱性に関する情報については、次の資料も参考にしてください。
脚注
3.3の修正例を参照。 https://www.ipa.go.jp/files/000017316.pdf
CWE
- CWE-22: パス・トラバーサル
https://jvndb.jvn.jp/ja/cwe/CWE-22.html - CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
https://cwe.mitre.org/data/definitions/22.html
参考URL
- IPA: 知っていますか?脆弱性 (ぜいじゃくせい) 「4. パス名パラメータの未チェック/ディレクトリ・トラバーサル」
https://www.ipa.go.jp/security/vuln/vuln_contents/dt.html - IPA:ソフトウェア等の脆弱性関連情報に関する届出状況[2014年第4四半期(10月~12月)1-4.節
https://www.ipa.go.jp/security/vuln/report/vuln2014q4.html