Skip to content

feat(scanner): split org.apache.activemq CPE by artifactId (Classic vs Artemis) - #755

Merged
haksungjang merged 4 commits into
mainfrom
fix/activemq-artemis-cpe-split
Aug 28, 2026
Merged

feat(scanner): split org.apache.activemq CPE by artifactId (Classic vs Artemis)#755
haksungjang merged 4 commits into
mainfrom
fix/activemq-artemis-cpe-split

Conversation

@haksungjang

Copy link
Copy Markdown
Member

Replaces #749, which GitHub auto-closed when its stacked base branch was deleted on merge. Same content, rebased onto current main.

Several maven groupIds pass enrich-maven-cpe.py's generic org.apache.*
rule but land on the wrong NVD product (e.g. org.apache.sshd ->
apache:sshd, but NVD files it under mina_sshd), or fall through with
no CPE at all (single-segment groups like log4j, rhino). Add 17
curated MAVEN_CPE_MAP entries, each verified against NVD's own
cpeMatch data and confirmed to recover the real CVE via a local
grype CPE lookup.
Some projects have NVD-filed CVEs under more than one CPE vendor
across their history (a rename or corporate acquisition), and a
CycloneDX component's cpe field can only hold one. Confirmed for
Spring Framework (SpringSource -> Pivotal -> VMware) and Jetty's
pre-Eclipse org.mortbay.jetty groupId, each via a direct grype CPE
lookup showing CVEs one vendor alone would miss.

MAVEN_CPE_MAP entries can now list extra (vendor, product) alternates,
recorded on the component as bomlens:cpeAlternates and looked up by
scan-nvd-cpe.py as individual bare-CPE grype queries merged into the
same match list, so they get identical NVD-verify/severity handling
with no duplicate (purl, cve) rows against the primary match.
…s Artemis)

org.apache.activemq is shared by two different NVD products: Artemis
(artifactIds prefixed "artemis-") and Classic ActiveMQ (everything
else). The generic rule already derives apache:activemq correctly
for Classic, but every Artemis artifact was getting the same wrong
CPE. MAVEN_CPE_MAP entries can now be a dict keyed by artifactId
prefix instead of a flat (vendor, product) tuple, with "" as the
catch-all default.

Investigated org.glassfish for the same treatment (also flagged as a
shared-groupId gap): every org.glassfish/* artifact actually observed
in the corpus is a generic Jakarta/Java EE API jar, not the GlassFish
server itself, so there is no artifactId prefix to route on safely.
Left uncurated.
…cpe-split

# Conflicts:
#	docker/lib/enrich-maven-cpe.py
#	tests/test-postprocess.sh
@haksungjang
haksungjang merged commit 8c3913f into main Aug 28, 2026
32 checks passed
@haksungjang
haksungjang deleted the fix/activemq-artemis-cpe-split branch August 28, 2026 15:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant