ZipSlipと名付けられた脆弱性に関するWebページなどを見かけたので、自分用メモを兼ねて軽くまとめて書いておきます。
結論: 実装に気を付けつつ、アーカイブ展開関連のライブラリは最新にし、この脆弱性を含んでいないかどうかも確認しておく
広告
目次
原理
これはアーカイブ形式に関する脆弱性ではなく、それを展開する際の処理において、一部ライブラリで一部処理が甘い場合に生じる脆弱性である。
その一部の処理とは、パスの検証部分。
要するに、アーカイブ内に「上の階層にこのファイルがあるよ!」と処理によっては解釈されかねない名前を付けたファイルを置いておけば、ファイル名検証が甘いライブラリ等では「上の階層にファイルを置く」という処理をしてしまうのである。
これにより、ファイルが上書きされたり、新たに配置されてしまう危険性があると考えられる。
例えば、「../../bad.sh」というファイル名を持つファイルがアーカイブに含まれていたなら、二階層上のフォルダにbad.shが展開され配置されてしまう、というわけである。
…これをZIPを送る側・受け取る側が承知で使う場合、別階層にもいろいろ設定ファイルを配置できる便利なテクニックとして扱えなくはないが、そういう場合は少ないと考えられるので、対策が必要である。
チェックリストや日本語でこれに関して書かれた記事など
対策
すでにこれらは公開されており、かつ内部的に様々なところにも前もって情報が行っていたようなので、修正は多くのプログラムで行われていると思われる。しかし、すべてのプログラムがそうとは言い切れない。
そのため、使っているライブラリの情報を調べ、最新のものになるべく更新することが望ましいと思われる。
脆弱性としては昔からあったもの
この攻撃手法、ディレクトリトラバーサル攻撃という手法で、昔からあったものらしい。
ただ、なんらかのライブラリを実装する際、知らない人がそこの処理を抜いてしまったり、そのあたり全く考慮してないコードがQ&Aサイトに書かれてそのまま流用されたり、というのが今回ちょっと大きく取り上げられた原因のようだ。