security(deps): close 4 of 6 Maven alerts — jsoup, jose4j, and remove unused htmlunit - #2018
Merged
Conversation
From the triage in #2016. Verified with a full reactor compile + test-compile of vcell-core, vcell-server, vcell-cli and vcell-rest, and by reading back the resolved versions with dependency:list. jsoup 1.15.2 -> 1.23.1 vcell-cli (2 medium: Cleaner raw-text markup, XSS via SafeList.preserveRelativeLinks) jose4j 0.9.3 -> 0.9.6 managed (1 high + 1 medium: DoS via compressed JWE, DoS via crafted JWE) htmlunit 2.70.0 -> removed vcell-rest (1 critical: code injection) htmlunit was REMOVED rather than bumped. It is scope=test and referenced by no .java anywhere in the repo, so it was dead weight; and 2.70.0 -> 3.0.0 renames the groupId (net.sourceforge.htmlunit -> org.htmlunit), making a 'bump' a migration for a dependency nothing uses. Removing it also means the repo's only critical Maven alert was never shipped code -- it was a headless browser for tests. jose4j needed managing, not just bumping. vcell-server declares it directly, while vcell-rest also receives it from quarkus-oidc -> smallrye-jwt, which pins 0.9.3 in Quarkus 3.5.2. Raising only vcell-server made the two paths disagree and failed the enforcer's DependencyConvergence rule. It is now pinned once in the root pom's dependencyManagement via a jose4j.version property, which is the single point both paths resolve through. That override should be REMOVED, not raised, when the Quarkus upgrade lands and pins a newer jose4j itself. Not included: woodstox-core 5.0.1 -> 5.4.0. It collides the same way but cannot be managed away safely. woodstox 5.4.0 requires stax2-api 4.2, while jsbml-core -> staxmate 2.3.0 requires 3.1.4, and stax2-api is pinned nowhere. Forcing 4.x under staxmate risks a runtime break in XML parsing -- woodstox is a StAX provider resolved by ServiceLoader, so nothing imports it and no compile error would catch it -- and the advisory is only a medium DoS. Left for its own change with that analysis; see #2016. Refs #2016 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018kr8SbzXtwW3gMVUgMfDDt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes 4 of the 6 Maven Dependabot alerts, including the only
criticalone. From the triagein #2016.
org.jsoup:jsouporg.bitbucket.b_c:jose4jnet.sourceforge.htmlunit:htmlunitTwo of these were not one-line bumps
htmlunitwas removed, not bumped. It isscope=testand referenced by no.javaanywherein the repo — dead weight. And 2.70.0 → 3.0.0 renames the groupId
(
net.sourceforge.htmlunit→org.htmlunit), so a "bump" would be a migration for a dependencynothing uses. Worth noting what this means for the alert banner: the repo's only critical Maven
alert was never in shipped code — it was a headless browser for tests.
jose4jneeded managing, not bumping.vcell-serverdeclares it directly, whilevcell-restalso receives it transitively from
quarkus-oidc → smallrye-jwt, which pins 0.9.3 in Quarkus3.5.2:
Raising one side made the paths disagree and failed the enforcer's
DependencyConvergencerule.It is now pinned once in the root pom's
dependencyManagementbehind ajose4j.versionproperty —the single point both paths resolve through.
Deliberately not included:
woodstox-coreThe remaining medium alert (
woodstox-core5.0.1 → 5.4.0) collides the same way but cannot bemanaged away safely:
stax2-apiis pinned nowhere, and 5.0.1 happened to bring 3.1.4 — which is why it convergedbefore. Forcing 4.x under
staxmate 2.3.0risks a runtime break in XML parsing, and no compileerror would catch it: woodstox is a StAX provider resolved by
ServiceLoader, which is whynothing imports it and why the existing pom already excludes it from
jsbml-coreand re-declaresit at a pinned version.
For a medium DoS advisory that trade is not obviously worth it, so it is left for its own change
with that analysis rather than smuggled in here. Recorded in #2016.
Verification
compile test-compileacrossvcell-core,vcell-server,vcell-cli,vcell-rest— BUILD SUCCESS, which also proves the htmlunit removal breaks no test sources.dependency:listrather than assumed:After this, the Maven portion of the alert banner goes from 6 to 1, and that one is the documented
woodstox case.
Refs #2016
🤖 Generated with Claude Code
https://claude.ai/code/session_018kr8SbzXtwW3gMVUgMfDDt