CA2305:安全ではないデシリアライザー LosFormatter を使用しないでください
プロパティ | 値 |
---|---|
ルール ID | CA2305 |
Title | 安全ではないデシリアライザー LosFormatter を使用しないでください |
[カテゴリ] | Security |
修正が中断か中断なしであるか | なし |
.NET 9 では既定で有効 | いいえ |
原因
System.Web.UI.LosFormatter 逆シリアル化メソッドが呼び出されたか、参照されました。
規則の説明
安全でない逆シリアライザーは、信頼されていないデータを逆シリアル化するときに脆弱です。 攻撃者がシリアル化されたデータを変更して予期されない型を追加し、悪意のある副作用を持つオブジェクトを挿入する可能性があります。 たとえば、安全でない逆シリアライザーに対する攻撃では、基になるオペレーティング システムでコマンドが実行されたり、ネットワークを介して通信されたり、ファイルを削除されたりする可能性があります。
この規則は、System.Web.UI.LosFormatter 逆シリアル化メソッド呼び出しまたは参照を検索します。
LosFormatter
は安全ではなく、セキュリティで保護することはできません。 詳細については、「BinaryFormatter セキュリティ ガイド」を参照してください。
違反の修正方法
- 代わりに安全なシリアライザーを使用し、攻撃者が任意の型を指定して逆シリアル化することを許可しないでください。 詳細については、「推奨される代替手段」を参照してください。
- シリアル化されたデータを改ざん防止にします。 シリアル化後に、シリアル化されたデータに暗号化署名します。 逆シリアル化する前に、暗号化署名を検証します。 暗号化キーの開示を防止し、キーのローテーションを設計します。
どのようなときに警告を抑制するか
LosFormatter
は安全ではなく、セキュリティで保護することはできません。
疑似コードの例
違反
using System.IO;
using System.Web.UI;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
LosFormatter formatter = new LosFormatter();
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 LosFormatter = New LosFormatter()
Return formatter.Deserialize(New MemoryStream(bytes))
End Function
End Class
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET