enumeraciones de C# - enumeraciones de C# - enumeraciones de banderas

Mal uso de enumeraciones en C#: cómo simples indicadores pueden causar graves problemas de seguridad.

Cuando una enumeración simple de C# se convierte en un riesgo de seguridad

AC # Enum a menudo parece inofensivo, pero puede crear fácilmente fallos de privilegio si los valores se superponen o falta la validación.
Muchos desarrolladores utilizan enumeraciones de C# (enum o flags) para el control de permisos, pero si no se imponen valores únicos y validados, la lógica falla sin previo aviso. Ejemplo inseguro, solo con fines didácticos.

⚠️Ejemplo inseguro, solo con fines educativos. No utilizar en producción.

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

Versión segura:

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

Nota educativa: Incluso una enumeración simple de C# como esta puede exponer puntos finales críticos si los valores no verificados pasan las capas de validación.

Vulnerabilidades comunes en enumeraciones de banderas y lógica de enumeraciones de C#

La mayoría de los problemas de seguridad provienen de enumeraciones de banderas o de conversiones inseguras de datos de enumeración de C#.

Conversión no válida

⚠️Ejemplo inseguro, solo con fines educativos:

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

Los atacantes pueden enviar números enteros indefinidos para desencadenar rutas lógicas inesperadas.

Versión segura:

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

Nota educativa: Siempre valide los valores analizados para las enumeraciones de C# y las enumeraciones de indicadores.

Bandera Enumeraciones de C# que han salido mal

⚠️Ejemplo inseguro, solo con fines educativos:

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

Versión segura:

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

Nota educativa: Defina las enumeraciones de banderas utilizando potencias distintas de dos.

Las enumeraciones de banderas definidas incorrectamente son una de las formas más fáciles de provocar una escalada de privilegios en la lógica de enumeraciones de C#.

Problemas de serialización en el manejo de enumeraciones en C#

La serialización flexible de los valores de enumeración de C# puede exponer su aplicación a estados inconsistentes o Ataques de deserialización.

⚠️Ejemplo inseguro, solo con fines educativos:

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

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

Versión segura:

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


Nota educativa: Nunca permita la deserialización de enumeraciones numéricas desde entradas no confiables.

Prevención de errores lógicos en enumeraciones de C# en DevSecOps Pipelines

Los equipos de DevSecOps deberían automatizar la validación. Para cada definición de enumeración de C#, enumeración de C# y enumeración de banderas, para evitar estados inconsistentes.

Ejemplo, seguro pipeline integración:

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

Nota educativa: El análisis estático puede detectar enumeraciones de flags superpuestas, deserialización insegura y casos switch faltantes, todo antes de la implementación.

Detección de problemas con enumeraciones y banderas en Xygeni

xygeni Code Security Detecta automáticamente valores de enumeración de indicadores superpuestos o inconsistentes, análisis de enumeración inseguro y validación faltante en la lógica de autorización de C#.

Xygeni detecta:

  • Valores de enumeración de banderas superpuestos o desalineados
  • Lógica de análisis de enumeraciones de C# insegura
  • Defectos de deserialización en el uso de enumeraciones de C#
  • Falta validación o casos predeterminados en la lógica de autorización

Ejemplo:

xygeni scan --detect enums

Nota educativa: Utilice Xygeni para garantizar la integridad de las enumeraciones y proteger las enumeraciones de indicadores.

Xygeni valida las definiciones de enumeraciones, detecta valores superpuestos o inconsistentes y aplica la aplicación automática de las reglas en CI/CD pipelines a través de:

xygeni validate --rules enums

Una lógica sólida requiere una tipificación y validación sólidas.

Ya sea usando standard En C#, al usar enumeraciones o enumeraciones de banderas complejas, cada valor debe ser explícito, validado y probado. Los enteros sin verificar o las banderas superpuestas pueden provocar una escalada de privilegios, cambios de estado inseguros e inconsistencias lógicas. Con Xygeni, los equipos automatizan la detección y validación de definiciones de enumeraciones, garantizando un tipado sólido, una lógica predecible y un comportamiento seguro desde el desarrollo hasta la implementación.

sca-tools-software-herramientas-de-analisis-de-composicion
Priorice, solucione y proteja sus riesgos de software
Además, te ofrecemos una prueba gratuita de 7 días de nuestra Business Edition para que puedas explorar las funciones avanzadas de la plataforma SecurityScorecard.
No se requiere tarjeta de crédito

Asegure el desarrollo y entrega de software

con la suite de productos Xygeni