なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2019/03/14)

2019/03/14分のコミットです。

CHANGELOGへの追加はありませんでした。


Merge tag 'v6.0.0.beta3'

Railsのバージョンをv6.0.0.beta3に更新しています。

今回はセキュリティリリースで、下記のセキュリティフィックスが含まれています(CVE-2019-5420のフィックスは5.2系、6.0系のみです)。

CVE-2019-5418は、ファイルコンテンツが漏えいする可能性がある脆弱性で、

def index
  render file: "#{Rails.root}/some/file"
end

のように、accept formatの指定なしでfileをrenderした場合に問題が起こる可能性があります。

CVE-2019-5419は、細工されたaccept headersが送信された場合に、Action Viewのtemplate生成処理が重くなり、処理が出来なくなる恐れがある、というものです。CVE-2019-5418と合わせて、サポートしていないformatは受け付けないようにして対応しています。

CVE-2019-5420は、対象のRailsアプリケーションの事がある程度わかっているとsecret tokenを推測出来てしまうという脆弱性です。このsecret tokenをRailsの内部構造の処理と組み合わせる事で、リモートでコードを実行出来てしまう可能性があります。なお、secret_key_baseが指定されている場合は問題ありません。secret_key_baseが指定されていない場合、tmpファイルにsecret_key_baseを作成しそれを使用するよう修正し対応しています。


Revert "Remove Marshal support from SchemaCache"

schema cacheのMarshalサポートの為のメソッドを削除した、Remove Marshal support from SchemaCacheをRevertしています。不要かと思ったらまだ使っているケースがあった為、との事です。


Fix gemfile.lock

Gemfile.lockの修正です。

先の6.0.0.beta3の対応の修正漏れの対応を行っています。


Add secret token for action mailbox tests

actionmailbox/test/dummy/config/initializers/secret_token.rbの修正です。

先の脆弱性の対応により必要になったsecret_key_baseの指定を追加しています。secret_key_baseの指定が無い場合tmpファイルを自動で作成するようになっているのですが、テストアプリのディレクトリ構成上、そのtmpファイルの作成処理がエラーになるので、config.secret_key_baseを直接しているようにして対応しています。


Fix secret_key_base for Railties

railties/test/application/url_generation_test.rbrailties/test/rails_info_controller_test.rbの修正です。

こちらもsecret_key_baseの指定を行うよう修正しています。


support slice assignment on SafeBuffer

activesupport/lib/active_support/core_ext/string/output_safety.rbの修正です。

SafeBufferでslice assignment(e.g. buffer[0, 3] = '<')が指定出来るよう対応しています。


Make application work without tmp directory

railties/lib/rails/application.rbの修正です。

CVE-2019-5420で追加されたsecret_key_baseを記載したtmpファイルを作成する前に、tmpディレクトリを作成するよう修正しています。

tmpファイルはtmpディレクトリ配下(tmp/development_secret.txt)に作成するのですが、tmpディレクトリは存在しない可能性があり、存在しない場合にエラーになるのを防ぐ為。


GCS service: skip unnecessary bucket lookups

activestorage/lib/active_storage/service/gcs_service.rbの修正です。

GCS Serviceのbucket生成処理で、skip_lookupオプションを指定して不要なbucketのlookup処理を行わないよう修正しています。