fix(security): backport io.kubernetes:client-java 25.0.1 (CVE-2026-15687) to 2.0 - #31343
fix(security): backport io.kubernetes:client-java 25.0.1 (CVE-2026-15687) to 2.0#31343mohityadav766 wants to merge 2 commits into
Conversation
…026-15687) Directory Traversal in copyDirectoryFromPod when enableTarCompressing=false (SNYK-JAVA-IOKUBERNETES-18313175, CVSS 4.8). Vulnerable range [,25.0.1). openmetadata-dist ships client-java, so this reaches OSS installs. It does not show up in our own Snyk report because that scan applies a high severity floor and this finding is medium. Also pins com.squareup.okhttp3:logging-interceptor to 4.12.0, next to the okhttp pin already in root dependencyManagement. client-java 25.x declares logging-interceptor 5.1.0, and okhttp 5 relocated the okhttp3.* classes out of okhttp into a new okhttp-jvm artifact — so without the pin, okhttp-jvm 5.1.0 joins the pinned okhttp 4.12.0 on the classpath and okhttp3.* ends up split across two jars, resolved by classpath order. okhttp 4.12.0 satisfies client-java 25.0.1: its bytecode references the exact same 118 okhttp/okio members as 24.0.0 does today, zero added and zero removed, so upstream's move to okhttp 5 is a declared-dependency bump rather than an API requirement. Verified: - openmetadata-service + openmetadata-k8s-operator resolve 596 artifacts; the only three that move are client-java, client-java-api and client-java-proto. No okhttp-jvm; okhttp stays 4.12.0, logging-interceptor 4.12.0, kotlin-stdlib 1.8.21. - Across all 43 io.kubernetes types we import (including CoreV1Api, BatchV1Api, CustomObjectsApi, ApiextensionsV1Api, VersionApi, ClientBuilder, Config and Yaml), the only public members 25.0.1 removes are V1ResourceRequirements.claims* and the V1ResourceClaim type (k8s 1.34 DRA rework). Every V1ResourceRequirements call site here uses only .requests()/.limits(), and there are no V1ResourceClaim references. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
❌ PR checklist incompleteThis PR cannot be merged until the following are addressed on its linked issue:
The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically. Maintainers can bypass this check by adding the |
…eeps 24.0.0
openmetadata-integration-tests declared io.kubernetes:client-java with a
hardcoded <version>24.0.0</version>, so the previous commit left that module on
the vulnerable version. It was hardcoded because kubernetes-client.version only
existed in openmetadata-service/pom.xml — a sibling module cannot reference it.
Move the property to the root pom, where both consumers inherit it, and point
openmetadata-integration-tests at ${kubernetes-client.version}. Bumping it in
one place now covers every module, so a future bump cannot silently miss one.
The dependency is test-scoped, so it never shipped — but Snyk's Maven scanner
walks test and provided scopes, so it would still have been reported.
Verified: openmetadata-service, openmetadata-integration-tests and
openmetadata-k8s-operator all resolve client-java, client-java-api and
client-java-proto at 25.0.1 across compile, provided and test scope. No 24.x
remains anywhere, and logging-interceptor stays 4.12.0 in both compile and test.
Caught by Copilot review on #31342.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Code Review ✅ ApprovedBumps io.kubernetes:client-java to 25.0.1 and pins okhttp3:logging-interceptor to 4.12.0 to resolve CVE-2026-15687 without classpath conflicts. No issues found. OptionsDisplay: compact → Showing less information. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
✅ Playwright Results — workflow succeededValidated commit ✅ 550 passed · ❌ 0 failed · 🟡 0 flaky · ⏭️ 0 skipped · 🧰 0 lifecycle flaky PerformanceBlocking targets: ✅ met · Optimization targets: 🟡 in progress Shard-job maxima below are not the full workflow wall time; the linked run includes build, fixture, planning, and reporting. 🕒 Full workflow signal wall (to summary) 56m 4s ⏱️ Max setup 3m 24s · max shard execution 17m 56s · max shard-job elapsed before upload 21m 7s · reporting 4s 🌐 202.49 requests/attempt · 2.83 app boots/UI scenario · 17.10% common-shard skew Optimization targets still in progress:
How to debug locally# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip # view trace |
Backport of #31342 to
2.0. Cherry-picked clean —2.0carries the samekubernetes-client.version24.0.0 and the same unpinnedlogging-interceptor.Bumps
io.kubernetes:client-java24.0.0 → 25.0.1 to clear CVE-2026-15687 (SNYK-JAVA-IOKUBERNETES-18313175), and pinscom.squareup.okhttp3:logging-interceptorto 4.12.0 so the bump does not drag okhttp 5 onto the classpath.Directory Traversal in
copyDirectoryFromPodwhenenableTarCompressing=false. CVSS 4.8, vulnerable range[,25.0.1). We never callCopy, so this is not exploitable here — butopenmetadata-distships the jar, so the vulnerable version reaches OSS installs and turns up in downstream scans.Why our own Snyk report is green on this. Our scan applies a
highseverity floor, and this finding is medium — so all 20 of ourpom.xmlmanifests reportok: truewhile shipping the vulnerable version. It surfaced in the Collate scan, which includes medium.Why the logging-interceptor pin
client-java25.x declareslogging-interceptor5.1.0, and okhttp 5 relocated theokhttp3.*classes out ofokhttpinto a newokhttp-jvmartifact. RootdependencyManagementalready pinsokhttpto 4.12.0, so without a matching pin,okhttp-jvm:5.1.0joinsokhttp:4.12.0on the classpath andokhttp3.*ends up split across two jars, resolved by classpath order — a silent, order-dependent hazard in the shipped distribution.okhttp 4.12.0 satisfies
client-java25.0.1: its bytecode references the exact same 118okhttp3/okiomembers as 24.0.0 does today — zero added, zero removed. Upstream's move to okhttp 5 is a declared-dependency bump, not an API requirement. The pin should be dropped only as part of a real okhttp 5 migration.Verification
openmetadata-service+openmetadata-k8s-operatorresolve, the only three that move areclient-java,client-java-apiandclient-java-proto. Nookhttp-jvm;okhttpstays 4.12.0,logging-interceptor4.12.0,kotlin-stdlib1.8.21.io.kubernetestypes we import — includingCoreV1Api,BatchV1Api,CustomObjectsApi,ApiextensionsV1Api,VersionApi,ClientBuilder,ConfigandYaml— between 24.0.0 and 25.0.1. The only removed public members anywhere in that surface areV1ResourceRequirements.claims*and theV1ResourceClaimtype (k8s 1.34 DRA rework). EveryV1ResourceRequirementscall site here (K8sPipelineClient,OMJob,K8sJobUtilsTest) uses only.requests()/.limits(), and there are zeroV1ResourceClaimreferences in the repo.openmetadata-serviceandopenmetadata-k8s-operatorbuild against 25.0.1.Related
Collate carries the same bump: open-metadata/openmetadata-collate#5663 (
main) and #5664 (2.0). Collate's rootdependencyManagementpinsclient-javafor its own modules, so it was already covered — this PR fixes it at the source so OSS installs are too, and so the Collate pin stops being a silent override of a vulnerable upstream version.🤖 Generated with Claude Code