Ruby 2.2.10, 2.3.7, 2.4.4, 2.5.1 がリリースされました。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/86370
ブランチメンテナではないけど、HackerOne や security at ruby-lang.org に報告がきた脆弱性リポートの一次トリアージをやったりしてるので今回やったことをまとめときます。
http://cve.mitre.org/ からこういう脆弱性見つかったんで CVE 番号発行しておくれというリクエストを何軒かやりました。
PGP キーと雑な英語がかければ誰でも取れるので、CVE に過大な権威みたいなもの、例としては「CVE が発行されている!重要な脆弱性だ!」みたいなものは抱かない方がいいです。「あの脆弱性が〜」と呼ぶより「CVE-2018-XXXXが〜」と読んだ方が identify できるね、程度のものです。
それでも、どの脆弱性にどの CVE が割り当てられて〜というのをメンテするのは0工数ではないのでお察しください。
Webrick のメンテナの normal(Eric Wong)は javascript が使われている Web ページは見ない主義なので、hackerone や github などの情報を伝えることができないため、全部メールで伝言さんをやっていた。
ここでミスったのはパッチもメールでやりとりしてたんだけど、そのパッチの検証をサポートしているプラットフォームでもれなくやるというのが抜けていた(normal は linux guy なのでその他のプラットフォームのことは知らない)。そのため、リリース日である昨日の夜中になって、normal が直したコードで使われている IO.copy_stream
が offset 入れたときに Windows で動かないという事実が判明して、 リリース直前に usa さんが直すのを超頑張ったということになってしまった。
この辺、次回はもっと改善しないとなあ。
"CVE-2018-6914: Unintentional file and directory creation with directory traversal in tempfile and tmpdir" の修正をやった。色んな人からこうした方が良いのでは?というアドバイスをもらったり、過去のバージョンではパッチ当たらないよ〜という修正を色々組み合わせるなどしていた。
https://github.com/ruby/ruby/commit/10b96900b90914b0cc1dba36f9736c038db2859d
最終的に .
についてはファイル名としてはありうるものなのでそのままにして /
については Tempfile
に許さないようにしたという感じで。
リポートしてきた人に、これ脆弱性だと思うっすとか、Ruby 開発チームで一番詳しそうな人を呼んで、これ直せる?とか、CVE アサインされたのでいつくらいに直したのをリリースする予定っす、というのをコメントしたりしていた。
リリース、もっと寝ててもできるようにしたいものの、毎回ブランチメンテナ + 数人が身を削って頑張るという感じになってるのでもっと頑張って頑張らないようにしないとなあ。頑張ろう。