Quando uma simples enumeração em C# se torna um risco de segurança
AC # Enum geralmente parece inofensivo, mas pode facilmente criar falhas de privilégio se os valores se sobrepuserem ou se a validação estiver ausente.
Muitos desenvolvedores dependem de enums em C# ou enums de flags para controle de permissões, mas se você não impuser valores únicos e validados, a lógica falhará silenciosamente. Exemplo inseguro, apenas para fins educacionais.
⚠️Exemplo inseguro, apenas para fins educacionais. Não use em produção.
public enum UserRole
{
None = 0,
User = 1,
Admin = 2,
SuperAdmin = 3 // ❌ Overlaps with Admin
}
Versão 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 educacional: Mesmo um enum simples em C# como este pode expor endpoints críticos se valores não verificados passarem pelas camadas de validação.
Vulnerabilidades comuns em enumerações de flags e na lógica de enumeração em C#
A maioria dos problemas de segurança decorre de enumerações de flags ou da conversão insegura de dados de enumeração em C#.
Conversão inválida
⚠️Exemplo inseguro, apenas para fins educacionais:
var role = (UserRole)Enum.Parse(typeof(UserRole), input);
Os atacantes podem enviar números inteiros indefinidos para acionar caminhos lógicos inesperados.
Versão segura:
if (!Enum.TryParse(input, out UserRole role) || !Enum.IsDefined(typeof(UserRole), role))
throw new InvalidOperationException("Invalid role value");
Nota educativa: Sempre valide os valores analisados para enums e flags em C#.
Flag C# Enums que deram errado
⚠️Exemplo inseguro, apenas para fins educacionais:
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Admin = 3 // ❌ Overlaps with Read + Write
}
Versão segura:
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Delete = 4,
Admin = 8
}
Nota didática: Defina enumerações de flags usando potências distintas de dois.
Enumerações de flags definidas incorretamente são uma das maneiras mais fáceis de causar escalonamento de privilégios na lógica de enumeração em C#.
Armadilhas de serialização no tratamento de enumerações em C#
A serialização frouxa de valores de enumeração em C# pode expor seu aplicativo a estados inconsistentes ou ataques de desserialização.
⚠️Exemplo inseguro, apenas para fins educacionais:
var data = JsonSerializer.Deserialize(payload);
If payload contains "Role": 99, it maps to an invalid c# enum enum value.
Versão segura:
var opts = new JsonSerializerOptions
{
Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, allowIntegerValues: false) }
};
var data = JsonSerializer.Deserialize(payload, opts);
Nota educacional: Nunca permita a desserialização de enumerações numéricas a partir de entradas não confiáveis.
Prevenindo erros de lógica de enumeração em C# no DevSecOps Pipelines
As equipes de DevSecOps devem automatizar a validação. para cada definição de Enum em C#, Enum em C sharp e Enum de flags para evitar estados inconsistentes.
Exemplo, seguro pipeline integração:
- 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: A análise estática pode detectar enumerações de flags sobrepostas, desserialização insegura e casos de switch ausentes, tudo antes da implantação.
Detecção de problemas com enum e flags no Xygeni
Xygeni Segurança de Código Detecta automaticamente valores de enumeração de sinalizadores sobrepostos ou inconsistentes, análise insegura de enumerações e validação ausente na lógica de autorização em C#.
- Valores de enumeração de sinalizadores sobrepostos ou desalinhados
- Lógica de análise sintática de enumerações insegura em C#
- Falhas de desserialização no uso de enum C#
- Ausência de validação ou casos padrão na lógica de autorização
Exemplo:
xygeni scan --detect enums
Nota educacional: Utilize o Xygeni para garantir a integridade dos enums e proteger os enums de flags.
Xygeni valida definições de enumeração, detecta valores sobrepostos ou inconsistentes e aplica medidas automáticas em CI/CD pipelines através de:
xygeni validate --rules enums
Uma lógica robusta exige tipagem e validação robustas.
Se usando standard Em C#, enums ou enums de flags complexos exigem que cada valor seja explícito, validado e testado. Números inteiros não verificados ou flags sobrepostas podem levar à escalada de privilégios, alterações de estado inseguras e inconsistências lógicas. Com o Xygeni, as equipes automatizam a detecção e validação de definições de enumeração, garantindo tipagem forte, lógica previsível e comportamento seguro desde o desenvolvimento até a implantação.







