Frameworks y librerías escaneados
Probamos la cobertura mediante fixtures en estos frameworks. Se añaden nuevos patrones en cada release de reglas integradas.
Principales clases CWE detectadas
Estas clases CWE aparecen con mayor frecuencia en bases de código modernas de este lenguaje. StaticCodeAudit incluye reglas dedicadas para cada una, mapeadas a OWASP Top 10 / ISO 27001 / ASVS cuando es pertinente.
CWE-89
Inyección SQL
Concatenación de strings en SqlCommand.CommandText, Dapper Execute($"..."), EF Core FromSqlRaw con interpolación, NHibernate HQL con concat.
Detectado por la regla SCA: sql_injection_concat_csharp
CWE-78
Inyección de comando OS
Process.Start(new ProcessStartInfo { FileName = "cmd", Arguments = userInput }) con parsing shell. UseShellExecute = true aumenta la superficie de ataque.
Detectado por la regla SCA: command_injection_csharp
CWE-502
Deserialización insegura
BinaryFormatter.Deserialize (obsoleto desde .NET 5 pero aún se encuentra), NetDataContractSerializer, SoapFormatter sobre streams no confiables.
Detectado por la regla SCA: unsafe_deserialization
CWE-79
Cross-Site Scripting (XSS)
Razor @Html.Raw(model.Bio) con datos no confiables, MVC HttpUtility.HtmlEncode bypaseado, Blazor MarkupString sobre entrada user.
Detectado por la regla SCA: xss_raw_html
CWE-798
Credenciales hardcoded
Cadenas de conexión en appsettings.json commiteado, clave firma JWT como const string, secretos Azure en web.config.
Detectado por la regla SCA: hardcoded_secret
CWE-352
CSRF
[ValidateAntiForgeryToken] faltante en acciones POST, options.SuppressXFrameOptionsHeader = true en Startup.
Detectado por la regla SCA: csrf_missing_aspnet
Vulnerable vs. seguro — tres ejemplos rápidos
CWE-89
Detectado por la regla SCA: sql_injection_concat_csharp
// Vulnerable — SqlCommand concat
var cmd = new SqlCommand(
$"SELECT * FROM users WHERE name = \'{name}\'", conn);
var reader = cmd.ExecuteReader();
// Seguro — parámetros
var cmd = new SqlCommand(
"SELECT * FROM users WHERE name = @name", conn);
cmd.Parameters.AddWithValue("@name", name);
var reader = cmd.ExecuteReader();
CWE-502
Detectado por la regla SCA: unsafe_deserialization
// Vulnerable — BinaryFormatter sobre stream no confiable
var bf = new BinaryFormatter();
var obj = bf.Deserialize(networkStream);
// Seguro — System.Text.Json con schema conocido
var obj = JsonSerializer.Deserialize<UserDto>(
networkStream,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
CWE-79
Detectado por la regla SCA: xss_raw_html
// Vulnerable — Razor @Html.Raw sobre datos user
@Html.Raw(Model.Bio)
// Seguro — salida codificada por defecto
@Model.Bio
Qué detecta StaticCodeAudit (este lenguaje)
- Inyección SQL en
SqlCommandconcat, Dapper interpolación, EF CoreFromSqlRaw, NHibernate HQL concat - XSS en Razor
@Html.Raw, BlazorMarkupString, MVC bypass de codificación manual - Inyección de comando en
Process.Startcon parsing shell - Deserialización
BinaryFormattersobre streams no confiables (aún presente a pesar de deprecación .NET) - Secretos hardcoded en
appsettings.json,web.configcommiteados - CSRF:
[ValidateAntiForgeryToken]faltante en acciones POST - Cookies inseguras (
CookieOptions.Secure,HttpOnly,SameSiteoff) - Path traversal en
File.ReadAllBytes,Path.Combinecon rutas user - XXE en
XmlDocument,XmlReaderSettings.DtdProcessing = Parse - Cripto insegura (MD5/SHA1 seguridad, modo ECB, claves hardcoded)
- JWT algoritmo none, secreto HS256 hardcoded, sin claim de expiración
- Open redirect vía
Redirect(Request.Query["url"]) - APIs deprecadas (BinaryFormatter, NetDataContractSerializer, SHA1Managed)
- Misconfiguraciones CI/CD (.gitlab-ci, GitHub Actions, feed NuGet inseguro)
CVE Test Suite — el número honesto para ASP.NET
StaticCodeAudit fue medido contra un CVE Test Suite real: 45 casos reconstruidos a partir de CVE publicadas e históricas, en 8 frameworks y 5 lenguajes. ASP.NET es uno de ellos — y es el framework peor puntuado de toda la suite.
ASP.NET, reconstruido desde CVE
Divulgado, no ocultado: ASP.NET/C# es el framework peor puntuado de la tabla cross-lenguaje, precisión y recall en torno al 66,7%. Las CVE históricas como cadenas de deserialización tipo log4shell y rutas de taint multi-salto complejas en ASP.NET son precisamente los casos que el motor de reglas todavía no detecta. Desglose completo cross-lenguaje (incluyendo dónde Python y PHP puntúan más alto) en la <a href="/es/language-benchmarks.php" class="text-primary font-semibold hover:underline">página de benchmarks por lenguaje</a>.
Las vulnerabilidades reales rara vez caben en un solo archivo
Las aplicaciones ASP.NET dividen la lógica en capas: un controlador recibe la solicitud, un repository construye la consulta. Un escáner limitado a un solo archivo a la vez nunca conecta ambos — ve el dato del usuario en OrdersController.cs y la llamada a base de datos en OrderRepository.cs, pero nunca la conexión entre ambos. StaticCodeAudit sigue el dato a través de los archivos.
[HttpGet("orders/{id}")]
public IActionResult GetOrder(string id)
{
return Ok(_repo.FindOrder(id));
}
public Order FindOrder(string id)
{
var sql = $"SELECT * FROM Orders WHERE Id = \'{id}\'";
return _connection.QueryFirst<Order>(sql);
}
id proviene del parámetro de ruta en el controlador, y llega a la consulta SQL un archivo después, sin modificar — StaticCodeAudit lo reporta en la línea exacta donde se ejecuta la consulta.
¿Cómo se compara esto con Security Code Scan o Semgrep?
Security Code Scan y Semgrep son las dos herramientas que aparecen primero cuando un equipo .NET busca un escáner de seguridad gratuito. Ambas son legítimas, y muchos equipos ya usan una de ellas — esta es una comparación honesta, no una crítica.
Security Code Scan
Gratuito, open sourceAnalizador Roslyn creado específicamente para problemas de seguridad .NET (inyección SQL, XSS, XXE, cripto débil), se ejecuta dentro del compilador al hacer build. Buena cobertura por defecto, pero análisis limitado a un proyecto: sin seguimiento de taint entre archivos en una solución multi-proyecto, y los hallazgos no se mapean a CWE/ISO 27001/ASVS por defecto.
Semgrep (Community)
Gratuito, motor open sourceMotor de coincidencia de patrones que cubre muchos lenguajes, con soporte de C# más reciente y menos maduro que su cobertura de Python/Java/JS. El tier gratuito cubre la mayoría de reglas del día a día; el seguimiento de taint entre archivos, los informes de cumplimiento y algunas integraciones empresariales están en los planes de pago de Semgrep.
Comparativa completa StaticCodeAudit vs Semgrep →Ninguna de las dos se reemplaza al instalar StaticCodeAudit — si Security Code Scan ya cubre lo que su equipo necesita, sigan usándolo. Lo que StaticCodeAudit añade: hallazgos ya mapeados a CWE/OWASP/ISO 27001/ASVS/NIST CSF (un hallazgo listo para un expediente de auditoría, no solo un ID de regla), seguimiento de taint entre archivos en toda su solución por defecto, y 7 lenguajes más cubiertos por el mismo binario — sin un escáner distinto que configurar por lenguaje. Muchos equipos usan ambos.
Audite su código
Audite ASP.NET Core, Entity Framework, Dapper y NHibernate contra vulnerabilidades OWASP Top 10, gadgets de deserialización y deriva de configuración — sin salir de su máquina.
Descargar el binario demo Reservar una demo guiada