CA5403 : Ne pas coder en dur le certificat
Propriété | Value |
---|---|
Identificateur de la règle | CA5403 |
Titre | Ne pas coder en dur le certificat |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Le paramètre data
ou rawData
d’un constructeur X509Certificate ou X509Certificate2est codé en dur par l’un des éléments suivants :
- Tableau d’octets.
- Tableau de caractères.
- System.Convert.FromBase64String(String).
- Toutes les surcharges de System.Text.Encoding.GetBytes.
Description de la règle
La clé privée d’un certificat codé en dur est facilement découverte. Même avec les fichiers binaires compilés, il est facile pour les utilisateurs malveillants d’extraire la clé privée d’un certificat codé en dur. Une fois la clé privée compromise, un attaquant peut emprunter l’identité de ce certificat, auquel cas toutes les ressources ou opérations protégées par ce certificat seront disponibles pour l’attaquant.
Comment corriger les violations
- Envisagez de repenser votre application de manière à ce qu’elle utilise un système de gestion de clés sécurisé, comme Azure Key Vault.
- Conservez les informations d’identification et les certificats dans un emplacement sécurisé distinct de votre code source.
Quand supprimer les avertissements
Il est sûr de supprimer un avertissement de cette règle si les données codées en dur ne contiennent pas la clé privée du certificat. Par exemple, les données proviennent d’un fichier .cer
. Les informations sur les certificats publics codés en dur peuvent toujours créer un défi pour la rotation des certificats au fur et à mesure qu’ils expirent ou sont révoqués.
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 CA5403
// The code that's violating the rule is on this line.
#pragma warning restore CA5403
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.CA5403.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
Codé en dur par tableau d’octets
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
byte[] bytes = new byte[] {1, 2, 3};
File.WriteAllBytes(path, bytes);
new X509Certificate2(path);
}
}
Codé en dur par tableau de chars
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Text;
class ExampleClass
{
public void ExampleMethod(byte[] bytes, string path)
{
char[] chars = new char[] { '1', '2', '3' };
Encoding.ASCII.GetBytes(chars, 0, 3, bytes, 0);
File.WriteAllBytes(path, bytes);
new X509Certificate2(path);
}
}
Codé en dur par FromBase64String
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
byte[] bytes = Convert.FromBase64String("AAAAAaazaoensuth");
File.WriteAllBytes(path, bytes);
new X509Certificate2(path);
}
}
Codé en dur par GetBytes
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Text;
class ExampleClass
{
public void ExampleMethod(string path)
{
byte[] bytes = Encoding.ASCII.GetBytes("AAAAAaazaoensuth");
File.WriteAllBytes(path, bytes);
new X509Certificate2(path);
}
}
Solution
using System.IO;
using System.Security.Cryptography.X509Certificates;
class ExampleClass
{
public void ExampleMethod(string path)
{
new X509Certificate2("Certificate.cer");
}
}