見出し画像

(学習たれ流し)ディレクトリ・トラバーサル

概要

外部からウェブサーバ上のファイル指定を行うようなアプリケーション(※)において、指定したファイル名に悪意のあるコマンドを入力するよりファイルを改ざんや削除などをする攻撃手法
個人情報等の重要情報をウェブサーバ内にファイルファイル保存しているサイトは特に注意が必要。

※外部からウェブサーバ上のファイル指定を行うようなアプリケーションの例:ウェブページのデザインテンプレートをファイルから読み込む、利用者から入力内容を指定のファイルへ書き込む など

例として、以下のようにプロフィール情報が書かれたファイルを、外部からユーザ名を受け取って参照するPerlのプログラムがあったとする。

my $dataPath = "/users/cwe/profiles";
my $username = param("user");
my $profilePath = $dataPath . "/" . $username;


open(my $fh, "<$profilePath") || ExitError("profile read error: $profilePath");
print "<ul>¥n";
while (<$fh>) {
print "<li>$_</li>¥n";
}
print "</ul>¥n;"	

プログラムとして、$usernameとして「yamada」「takahashi」などを想定しているが、以下のような入力がされた場合、

../../../etc/passwd

$dataPathと連結後以下のようになる。

/users/cwe/profiles/../../../etc/passwd

結果、以下のパスになってしまい、想定していないファイルへのアクセスを許してしまうことになる。

/etc/passwd

発生しうる脅威

  • サーバ内ファイルの閲覧・改ざん・削除:重要情報が漏えいしたり、設定ファイル・データファイル・ソースコードが改ざん・削除されたりする

上記の脅威により影響を受ける範囲は以下の通り。

  • 完全性:機密ファイルの作成や上書き→権限のないコードやコマンドの実行

  • 完全性:ファイルやディレクトリの改ざん→改ざんしたファイルがセキュリティのメカニズムに使用されている場合、認証回避可能となってしまうなど

  • 機密性:ファイルやディレクトリの読み取り→極秘データの漏えい(パスワードファイルなど)

  • 可用性:プログラム、ライブラリや重要データなどの機密ファイルを上書き・削除・破損→ソフトウェアの機能が使用できなくなる。もしも認証機能などが破損した場合、全ユーザがロックアウトされる危険性もある。

被害状況

IPAへの届出件数としては多くないが、よく使用されるフレームワークや仮想マシンで脆弱性が報告されている模様。(報告自体は6年以上前なので結構昔の話)

SpringFrameworkのディレクトリ・トラバーサルの脆弱性

【出典元】
JVN iPedia:JVNDB-2014-000054

検出手段

自動静的分析

パストラバーサルの脆弱性が存在するエリアを自動で探す方法。

手動静的分析

ホワイトボックス的に全てのファイルアクセス操作を評価する方法。

根本的解決

外部パラメータでウェブサーバ内のファイル名を直接指定する実装をしない

そもそもそのような機能が必要なのか、他の処理方法で代替できないかを検討する。

ファイルオープン時、固定ディレクトリを指定し、かつディレクトリ名が含まれないようにする

ディレクトリ名はシステム側で固定値を指定するようにし、ファイル名は、ファイル名のみを取り出すAPIを使用して、ディレクトリ名を除く処理を入れる。

保険的対策

ファイルアクセス権限の設定を正しく管理する

ウェブアプリ側のアクセス権を必要最低限に絞る。
本来アクセスできないディレクトリ・ファイルにアクセスしようとしても、ウェブサーバ側でアクセス拒否できれば防げる。

ファイル名のチェックを行う

入力パラメータの値から、「/」、「../」、「..\」等、OS のパス名解釈でディレクトリを指定できる文字列をチェックするプログラムを入れる。ただし、URLデコード処理を行なっている場合、「%2F」(エンコード後のスラッシュ)、「%252F」(2重エンコード後のスラッシュ)などになっているためチェックタイミングには注意が必要。←ここら辺が処理として危険なため保険的対策だと理解

この記事が気に入ったらサポートをしてみませんか?