追記(2018/10/19): その後パッケージング修正のためRuby 2.5.3がリリースされました。
Hello Rubyists, as I announced in https://t.co/FCRDMVpsgc, I have released ruby-2.5.3. https://t.co/Ju4mzUwWyg This is just for fixing packaging issue. Sorry for repeated releases.
— nagachika (@nagachika) October 18, 2018
こんにちは、hachi8833です。既に対応済みの方も多いかと思いますが、Rubyのセキュリティ対応のためのマイナーバージョン更新が昨晩リリースされました。
Ruby 2.5.2/2.4.5/2.3.8リリース(脆弱性修正)
- お知らせ: Ruby 2.5.2 リリース
- 修正: CVE-2018-16396: Array#pack および String#unpack の一部のフォーマット指定においてtaintフラグが伝播しない脆弱性について
- 修正: CVE-2018-16395: OpenSSL::X509::Name の同一性判定が機能していない脆弱性について
- コミットログ: Comparing v2_5_1...v2_5_2 · ruby/ruby
詳しくは上のリンク先をご覧ください。コミットログのbackportは40件と多めでした。
メモ: 上のうちopensslの脆弱性については、Ruby 2.4/2.5系であればgemのアップデートでも対応できるとのことです。Ruby 2.3系についてはgemアップデートでopensslを変更できないため、Ruby本体のアップグレードが必要になります。
gem install openssl -v ">= 2.1.2"
バックポートを覗いてみた
40件のバックポートを短時間で追うのは無理なので、目についたものをひとつ。
k = Class.new do
include Enumerable
def initialize(*values)
@values = values
end
def each(&block)
@values.each(&block)
end
end
assert_equal(+Float::INFINITY, k.new(0.0, +Float::INFINITY).sum)
assert_equal(+Float::INFINITY, k.new(+Float::INFINITY, 0.0).sum)
assert_equal(-Float::INFINITY, k.new(0.0, -Float::INFINITY).sum)
assert_equal(-Float::INFINITY, k.new(-Float::INFINITY, 0.0).sum)
2.5.1だとk.new(0.0, +Float::INFINITY).sum
がNaN
になりました。2.5.2ではInfinity
になります。
他にWindows対応のバックポートもいくつかありました。
おまけ: ruby-buildを手動でインストール
以前から気になっていたのですが、Homebrew/homebrew-coreは更新が遅れ気味なので、現時点でrbenv install -l
を実行しても2.5.2がリストに含まれていませんでした。
MacのHomebrewでbrew install rbenv
を使ってrbenvをインストールすると、ruby-buildもHomebrewでインストールされてしまいます。
そこで、今回のセキュリティアップデートを機会に以下を実行して、ruby-buildを直接plugins/ruby-build
にインストールしました。なお環境変数は.bashrcに保存しなくても問題ありませんでした。
RBENV_ROOT=/Users/<自分のディレクトリ>/.rbenv
git clone https://github.com/rbenv/ruby-build.git $RBENV_ROOT/plugins/ruby-build
これで、今後は以下を実行すればruby-buildを直接更新できます。
cd ~/.rbenv/plugins/ruby-build
git pull
なお、Homebrewからruby-buildを削除しようとすると以下が表示されます。Homebrewでrbenvの依存関係としてインストールされているruby-buildはplugin/
のruby-buildより優先度が低いので、強制削除せずそのままにすることにしました。
$ brew uninstall ruby-build
Error: Refusing to uninstall /usr/local/Cellar/ruby-build/20180822
because it is required by rbenv, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies ruby-build
後は以下を実行してRuby 2.5.2をインストールできました。
rbenv install 2.5.2
rbenv global 2.5.2
2.5.2インストール完了しました。
参考: rbenvとruby-buildの正しいインストール方法 - Qiita
参考: rbenv install -l のリストを更新する - nafuruby’s diary