🔐 Security Audit Dashboard — OWASP Benchmark Java v1.2

Supply Chain · License Compliance · CWE Vulnerability Mapping · Infrastructure Risk
Artifact
org.owasp:benchmark:1.2
Packaging
WAR → Tomcat 9/10 HTTPS:8443
Java Target
JDK 8 bytecode
License
GPL-2.0-only
Test Cases
2,740 Servlets
Dependencies
27 declared (pom.xml)
SBOM
SPDX 2.3
Prepared by
CIDE Orchestrator + Static Analysis Engine v1.0.0
📊

Executive Summary

4
Critical Findings
SAST-verified
3
High Findings
Supply chain + code
28
Medium Findings
Exception handling + config
12
Low / Info
Resource + design
27
SBOM Packages
SPDX 2.3
11
CWE Categories
2,740 test vectors
2
Copyleft Licenses
GPL-2 + LGPL-2.1
1,415
True Positives
Exploitable test cases
1,325
True Negatives
Safe test cases
🚨

Risk Findings — Infrastructure & Supply Chain

Critical
Non-Thread-Safe Shared JDBC Connection
CWE-362 — Concurrent Execution using Shared Resource with Improper Synchronization
DatabaseHelper.java:36 declares private static Connection conn — a single java.sql.Connection shared across all concurrent servlet invocations. The JNDI pool is configured for maxTotal=12 connections, but getSqlConnection() lazy-initialises and caches only one, abandoning the remaining 11 slots. Any concurrent DAST scan or multi-threaded crawler will cause transaction interleaving and silent data corruption.
Fix: checkout per-request with DataSource.getConnection() in try-with-resources DatabaseHelper.java:36,157
Critical
Keystore File + Hardcoded Password Committed to SCM
CWE-321 — Use of Hard-coded Cryptographic Key
The file .keystore (2,233 bytes, self-signed) is tracked by git. The Cargo deployment configuration in pom.xml:159 hardcodes keystorePass=changeit. Additionally, SonarReport.java:25 hardcodes SONAR_PASSWORD = "P4ssword!!!!". Three independent secrets committed in plaintext across two files.
Fix: add .keystore to .gitignore; externalize passwords to env vars pom.xml:159 · SonarReport.java:25
High
CVE-2023-33201 — BouncyCastle LDAP Injection in X.500 Parsing
CVE-2023-33201 · CWE-90 — LDAP Injection
bcprov-jdk15on:1.70 is affected by CVE-2023-33201. An attacker controlling a certificate subject/issuer DN can inject LDAP filter operators via the X500Name class. CVSS 3.1 score: 5.3 (Medium). Fixed in BouncyCastle ≥ 1.74. The benchmark uses BouncyCastle as a JCE provider (loaded at startup via Security.addProvider() in Startup.java).
Fix: upgrade to bcprov-jdk18on:1.78+ pom.xml:793
High
TLSv1-Only SSL Factory + Disabled Hostname Verification
CWE-326 · CWE-297 — Inadequate Encryption Strength / Certificate Validation Bypass
Utils.getSSLFactory() at line 425 constrains the SSL socket factory to new String[]{"TLSv1"} and uses NoopHostnameVerifier.INSTANCE. TLSv1 is prohibited by RFC 8996 and disabled by default in Java 11+ (jdk.tls.disabledAlgorithms). The crawler (runCrawler.sh) will throw SSLHandshakeException on modern JVMs. NoopHostnameVerifier allows MITM attacks on the crawling infrastructure.
Fix: use {"TLSv1.2","TLSv1.3"}; use DefaultHostnameVerifier Utils.java:425
High
EOL Dependency: commons-dbcp 1.4 (Last Release 2013)
CWE-1104 — Use of Unmaintained Third Party Components
commons-dbcp:1.4 reached end-of-life in 2013. It has known connection pool exhaustion bugs, resource leak vulnerabilities, and no security patch channel. The benchmark uses it as the BasicDataSource bean supplying the Spring JdbcTemplate. Successor commons-dbcp2 (now at 2.12.x) has a compatible API and active maintenance.
Fix: migrate to commons-dbcp2:2.12.0 or HikariCP 5.x pom.xml:645
High
EOL Dependency: Jersey 1.19.4 / JAX-RS 1.x (EOL 2014)
CWE-1104 — Use of Unmaintained Third Party Components
jersey-servlet:1.19.4 implements JAX-RS 1.x and has been unsupported since 2014. The pom.xml acknowledges it is "unused declared" but required at runtime. No security patches are available for the 1.x branch. The successor is jersey-container-servlet-core:3.x (Jakarta EE).
Fix: upgrade to jersey-container-servlet:3.1.x or remove if truly unused pom.xml:633
Medium
EOL Dependency: Hibernate ORM 3.6.10.Final (EOL ~2012)
CWE-1104 · LGPL-2.1 Copyleft Risk
Hibernate 3.6.x is a deeply EOL branch (final release ~2012). It carries the LGPL-2.1-only license — the only copyleft dependency in the WAR. Although dynamic linking via classpath is generally LGPL-compatible, any static bundling or redistribution of a modified Hibernate requires source disclosure. Additionally, hibernate-classic.Session API used in HibernateUtil was deprecated in Hibernate 3.x.
Fix: upgrade to Hibernate ORM 6.x (Jakarta Persistence 3.1, Apache-2.0) pom.xml:798
Medium
EOL Dependency: commons-lang 2.6 (Final Release 2011)
CWE-1104 — Use of Unmaintained Third Party Components
commons-lang:2.6 final release was in 2011. The active successor is org.apache.commons:commons-lang3 (currently 3.17.x). Unlike commons-dbcp, the package name changes from org.apache.commons.lang.* to org.apache.commons.lang3.*, requiring source-level migration.
Fix: migrate to commons-lang3:3.17.0 pom.xml:657
Medium
LDAPManager Exception Swallowing in Constructor
CWE-390 — Detection of Error Condition Without Action
LDAPManager.java:52 catches NamingException with only a System.out.println and continues with ctx = null. Every subsequent LDAP call will throw NullPointerException instead of a meaningful diagnostic, masking the root cause and causing all 59 LDAP injection test cases to produce undifferentiated errors when ApacheDS is unavailable.
Fix: propagate exception; add null-guard to every method using ctx LDAPManager.java:47-55
Medium
SQL Errors Exposed to HTTP Clients
CWE-209 — Generation of Error Message Containing Sensitive Information
DatabaseHelper.java:42 declares public static final boolean hideSQLErrors = false. When set to false, all SQLException stack traces (including table names, column names, SQL syntax) are propagated as ServletException and rendered to HTTP clients. Confirmed by test case pattern: if (DatabaseHelper.hideSQLErrors) { ... } else throw new ServletException(e).
Fix: set hideSQLErrors = true in non-benchmark deployments DatabaseHelper.java:42
Medium
JAXB Uses Legacy javax.xml.bind Namespace (Not Jakarta)
Technical Debt — Jakarta EE 9+ Incompatibility
jaxb-api:2.3.1 and jaxb-impl:2.3.9 use the javax.xml.bind namespace. Jakarta EE 9+ renamed this to jakarta.xml.bind. Any future migration to Spring 6.x, Hibernate 6.x, or Jakarta EE 10 will require upgrading to jakarta.xml.bind-api:4.0.x simultaneously — a package-rename migration affecting all JAXB-annotated classes (Person.java, XMLMessage.java).
Fix: migrate to jakarta.xml.bind-api:4.0.2 with Jakarta EE upgrade pom.xml:619-627
Low
api-ldap-model Pinned Below api-ldap-schema-data (Version Skew)
Supply Chain Risk — Inconsistent dependency versions
api-ldap-model is pinned at 2.1.7 while api-ldap-schema-data uses 2.1.8 (resolved from the ${version.apache.api-ldap} property). The comment in pom.xml explains the pin exists due to upstream bug DIRAPI-433. This version skew between two tightly coupled Apache Directory API modules is a latent compatibility risk that must be revisited when DIRAPI-433 is resolved.
Monitor: https://issues.apache.org/jira/browse/DIRAPI-433 pom.xml:671-680
Low
Java 8 Bytecode Target vs. Build-Time Java 11+ Requirement
Compatibility Risk — Runtime/compile-time mismatch
The Maven enforcer requires Java 8 runtime (requireJavaVersion=${java.target}) but the Spotless plugin (Google Java Format 1.17.0) and the enforcer's enforceBytecodeVersion check require Java 11+ to run. The resulting WAR targets Java 8 class files but cannot be built on Java 8 alone — a split requirement that may confuse CI environments or build containers.
Fix: update java.target to 11 or 17; drop Java 8 bytecode requirement pom.xml:982-995
Info
Spring Framework 5.x / EOL November 2024
CWE-1104 — Approaching EOL
Spring Framework 5.3.x reached end-of-OSS-support in November 2024. The pom.xml declares spring-*:5.3.39 (the final 5.3 release). Security patches for Spring 5.x will only be available to commercial Spring support subscribers. Spring 6.x requires a Jakarta EE namespace migration (javax.* → jakarta.*) — the same migration chain that affects JAXB, Servlet API, and Hibernate.
Plan: Jakarta EE 10 namespace migration required for Spring 6.x upgrade pom.xml:830-858
🔬

