énumération C# - énumération C# - énumération C# - énumérations de drapeaux

Mauvaise utilisation des énumérations en C# : comment de simples indicateurs peuvent engendrer d’importantes failles de sécurité

Quand une simple énumération C# devient un risque de sécurité

AC # L'énumération semble souvent inoffensive, mais elle peut facilement créer des failles de privilège si les valeurs se chevauchent ou si la validation est manquante.
De nombreux développeurs utilisent les énumérations C# (enum ou flag) pour la gestion des permissions, mais sans imposer des valeurs uniques et validées, la logique peut dysfonctionner sans avertissement. Exemple non sécurisé, à des fins pédagogiques uniquement.

⚠️Exemple non sécurisé, à des fins pédagogiques uniquement. Ne pas utiliser en production.

public enum UserRole
{
    None = 0,
    User = 1,
    Admin = 2,
    SuperAdmin = 3 // ❌ Overlaps with Admin
}

Version sécurisée :

public enum UserRole
{
    None = 0,
    User = 1,
    Admin = 2,
    SuperAdmin = 4
}
// # Educational note: Always assign unique power-of-two values for flag enums.

Note pédagogique : Même une simple énumération C# comme celle-ci peut exposer des points critiques si des valeurs non vérifiées passent les couches de validation.

Vulnérabilités courantes dans les énumérations de drapeaux et la logique des énumérations en C#

La plupart des problèmes de sécurité proviennent des énumérations de drapeaux ou du transtypage non sécurisé des données d'énumération C#.

Conversion invalide

⚠️Exemple non sécurisé, à des fins éducatives uniquement :

var role = (UserRole)Enum.Parse(typeof(UserRole), input);

Les attaquants peuvent envoyer des entiers indéfinis pour déclencher des chemins logiques inattendus.

Version sécurisée :

if (!Enum.TryParse(input, out UserRole role) || !Enum.IsDefined(typeof(UserRole), role))
    throw new InvalidOperationException("Invalid role value");

Note pédagogique : Toujours valider les valeurs analysées pour les énumérations C# et les énumérations de drapeaux.

Erreurs des énumérations C#

⚠️Exemple non sécurisé, à des fins éducatives uniquement :

[Flags]
public enum Permissions
{
    None = 0,
    Read = 1,
    Write = 2,
    Admin = 3 // ❌ Overlaps with Read + Write
}

Version sécurisée :

[Flags]
public enum Permissions
{
    None = 0,
    Read = 1,
    Write = 2,
    Delete = 4,
    Admin = 8
}

Note pédagogique : Définissez les énumérations de drapeaux en utilisant des puissances de deux distinctes.

Les énumérations de drapeaux mal définies constituent l'un des moyens les plus simples de provoquer une élévation de privilèges dans la logique des énumérations C#.

Pièges de la sérialisation dans la gestion des énumérations en C#

Une sérialisation laxiste des valeurs d'énumération C# peut exposer votre application à des états incohérents ou Attaques par désérialisation.

⚠️Exemple non sécurisé, à des fins éducatives uniquement :

var data = JsonSerializer.Deserialize<User>(payload);

If payload contains "Role": 99, it maps to an invalid c# enum enum value.

Version sécurisée :

var opts = new JsonSerializerOptions
{
    Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, allowIntegerValues: false) }
};
var data = JsonSerializer.Deserialize<User>(payload, opts);


Note pédagogique : N’autorisez jamais la désérialisation d’énumérations numériques à partir d’entrées non fiables.

Prévention des erreurs de logique d'énumération C# dans le cadre du DevSecOps Pipelines

Les équipes DevSecOps devraient automatiser la validation pour chaque définition d'énumération C#, d'énumération C# et d'énumération de drapeaux afin d'éviter les états incohérents.

Par exemple, sécuriser pipeline l'intégration:

- name: Validate enum definitions
  run: |
    dotnet test --filter Category=EnumValidation
    xygeni validate --rules enums
# Never expose real tokens or internal URLs in pipelines

Note pédagogique : L’analyse statique peut détecter les énumérations de drapeaux qui se chevauchent, les désérialisations non sécurisées et les cas de commutation manquants, le tout avant le déploiement.

Détection des problèmes liés aux énumérations et aux drapeaux avec Xygeni

Xygéni Code Security Détecte automatiquement les valeurs d'énumération d'indicateurs qui se chevauchent ou sont incohérentes, l'analyse d'énumération non sécurisée et l'absence de validation dans la logique d'autorisation C#.

Xygeni détecte:

  • valeurs d'énumération de drapeaux qui se chevauchent ou qui sont mal alignées
  • Logique d'analyse d'énumération C# non sécurisée
  • Failles de désérialisation dans l'utilisation de l'énumération C#
  • Validation manquante ou cas par défaut dans la logique d'autorisation

Exemple :

xygeni scan --detect enums

Note pédagogique : Utilisez Xygeni pour garantir l'intégrité des énumérations et sécuriser les énumérations de drapeaux.

Xygeni valide les définitions d'énumération, détecte les valeurs qui se chevauchent ou qui sont incohérentes, et applique une application automatique dans CI/CD pipelines à travers :

xygeni validate --rules enums

Une logique robuste exige un typage et une validation forts.

Que ce soit en utilisant standard En C#, dans les énumérations ou les énumérations complexes à indicateurs, chaque valeur doit être explicite, validée et testée. L'utilisation d'entiers non vérifiés ou d'indicateurs qui se chevauchent peut entraîner une élévation de privilèges, des modifications d'état non sécurisées et des incohérences logiques. Avec Xygeni, les équipes automatisent la détection et la validation des définitions d'énumération, garantissant un typage fort, une logique prévisible et un comportement sécurisé du développement au déploiement.

sca-tools-logiciel-outils-d'analyse-de-composition
Priorisez, corrigez et sécurisez vos risques logiciels
Essai gratuit 7 jours
Pas de carte bleue requise

Sécurisez le développement et la livraison de vos logiciels

avec la suite de produits Xygeni