Ruby 4.0で単一のMarshal.loadからRCEを実現するユニバーサルガジェットチェーン
Ruby 4.0 Universal RCE Deserialization Gadget Chain

2026年8月、OpenAIがAIエージェント群によるRuby(JRuby)の非正規化を悪用したクラスタ乗っ取りを開示。これを受け、elttamのLuke Jahnke氏は、Ruby 4.0.6で動作する新しいユニバーサルRCEデシリアライゼーションガジェットチェーンを公開した。このチェーンは、単一のMarshal.loadをコマンド実行に変換する。3.4系で使えたガジェットの多くはRubyGemsの修正で無効化されたが、Gem::Specification.loadのeval利用や、Gem::StubSpecificationのhash呼び出し、Timeのデシリアライゼーション時のto_str呼び出しなど、新たなガジェットを組み合わせて突破する。
このトリガーは、メンテナーが静かに修正できるニッチなmarshal_loadオーバーライドではなく、オブジェクトのハッシュ化とデシリアライゼーション中のHash再構築という、言語の2つの基本的な機能の相互作用である。
HNでの議論
22- Nextgrid
これは既に「気密ハッチの向こう側」にいることが必要なのでは?それとも何か見落としている? Marshal.loadのドキュメントには、信頼できないデータを渡すべきではないという警告が明示されている: https://docs.ruby-lang.org/en/master/Marshal.html#module-mar...
- sebiw
これは古い格言に行き着く:信頼できないデータをデシリアライズするな。 Rubygemsとそのspecの文脈では、これは明らかに管理が難しいが、Rubygemsのような依存関係は、アプリの信頼できるコンピューティングベース(TCB)の一部であり、今後もそうあり続けるだろう。
- mono442
Rubyのドキュメントを引用する: > Marshal.loadは汎用のシリアライゼーションフォーマットとしては適しておらず、ユーザーが入力したデータやその他の信頼できないデータをアンマーシャルすべきではありません。