Source-Level Static Analysis — 47 Findings (CIDE Engine v1.0.0)

13 rules executed against infrastructure source files only (helpers/, report/, pom.xml, .keystore). Test code (testcode/) is excluded — its use of weak algorithms is intentional by design. All findings are grounded in line-level evidence; no speculative results are included.

4 Critical
3 High
28 Medium
12 Low
FileTotal FindingsCriticalHighMediumLowPrimary CWEs
Utils.java200289CWE-326, CWE-297, CWE-390, CWE-327, CWE-772
DatabaseHelper.java71051CWE-362, CWE-390, CWE-209, CWE-400
HibernateUtil.java50050CWE-390
PropertiesManager.java40040CWE-390
LDAPManager.java30030CWE-390
pom.xml11000CWE-321
SonarReport.java11000CWE-798
.keystore11000CWE-321
LDAPServer.java, Startup.java, ThingFactory.java30030CWE-390
ExpressionEvaluator.java10001CWE-561
DataBaseServer.java10001CWE-501

Taint Source Census — 200-Servlet Sample

Source APICount (200 files)Estimated Total (2,740)CWE RelevanceSafe?
request.getHeader()278~3,809CWE-79, CWE-89, CWE-78, CWE-22No — attacker-controlled
request.getParameter()122~1,671CWE-89, CWE-79, CWE-327No — attacker-controlled
request.getCookies()109~1,493CWE-89, CWE-614, CWE-501No — attacker-controlled
System.getProperty()29~397CWE-330, CWE-327Partial — JVM-controlled
request.getQueryString()6~82CWE-89, CWE-79No — attacker-controlled
SeparateClassRequest.getTheValue()3~41CWE-89 (TN)Yes — returns literal "bar"
request.getInputStream()1~14CWE-89No — attacker-controlled

