事例: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なし
#事例