Skip to content

fix(security): document/suppress non-applicable jackson GHSA-5jmj-h7xm-6q6v (no 2.x fix)#308

Closed
devops-thiago wants to merge 1 commit into
mainfrom
claude/jackson-ghsa-osv-suppress
Closed

fix(security): document/suppress non-applicable jackson GHSA-5jmj-h7xm-6q6v (no 2.x fix)#308
devops-thiago wants to merge 1 commit into
mainfrom
claude/jackson-ghsa-osv-suppress

Conversation

@devops-thiago

Copy link
Copy Markdown
Owner

What type of PR is this?

  • 🔒 Security

Description

OpenSSF Scorecard's Vulnerabilities check flags GHSA-5jmj-h7xm-6q6v (CVE-2026-54515) — a jackson-databind case-insensitive bypass of per-property @JsonIgnoreProperties filtering. This PR investigates it properly and addresses it.

Findings (verified against OSV via a Maven-generated CycloneDX SBOM, not a pom re-parse)

  • It's a real match, not a resolution false-positive. Our resolved jackson-databind 2.22.0 is explicitly in the advisory's affected set.
  • There is no fix for our Jackson line. The only fix is tools.jackson.core:jackson-databind 3.1.4 — Jackson 3.x (new tools.jackson namespace). Quarkus 3.37 uses Jackson 2.x (com.fasterxml.jackson.core), whose entire range — including 2.22.0 — is affected with no 2.x fix. So the earlier 2.22.0 bump can't clear it; the 0.2.1 CHANGELOG's "cleared by 2.22.0" is stale (the advisory was revised to include 2.x).
  • It does not affect this codebase. The bug defeats per-property @JsonIgnoreProperties({"name"}) name-based filters via case-insensitive matching. Every usage here is @JsonIgnoreProperties(ignoreUnknown = true) (drop unknown fields for forward-compat), never a name blocklist, and there is no polymorphic/default typing — so there is no protected property for the bypass to defeat. (Severity note: the advisory is CVSS 5.3 Medium; Scorecard's "9" is its check sub-score out of 10, not a CVSS-9.)

Change

Per Scorecard's own remediation guidance ("if the vulnerability does not affect your project… create an osv-scanner.toml"):

  • Add osv-scanner.toml at the repo root (next to pom.xml) ignoring the advisory with a full documented reason.
  • Correct the now-inaccurate pom comment on the jackson-bom override (it claimed 2.22.0 "reports clean").

Related Issues

Addresses the OpenSSF Scorecard Vulnerabilities finding for GHSA-5jmj-h7xm-6q6v. Supersedes the understanding recorded in the 0.2.1 CHANGELOG entry.

How Has This Been Tested?

  • Manual testing

  • Generated a CycloneDX SBOM from Maven's own resolution and scanned it with osv-scanner (same DB as Scorecard): without the config → 1 finding (exit 1); with --config osv-scanner.toml"filtered out… No issues found" (exit 0).

  • Confirmed the resolved tree is Jackson 2.22.0 across the family; confirmed all 17 @JsonIgnoreProperties are ignoreUnknown = true and there is no @JsonTypeInfo/default typing.

  • spotless:check passes.

Checklist

  • My code follows the project's coding standards
  • I have performed a self-review of my own code
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • I have updated the documentation accordingly
  • My changes generate no new warnings or errors

Additional Notes

  • The jackson-bom 2.22.0 override is kept (it's still the latest Jackson 2.x — best available), only its comment is corrected. It no longer clears this advisory (nothing in 2.x does).
  • Revisit the suppression when Quarkus adopts Jackson 3.x or a fixed 2.x release ships — noted in both the toml and the pom comment.

…m-6q6v

OpenSSF Scorecard flags GHSA-5jmj-h7xm-6q6v (CVE-2026-54515), a jackson-databind
case-insensitive bypass of per-property @JsonIgnoreProperties filtering. Verified
against OSV with a CycloneDX SBOM built from Maven's own resolution (not a scanner
re-parsing the pom):

- Our resolved jackson-databind 2.22.0 IS in the affected set — a real match.
- No fix exists for the Jackson 2.x line: the only fix is
  tools.jackson.core:jackson-databind 3.1.4 (Jackson 3.x, new namespace), which
  Quarkus 3.37 does not use. The 2.22.0 bump cannot clear it; the 0.2.1 CHANGELOG
  belief is stale (advisory revised to include 2.x with no 2.x fix).
- Not applicable here: all @JsonIgnoreProperties usage is ignoreUnknown=true (drop
  unknowns for forward compat), never a per-property name blocklist, and there is no
  polymorphic/default typing — no protected property for the bypass to defeat.

Per Scorecard's remediation guidance, add osv-scanner.toml at the repo root ignoring
the advisory with a documented reason, and correct the now-inaccurate pom override
comment. Verified osv-scanner filters it out with this config (exit 0).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@thrillhousebot

thrillhousebot Bot commented Jul 1, 2026

Copy link
Copy Markdown

🤖 ThrillhouseBot PR Summary

What this PR does

Adds an osv-scanner.toml file to ignore GHSA-5jmj-h7xm-6q6v (CVE-2026-54515) because the Jackson vulnerability does not affect this project, which uses only ignoreUnknown = true and no per-property filtering, and updates the corresponding comment in pom.xml.

Changes Overview

  • Files changed: 1
  • Lines added: +22
  • Lines removed: 0

Changed Files

File Change Summary
osv-scanner.toml Added Added osv-scanner.toml to suppress advisory GHSA-5jmj-h7xm-6q6v with a detailed justification.

Risk Assessment

Risk Count
🔴 Critical 0
🟠 High 0
🟡 Medium 0
🔵 Low 0

No new issues found in this PR, but the review cannot be approved until required CI is confirmed green.

⚠️ Required CI Checks Status

Some required checks are still pending or have failed:

Check Type Status Detail
format missing ⏳ Pending -
test missing ⏳ Pending -
frontend missing ⏳ Pending -
trivy missing ⏳ Pending -

Automated review by ThrillhouseBot. Reply with /review to re-run.

@sonarqubecloud

sonarqubecloud Bot commented Jul 1, 2026

Copy link
Copy Markdown

@codecov

codecov Bot commented Jul 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

devops-thiago added a commit that referenced this pull request Jul 17, 2026
## What type of PR is this?

<!-- Check all that apply -->

- [ ] 🐛 Bug fix
- [ ] ✨ Feature
- [x] 📝 Documentation
- [ ] 🔧 Refactor
- [ ] 🚀 Performance
- [ ] ✅ Test
- [x] 🔒 Security
- [ ] 📦 Dependency update
- [x] 🏗️ CI/CD

## Description

Closes the v0.3.1 dual-gate gap from #342: ThrillhouseBot's LLM review
and static dependency CI are complementary, not substitutes.

### Changes
- **CONTRIBUTING.md** — documents the dual-gate merge policy, optional
Bugbot as a non-required third signal, and maintainer triage when the
gates disagree (including the Jackson GHSA hold pattern from #308).
- **dependency-review.yml** — runs on `main` / `develop` / `release/**`
(aligned with CI), with comments tying the job to the dual-gate policy.
- **Repo ruleset (already applied)** — `dependency-review` added to
required status checks on `main-protection` alongside `format`, `test`,
`frontend`, `trivy`.

Does **not** duplicate ThrillhouseBot's LLM pass or implement
linters-in-prompt (#34).

## Related Issues

Fixes #342

Related: #34 (linters in LLM context — separate), #308 (Jackson GHSA
hold pattern), #113, #318

## How Has This Been Tested?

- [ ] Unit tests
- [ ] Integration tests
- [x] Manual testing

- Confirmed `main-protection` ruleset now requires `dependency-review`.
- Reviewed workflow YAML against existing SHA-pinned action versions.
- Docs-only / workflow-metadata change — no Java/frontend unit tests
required.
- CI on this PR: `dependency-review`, `format`, `test`, `frontend`,
`trivy`, Sonar, CodeQL, Codecov all green.

## Checklist

- [x] My code follows the project's coding standards
- [x] I have performed a self-review of my own code
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] I have updated the documentation accordingly
- [x] My changes generate no new warnings or errors

## Screenshots / Logs

N/A — docs + workflow metadata only. Dependency Review summary on this
PR: no vulnerabilities or license issues found.

## Additional Notes

- ThrillhouseBot remains a soft gate (check can be NEUTRAL/skipped);
static `dependency-review` is now merge-blocking.
- Ruleset change is live on the repo already; merging this PR lands the
docs + workflow branch-trigger alignment.
devops-thiago added a commit that referenced this pull request Jul 17, 2026
…pts (#113) (#400)

## Summary

Implements the prompt eval/regression corpus from #113: prompt and
verifier changes are no longer validated only by the next live PR review
— confirmed dogfood outcomes are now pinned as labeled fixtures a suite
can replay.

- **Labeled corpus** (`src/test/resources/evalcorpus/<case>/case.json` +
`diff.txt`): each case pins a real, thread-resolved dogfood outcome.
Diffs are reconstructed from the exact commits the bot reviewed
(`original_commit_id` of each review comment) and stored in the same
`### path (status, +A -D)` + fenced-patch format the pipeline sends to
the model. Seeded with:
- PR #100 refuted FP — empty-line `IndexOutOfBoundsException`
(`expectedVerdicts: [rejected]`)
- PR #100 confirmed TP — `\ No newline at end of file` indexing
(`[confirmed]`)
- PR #84 refuted FP — omitted-lines off-by-one arithmetic (#96/#97)
(`[rejected]`)
- PR #101 refuted FP — `accountOwner` NPE with caller guard outside the
diff (#106/#107) (`[rejected]`)
- Two generator-side cases over the PR #100 diff: `must-find` the
no-newline bug, `must-not-find` the empty-line IOOBE claim
- **Deterministic guard** (`EvalCorpusTest`, runs in every CI build):
validates corpus schema, provenance, verdict labels, and diff format — a
malformed new case fails at merge time, no AI call.
- **Opt-in live suite** (`PromptEvalTest`, JUnit tag `eval`,
surefire-excluded by default): verifier cases go through the production
`FindingVerificationService.verify` path and classify the outcome
(dropped→rejected, lowered→downgraded, unchanged→confirmed); generator
cases run `PrReviewer.reviewStream` and keyword-match findings on the
target file. LLM nondeterminism is absorbed by majority-over-N sampling
(`-Deval.samples`, default 3) plus a tolerated-regression budget
(`-Deval.tolerated`, default 0).
- **`-Peval` Maven profile** flips the surefire tag filters;
CONTRIBUTING documents the workflow and how to add cases from resolved
review threads.

Bugbot-comparison seeds from the issue's follow-up comment (PRs
#305/#307/#308/#333) could not be extracted — those PRs have no inline
review data via the API — but the corpus is append-only by design: new
cases are a directory drop, no code change.

## Issue

Fixes #113

## Test plan

- [x] `EvalCorpusTest` (4 tests) passes and runs in the default build
- [x] `./mvnw test -Peval -Dtest=PromptEvalTest` wires up (skips via
assumption without a provider key; live run is opt-in by design)
- [x] `./mvnw verify` passes locally — 1593 tests, Spotless, SpotBugs,
JaCoCo all green
- [x] No production code changed; all new files are test-scoped or
fixtures
@devops-thiago
devops-thiago deleted the claude/jackson-ghsa-osv-suppress branch July 17, 2026 17:23
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