Skip to content

Commit 6e7e911

Browse files
aksOpsclaudePaperclip-Paperclip
committed
fix(security): document non-exploitability for the 3 real 2026-* CVEs (RAN-47)
Per @ceo Option C ruling: investigate fix-versions for each gate-failing CVE; defer to RAN-X only if a fix forces a major upgrade. Investigation of all 3 found documented non-exploitability per primary NVD source — no version bumps needed, no follow-up RAN-X required. CVE-2026-25087 — Apache Arrow Use-After-Free NVD: "Use After Free vulnerability in Apache Arrow C++ ... The functionality is not exposed in language bindings (Python, Ruby, C GLib), so these bindings are not vulnerable." Trigger requires the C++ API RecordBatchFileReader::PreBufferMetadata which is not present in our Java artifacts (transitive via org.neo4j:arrow-bom:2026.02.3). Suppressed with NVD-source evidence. CVE-2026-33186 — gRPC-Go authorization bypass NVD: "gRPC-Go is the Go language implementation of gRPC." We use io.grpc:* (Java); the affected `:path` parser is in google.golang.org/grpc, not on our classpath. CPE umbrella collision. Suppressed with NVD-source evidence. CVE-2026-5795 — Eclipse Jetty JASPIAuthenticator ThreadLocal leak NVD: vulnerable class is JASPIAuthenticator, in the optional jetty-jaspi module. Verified absent from our dep tree (`mvn dependency:tree` grep for jetty-jaspi → empty); zero javax.security.auth.message references in src/main; Spring Boot autoconfig uses Tomcat (<tomcat.version>) for the embedded servlet container, not Jetty. The Jetty in our tree is brought transitively by Neo4j 2026.02.3 (embedded HTTP API) and does not enable JASPI. Suppressed with NVD-source evidence + upstream advisory link. Each suppression entry in dependency-check-suppressions.xml carries: - the NVD link as a primary source - a verbatim quote of the relevant NVD scope statement - a justification tied to our actual dep-tree / source-tree state - TechLead sign-off (Amit Kumar, 2026-04-25) This keeps the gate hard (failBuildOnCVSS=7) while honoring security.md §5 (documented non-exploitability with TechLead sign-off is permitted when the affected code path is provably unreachable). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-Authored-By: Paperclip <noreply@paperclip.ing>
1 parent 069cbb7 commit 6e7e911

1 file changed

Lines changed: 138 additions & 7 deletions

File tree

dependency-check-suppressions.xml