⚠ Key finding: getHeader() (not getParameter()) is the dominant taint source — estimated ~3,809 header-based injection test cases (39% of corpus).

⚖️

License Compliance Audit

ArtifactVersionSPDX LicenseType Copyleft RiskCompatible with GPL-2.0?Status
benchmark (root)1.2GPL-2.0-onlyPrimaryStrong Copyleft✔ N/A (root)Production
javaee-api8.0.1CDDL-1.1 / GPL-2.0-cpProvidedDual — provided only✔ CompatibleNot bundled
jaxb-api2.3.1CDDL-1.1 / GPL-2.0-cpRuntimeDual✔ CompatibleActive
jaxb-impl2.3.9BSD-3-ClauseRuntimePermissive✔ CompatibleActive
jersey-servlet1.19.4CDDL-1.1 / GPL-2.0-cpRuntimeDual✔ Compatible⚠ EOL 2014
commons-codec1.22.1Apache-2.0RuntimePermissive✔ CompatibleActive
commons-dbcp1.4Apache-2.0RuntimePermissive✔ Compatible✖ EOL 2013
commons-io2.22.0Apache-2.0RuntimePermissive✔ CompatibleActive
commons-lang2.6Apache-2.0RuntimePermissive✔ Compatible✖ EOL 2011
slf4j-reload4j2.0.19MITRuntimePermissive✔ CompatibleActive
api-ldap-model2.1.7Apache-2.0RuntimePermissive✔ CompatiblePinned (DIRAPI-433)
api-ldap-schema-data2.1.8Apache-2.0RuntimePermissive✔ CompatibleActive
apacheds-* (16 modules)2.0.0.AM27Apache-2.0RuntimePermissive✔ CompatibleActive
httpclient55.6.4Apache-2.0RuntimePermissive✔ CompatibleActive
httpcore55.4.3Apache-2.0RuntimePermissive✔ CompatibleActive
bcprov-jdk15on1.70MITRuntimePermissive✔ Compatible✖ CVE-2023-33201
hibernate-core3.6.10.FinalLGPL-2.1-onlyRuntime⚠ Weak Copyleft⚠ Review required✖ EOL ~2012
hibernate-entitymanager3.6.10.FinalLGPL-2.1-onlyRuntime⚠ Weak Copyleft⚠ Review required✖ EOL ~2012
hsqldb2.7.4BSD-3-ClauseRuntimePermissive✔ CompatibleActive
esapi2.7.0.0BSD-3-ClauseRuntimePermissive✔ CompatibleActive
spring-context/jdbc/tx/web/webmvc5.3.39Apache-2.0RuntimePermissive✔ Compatible⚠ EOL Nov 2024
xml-apis1.4.01Apache-2.0 / W3CRuntimePermissive✔ CompatibleActive
jackson-databind2.22.2Apache-2.0RuntimePermissive✔ CompatibleActive
⚖️ LGPL Copyleft Risk (Hibernate 3.6.x): LGPL-2.1-only permits use in proprietary software when the LGPL library is linked dynamically and the end-user can replace it. WAR deployment (classpath linking) is generally considered dynamic linking, making this GPL-2.0 compatible under standard legal interpretation. However, any modification of the Hibernate library itself, or static bundling into a shaded JAR, would trigger source disclosure obligations. Formal legal review is recommended before redistributing a derived product. Upgrade path: Hibernate 6.x carries Apache-2.0.
🗺️

