テクニカルエンジニア(情報セキュリティ)受験

テクニカルエンジニア(情報セキュリティ)を受験してきました。
新設の試験なので出題傾向は未知だったわけですが、PKIやWebアプリのセキュリティに関する出題が多い感じでした。そしてプログラミング言語Perl! これは来たんじゃないか?

午前は解答速報によると47/55 = 85%。大丈夫ですね。
午後Iは問1,2,4を選択。時間ぎりぎりでちょっと苦しかったです。回答欄は全部埋めてそれほどおかしなことを書いた気もしないので何とか合格圏内じゃないでしょうか。
午後IIは問2を選択。S/MIMEPerlによるWebアプリの問題でした。得意分野なのでたぶん大丈夫でしょう。
午後Iさえなんとかなっていれば合格しそうな感じです。やっぱり高度情報処理技術者試験を楽々突破というのは難しいようで発表までの2ヶ月は悶々と過ごさなければなりません。

こんな問題がありました。
ウェブアプリの中でファイル名に強制的に拡張子を付けて開けるファイルを限定しようとしています。でも実は任意のファイルを開けてしまうという脆弱性があります。さてどうやるのでしょう? というような感じ。

$fname = QUERY_STRING から取ってくる
$f = "dirname/" . $fname . ".suffix";
open FILE, $f;
 を表示

$fnameにNULL文字を含めるとそこでファイル名が終わってしまって任意のファイルを開けるというのが答え。"../" によるディレクトリトラバーサルと組み合わせます。

PerlではNULL文字(\0)が文字列の終端にならないという認識だったので、openの引数にNULL文字を入れるとファイル名がそこで終わってしまうことは知りませんでした。中身はCなので当然といえば当然なのですが。うーん。何となく勘で正解しましたが、Perl使いに極めて有利な問題でした。

こんな感じ
$ echo nakami > data.txt
$ perl -e '$f=qq(data.txt\0gomi); open F, $f; print qq(\$f = $f\n), '
$f = file.txtgomi   # $f は data.txt\0gomi なのに
nakami          # data.txt が開けてしまう