くりにっき

フルスタックキュアエンジニアです

【CVE 2019-16892】rubyzip v1.3.0にアプデする時は絶対validate_entry_sizesを設定してください

tl;dr;

タイトルが全てです

前置き

GitHubのSecurity Advisoryで下記のようなPRがきていると思います

f:id:sue445:20191001205324p:plain

このPRをマージすればリポジトリのアラートも消えて問題なさそうに見えるのですが、実際にはgemのアップデートだけでは不十分です

CVE 2019-16892について

zipのヘッダを改ざんして展開時にクソデカメモリを喰わせる、いわゆるzip bombです(雑説明)

なんでgemのupdateだけでは不十分なのか?

zip bomb対策には Zip.validate_entry_sizes = true が必要なのですが、 v1.3.0の時点ではデフォルト値が false になっていて有効になっていないためです

詳しくはこのPRを見てください

github.com

ではどうすればいいか?

明示的に Zip.validate_entry_sizes = true してください。

Railsであれば config/initializers/CVE-2019-16892-rubyzip-patch.rb のようなファイルを置いておけばいいでしょう

v2.0.0ではデフォルトでONになっていてこのパッチは不要になるので、v2.0.0で使おうとしたらエラーになるようにしています。(モンキーパッチの賞味期限)

FAQ

Q. だったら最初から2.0.0にアプデすればいいのでは?

依存gemのdependency~> 1.3 と書かれていて2系に素直に上げられないケースも多々あるので、rubyzipを直接使ってない限りいきなり2.0.0に上げるのは難しいのではと思います。