wakatonoの戯れメモ

はてなダイアリーから引っ越してきました。

gzipで-Nを使用した時の、ディレクトリトラバーサルなバグ

再現条件は以下のとおり。

  • 保存されているファイル名(ディレクトリ名は含まない)と、圧縮ファイルの名前から.gz(サフィックス)を取り除いた名前が一緒。例えば、保存されているファイル名(圧縮ファイルの先頭から11バイト目よりはじまる文字列)が/tmp/sampleであり、圧縮ファイル名がsample.gzというようになっていれば、今回のバグはひっかかる。
  • 伸張時に、gzipの「-N」オプションを使う。これは、gunzipにかぎらず、「gzip -d」として伸張した場合でも同様に起こる

なお、ざっと試してみたが、圧縮ファイル内に保存されるファイル名は、フルパスを指定しようとなにしようと、ディレクトリ名までは保存されない模様。
再現にあたっては、そこの部分を編集してみた。