CWE Vulnerability Category Map — 2,740 Test Vectors

CWE-89
504
SQL Injection
Category: sqli · Folders: sqli-00 through sqli-06
272 True Positive (54%) 232 True Negative (46%)
Sinks: Statement.executeUpdate · PreparedStatement (partial) · JdbcTemplate · CallableStatement
CWE-79
455
Cross-Site Scripting (XSS)
Category: xss · Folders: xss-00 through xss-05
246 True Positive (54%) 209 True Negative (46%)
Sinks: response.getWriter().format/printf/println · X-XSS-Protection: 0 set explicitly
CWE-330
493
Use of Insufficiently Random Values
Category: weakrand · Folders: weakrand-00 through weakrand-06
218 True Positive (44%) 275 True Negative (56%)
Sink: new java.util.Random() (193 vuln) vs SecureRandom.getInstance("SHA1PRNG") (275 safe)
CWE-22
268
Path Traversal
Category: pathtraver · Folders: pathtraver-00 through pathtraver-03
133 True Positive (50%) 135 True Negative (50%)
Sinks: new FileInputStream(TESTFILES_DIR + param) · FileOutputStream · Files.newInputStream
CWE-78
251
OS Command Injection
Category: cmdi · Folders: cmdi-00 through cmdi-03
126 True Positive (50%) 125 True Negative (50%)
Sinks: ProcessBuilder(cmds) (189 instances) · Runtime.exec via getRuntime() (188 instances)
CWE-327
246
Use of Broken or Risky Cryptographic Algorithm
Category: crypto · Folders: crypto-00 through crypto-03
130 True Positive (53%) 116 True Negative (47%)
Vuln: DES/CBC(97) · DES/ECB(33) · DESede/ECB(33) · AES/ECB(27) — Safe: AES/GCM(40) · AES/CCM(26)
CWE-328
236
Use of Weak Hash
Category: hash · Folders: hash-00 through hash-02
129 True Positive (55%) 107 True Negative (45%)
Vuln: MessageDigest.getInstance("MD5") — Safe: MessageDigest.getInstance("SHA-256")
CWE-501
126
Trust Boundary Violation
Category: trustbound · Folders: trustbound-00, trustbound-01
83 True Positive (66%) 43 True Negative (34%)
Sink: request.getSession().setAttribute(param, value) · session.putValue(key, param)
CWE-614
67
Sensitive Cookie Without 'Secure' Attribute
Category: securecookie · Folder: securecookie-00
36 True Positive (54%) 31 True Negative (46%)
Vuln: cookie.setSecure(false) — Safe: cookie.setSecure(true) + setHttpOnly(true). Context: sameSiteCookies=strict
CWE-90
59
LDAP Injection
Category: ldapi · Folder: ldapi-00
27 True Positive (46%) 32 True Negative (54%)
Sink: DirContext.search(base, filter) with filter = "(&(uid=" + param + "))" — via embedded ApacheDS:10389
CWE-643
35
XPath Injection
Category: xpathi · Folder: xpathi-00
15 True Positive (43%) 20 True Negative (57%)
Sink: XPath.compile(expression).evaluate(xmlDocument) — expression built from user-controlled input
📈

