Skip to content

fix(security): bump vulnerable transitive deps across service modules#27753

Open
mohityadav766 wants to merge 6 commits intomainfrom
fix-service-vulnerabilities
Open

fix(security): bump vulnerable transitive deps across service modules#27753
mohityadav766 wants to merge 6 commits intomainfrom
fix-service-vulnerabilities

Conversation

@mohityadav766
Copy link
Copy Markdown
Member

@mohityadav766 mohityadav766 commented Apr 27, 2026

Summary

Address Snyk + Dependabot vulnerability findings across the OpenMetadata Maven modules. All fixes are dependency-version bumps; no source-code changes.

Critical

  • BouncyCastle bcpkix/bcprov/bcutil-jdk18on 1.80 → 1.84 (signature-verification bypass, transitive via io.kubernetes:client-java)

High

  • BouncyCastle bcprov (additional CVEs covered by 1.84)
  • httpcore5-h2 5.1.3 → 5.3.5 + httpclient5 → 5.5 (HTTP/2 stream-reset DoS, transitive via calcite-coreavatica-core)
  • Jackson jackson-core/databind 2.18.6 → 2.21.2 via jackson-bom (DoS)
  • openmetadata-k8s-operator local Jackson 2.17.2 → 2.21.2
  • tools.jackson.core:* excluded from jsonschema2pojo-core in common/pom.xml (3 high-sev DoS in Jackson 3.0.2 — not needed at runtime)
  • Spotless spotless-maven-plugin 2.41.1 → 2.46.0 (XXE, GHSA-fjwh-xx9p-h7v9 — second-pass commit)

Medium

  • tomcat-jdbc / tomcat-juli 11.0.5 → 11.0.11 (ANSI log injection)
  • Spring spring-core / friends 6.2.11 → 6.2.17 (DoS)
  • jsonschema2pojo-core 1.2.2 → 1.3.0 (stack overflow)
  • bcprov-jdk18on LDAP injection (covered by 1.84)

Low

  • resilience4j-ratelimiter 2.3.0 → 2.4.0 (pulls newer kotlin-stdlib)
  • kotlin-stdlib / -jdk7 / -jdk8 pinned to 2.1.0 (deprecated createTempDir/createTempFile info exposure)

Notes / known leftovers

  • log4j-core@2.25.3 has 4 Snyk advisories (2 high + 2 medium) with no upstream fix published yet — tracked in security tracker, will pick up automatically once the next 2.25.x patch lands.
  • New entries are added to the parent pom's <dependencyManagement> so every submodule (service, dist, mcp, k8s-operator, sdk, spec) inherits the patched versions.
  • openmetadata-spec/pom.xml adds plexus-utils 3.6.0 to the jsonschema2pojo-maven-plugin plugin deps because 1.3.0 dropped the explicit dep but still references org.codehaus.plexus.util.DirectoryScanner.
  • Removed individual jackson-annotations/-core/-databind/-blackbird version pins in favour of a single jackson-bom import — jackson-annotations uses x.y not x.y.z versioning, so a single property cannot align all Jackson artifacts.

Test plan

  • mvn clean install -DskipTests -pl '!openmetadata-ui,!openmetadata-ui-core-components' -am builds clean
  • Re-scanned with snyk test --all-projects --severity-threshold=medium — only the unfixable log4j-core advisories remain
  • Run unit + integration tests in CI
  • Verify service starts against MySQL + Elasticsearch in docker
  • Smoke-test SQL parsing (calcite path) since httpclient5 was bumped under it

🤖 Generated with Claude Code


Summary by Gitar

  • Search infrastructure:
    • Implemented activeStagedIndices routing to enable live writes to staged indices during reindexing.
    • Added getWriteIndexName and getWriteFanoutTargets to centralize index resolution and prevent data loss during alias swaps.
  • Event dispatching:
    • Updated registerSearchIndexHandler to unregister stale handlers, ensuring event delivery to the active SearchRepository instance.
  • Indexing operations:
    • Removed SearchIndexRetryQueue suspension checks from all indexing paths, delegating routing logic to getWriteIndexName.

This will update automatically on new commits.

Address Snyk vulnerability findings reported across the OpenMetadata modules:
- BouncyCastle 1.80 -> 1.84 (critical signature-verification bypass + 3 high/medium)
- httpcore5/-h2 5.1.3 -> 5.3.5, httpclient5 -> 5.5 (high HTTP/2 stream-reset DoS,
  pulled in transitively via calcite -> avatica)
