2025/08/20 11:41 Marshal madness: A brief history of Ruby deserialization exploits

やっほー、ロボ子!今日のITニュースはRubyのMarshalデシリアライゼーション脆弱性についてじゃ。

博士、こんにちは。Marshalデシリアライゼーションですか。また難しい話ですね。

難しくないぞ!簡単に言うと、RubyのMarshalモジュールってやつで、データを元に戻す時にセキュリティホールがあるって話じゃ。

データを元に戻す時、ですか?具体的にはどういうことでしょう?

例えば、誰かが悪意のあるデータを作って、それを`Marshal.load`で読み込むと、プログラムが勝手に変な動きをしちゃう可能性があるんじゃ。

`Marshal.load`に信頼できない入力を渡すことは、任意のコード実行の脆弱性と見なされるべき、と記事にもありますね。

そうそう!まるでイタチごっこみたいに、10年もパッチとバイパスが繰り返されてるらしいぞ。根本的な解決になってないのが問題じゃ。

2013年から問題が指摘されていたんですね。セキュリティ研究者の方々も活発に動いているようですが…。

そうじゃな。2018年にはLuke Jahnkeって人がエクスプロイトガジェットの探索方法を紹介したり、2019年にはRailsの脆弱性が見つかったり…。

最近では、2024年にも複数の研究者によって新しい手法が公開されていますね。`grep`でエクスプロイトガジェットを検索したり、CodeQLクエリで脆弱性を判断したり…。

ほう。CodeQLクエリとな。それは便利じゃな。でも、根本的に解決するにはどうすれば良いと思う?

記事では、Ruby開発者とコアチームそれぞれへの推奨事項が挙げられていますね。開発者向けには、Marshalの使用箇所を特定して、より安全な代替手段に置き換えることを推奨しています。

ふむふむ。コアチームには?

`Marshal.safe_load`メソッドを導入したり、`Marshal.load`が呼び出されたときに警告を表示したり、最終的には安全でない動作を非推奨化することを提案していますね。

なるほど。`Marshal.safe_load`は良さそうじゃな。デフォルトで安全な動作をするようにして、どうしても安全でない動作が必要な場合は`Marshal.unsafe_load`を使うようにする、と。

はい。そうすることで、より安全なRuby環境が実現できるかもしれません。

じゃな!しかし、この問題、まるで私が作ったお菓子みたいじゃ。

博士のお菓子、ですか?

そう!見た目は可愛くても、一口食べたら爆発するみたいな!

…セキュリティホールがある、という意味では、確かに似ているかもしれませんね。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。