CA2315:安全ではないデシリアライザー ObjectStateFormatter を使用しないでください
プロパティ | 値 |
---|---|
ルール ID | CA2315 |
Title | 安全ではないデシリアライザー ObjectStateFormatter を使用しないでください |
[カテゴリ] | Security |
修正が中断か中断なしであるか | なし |
.NET 8 では既定で有効 | いいえ |
原因
System.Web.UI.ObjectStateFormatter 逆シリアル化メソッドが呼び出されたか、参照されました。
規則の説明
安全でない逆シリアライザーは、信頼されていないデータを逆シリアル化するときに脆弱です。 攻撃者がシリアル化されたデータを変更して予期されない型を追加し、悪意のある副作用を持つオブジェクトを挿入する可能性があります。 たとえば、安全でない逆シリアライザーに対する攻撃では、基になるオペレーティング システムでコマンドが実行されたり、ネットワークを介して通信されたり、ファイルを削除されたりする可能性があります。
この規則は、System.Web.UI.ObjectStateFormatter 逆シリアル化メソッド呼び出しまたは参照を検索します。
違反の修正方法
可能であれば、代わりに安全なシリアライザーを使用し、攻撃者が任意の型を指定して逆シリアル化することを許可しないでください。 安全性の高いシリアライザーには次のものがあります。
- System.Runtime.Serialization.DataContractSerializer
- System.Runtime.Serialization.Json.DataContractJsonSerializer
- System.Web.Script.Serialization.JavaScriptSerializer - System.Web.Script.Serialization.SimpleTypeResolver を使用しません。 型リゾルバーを使用する必要がある場合は、逆シリアル化する型を予期されるリストに制限します。
- System.Xml.Serialization.XmlSerializer
- Newtonsoft Json.NET - TypeNameHandling.None を使用します。 TypeNameHandling に別の値を使用する必要がある場合は、カスタム ISerializationBinder を使用して、逆シリアル化された型を予期されるリストに制限します。
- プロトコル バッファー
シリアル化されたデータを改ざん防止にします。 シリアル化後に、シリアル化されたデータに暗号化署名します。 逆シリアル化する前に、暗号化署名を検証します。 暗号化キーの開示を防止し、キーのローテーションを設計します。
どのようなときに警告を抑制するか
次の場合は、このルールの警告を抑制できます。
- 入力が信頼されていることがわかっている。 アプリケーションの信頼境界とデータ フローは時間の経過と共に変わる可能性があることを考慮する。
- 違反を修正する方法のいずれかの予防措置を講じた。
疑似コードの例
違反
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
ObjectStateFormatter formatter = new ObjectStateFormatter();
return formatter.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Web.UI
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim formatter As ObjectStateFormatter = New ObjectStateFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET