Geprüfte Frameworks & Bibliotheken
Wir testen die Abdeckung über Fixtures auf diesen Frameworks. Neue Muster werden in jedem Builtin-Regel-Release ergänzt.
Häufigste erkannte CWE-Klassen
Diese CWE-Klassen treten in modernen Codebasen dieser Sprache am häufigsten auf. StaticCodeAudit liefert dedizierte Regeln für jede, gemappt auf OWASP Top 10 / ISO 27001 / ASVS, sofern relevant.
CWE-89
SQL-Injection
String-Konkatenation in SqlCommand.CommandText, Dapper Execute($"..."), EF Core FromSqlRaw mit Interpolation, NHibernate HQL mit Concat.
Erkannt von SCA-Regel: sql_injection_concat_csharp
CWE-78
OS-Befehlsinjektion
Process.Start(new ProcessStartInfo { FileName = "cmd", Arguments = userInput }) mit Shell-Parsing. UseShellExecute = true erhöht die Angriffsfläche.
Erkannt von SCA-Regel: command_injection_csharp
CWE-502
Unsichere Deserialisierung
BinaryFormatter.Deserialize (obsolet seit .NET 5, aber noch zu finden), NetDataContractSerializer, SoapFormatter auf nicht vertrauenswürdigen Streams.
Erkannt von SCA-Regel: unsafe_deserialization
CWE-79
Cross-Site Scripting (XSS)
Razor @Html.Raw(model.Bio) mit nicht vertrauenswürdigen Daten, MVC HttpUtility.HtmlEncode umgangen, Blazor MarkupString auf User-Input.
Erkannt von SCA-Regel: xss_raw_html
CWE-798
Hartkodierte Zugangsdaten
Connection-Strings in commitetem appsettings.json, JWT-Signatur-Key als const string, Azure-Secrets in web.config.
Erkannt von SCA-Regel: hardcoded_secret
CWE-352
CSRF
Fehlendes [ValidateAntiForgeryToken] bei POST-Actions, options.SuppressXFrameOptionsHeader = true in Startup.
Erkannt von SCA-Regel: csrf_missing_aspnet
Verwundbar vs. sicher — drei kurze Beispiele
CWE-89
Erkannt von SCA-Regel: sql_injection_concat_csharp
// Verwundbar — SqlCommand-Konkatenation
var cmd = new SqlCommand(
$"SELECT * FROM users WHERE name = \'{name}\'", conn);
var reader = cmd.ExecuteReader();
// Sicher — parametrisiert
var cmd = new SqlCommand(
"SELECT * FROM users WHERE name = @name", conn);
cmd.Parameters.AddWithValue("@name", name);
var reader = cmd.ExecuteReader();
CWE-502
Erkannt von SCA-Regel: unsafe_deserialization
// Verwundbar — BinaryFormatter auf nicht vertrauenswürdigem Stream
var bf = new BinaryFormatter();
var obj = bf.Deserialize(networkStream);
// Sicher — System.Text.Json mit bekanntem Schema
var obj = JsonSerializer.Deserialize<UserDto>(
networkStream,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
CWE-79
Erkannt von SCA-Regel: xss_raw_html
// Verwundbar — Razor @Html.Raw auf User-Daten
@Html.Raw(Model.Bio)
// Sicher — standardmäßig kodierte Ausgabe
@Model.Bio
Was StaticCodeAudit erkennt (diese Sprache)
- SQL-Injection in
SqlCommand-Concat, Dapper-Interpolation, EF CoreFromSqlRaw, NHibernate HQL-Concat - XSS in Razor
@Html.Raw, BlazorMarkupString, MVC manuelle Encoding-Umgehung - Befehlsinjektion in
Process.Startmit Shell-Parsing BinaryFormatter-Deserialisierung auf nicht vertrauenswürdigen Streams (trotz .NET-Deprecation noch zu finden)- Hartkodierte Secrets in commitetem
appsettings.json,web.config - CSRF: Fehlendes
[ValidateAntiForgeryToken]bei POST-Actions - Unsichere Cookies (
CookieOptions.Secure,HttpOnly,SameSiteaus) - Path Traversal in
File.ReadAllBytes,Path.Combinemit User-Pfaden - XXE in
XmlDocument,XmlReaderSettings.DtdProcessing = Parse - Unsichere Krypto (MD5/SHA1 für Security, ECB-Modus, hartkodierte Keys)
- JWT none-Algorithmus, hartkodierter HS256-Secret, kein Expiration-Claim
- Open Redirect via
Redirect(Request.Query["url"]) - Veraltete APIs (BinaryFormatter, NetDataContractSerializer, SHA1Managed)
- CI/CD-Fehlkonfigurationen (.gitlab-ci, GitHub Actions, unsicheres NuGet-Feed)
CVE Test Suite — die ehrliche Zahl für ASP.NET
StaticCodeAudit wurde gegen eine reale CVE Test Suite gemessen: 45 Fälle, rekonstruiert aus veröffentlichten, historischen CVEs über 8 Frameworks und 5 Sprachen. ASP.NET ist eines davon — und das am schlechtesten abschneidende Framework der gesamten Suite.
ASP.NET, aus CVE rekonstruiert
Offen gelegt, nicht versteckt: ASP.NET/C# steht in der sprachübergreifenden CVE-Tabelle an letzter Stelle, Precision und Recall bei rund 66,7%. Historische CVEs wie log4shell-artige Deserialisierungsketten und komplexe mehrstufige Taint-Pfade in ASP.NET sind genau die Fälle, die die Regel-Engine noch übersieht. Vollständige sprachübergreifende Aufschlüsselung (auch wo Python und PHP besser abschneiden) auf der <a href="/de/language-benchmarks.php" class="text-primary font-semibold hover:underline">Sprachbenchmark-Seite</a>.
Echte Schwachstellen passen selten in eine einzige Datei
ASP.NET-Anwendungen verteilen die Logik auf mehrere Schichten: ein Controller empfängt die Anfrage, ein Repository baut die Abfrage. Ein Scanner, der jeweils nur eine Datei sieht, verbindet die beiden nie — er sieht die Nutzereingabe in OrdersController.cs und den Datenbankaufruf in OrderRepository.cs, aber nie die Verbindung dazwischen. StaticCodeAudit verfolgt die Daten über Dateigrenzen hinweg.
[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 stammt aus dem Routenparameter im Controller und erreicht die SQL-Abfrage eine Datei später unverändert — StaticCodeAudit meldet dies genau in der Zeile, in der die Abfrage ausgeführt wird.
Wie schneidet das im Vergleich zu Security Code Scan oder Semgrep ab?
Security Code Scan und Semgrep sind die zwei Tools, die als Erstes genannt werden, wenn ein .NET-Team nach einem kostenlosen Security-Scanner sucht. Beide sind legitim, und viele Teams nutzen bereits eines davon — hier ein ehrlicher Vergleich, keine Abwertung.
Security Code Scan
Kostenlos, Open SourceRoslyn-Analyzer, speziell für .NET-Sicherheitsprobleme gebaut (SQL-Injection, XSS, XXE, schwache Krypto), läuft direkt im Compiler beim Build. Gute Standardabdeckung, aber auf ein Projekt begrenzt: kein dateiübergreifendes Taint-Tracking über eine Multi-Projekt-Solution hinweg, und Findings sind standardmäßig nicht auf CWE/ISO 27001/ASVS gemappt.
Semgrep (Community)
Kostenlos, Open-Source-KernPattern-Matching-Engine mit C#-Unterstützung, die neuer und weniger ausgereift ist als die Abdeckung für Python/Java/JS. Der kostenlose Tier deckt die meisten Alltagsregeln ab; dateiübergreifendes Taint-Tracking, Compliance-Reporting und einige Enterprise-Integrationen sind Semgreps kostenpflichtigen Tiers vorbehalten.
Vollständiger Vergleich StaticCodeAudit vs. Semgrep →Keines der beiden wird durch die Installation von StaticCodeAudit ersetzt — wenn Security Code Scan bereits das abdeckt, was Ihr Team braucht, nutzen Sie es weiter. Was StaticCodeAudit hinzufügt: Findings, die bereits auf CWE/OWASP/ISO 27001/ASVS/NIST CSF gemappt sind (ein Finding, das direkt in eine Audit-Akte passt, nicht nur eine Regel-ID), dateiübergreifendes Taint-Tracking über Ihre gesamte Solution standardmäßig, und 7 weitere Sprachen, die von derselben Binary abgedeckt werden — kein separater Scanner pro Sprache zu konfigurieren. Viele Teams nutzen beides.
Auditieren Sie Ihren Code
Auditieren Sie ASP.NET Core, Entity Framework, Dapper und NHibernate auf OWASP-Top-10-Schwachstellen, Deserialisierungs-Gadgets und Konfigurations-Drift — ohne Ihre Maschine zu verlassen.
Demo-Binary herunterladen Geführte Demo buchen