Ruby on Rails 7.0.3.1、6.1.6.1、6.0.5.1、5.2.8.1がリリースされました。
Happy Tuesday everyone! A set of releases has occurred! These releases address an important security issue, so please check it out! More information is here: https://t.co/EpxnsTJ3xt
— Ruby on Rails (@rails) July 12, 2022
以下はGItHubのリリースタグ↓です。今回はRails 5.2系の修正もリリースされています(Railsのメンテナンスポリシー)。
- Release v7.0.3.1 · rails/rails(日本時間2020/07/13 2:31)
- Release v6.1.6.1 · rails/rails(日本時間2020/07/13 2:29)
- Release v6.0.5.1 · rails/rails(日本時間2020/07/13 2:27)
- Release v5.2.8.1 · rails/rails(日本時間2020/07/13 2:26)
以下はコミット差分です。
- Comparing v7.0.3...v7.0.3.1 · rails/rails
- Comparing v6.1.6...v6.1.6.1 · rails/rails
- Comparing v6.0.5...v6.0.5.1 · rails/rails
- Comparing v5.2.8...v5.2.8.1 · rails/rails
🔗 セキュリティ修正の概要
🔗 [CVE-2022-32224] Possible RCE escalation bug with Serialized Columns in Active Record
詳しくは、必ず以下の詳細情報を参照してください。
参考: CVE - CVE-2022-32224(ステータス: RESERVED)
- 影響を受ける過去のRailsバージョン
- すべてのバージョン
- 影響を受けない過去のRailsバージョン
- なし
- 修正済みバージョン
- 7.0.3.1、6.1.6.1、6.0.5.1、5.2.8.1
参考訳
影響
YAML形式(デフォルト)でシリアライズされたカラムは、デシリアライズされるときに
YAML.unsafe_load
でYAMLデータをRubyオブジェクトに変換します。攻撃者が(SQLインジェクションなどの手段で)データベース上のデータを操作可能な状態になっていると、攻撃者がリモートコード実行(RCE)にエスカレートする可能性があります。影響を受けるActive Modelのモデルは以下のような感じになります。
リリース
修正済みバージョンはいつもの場所から入手できます。
リリースされたバージョンでは、YAMLデシリアライザがデフォルトで
YAML.safe_load
を使うように変更され、これによって危険なオブジェクトがデシリアライズされないようにします。この変更によって、既存データで後方互換性の問題が生じる可能性もあります。そのような状況に対処するため、リリースされたバージョンには以下のActive Recordのコンフィグオプションが2つ追加されています。
config.active_record.use_yaml_unsafe_load
このオプションをtrueにすると、「安全でない」YAML読み込み戦略を使うようRailsに指示します。これによって既存の振る舞いが維持されますが、エスカレーション脆弱性の可能性も残されます。このオプションをtrueにすることは推奨されませんが、アップグレードのときには役に立つでしょう。
config.active_record.yaml_column_permitted_classes
「安全なYAML」読み込みでは、デシリアライズをすべてのクラスについてデフォルトで許可しているわけではありません。このオプションは、アプリケーションで「安全」とみなせるクラスを指定できます。たとえば、アプリケーションのシリアライズされたデータでSymbolクラスとTimeクラスを使っている場合は、以下のようにSymbolクラスとTimeクラスを追加できます。
回避方法
この問題には実行可能な回避策はありません。ただしJSONなど他のコーダーは影響を受けません。
パッチ
ただちにアップグレードできない事情のあるユーザー向けに、サポート対象である2つのリリース系統向けのパッチも用意されています。これらのパッチはgit-am形式で、単一の変更セットでできています。
現時点でサポートされているのは7.0.Zおよび6.1.Zのみである点にご注意ください。6.0.Zは重大なセキュリティ問題についてのみサポート対象となります。サポート対象外のリリースについては今後のセキュリティ修正が継続される保証がないため、サポート対象外のリリースを使っているユーザーは、可能な限り速やかにアップグレードすることを推奨します。
なお、5.2.Zは既にサポートが終了していますが、パッチおよびリリースが公開されています。
クレジット
報告いただいた@elebowに感謝いたします。