モティオの開発備忘録

ITエンジニアとして働いています。

パス名パラメータの未チェック/ディレクトリ・トラバーサル 脆弱性と対策

今回もIPAの資料をもとにパス名パラメータの未チェックによる脆弱性と対策についておさらいします。

パス名パラメータの未チェック/ディレクトリ・トラバーサル

ウェブアプリケーションには、外部パラメータからのパラメータにウェブサーバ内のファイル名を直接指定しているものがあります。ファイル名指定の実装に問題がある場合、攻撃者に任意のファイルを指定され、ウェブアプリケーションが意図しない処理を行ってしまう可能性があります。

発生し得る脅威

  • サーバ内ファイルの閲覧・改竄・削除
    重要情報の漏洩、設定ファイル・データファイル・ソースコード等の改竄、削除

注意が必要なウェブサイトの特徴

外部からのパラメータにウェブサーバ内のファイル名を直接指定しているウェブアプリケーションに起こりうる問題です。個人情報等の重要情報をウェブサーバ内にファイルとして保存している場合、特に注意が必要です。

サーバ内ファイルを利用するウェブアプリケーションの例

  • ウェブページのデザインテンプレートをファイルから読み込む
  • 利用者からの入力内容を指定のファイルへ書き込む 等

根本的解決

  1. 外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装を避ける
    上記実装では、そのパラメータが改変され、任意のファイル名を指定されることにより公開を想定しないファイルが外部から閲覧される可能性があります。
    外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装が本当に必要か、他の処理方法で代替できないか等、仕様や設計から見直しましょう。


  2. ファイルを開く際は、固定のディレクトリを指定し、かつファイル名にディレクトリ名が含まれないようにする
    例えば、カレントディレクトリ上のファイル「filename」を開くつもりで、open(filename)の形式でコーディングしている場合、open(filename)のfilenameに絶対パスが渡されることにより、任意のディレクトリのファイルが開いてしまう可能性があります。この絶対パス名による指定を回避する方法として、あらかじめ固定のディレクトリ「dirname」を指定し、open(dirname+filename)のような形でコーディングする方法があります。しかし、これだけでは、「../」等を使用したディレクトリ・トラバーサル攻撃を回避できません。これを回避するために、basename()等の、パス名からファイル名のみを取り出すAPIを利用して、open(dirname+basename(filename))のような形でコーディングして、filenameに与えられたパス名からディレクトリ名を取り除くようにします。

保険的対策

  1. ウェブサーバ内のファイルへのアクセス権限の設定を正しく管理する
    ファイルのアクセス権限が正しく管理されていれば、ウェブアプリケーションが任意のディレクトリのファイルを開く処理を実行しようとしても、ウェブサーバ側の機能でアクセスを拒否できる場合があります。

  2. ファイル名のチェックを行う
    ファイル名を指定した入力パラメータの値から、「/」、「../」、「..\」等、OSのパス名解釈でディレクトリを指定できる文字列を検出した場合は処理を中止します。ただし、URLエンコードした「%2F」、「..%2F」、「..%5C」、さらに二重エンコードした「%252F」、「..%252F」、「..%255C」がファイル指定の入力値として有効な文字列となる場合あるので、チェックを行うタイミングで注意します。

 

詳細はこちらのサイトを参照ください。

www.ipa.go.jp