Dela via


CA2362: Osäkra datauppsättningar eller datatabeller i autogenererad serialiserbar typ kan vara sårbara för fjärranslutna kodkörningsattacker

Property Värde
Regel-ID CA2362
Rubrik Osäkra datauppsättningar eller datatabeller i autogenererad serialiserbar typ kan vara sårbara för fjärrkörningsattacker för kod
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En klass eller struct markerad med SerializableAttribute innehåller ett fält eller DataTable en DataSet egenskap och har en DesignerCategoryAttribute.

CA2352 är en liknande regel för när det inte finns en DesignerCategoryAttribute.

Regelbeskrivning

När deserializing untrusted input with BinaryFormatter and the deserialized object graph contains a DataSet eller DataTable, kan en angripare skapa en skadlig nyttolast för att utföra en fjärrkodkörningsattack.

Den här regeln är som CA2352, men för automatiskt genererad kod för en minnesintern representation av data i ett GUI-program. Vanligtvis de här autogenererade klasserna inte deserialiseras från ej betrodda indata. Programmets användning kan variera.

Den här regeln hittar typer som är osäkra när deserialiseras. Om koden inte deserialiserar de typer som hittas har du ingen sårbarhet för deserialisering.

Mer information finns i Säkerhetsvägledning för DataSet och DataTable.

Så här åtgärdar du överträdelser

  • Om möjligt använder du Entity Framework i stället för DataSet och DataTable.
  • Gör serialiserade data manipuleringssäkra. Efter serialiseringen signerar kryptografiskt serialiserade data. Verifiera den kryptografiska signaturen innan deserialiseringen. Skydda den kryptografiska nyckeln från att avslöjas och utformas för nyckelrotationer.

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln om:

  • Den typ som hittas av den här regeln deserialiseras aldrig, antingen direkt eller indirekt.
  • Du vet att indata är betrodda. Tänk på att programmets förtroendegräns och dataflöden kan ändras över tid.
  • Du har vidtagit en av försiktighetsåtgärderna i Så här åtgärdar du överträdelser.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel på pseudokod

Kränkning

using System.Data;
using System.Xml.Serialization;

namespace ExampleNamespace
{
    [global::System.CodeDom.Compiler.GeneratedCode(""System.Data.Design.TypedDataSetGenerator"", ""2.0.0.0"")]
    [global::System.Serializable()]
    [global::System.ComponentModel.DesignerCategoryAttribute(""code"")]
    [global::System.ComponentModel.ToolboxItem(true)]
    [global::System.Xml.Serialization.XmlSchemaProviderAttribute(""GetTypedDataSetSchema"")]
    [global::System.Xml.Serialization.XmlRootAttribute(""Package"")]
    [global::System.ComponentModel.Design.HelpKeywordAttribute(""vs.data.DataSet"")]
    public class ExampleClass : global::System.Data.DataSet {
        private DataTable table;
    }
}

CA2350: Se till att DataTable.ReadXml()-indata är betrodda

CA2351: Se till att DataSet.ReadXml()-indata är betrodda

CA2352: Osäkra datauppsättningar eller datatabeller i serialiserbar typ kan vara sårbara för fjärranslutna kodkörningsattacker

CA2353: Osäker datauppsättning eller DataTable i serialiserbar typ

CA2354: Osäkra datauppsättningar eller datatabeller i deserialiserat objektdiagram kan vara sårbara för fjärrkörning av kod

CA2355: Osäker datauppsättning eller datatabell i deserialiserat objektdiagram

CA2356: Osäker datauppsättning eller datatabell i webbdeserialiserat objektdiagram

CA2362: Osäkra datauppsättningar eller datatabeller i autogenererad serialiserbar typ kan vara sårbara för fjärranslutna kodkörningsattacker