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 JDBC Statement, JPA createQuery mit Concat, MyBatis ${...} statt #{...}, Hibernate HQL mit String-Format.
Erkannt von SCA-Regel: sql_injection_concat_java
CWE-611
XML External Entity (XXE)
DocumentBuilderFactory, SAXParserFactory, XMLReader ohne FEATURE_SECURE_PROCESSING oder DTD deaktiviert. Erlaubt Datei-Disclosure und SSRF.
Erkannt von SCA-Regel: xxe_injection
CWE-502
Unsichere Deserialisierung
Natives Java ObjectInputStream.readObject auf nicht vertrauenswürdigen Bytes (die « Java Serialization Gadget »-Bug-Klasse, die zu log4shell führte). Apache Commons Collections-Payloads funktionieren noch 2026.
Erkannt von SCA-Regel: unsafe_deserialization
CWE-78
OS-Befehlsinjektion
Runtime.getRuntime().exec(userString) mit Shell-String, ProcessBuilder mit Concat. Beide interpretieren Shell-Metazeichen.
Erkannt von SCA-Regel: command_injection_java
CWE-798
Hartkodierte Zugangsdaten
Anmeldedaten in commitetem application.properties, AWS-Keys in application.yml, JWT-Signatur-Secret als String-Konstante.
Erkannt von SCA-Regel: hardcoded_secret
CWE-22
Path Traversal
new File(userPath), Files.readAllBytes(Paths.get(userPath)) ohne Root-Anchor-Check — typisch bei Multi-Tenant-Datei-Storage-Endpoints.
Erkannt von SCA-Regel: path_traversal_python
Verwundbar vs. sicher — drei kurze Beispiele
CWE-89
Erkannt von SCA-Regel: sql_injection_concat_java
// Verwundbar — Statement-Konkatenation
String sql = "SELECT * FROM users WHERE name = \'" + name + "\'";
ResultSet rs = stmt.executeQuery(sql);
// Sicher — PreparedStatement mit Bind
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM users WHERE name = ?");
ps.setString(1, name);
ResultSet rs = ps.executeQuery();
CWE-611
Erkannt von SCA-Regel: xxe_injection
// Verwundbar — DocumentBuilderFactory Default
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document doc = dbf.newDocumentBuilder().parse(input);
// Sicher — DTD deaktivieren + Secure Processing
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Document doc = dbf.newDocumentBuilder().parse(input);
CWE-78
Erkannt von SCA-Regel: command_injection_java
// Verwundbar — Shell-String
Runtime.getRuntime().exec("ping -c 1 " + userInput);
// Sicher — Argument-Array, keine Shell-Interpretation
ProcessBuilder pb = new ProcessBuilder("ping", "-c", "1", userInput);
pb.start();
Was StaticCodeAudit erkennt (diese Sprache)
- SQL-Injection in JDBC
Statement, JPA, MyBatis, Hibernate HQL mit Concat - XXE in
DocumentBuilderFactory,SAXParserFactory,XMLReader - Native Java-Deserialisierung auf nicht vertrauenswürdigen Streams
- Befehlsinjektion via
Runtime.exec,ProcessBuildermit Shell-String - Hartkodierte Secrets in
application.properties,application.yml - Path Traversal in
new File,Files.readAllBytesohne Root-Anchor - LDAP-Injection in
DirContext.search - Unsichere Cookies (
setSecure,setHttpOnlyin Servlet-API fehlen) - CSRF: Spring Security
.csrf().disable()in Produktionskonfiguration - Unsichere Krypto (MD5/SHA1 für Security, DES, RC4, hartkodierter IV)
- JWT none-Algorithmus, hartkodierter HS256-Secret
- Log4j Sinks (CVE-2021-44228 Muster-Erkennung)
- Veraltete APIs (SSLv3, javax.xml.ws Endpoint, sun.misc.Unsafe)
- CI/CD-Fehlkonfigurationen (Maven/Gradle-Wrappers, GitHub-Actions-Tokens)
OWASP BenchmarkJava v1.2 — unabhängige Validierung
StaticCodeAudit wurde gegen das OWASP BenchmarkJava v1.2 gemessen — eine öffentliche, reproduzierbare Test-Suite mit 2.740 Java-Testfällen, die 11 Schwachstellenkategorien abdeckt.
9 von 11 Kategorien mit F1 = 100%
34 verbleibende False Positives insgesamt: 33 in der Hash-Kategorie — MessageDigest.getInstance(algorithm), wo der Algorithmus-String aus einer externen .properties-Datei stammt, statisch nicht von einer Konstante unterscheidbar — plus 1 bei SQL-Injection, bedingt durch die dateiübergreifende Analyse.
Echte Schwachstellen passen selten in eine einzige Datei
Spring-Anwendungen verteilen die Logik auf mehrere Schichten: ein Controller empfängt die Anfrage, ein Service baut die Abfrage. Ein Scanner, der jeweils nur eine Datei sieht, verbindet die beiden nie — er sieht die Nutzereingabe in Controller.java und den Datenbankaufruf in Service.java, aber nie die Verbindung dazwischen. StaticCodeAudit verfolgt die Daten jetzt über Dateigrenzen hinweg, genau wie bereits bei Python.
@GetMapping("/orders")
public String findOrder(@RequestParam String id, Model model) {
model.addAttribute("order", orderService.findOrder(id));
return "order-view";
}
public Order findOrder(String id) {
String sql = "SELECT * FROM orders WHERE id = " + id;
return jdbcTemplate.queryForObject(sql, Order.class);
}
id stammt aus der HTTP-Anfrage im Controller und erreicht die SQL-Abfrage zwei Dateien später unverändert — StaticCodeAudit meldet dies genau in der Zeile, in der die Abfrage ausgeführt wird.
Auditieren Sie Ihren Code
Auditieren Sie Spring Boot, JEE, Hibernate und JDBC auf OWASP-Top-10-Schwachstellen, Framework-Fehlkonfigurationen und Supply-Chain-Risiken — ohne Code in die Cloud hochzuladen.
Demo-Binary herunterladen Geführte Demo buchen