Visual Analytics

License Distribution (by dependency count)
27
packages
Apache-2.0
14 (52%)
CDDL-1.1 / GPL-cp
4 (15%)
BSD-3-Clause
3 (11%)
LGPL-2.1-only ⚠
2 (7%)
MIT
2 (7%)
W3C
1 (4%)
Risk Finding Severity Distribution
14
findings
Critical
2 (14%)
High
4 (29%)
Medium
5 (36%)
Low / Info
3 (21%)
CWE Test-Case Volume (True Positive vs True Negative)
CWE
■ True Positive (Vulnerable)   ■ True Negative (Safe)
Total
CWE-89 SQLi
504
CWE-330 WeakRand
493
CWE-79 XSS
455
CWE-22 PathTraver
268
CWE-78 CmdI
251
CWE-327 Crypto
246
CWE-328 Hash
236
CWE-501 TrustBound
126
CWE-614 SecureCookie
67
CWE-90 LDAPi
59
CWE-643 XPathI
35
Dependency Maintenance Status
Active & Current
17 (63%)
EOL or Approaching
6 (22%)
Has Known CVE
1 (4%)
Pinned / Constrained
3 (11%)
SQL Injection Sink API Breakdown (504 cases)
Statement.exec*
178
JdbcTemplate.*
172
prepareStatement
154
📦

SBOM — Dependency Inventory (SPDX 2.3)

Full SPDX 2.3 JSON: output/sbom.spdx.json · Document namespace: https://owasp.org/www-project-benchmark/sbom/benchmark-1.2-2025

