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 :

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");
    }
}