- IT Tips
READ MORE
こんにちは、hachi8833です。先週はRailsウォッチをお休みしてしまったことをお詫びいたします。
表題のニュースは先週のものですが、それなりに重要性が高いため改めて記事にいたしました。gemspecファイルからの入力もユーザー入力である以上サニタイズが必要なんですね。
公式ブログでRubyGemsの2.6.13がリリースされました。2.6.13では、従来のRubyGems gemで見つかった複数の脆弱性が修正されています。
公式ブログ公開時点(2017/08/29)では、修正済みRubyGemsを含むRubyはリリースされていません。
その代わり、RubyGemsのバージョンを単独で2.6.13以降にアップデートすることで問題を回避できます。
コマンドプロンプトで以下を実行することで、RubyGems gemをアップデートできます。
gem update --system
事情があってRubyGemsをアップデートできない場合、Rubyのバージョンに応じて以下のパッチを適用できます。
補足: rbenvやRVMなどのバージョン管理ソフトウェアで複数のRubyを使っている場合、念のため、修正可能なすべてのバージョンで上のコマンドを実行しておくのがよいでしょう。当然ながら、VM、またはDockerやsystemd nspawnなどのコンテナでRubyを使っている場合はそちらもチェックし、必要であればアップデートします。
# lib/rubygems/remote_fetcher.rb
- if /\.#{Regexp.quote(host)}\z/ =~ target
+ if URI("http://" + target).host.end_with?(".#{host}")
return URI.parse "#{uri.scheme}://#{target}#{uri.path}"
end
# lib/rubygems/text.rb
+ # Remove any non-printable characters and make the text suitable for
+ # printing.
+ def clean_text(text)
+ text.gsub(/[\u0000-\u0008\u000b-\u000c\u000e-\u001F\u007f]/, ".".freeze)
+ end
gem query
コマンドでのDOS脆弱性の修正(CVE-2017-0900)# lib/rubygems/commands/query_command.rb
def spec_summary entry, spec
- entry << "\n\n" << format_text(spec.summary, 68, 4)
+ summary = truncate_text(spec.summary, "the summary for #{spec.full_name}")
+ entry << "\n\n" << format_text(summary, 68, 4)
end
..
を含めて任意のファイルを上書きできる脆弱性の修正(CVE-2017-0901)# lib/rubygems/specification.rb
+ VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/ # :nodoc:
HerokuではRuby 2.4.1についてホスト側で対応済みなので、ユーザーはローカルの環境について対応すればよいことになります。
本記事執筆時点のHerokuのドキュメントでは、GemfileでRubyバージョンを指定していない場合はデフォルトで1つ前のバージョン(現時点ではRuby 2.3.4)が使われると記載されています。アプリがデフォルトのRubyバージョンに依存しないよう、アプリのGemfileには以下のようにRubyバージョンを明示的に記載することが強く推奨されています。
# Gemfile
source 'https://rubygems.org'
ruby '2.4.1' # 👈
gem 'rails', '5.1.3'
gem 'bcrypt'
...
なお、以下のバージョンについてのChangelogはありますが、RubyGemsのバージョンは2.6.13にはなっておらず、パッチが適用済みかどうかについては確認できませんでした。