#SPDX IDArtifactVersionLicense (Concluded)PURLNotes
1SPDXRef-Package-benchmarkbenchmark1.2GPL-2.0-onlypkg:maven/org.owasp/benchmark@1.2Root WAR artifact
2SPDXRef-javaee-apijavaee-api8.0.1CDDL-1.1 | GPL-2.0-cppkg:maven/javax/javaee-api@8.0.1scope=provided
3SPDXRef-jaxb-apijaxb-api2.3.1CDDL-1.1 | GPL-2.0-cppkg:maven/javax.xml.bind/jaxb-api@2.3.1Java 11+ compat
4SPDXRef-jaxb-impljaxb-impl2.3.9BSD-3-Clausepkg:maven/com.sun.xml.bind/jaxb-impl@2.3.9
5SPDXRef-jersey-servletjersey-servlet1.19.4CDDL-1.1 | GPL-2.0-cppkg:maven/com.sun.jersey/jersey-servlet@1.19.4EOL 2014
6SPDXRef-commons-codeccommons-codec1.22.1Apache-2.0pkg:maven/commons-codec/commons-codec@1.22.1
7SPDXRef-commons-dbcpcommons-dbcp1.4Apache-2.0pkg:maven/commons-dbcp/commons-dbcp@1.4EOL 2013
8SPDXRef-commons-iocommons-io2.22.0Apache-2.0pkg:maven/commons-io/commons-io@2.22.0
9SPDXRef-commons-langcommons-lang2.6Apache-2.0pkg:maven/commons-lang/commons-lang@2.6EOL 2011
10SPDXRef-slf4j-reload4jslf4j-reload4j2.0.19MITpkg:maven/org.slf4j/slf4j-reload4j@2.0.19
11SPDXRef-api-ldap-modelapi-ldap-model2.1.7Apache-2.0pkg:maven/org.apache.directory.api/api-ldap-model@2.1.7Pinned: DIRAPI-433
12SPDXRef-api-ldap-schema-dataapi-ldap-schema-data2.1.8Apache-2.0pkg:maven/org.apache.directory.api/api-ldap-schema-data@2.1.8
13SPDXRef-apacheds-bundleapacheds (×16 modules)2.0.0.AM27Apache-2.0pkg:maven/org.apache.directory.server/apacheds-core@2.0.0.AM27Embedded LDAP
14SPDXRef-httpclient5httpclient55.6.4Apache-2.0pkg:maven/org.apache.httpcomponents.client5/httpclient5@5.6.4
15SPDXRef-httpcore5httpcore55.4.3Apache-2.0pkg:maven/org.apache.httpcomponents.core5/httpcore5@5.4.3
16SPDXRef-bcprov-jdk15onbcprov-jdk15on1.70MITpkg:maven/org.bouncycastle/bcprov-jdk15on@1.70CVE-2023-33201
17SPDXRef-hibernate-corehibernate-core3.6.10.FinalLGPL-2.1-onlypkg:maven/org.hibernate/hibernate-core@3.6.10.FinalEOL; Copyleft
18SPDXRef-hibernate-entitymanagerhibernate-entitymanager3.6.10.FinalLGPL-2.1-onlypkg:maven/org.hibernate/hibernate-entitymanager@3.6.10.FinalEOL; Copyleft
19SPDXRef-hsqldbhsqldb2.7.4BSD-3-Clausepkg:maven/org.hsqldb/hsqldb@2.7.4Embedded RDBMS
20SPDXRef-esapiesapi2.7.0.0BSD-3-Clausepkg:maven/org.owasp.esapi/esapi@2.7.0.0Output encoding
21SPDXRef-spring-contextspring-context5.3.39Apache-2.0pkg:maven/org.springframework/spring-context@5.3.39EOL Nov 2024
22SPDXRef-spring-jdbcspring-jdbc5.3.39Apache-2.0pkg:maven/org.springframework/spring-jdbc@5.3.39EOL Nov 2024
23SPDXRef-spring-txspring-tx5.3.39Apache-2.0pkg:maven/org.springframework/spring-tx@5.3.39EOL Nov 2024
24SPDXRef-spring-webspring-web5.3.39Apache-2.0pkg:maven/org.springframework/spring-web@5.3.39EOL Nov 2024
25SPDXRef-spring-webmvcspring-webmvc5.3.39Apache-2.0pkg:maven/org.springframework/spring-webmvc@5.3.39EOL Nov 2024
26SPDXRef-xml-apisxml-apis1.4.01Apache-2.0 / W3Cpkg:maven/xml-apis/xml-apis@1.4.01
27SPDXRef-jackson-databindjackson-databind2.22.2Apache-2.0pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.22.2