Zum Hauptinhalt springen

C# (.NET) · SAST

C#-/.NET-SAST, das vollständig offline läuft

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.

Geprüfte Frameworks & Bibliotheken

Wir testen die Abdeckung über Fixtures auf diesen Frameworks. Neue Muster werden in jedem Builtin-Regel-Release ergänzt.

ASP.NET Core ASP.NET MVC Entity Framework Core Dapper NHibernate Razor Blazor SignalR IdentityServer NewtonsoftJson System.Text.Json BouncyCastle.NetCore Polly AutoMapper

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
// Verwundbar — SqlCommand-Konkatenation
var cmd = new SqlCommand(
    $"SELECT * FROM users WHERE name = \'{name}\'", conn);
var reader = cmd.ExecuteReader();
✅ Sicher
// 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
// Verwundbar — BinaryFormatter auf nicht vertrauenswürdigem Stream
var bf = new BinaryFormatter();
var obj = bf.Deserialize(networkStream);
✅ Sicher
// 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
// Verwundbar — Razor @Html.Raw auf User-Daten
@Html.Raw(Model.Bio)
✅ Sicher
// Sicher — standardmäßig kodierte Ausgabe
@Model.Bio

Was StaticCodeAudit erkennt (diese Sprache)

  • SQL-Injection in SqlCommand-Concat, Dapper-Interpolation, EF Core FromSqlRaw, NHibernate HQL-Concat
  • XSS in Razor @Html.Raw, Blazor MarkupString, MVC manuelle Encoding-Umgehung
  • Befehlsinjektion in Process.Start mit 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, SameSite aus)
  • Path Traversal in File.ReadAllBytes, Path.Combine mit 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)

Neugierig, wie die Erkennungsqualität tatsächlich gemessen wird? Sehen Sie sich die vollständige sprachübergreifende Benchmark-Methodik an (OWASP Benchmark, NIST Juliet, Precision/Recall/F1 pro Sprache) →

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.

66,7%
F1-Score
66,7%
Recall
45
CVE Test Suite (gesamt, alle Sprachen)

ASP.NET, aus CVE rekonstruiert

66,7%
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.

OrdersController.cs
[HttpGet("orders/{id}")]
public IActionResult GetOrder(string id)
{
    return Ok(_repo.FindOrder(id));
}
OrderRepository.cs
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 Source

Roslyn-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-Kern

Pattern-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