情報セキュリティ
ウェブアプリケーションの中には、外部からのパラメータにウェブサーバ内のファイル名を直接指定しているものがあります。このようなウェブアプリケーションでは、ファイル名指定の実装に問題がある場合、攻撃者に任意のファイルを指定され、ウェブアプリケーションが意図しない処理を行ってしまう可能性があります。このような問題の一種を「ディレクトリ・トラバーサルの脆弱性」と呼び、この問題を悪用した攻撃手法の一つに、「ディレクトリ・トラバーサル攻撃」があります。
本脆弱性を悪用した攻撃により、発生しうる脅威は次のとおりです。
運営主体やウェブサイトの性質を問わず、外部からのパラメータにウェブサーバ内のファイル名を直接指定しているウェブアプリケーションに起こりうる問題です。個人情報等の重要情報をウェブサーバ内にファイルとして保存しているサイトは、特に注意が必要です。
パス名パラメータに関する脆弱性の届出がウェブサイトの届出全体に占める割合は、数パーセントと多くはありません。しかしながら、これらの脆弱性については受付開始当初から継続して届出を受けています。下記は、IPAが届出を受け、同脆弱性の対策が施されたソフトウェア製品の例です。
外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装では、そのパラメータが改変され、任意のファイル名を指定されることにより公開を想定しないファイルが外部から閲覧される可能性があります。たとえば、HTML中のhiddenパラメータでウェブサーバ内のファイル名を指定し、そのファイルをウェブページのテンプレートとして使用する実装では、そのパラメータが改変されることで、任意のファイルをウェブページとして出力してしまう等の可能性があげられます。
外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装が本当に必要か、他の処理方法で代替できないか等、仕様や設計から見直すことをお勧めします。
たとえば、カレントディレクトリ上のファイル「filename」を開くつもりで、open(filename) の形式でコーディングしている場合、open(filename) のfilenameに絶対パス名が渡されることにより、任意ディレクトリのファイルが開いてしまう可能性があります。この絶対パス名による指定を回避する方法として、あらかじめ固定のディレクトリ「dirname」を指定し、open(dirname+filename) のような形でコーディングする方法があります。しかし、これだけでは、「../」等を使用したディレクトリ・トラバーサル攻撃を回避できません。これを回避するために、basename() 等の、パス名からファイル名のみを取り出すAPIを利用して、open(dirname+basename(filename)) のような形でコーディングして、filenameに与えられたパス名からディレクトリ名を取り除くようにします(脚注1)。
ウェブサーバ内に保管しているファイルへのアクセス権限が正しく管理されていれば、ウェブアプリケーションが任意ディレクトリのファイルを開く処理を実行しようとしても、ウェブサーバ側の機能でそのアクセスを拒否できる場合があります。
ファイル名を指定した入力パラメータの値から、「/」、「../」、「..\」等、OSのパス名解釈でディレクトリを指定できる文字列を検出した場合は、処理を中止します。ただし、URLのデコード処理を行っている場合は、URLエンコードした「%2F」、「..%2F」、「..%5C」、さらに二重エンコードした「%252F」、「..%252F」、「..%255C」がファイル指定の入力値として有効な文字列となる場合があります。チェックを行うタイミングに注意してください。
以上の対策により、パス名パラメータを悪用した攻撃に対する安全性の向上が期待できます。本脆弱性に関する情報については、次の資料も参考にしてください。