CA2355:逆シリアル化されたオブジェクト グラフの安全でない DataSet または DataTable

プロパティ
ルール ID CA2355
Title 逆シリアル化されたオブジェクト グラフの安全でない DataSet または DataTable
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

キャストされたまたは指定された型のオブジェクト グラフに DataSet または DataTable を含んでいる可能性があるときに逆シリアル化しています。

この規則では、同様の規則 CA2353: シリアル化可能な型の安全でない DataSet または DataTable とは異なるアプローチを使用します。

キャストまたは指定された型は、次の場合に評価されます。

規則の説明

BinaryFormatter で信頼されていない入力を逆シリアル化し、逆シリアル化されたオブジェクト グラフに DataSet または DataTable が含まれている場合、攻撃者が悪意のあるペイロードを作成して、サービス拒否攻撃を仕掛ける可能性があります。 リモート コード実行の不明な脆弱性が存在する可能性があります。

詳細については、「DataSet と DataTable のセキュリティ ガイダンス」を参照してください。

違反の修正方法

  • 可能であれば、DataSet および DataTable ではなく、Entity Framework を使用します。
  • シリアル化されたデータを改ざん防止にします。 シリアル化後に、シリアル化されたデータに暗号化署名します。 逆シリアル化する前に、暗号化署名を検証します。 暗号化キーの開示を防止し、キーのローテーションを設計します。

どのようなときに警告を抑制するか

次の場合は、このルールの警告を抑制できます。

  • 入力が信頼されていることがわかっている。 アプリケーションの信頼境界とデータ フローは時間の経過と共に変わる可能性があることを考慮する。
  • 違反を修正する方法のいずれかの予防措置を講じた。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA2355
// The code that's violating the rule is on this line.
#pragma warning restore CA2355

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA2355.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

疑似コードの例

違反

using System.Data;
using System.IO;
using System.Runtime.Serialization;

[Serializable]
public class MyClass
{
    public MyOtherClass OtherClass { get; set; }
}

[Serializable]
public class MyOtherClass
{
    private DataSet myDataSet;
}

public class ExampleClass
{
    public MyClass Deserialize(Stream stream)
    {
        BinaryFormatter bf = new BinaryFormatter();
        return (MyClass) bf.Deserialize(stream);
    }
}

CA2350:DataTable.ReadXml() の入力が信頼されていることを確認してください

CA2351:DataSet.ReadXml() の入力が信頼されていることを確認してください

CA2352: シリアル化可能な型の安全でない DataSet または DataTable は、リモート コード実行攻撃に対して脆弱になる可能性があります

CA2353: シリアル化可能な型の安全でない DataSet または DataTable

CA2354:逆シリアル化されたオブジェクト グラフの安全でない DataSet または DataTable は、リモート コード実行攻撃に対して脆弱になる可能性があります

CA2356: Web の逆シリアル化されたオブジェクト グラフの安全でない DataSet または DataTable

CA2361: DataSet.ReadXml() を含む自動生成クラスが信頼されていないデータで使用されていないことを確認してください

CA2362: シリアル化可能な自動生成型の安全でない DataSet または DataTable は、リモート コード実行攻撃に対して脆弱になる可能性があります