Frameworks & bibliothèques scannés
Nous testons la couverture sur ces frameworks via fixtures. De nouveaux patterns sont ajoutés à chaque release de règles builtin.
Principales classes CWE détectées
Ces classes CWE apparaissent le plus souvent dans les codebases modernes de ce langage. StaticCodeAudit livre des règles dédiées pour chacune, mappées à OWASP Top 10 / ISO 27001 / ASVS quand pertinent.
CWE-89
Injection SQL
Concaténation de strings dans SqlCommand.CommandText, Dapper Execute($"..."), EF Core FromSqlRaw avec interpolation, NHibernate HQL avec concat.
Détecté par la règle SCA : sql_injection_concat_csharp
CWE-78
Injection de commande OS
Process.Start(new ProcessStartInfo { FileName = "cmd", Arguments = userInput }) avec parsing shell. UseShellExecute = true augmente la surface d'attaque.
Détecté par la règle SCA : command_injection_csharp
CWE-502
Désérialisation non sécurisée
BinaryFormatter.Deserialize (obsolète depuis .NET 5 mais encore trouvé), NetDataContractSerializer, SoapFormatter sur streams non fiables.
Détecté par la règle SCA : unsafe_deserialization
CWE-79
Cross-Site Scripting (XSS)
Razor @Html.Raw(model.Bio) avec données non fiables, MVC HttpUtility.HtmlEncode bypassé, Blazor MarkupString sur entrée user.
Détecté par la règle SCA : xss_raw_html
CWE-798
Identifiants en dur
Chaînes de connexion dans appsettings.json committé, clé de signature JWT en const string, secrets Azure dans web.config.
Détecté par la règle SCA : hardcoded_secret
CWE-352
CSRF
[ValidateAntiForgeryToken] manquant sur actions POST, options.SuppressXFrameOptionsHeader = true dans Startup.
Détecté par la règle SCA : csrf_missing_aspnet
Vulnérable vs. sain — trois exemples rapides
CWE-89
Détecté par la règle SCA : sql_injection_concat_csharp
// Vulnérable — SqlCommand concat
var cmd = new SqlCommand(
$"SELECT * FROM users WHERE name = \'{name}\'", conn);
var reader = cmd.ExecuteReader();
// Sain — paramètres
var cmd = new SqlCommand(
"SELECT * FROM users WHERE name = @name", conn);
cmd.Parameters.AddWithValue("@name", name);
var reader = cmd.ExecuteReader();
CWE-502
Détecté par la règle SCA : unsafe_deserialization
// Vulnérable — BinaryFormatter sur stream non fiable
var bf = new BinaryFormatter();
var obj = bf.Deserialize(networkStream);
// Sain — System.Text.Json avec schéma connu
var obj = JsonSerializer.Deserialize<UserDto>(
networkStream,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
CWE-79
Détecté par la règle SCA : xss_raw_html
// Vulnérable — Razor @Html.Raw sur données user
@Html.Raw(Model.Bio)
// Sain — sortie encodée par défaut
@Model.Bio
Ce que StaticCodeAudit détecte (ce langage)
- Injection SQL dans
SqlCommandconcat, Dapper interpolation, EF CoreFromSqlRaw, NHibernate HQL concat - XSS dans Razor
@Html.Raw, BlazorMarkupString, MVC bypass d'encodage manuel - Injection de commande dans
Process.Startavec parsing shell - Désérialisation
BinaryFormattersur streams non fiables (encore présent malgré la dépréciation .NET) - Secrets en dur dans
appsettings.json,web.configcommittés - CSRF :
[ValidateAntiForgeryToken]manquant sur actions POST - Cookies non sécurisés (
CookieOptions.Secure,HttpOnly,SameSiteoff) - Path traversal dans
File.ReadAllBytes,Path.Combineavec chemins user - XXE dans
XmlDocument,XmlReaderSettings.DtdProcessing = Parse - Crypto non sécurisée (MD5/SHA1 sécurité, mode ECB, clés en dur)
- JWT algorithme none, secret HS256 en dur, pas de claim d'expiration
- Open redirect via
Redirect(Request.Query["url"]) - APIs dépréciées (BinaryFormatter, NetDataContractSerializer, SHA1Managed)
- Misconfigurations CI/CD (.gitlab-ci, GitHub Actions, feed NuGet non sécurisé)
CVE Test Suite — le chiffre honnête pour ASP.NET
StaticCodeAudit a été mesuré sur un CVE Test Suite réel : 45 cas reconstitués à partir de CVE publiées et historiques, sur 8 frameworks et 5 langages. ASP.NET en fait partie — et c'est le framework le moins bien noté de toute la suite.
ASP.NET, reconstitué depuis CVE
Divulgué, pas caché : ASP.NET/C# est le framework le moins bien noté du tableau cross-langage, précision et rappel autour de 66,7 %. Les CVE historiques du type chaînes de désérialisation façon log4shell et chemins de taint multi-sauts complexes dans ASP.NET sont précisément les cas que le moteur de règles rate encore. Détail complet cross-langage (y compris où Python et PHP obtiennent un meilleur score) sur la <a href="/fr/language-benchmarks.php" class="text-primary font-semibold hover:underline">page des benchmarks par langage</a>.
Les vraies failles tiennent rarement dans un seul fichier
Les applications ASP.NET répartissent la logique en couches : un contrôleur reçoit la requête, un repository construit la requête SQL. Un scanner limité à un seul fichier à la fois ne fait jamais le lien — il voit la donnée utilisateur dans OrdersController.cs et l'appel base de données dans OrderRepository.cs, mais jamais la connexion entre les deux. StaticCodeAudit suit la donnée à travers les fichiers.
[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 provient du paramètre de route dans le contrôleur, et atteint la requête SQL un fichier plus loin, sans modification — StaticCodeAudit le signale à la ligne exacte où la requête s'exécute.
Comment ça se compare à Security Code Scan ou Semgrep ?
Security Code Scan et Semgrep sont les deux outils qui reviennent en premier quand une équipe .NET cherche un scanner de sécurité gratuit. Les deux sont légitimes, et beaucoup d'équipes en utilisent déjà un — voici un comparatif honnête, pas un dénigrement.
Security Code Scan
Gratuit, open sourceAnalyseur Roslyn conçu spécifiquement pour les problèmes de sécurité .NET (injection SQL, XSS, XXE, crypto faible), s'exécute dans le compilateur au moment du build. Bonne couverture par défaut, mais analyse limitée à un projet : pas de suivi de taint inter-fichiers sur une solution multi-projets, et les findings ne sont pas mappés CWE/ISO 27001/ASVS par défaut.
Semgrep (Community)
Gratuit, moteur open sourceMoteur de pattern-matching couvrant de nombreux langages, avec un support C# plus récent et moins mature que sa couverture Python/Java/JS. Le tier gratuit couvre l'essentiel du quotidien ; le suivi de taint inter-fichiers, le reporting de conformité et certaines intégrations entreprise sont réservés aux tiers payants de Semgrep.
Comparatif complet StaticCodeAudit vs Semgrep →Aucun des deux n'est remplacé par l'installation de StaticCodeAudit — si Security Code Scan couvre déjà ce dont votre équipe a besoin, continuez à l'utiliser. Ce que StaticCodeAudit ajoute : des findings déjà mappés CWE/OWASP/ISO 27001/ASVS/NIST CSF (un finding prêt pour un dossier d'audit, pas juste un identifiant de règle), un suivi de taint inter-fichiers sur toute votre solution par défaut, et 7 autres langages couverts par le même binaire — pas de scanner séparé à configurer par langage. Beaucoup d'équipes utilisent les deux.
Auditez votre code
Auditez ASP.NET Core, Entity Framework, Dapper et NHibernate contre les vulnérabilités OWASP Top 10, gadgets de désérialisation et dérive de configuration — sans quitter votre machine.
Télécharger le binaire démo Réserver une démo guidée