事例:GlobalIDの二重デシリアライズによる潜在的なRCE
GlobalIDでのデシリアライズ
問題
GlobalIDは.findが宣言されているクラスを対象としてデシリアライズが可能
SignedGlobalIDは署名にActiveSupport::MessageVerifierを利用しているため、secretが漏れるとRCEが可能
(RCEが可能なのRails 7.0未満ではMarshal.#loadが利用されていたため)
GlobalIDとSignedGlobalID自体にも.findが宣言されているためデシリアライズが可能
=> GlobalIDだけを指定している場合であっても、SignedGlobalIDを呼び出すことが可能
https://github.com/rails/globalid/pull/148
2022年
GlobalIDまたはSignedGlobalIDをデシリアライズしようとした際には例外が発生するように修正
CVEなし
#事例