CA2362 : Un jeu de données ou une table de données non sécurisé dans un type sérialisable généré automatiquement peut être vulnérable aux attaques par exécution de code à distance
Propriété | Value |
---|---|
Identificateur de la règle | CA2362 |
Titre | Un jeu de données ou une table de données non sécurisé dans un type sérialisable généré automatiquement peut être vulnérable aux attaques par exécution de code à distance |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activée par défaut dans .NET 9 | Non |
Cause
Une classe ou un struct marqué avec SerializableAttribute contient un champ ou une propriété DataSet ou DataTable, et a un DesignerCategoryAttribute.
CA2352 est une règle similaire, en cas d’absence de DesignerCategoryAttribute.
Description de la règle
Lors de la désérialisation d’une entrée non approuvée avec BinaryFormatter et le graphe d’objets désérialisés contenant un DataSet ou DataTable, un attaquant peut créer une charge utile malveillante pour effectuer une attaque d’exécution de code à distance.
Cette règle est semblable à CA2352, mais pour du code généré automatiquement pour une représentation en mémoire de données dans une application à interface graphique utilisateur. En règle générale, ces classes générées automatiquement ne sont pas désérialisées à partir d’une entrée non approuvée. L’usage par votre application peut varier.
Cette règle recherche les types non sécurisés lors de la désérialisation. Si votre code ne désérialise pas les types trouvés, vous n’avez pas de vulnérabilité de désérialisation.
Pour plus d’informations, consultez les conseils de sécurité DataSet et DataTable.
Comment corriger les violations
- Si possible, utilisez Entity Framework plutôt que DataSet et DataTable.
- Rendez les données sérialisées inviolables. Après la sérialisation, signez par chiffrement les données sérialisées. Avant la désérialisation, validez la signature de chiffrement. Protégez la clé de chiffrement contre la divulgation, et concevez un mécanisme de permutation des clés.
Quand supprimer les avertissements
Il est sûr de supprimer un avertissement de cette règle si :
- Le type trouvé par cette règle n’est jamais désérialisé, directement ou indirectement.
- Vous savez que l’entrée est approuvée. Considérez que la limite d’approbation et les flux de données de votre application peuvent changer au fil du temps.
- Vous avez pris l’une des précautions décrites dans Comment corriger les violations.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA2362
// The code that's violating the rule is on this line.
#pragma warning restore CA2362
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA2362.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
Violation
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;
}
}
Règles associées
CA2350 : Vérifier que l’entrée de DataTable.ReadXml() est approuvée
CA2351 : Vérifier que l’entrée de DataSet.ReadXml() est approuvée
CA2353 : jeu de données ou table de données non sécurisé(e) dans un type sérialisable
CA2355 : Jeu de données ou table de données non sécurisé(e) dans un graphe d’objets désérialisé
CA2356 : jeu de données ou table de données non sécurisé(e) dans un graphe d’objets désérialisé web