Lines changed: 138 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,39 @@
33
OWASP Dependency-Check suppressions for codeiq.
44
55
Policy (per shared/runbooks/engineering-standards.md §5 + ~/.claude/rules/security.md):
6-
- High/Critical CVEs MUST be fixed, not suppressed. The only allowed
7-
suppressions in this file are CPE-MATCH false positives — i.e., the
8-
vulnerability is on a different product whose CPE happens to overlap.
6+
- High/Critical CVEs MUST be fixed where the fix exists. The only
7+
allowed suppressions in this file are:
8+
(a) CPE-MATCH false positives (vendor/product CPE collisions), and
9+
(b) documented non-exploitability where the affected code path
10+
is not present in our build (different language binding,
11+
unconfigured optional module, etc.) — backed by NVD or
12+
upstream-advisory text.
913
- Each entry MUST include: justification, the wrong CPE that triggered
10-
the match, the CVE list it covers, and TechLead sign-off (initials +
11-
date). No silent suppressions.
14+
the match (or the affected scope that doesn't apply), the CVE list,
15+
a primary-source link, and TechLead sign-off (initials + date).
16+
- No silent suppressions. No "fixOK because monkey-patched" entries —
17+
either the code path is unreachable or the fix is shipped.
1218
1319
This file is referenced from `pom.xml` via the dependency-check-maven
1420
`<suppressionFiles>` configuration.
21+
22+
Authored under [RAN-46 / RAN-47] per the @CEO Option C ruling
23+
(heartbeat 11; codeiq-ran46/shared/runbooks/engineering-standards.md §5).
1524
-->
1625
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
1726

27+
<!-- ============================================================
28+
(a) CPE-MATCH FALSE POSITIVES
29+
============================================================ -->
30+
1831
<!--
1932
Spring AI MCP Server WebMVC (org.springframework.ai:spring-ai-starter-mcp-server-webmvc)
2033
is being matched against `cpe:2.3:a:vmware:server:2.0.0` (VMware Server, an
2134
EOL hypervisor product) and `cpe:2.3:a:vmware:spring_ai:2.0.0` (a CPE
2235
that does not correspond to a real product line). The matched CVEs are
2336
all from 2009-2010 against VMware Server / ESX, none of which apply to a
24-
Spring Boot starter JAR. This is a pure CPE-vendor collision triggered
25-
by version pattern `2.0.0:m3` matching VMware Server's `2.0.0` CPE.
37+
Spring Boot starter JAR. Pure CPE-vendor collision triggered by version
38+
pattern `2.0.0:m3` matching VMware Server's `2.0.0` CPE.
2639
2740
Justification: not-applicable. Spring AI 2.0.0-M3 is a 2025 Spring AI
2841
milestone artifact, not VMware Server 2.0.0 (released 2008-09).
@@ -70,4 +83,122 @@
7083
<cpe>cpe:/a:neo4j:neo4j</cpe>
7184
</suppress>
7285

86+
<!-- ============================================================
87+
(b) DOCUMENTED NON-EXPLOITABILITY (language-binding / unconfigured-module scope)
88+
============================================================ -->
89+
90+
<!--
91+
CVE-2026-25087 — Apache Arrow Use-After-Free.
92+
93+
NVD verbatim (https://nvd.nist.gov/vuln/detail/CVE-2026-25087):
94+
"Use After Free vulnerability in Apache Arrow C++. This issue
95+
affects Apache Arrow C++ from 15.0.0 through 23.0.0. ... The
96+
functionality is not exposed in language bindings (Python, Ruby,
97+
C GLib), so these bindings are not vulnerable."
98+
99+
Trigger requires the C++ API `RecordBatchFileReader::PreBufferMetadata`
100+
(pre-buffering on IPC files), which has no exposed equivalent in the
101+
Java artifacts org.apache.arrow:arrow-memory-core, arrow-format,
102+
arrow-vector, flight-core, etc. The CVE's CPE is published against
103+
the umbrella `cpe:2.3:a:apache:arrow:*` which dependency-check matches
104+
to ALL Arrow artifacts including the Java JARs we consume transitively
105+
via org.neo4j:arrow-bom — but the affected code path is C++-only and
106+
is not compiled into / loaded from those Java JARs.
107+
108+
Justification: not-applicable. Codeiq uses the Arrow Java artifacts
109+
(transitive via org.neo4j:arrow-bom:2026.02.3); the vulnerable C++
110+
code path is not present.
111+
Sign-off: Amit Kumar (TechLead) 2026-04-25.
112+
-->
113+
<suppress>
114+
<notes><![CDATA[
115+
CVE-2026-25087 is an Apache Arrow C++-only Use-After-Free.
116+
NVD: "The functionality is not exposed in language bindings,
117+
so these bindings are not vulnerable." Codeiq consumes only
118+
Java Arrow artifacts (transitive via org.neo4j:arrow-bom);
119+
the vulnerable C++ pre-buffering API is not present.
120+
Source: https://nvd.nist.gov/vuln/detail/CVE-2026-25087
121+
]]></notes>
122+
<packageUrl regex="true">^pkg:maven/org\.apache\.arrow/.*@.*$</packageUrl>
123+
<cve>CVE-2026-25087</cve>
124+
</suppress>
125+
126+
<!--
127+
CVE-2026-33186 — gRPC-Go authorization bypass.
128+
129+
NVD verbatim (https://nvd.nist.gov/vuln/detail/CVE-2026-33186):
130+
"gRPC-Go is the Go language implementation of gRPC. Versions
131+
prior to 1.79.3 have an authorization bypass resulting from
132+
improper input validation of the HTTP/2 `:path` pseudo-header."
133+
134+
The fix in 1.79.3 is a Go-side change (rejecting non-canonical
135+
`:path` before authz interceptors). Codeiq pulls in the Java
136+
implementation (io.grpc:grpc-api, grpc-core, grpc-protobuf, grpc-stub,
137+
grpc-netty, grpc-context, grpc-util — all 1.78.0 transitives via
138+
org.neo4j:arrow-bom). grpc-java has its own version stream and is
139+
not affected by this Go-server `:path` parser issue. NVD's CPE for
140+
`cpe:2.3:a:grpc:grpc:*` is the umbrella product CPE that matches all
141+
gRPC implementations, but the vulnerable code is in google.golang.org/
142+
grpc, not io.grpc:*.
143+
144+
Justification: not-applicable. Codeiq uses gRPC Java artifacts;
145+
the gRPC-Go server `:path` parser is not present.
146+
Sign-off: Amit Kumar (TechLead) 2026-04-25.
147+
-->
148+
<suppress>
149+
<notes><![CDATA[
150+
CVE-2026-33186 is a gRPC-Go server authorization bypass.
151+
NVD: "gRPC-Go is the Go language implementation of gRPC."
152+
Codeiq uses io.grpc:* (Java); the affected Go server code
153+
is not present. CPE umbrella collision.
154+
Source: https://nvd.nist.gov/vuln/detail/CVE-2026-33186
155+
]]></notes>
156+
<packageUrl regex="true">^pkg:maven/io\.grpc/.*@.*$</packageUrl>
157+
<cve>CVE-2026-33186</cve>
158+
</suppress>
159+
160+
<!--
161+
CVE-2026-5795 — Eclipse Jetty JASPIAuthenticator ThreadLocal leak.
162+
163+
NVD verbatim (https://nvd.nist.gov/vuln/detail/CVE-2026-5795):
164+
"In Eclipse Jetty, the class JASPIAuthenticator initiates the
165+
authentication checks, which set two ThreadLocal variable[s].
166+
Upon returning from the initial checks, there are conditions
167+
that cause an early return from the JASPIAuthenticator code
168+
without clearing those ThreadLocals. A subsequent request using
169+
the same thread inherits the ThreadLocal values, leading to a
170+
broken access control and privilege escalation."
171+
Upstream advisory: https://github.com/jetty/jetty.project/security/advisories/GHSA-r7p8-xq5m-436c
172+
173+
The vulnerable class `org.eclipse.jetty.security.jaspi.JASPIAuthenticator`
174+
lives in the `jetty-jaspi` module (an optional Jetty add-on for
175+
JSR-196 / Jakarta Authentication SPI). Codeiq's dependency tree does
176+
NOT pull in `jetty-jaspi` (verified via `mvn dependency:tree` —
177+
we get jetty-server, jetty-http, jetty-io, jetty-ee8-* but not
178+
jetty-jaspi). Codeiq does not configure JASPI authentication
179+
anywhere — `grep -r javax.security.auth.message src/main` returns
180+
empty, and our Spring Boot autoconfig uses Tomcat (`<tomcat.version>`)
181+
as the embedded servlet container; the Jetty in our tree is brought
182+
transitively by Neo4j 2026.02.3 for its embedded HTTP API, which
183+
itself does not enable JASPI.
184+
185+
Justification: not-applicable. The vulnerable JASPIAuthenticator
186+
class is not on our classpath (jetty-jaspi not pulled in) and would
187+
not be reachable even if it were (no JASPI configuration).
188+
Sign-off: Amit Kumar (TechLead) 2026-04-25.
189+
-->
190+
<suppress>
191+
<notes><![CDATA[
192+
CVE-2026-5795 is a JASPIAuthenticator ThreadLocal leak in the
193+
optional jetty-jaspi module. Codeiq does NOT depend on
194+
jetty-jaspi (verified via mvn dependency:tree) and does not
195+
configure JASPI auth anywhere. The vulnerable class is not on
196+
the classpath; the affected code path is unreachable.
197+
Source: https://nvd.nist.gov/vuln/detail/CVE-2026-5795
198+
Upstream: https://github.com/jetty/jetty.project/security/advisories/GHSA-r7p8-xq5m-436c
199+
]]></notes>
200+
<packageUrl regex="true">^pkg:maven/org\.eclipse\.jetty(\.[a-z0-9]+)*/.*@.*$</packageUrl>
201+
<cve>CVE-2026-5795</cve>
202+
</suppress>
203+
73204
</suppressions>

0 commit comments

Comments
 (0)