- tomcat-jdbc/juli 11.0.5 -> 11.0.11 (medium ANSI log injection)
- resilience4j-ratelimiter 2.3.0 -> 2.4.0 (transitively bumps kotlin-stdlib)
- kotlin-stdlib/-jdk7/-jdk8 pinned to 2.1.0 (low temp-file info exposure)
- Spring 6.2.11 -> 6.2.17 (medium DoS in spring-core)
- Jackson 2.18.6 -> 2.21.2 via jackson-bom (high jackson-core DoS;
  jackson-annotations uses x.y not x.y.z, so the BOM is required)
- jsonschema2pojo 1.2.2 -> 1.3.0 (medium stack overflow)
- k8s-operator local jackson 2.17.2 -> 2.21.2 (high jackson-core DoS)
- common/pom.xml excludes tools.jackson.core:* from jsonschema2pojo-core 1.3.0
  (its new Jackson 3 transitive ships 3 high-sev DoS CVEs and we don't need it)

Other notes:
- New dependencyManagement at the parent pom level so all submodules
  (service, dist, mcp, k8s-operator, sdk, spec) inherit the patched versions.
- jsonschema2pojo 1.3.0 dropped its explicit plexus-utils dep; openmetadata-spec
  declares plexus-utils 3.6.0 in the plugin's <dependencies> so codegen still works.
- log4j-core 2.25.3 has 4 unfixable Snyk advisories with no upstream patch published;
  tracked in security tracker.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 27, 2026 07:33
@github-actions github-actions Bot added backend safe to test Add this label to run secure Github workflows on PRs labels Apr 27, 2026
<kubernetes-client.version>21.0.1</kubernetes-client.version>
<!-- Jackson version (should match parent project) -->
<jackson.version>2.17.2</jackson.version>
<jackson.version>2.21.2</jackson.version>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Quality: k8s-operator jackson.version property redundant with parent BOM

The parent pom now imports jackson-bom in <dependencyManagement>, which governs versions for all com.fasterxml.jackson.* artifacts across child modules. However, openmetadata-k8s-operator/pom.xml still declares a local <jackson.version> property (line 26) and hardcodes <version>${jackson.version}</version> on its jackson-databind and jackson-dataformat-yaml dependencies (lines 48, 54). This creates a maintenance burden: the comment says "should match parent project" but requires manual sync. If someone bumps only the parent BOM, the k8s-operator will silently stay on the old version.

Consider removing the local jackson.version property and the explicit <version> tags on the Jackson dependencies — the parent's BOM import will resolve the correct versions automatically.

Suggested fix:

Remove the local jackson.version property (line 26) and
the <version>${jackson.version}</version> tags from the
jackson-databind (line 48) and jackson-dataformat-yaml
(line 54) dependency declarations. The parent's jackson-bom
import will resolve versions automatically.

Was this helpful? React with 👍 / 👎 | Reply gitar fix to apply this suggestion

@mohityadav766 mohityadav766 self-assigned this Apr 27, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates Maven dependency versions across OpenMetadata modules to address Snyk-reported vulnerabilities (primarily via dependencyManagement overrides and a Jackson BOM import).

Changes:

  • Bump and centrally manage patched dependency versions (Jackson via jackson-bom, Spring, Tomcat, jsonschema2pojo).
  • Add dependencyManagement “security override” pins for vulnerable transitives (Apache HttpComponents 5, BouncyCastle, Kotlin stdlib).
  • Adjust module-specific POMs to accommodate upgrades (spec plugin dependency tweak; operator/service version bumps; exclude Jackson 3 tools.jackson.core:* from jsonschema2pojo-core in common).

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pom.xml Raises core dependency versions, imports jackson-bom, and adds dependencyManagement overrides for vulnerable transitives.
openmetadata-spec/pom.xml Adds explicit plexus-utils plugin dependency to keep jsonschema2pojo plugin execution working after the bump.
openmetadata-service/pom.xml Bumps resilience4j version property used by service dependencies.
openmetadata-k8s-operator/pom.xml Bumps locally pinned Jackson version used by the operator module.
common/pom.xml Excludes tools.jackson.core:* (Jackson 3) artifacts from jsonschema2pojo-core to avoid pulling vulnerable/unused runtime deps.

Comment thread pom.xml
Comment on lines +211 to 219
<!-- Import jackson-bom: jackson-annotations follows x.y versioning while jackson-core/databind
use x.y.z, so a single property cannot cover all artifacts. The BOM aligns them. -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-blackbird</artifactId>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>${jackson.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Copy link

Copilot AI Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new jackson-bom import should align all Jackson artifacts, but this POM still has an explicit dependencyManagement entry pinning com.fasterxml.jackson.dataformat:jackson-dataformat-yaml to 2.17.2 (see pom.xml around lines ~672-683). That override will prevent the BOM from fully aligning Jackson versions and can reintroduce older Jackson bits alongside 2.21.2. Consider removing that explicit version (or updating it to follow ${jackson.version} / BOM-managed version) so the BOM is the single source of truth.

Copilot uses AI. Check for mistakes.
Comment on lines 23 to 27
<!-- Kubernetes client version (should match openmetadata-service) -->
<kubernetes-client.version>21.0.1</kubernetes-client.version>
<!-- Jackson version (should match parent project) -->
<jackson.version>2.17.2</jackson.version>
<jackson.version>2.21.2</jackson.version>
</properties>
Copy link

Copilot AI Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This module defines its own <jackson.version> property and pins Jackson dependency versions directly. Since the parent POM now imports jackson-bom (and already defines ${jackson.version}), keeping a module-local override makes it easy for the operator to drift from the platform’s patched Jackson set. Consider deleting this local jackson.version property and letting the operator inherit the parent’s BOM-managed Jackson versions (i.e., omit explicit Jackson <version> tags in dependencies).

Copilot uses AI. Check for mistakes.
pmbrull
pmbrull previously approved these changes Apr 27, 2026
Patches Dependabot advisory: spotless-maven-plugin XXE in pre-2.43 versions
(GHSA-fjwh-xx9p-h7v9). Build-time only but flagged High severity.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

The Java checkstyle failed.

Please run mvn spotless:apply in the root of your repository and commit the changes to this PR.
You can also use pre-commit to automate the Java code formatting.

You can install the pre-commit hooks with make install_test precommit_install.

Final cleanup: the parent pom still pinned jetty.version=12.1.6 even though
service/mcp had local overrides at 12.1.7. Modules that inherit the parent
property without overriding (and consumers like collate) were still resolving
the vulnerable 12.1.6 for jetty-http (HTTP request smuggling) and jetty-server.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 27, 2026 07:49
@github-actions
Copy link
Copy Markdown
Contributor

The Java checkstyle failed.

Please run mvn spotless:apply in the root of your repository and commit the changes to this PR.
You can also use pre-commit to automate the Java code formatting.

You can install the pre-commit hooks with make install_test precommit_install.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment thread pom.xml
Comment on lines +211 to +215
<!-- Import jackson-bom: jackson-annotations follows x.y versioning while jackson-core/databind
use x.y.z, so a single property cannot cover all artifacts. The BOM aligns them. -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-blackbird</artifactId>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-bom</artifactId>
Copy link

Copilot AI Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The imported jackson-bom here will not fully align Jackson artifacts because pom.xml still has an explicit <dependencyManagement> entry for com.fasterxml.jackson.dataformat:jackson-dataformat-yaml pinned to 2.17.2 (see pom.xml:673-676). That later entry will override the BOM and can leave an older/vulnerable or incompatible Jackson module in the build; please remove that explicit pin or bump it to match ${jackson.version}.

Copilot uses AI. Check for mistakes.
Comment thread pom.xml
Comment on lines +211 to +212
<!-- Import jackson-bom: jackson-annotations follows x.y versioning while jackson-core/databind
use x.y.z, so a single property cannot cover all artifacts. The BOM aligns them. -->
Copy link

Copilot AI Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment claims jackson-annotations uses x.y versioning while other Jackson artifacts use x.y.z, but this project previously pinned jackson-annotations to ${jackson.version} (e.g., 2.18.6), which suggests it also follows x.y.z. Please correct/clarify this comment so it doesn't mislead future dependency updates.

Suggested change
<!-- Import jackson-bom: jackson-annotations follows x.y versioning while jackson-core/databind
use x.y.z, so a single property cannot cover all artifacts. The BOM aligns them. -->
<!-- Import jackson-bom to keep Jackson artifacts aligned to a compatible version set
and avoid managing individual module versions separately. -->

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 27, 2026

🟡 Playwright Results — all passed (19 flaky)

✅ 3955 passed · ❌ 0 failed · 🟡 19 flaky · ⏭️ 86 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 295 0 4 4
🟡 Shard 2 739 0 5 8
🟡 Shard 3 746 0 2 7
🟡 Shard 4 754 0 5 18
🟡 Shard 5 686 0 1 41
🟡 Shard 6 735 0 2 8
🟡 19 flaky test(s) (passed on retry)
  • Features/Pagination.spec.ts › should test pagination on Users page (shard 1, 1 retry)
  • Features/Pagination.spec.ts › should test pagination on Observability Alerts page (shard 1, 2 retries)
  • Features/Pagination.spec.ts › should test pagination on Table version page columns (shard 1, 2 retries)
  • Pages/UserCreationWithPersona.spec.ts › Create user with persona and verify on profile (shard 1, 1 retry)
  • Features/ActivityAPI.spec.ts › Activity event is created when description is updated (shard 2, 1 retry)
  • Features/ActivityAPI.spec.ts › Activity event is created when owner is added (shard 2, 1 retry)
  • Features/DataProductDomainMigration.spec.ts › Data product with no assets can change domain without confirmation (shard 2, 1 retry)
  • Features/DomainFilterQueryFilter.spec.ts › Assets from selected domain should be visible in explore page (shard 2, 1 retry)
  • Features/Glossary/GlossaryWorkflow.spec.ts › should start term as Draft when glossary has reviewers (shard 2, 1 retry)
  • Features/OntologyExplorerFilters.spec.ts › should re-enable view mode select when switching back to Model tab (shard 3, 1 retry)
  • Features/RTL.spec.ts › Verify Following widget functionality (shard 3, 1 retry)
  • Pages/CustomProperties.spec.ts › Should clear search and show all properties for apiCollection in right panel (shard 4, 1 retry)
  • Pages/DataContracts.spec.ts › Create Data Contract and validate for DashboardDataModel (shard 4, 1 retry)
  • Pages/DataContracts.spec.ts › Contract Status badge should be visible on condition if Contract Tab is present/hidden by Persona (shard 4, 1 retry)
  • Pages/DataProductAndSubdomains.spec.ts › Add assets to data product and verify count (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Domain Rbac (shard 4, 1 retry)
  • Pages/Entity.spec.ts › Inactive Announcement create & delete (shard 5, 1 retry)
  • Pages/Lineage/DataAssetLineage.spec.ts › Column lineage for mlModel -> mlModel (shard 6, 1 retry)
  • Pages/Lineage/LineageFilters.spec.ts › Verify lineage schema filter selection (shard 6, 1 retry)

📦 Download artifacts

How to debug locally
# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip    # view trace

Copilot AI review requested due to automatic review settings April 27, 2026 13:27
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 69 out of 74 changed files in this pull request and generated 1 comment.

Comment thread pom.xml
@gitar-bot
Copy link
Copy Markdown

gitar-bot Bot commented Apr 27, 2026

Code Review 👍 Approved with suggestions 0 resolved / 1 findings

Updates vulnerable transitive dependencies across service modules to mitigate security risks. Consider removing the redundant jackson.version property as it is now managed by the parent BOM.

💡 Quality: k8s-operator jackson.version property redundant with parent BOM

📄 openmetadata-k8s-operator/pom.xml:26 📄 openmetadata-k8s-operator/pom.xml:45-55

The parent pom now imports jackson-bom in <dependencyManagement>, which governs versions for all com.fasterxml.jackson.* artifacts across child modules. However, openmetadata-k8s-operator/pom.xml still declares a local <jackson.version> property (line 26) and hardcodes <version>${jackson.version}</version> on its jackson-databind and jackson-dataformat-yaml dependencies (lines 48, 54). This creates a maintenance burden: the comment says "should match parent project" but requires manual sync. If someone bumps only the parent BOM, the k8s-operator will silently stay on the old version.

Consider removing the local jackson.version property and the explicit <version> tags on the Jackson dependencies — the parent's BOM import will resolve the correct versions automatically.

Suggested fix
Remove the local jackson.version property (line 26) and
the <version>${jackson.version}</version> tags from the
jackson-databind (line 48) and jackson-dataformat-yaml
(line 54) dependency declarations. The parent's jackson-bom
import will resolve versions automatically.
🤖 Prompt for agents
Code Review: Updates vulnerable transitive dependencies across service modules to mitigate security risks. Consider removing the redundant jackson.version property as it is now managed by the parent BOM.

1. 💡 Quality: k8s-operator jackson.version property redundant with parent BOM
   Files: openmetadata-k8s-operator/pom.xml:26, openmetadata-k8s-operator/pom.xml:45-55

   The parent pom now imports `jackson-bom` in `<dependencyManagement>`, which governs versions for all `com.fasterxml.jackson.*` artifacts across child modules. However, `openmetadata-k8s-operator/pom.xml` still declares a local `<jackson.version>` property (line 26) and hardcodes `<version>${jackson.version}</version>` on its `jackson-databind` and `jackson-dataformat-yaml` dependencies (lines 48, 54). This creates a maintenance burden: the comment says "should match parent project" but requires manual sync. If someone bumps only the parent BOM, the k8s-operator will silently stay on the old version.
   
   Consider removing the local `jackson.version` property and the explicit `<version>` tags on the Jackson dependencies — the parent's BOM import will resolve the correct versions automatically.

   Suggested fix:
   Remove the local jackson.version property (line 26) and
   the <version>${jackson.version}</version> tags from the
   jackson-databind (line 48) and jackson-dataformat-yaml
   (line 54) dependency declarations. The parent's jackson-bom
   import will resolve versions automatically.

Options

Display: compact → Showing less information.

Comment with these commands to change:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@sonarqubecloud
Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend safe to test Add this label to run secure Github workflows on PRs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants