Presented by Nishishi via Movable Type. Last Updated: 2007/11/04. 05:09:28.

NUL文字で拡張子指定を迂回する攻撃

先日の情報処理技術者試験、「テクニカルエンジニア(情報セキュリティ)」では、Perlソースコード中に埋め込まれているファイル拡張子の指定をどうやったら無視して、任意のファイルを指定する攻撃が可能かを問う問題がありました。

出題されているのは、Web上の入力フォームからの文字列を変数 $fname に格納して、その$fnameの末尾に「.cep」という拡張子を合体させてファイル名として扱うプログラムです。入力フォームに「abcde」と入力すれば、「abcde.cep」というファイルにアクセスすることになります。

問題文中での担当者は、ソース中で「.cep」という拡張子を埋め込んでいるのだから、このシステムでは拡張子.cep以外のファイルにアクセスできることはない、と考えています。でも、「Perlの文字列の処理方法を十分に調査して」再検討しなさいと言われてしまいます。

それはなぜか?を問う問題です。

私は分かんなかったんですが(^^;)、どうやらNUL文字を渡すことで、その後に続く文字列を無効化できてしまうようです。水無月ばけらさんとこで解説されてました。↓

情報処理試験でNUL文字攻撃の問題など(@水無月ばけらのえび日記)

入力フォームから、「passwd.dat%00」などという文字列を送ってやると、プログラム中で文字列の末尾に.cepがくっつけられて、「passwd.dat%00.cep」というファイル名が作られるのだけど、NUL文字(%00)以降は無視されてしまうので、「passwd.dat」というファイルにアクセスできてしまうのだそうです。

そうだったのか…。

正確には、PerlがNUL文字以降を無視するのではなく、NUL文字を含むパスをそのままOSのAPIに渡してしまうため、OS側がNUL文字以降を無視するため、攻撃が成り立つようですが。言語によっては、パスにNUL文字が含まれる場合にエラーを吐くものもあり、そういう言語の場合はNUL文字を使った攻撃はできないことになります。

この日記へのコメントはお気軽に! コメント数:0 トラックバック数:0

コメント

コメント数: 0件

コメント投稿欄 この日記に対するコメント投稿を歓迎します。

保存しますか?



※本文中にURLは書けません。(書くと投稿が拒否されますのでご注意下さい。)

投稿後、投稿できていないように見えることがあります。ブラウザのキャッシュが読まれているだけですので、ページを再読込すれば(=たいてい[F5]キーを押せば)投稿内容が反映されていることが確認できるはずです。連続投稿を試す前にご確認下さい。(^^;)

トラックバック

このエントリーへのトラックバックURLを表示するにはここをクリック
※スパム防止のため、トラックバックURLは別ウインドウで表示します。(JavaScriptが有効でないと表示されません。)