| 概要 |
MessagePack for C# は C# 用の MessagePack シリアライザです。バージョン 2.5.301 および 3.1.7 より前では、ExpandoObjectFormatter.Deserialize は各マップエントリに対して IDictionarystring, object.Add を呼び出して System.Dynamic.ExpandoObject を構築します。ExpandoObject は内部的にメンバー名を配列のような構造で管理しているため、多数の異なるキーを挿入すると繰り返しの線形スキャンと配列のコピーが必要になる場合があります。攻撃者が制御する大規模なマップでは、これにより CPU 使用率と割り当てが二次的に増加する挙動が発生します。この問題は、ExpandoObjectResolver.Options が MessagePackSecurity.UntrustedData に設定されているにもかかわらず、衝突耐性のある辞書の比較器が ExpandoObject の挿入処理を保護できないため、特に驚くべきものです。この脆弱性はバージョン 2.5.301 および 3.1.7 で修正されています。
|