DefConで.NETのデシリアライズの脆弱度が発表(※ライブラリにより違います)

「深刻なデシリアライズ問題、Javaだけでなく.NETにも影響」

www.bleepingcomputer.com

元の論文

https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf

名前がアレですが、しばらく前にJavaで話題になったデシリアライズ(外部からのデータを取り込んで内部オブジェクトに変換する処理)の脆弱性が、.NETのライブラリでも発見されたという話です。本質的にはデシリアライズするデータは何でもいいのですが、ここでは主にJSONを扱っています。

論文冒頭付近では、リモートコード実行(RCE)を起こすライブラリの条件として次の2点を挙げています。

  • ライブラリが、ユーザ(潜在的には攻撃者)が指定可能な型のメソッドを実行できること。この「メソッド」にはデフォルト以外のコンストラクタやプロパティへのset、デシリアライズ時コールバックやデストラクタが含まれる。
  • 悪用可能なコードを探せるだけの広さをもった空間が利用可能なこと(正確に理解できていませんが、後の記述からは悪用可能なクラスにアクセスできること、といった意味と思われます)

論文では.NET標準の JavascriptSerializerDataContractJsonSerializer 、超有名ライブラリのJSON.NETなどJavaと.NETのライブラリ10個(と比較参照のためにJavaのFlexSON)を調査しています。

  • Json.NETの場合、基本的には TypeNameHandlingNone 以外にすると脆弱になりやすい
  • .NET標準の DataContractJsonSerializer の場合、型指定を任意指定できてしまうと脆弱になる(論文ではCookieから型名を取得する例を書いています)

といった感じです。中には(ネットの向こうから来るような)信頼できないデータに対して扱うべきではない、と結論されるライブラリもあるので、気になる場合は論文をチェックしてみるといいでしょう。