CVE-2026-75598: 
Java vulnerability analysis and mitigation

Overview

CVE-2026-75598 is a Zip Slip path traversal vulnerability in the Gradle Shadow plugin (com.gradleup.shadow) affecting all versions prior to 9.6.0. The ShadowCopyAction component does not independently validate or sanitize ZIP entry names before writing them to the output fat JAR, allowing a malicious dependency to embed path traversal sequences (e.g., ../../../../tmp/pwned.txt) that are preserved verbatim in the resulting archive. The vulnerability was originally published on July 16, 2026, and added to the GitHub Advisory Database on November 9, 2026. It carries a CVSS v3.1 base score of 6.3 (Medium) per NVD, and 8.1 (High) per the GitHub Advisory Database (Github Advisory, GradleUp Advisory).

Technical details

The root cause (CWE-22: Path Traversal) lies in ShadowCopyAction.kt, which relies entirely on Gradle's ZipFileTree for entry-name sanitization rather than implementing its own validation. On Gradle versions below 7.6.2 or 8.x below 8.2.0, ZipFileTree does not reject traversal sequences, making those builds directly exploitable at build time; on newer Gradle versions, the risk shifts to downstream consumers who extract the produced shadow JAR without path traversal protection. The fix introduced in commit 0c2744f adds an explicit check in the zipEntry() utility function that throws a GradleException if any path component equals .. (splitting on both / and \). A proof-of-concept Python snippet is publicly available in the advisory, demonstrating construction of a malicious JAR with a traversal entry name (GradleUp Advisory, Fix Commit).

Impact

Successful exploitation allows an attacker who controls a dependency in a Shadow-enabled Gradle project to embed arbitrary files at attacker-chosen paths on any system that extracts the resulting fat JAR without path traversal protection. This enables arbitrary file overwrite, which can lead to code execution by overwriting scripts, configuration files, or binaries — particularly in CI/CD pipelines, deployment automation, or any tooling that unpacks the shadow JAR using raw ZipInputStream or older unpackers. Confidentiality impact is none, but integrity impact is rated High, as critical files outside the intended extraction directory can be silently overwritten (Github Advisory, GradleUp Advisory).

Exploitability

A proof-of-concept exploit (a short Python snippet demonstrating construction of a malicious JAR) is publicly available in the official security advisory; it demonstrates the bug without achieving full exploitation of a live target (GradleUp Advisory). There is no evidence of in-the-wild exploitation at this time, and no threat actor attribution has been reported. The EPSS score is approximately 0.14% (3rd percentile), indicating a low near-term exploitation probability. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities catalog. Exploitation is not automatable and requires user interaction (a developer must build a project that includes the malicious dependency) (Github Advisory).

Exploitation steps

  1. Craft a malicious JAR: Using Python's zipfile module, create a JAR (evil.jar) containing a ZIP entry with a path traversal name:
import zipfile
with zipfile.ZipFile('evil.jar', 'w') as zf:
    zf.writestr('../../../../tmp/zipslip_proof.txt', 'pwned')
  1. Introduce the malicious JAR as a dependency: Add evil.jar to the target Gradle project's dependency graph (e.g., via a compromised Maven repository, dependency confusion attack, or direct inclusion as a local file dependency).
  2. Trigger the Shadow build: Cause the victim developer or CI system to run gradle shadowJar. ShadowCopyAction copies ZIP entries from dependencies without sanitizing entry names, preserving the traversal sequence in the output fat JAR.
  3. Verify traversal entry survives: Confirm the malicious entry is present in the output archive:
unzip -l build/libs/*.jar | grep "\.\."
  1. Exploit downstream extraction: When any consumer (CI pipeline, deployment script, Java unpacker using raw ZipInputStream) extracts the shadow JAR without path traversal protection, the traversal entry is written to the resolved path outside the intended directory (e.g., /tmp/zipslip_proof.txt), enabling arbitrary file overwrite or code execution (GradleUp Advisory).

Indicators of compromise

  • File System: Unexpected files appearing outside the intended extraction directory after unpacking a shadow JAR (e.g., files in /tmp/, parent directories of the extraction target, or system directories); presence of a shadow JAR containing ZIP entries with .. in their names.
  • Build Logs: GradleException messages containing "Malicious ZIP entry containing path traversal sequence:" in Gradle build output (only on patched versions ≥ 9.6.0 — absence of this error on older versions does not indicate safety).
  • Dependency Artifacts: Presence of unexpected or unfamiliar JARs in the project's dependency graph; JARs in local Maven caches (~/.m2/repository) or Gradle caches (~/.gradle/caches) that contain ZIP entries with path traversal sequences (detectable via unzip -l <file>.jar | grep "\.\.").
  • Network: Unexpected outbound connections from build systems to unfamiliar Maven/Gradle artifact repositories that may serve malicious dependencies (GradleUp Advisory).

Mitigation and workarounds

Upgrade the Gradle Shadow plugin to version 9.6.0 or later, which introduces explicit path traversal validation in the zipEntry() utility function, throwing a GradleException for any entry containing .. path components (Shadow 9.6.0 Release, Fix Commit). Note that upgrading Gradle alone (to ≥ 7.6.2 or ≥ 8.2.0) mitigates the build-time risk for ZipFileTree-based paths but does not universally protect against all Shadow code paths or downstream consumers. As additional hardening measures: audit all third-party dependencies for suspicious ZIP entries before building fat JARs, use path traversal-safe extraction libraries for any tooling that unpacks shadow JARs, and restrict dependency sources to trusted, verified repositories (GradleUp Advisory).

Community reactions

The vulnerability was reported by security researcher ikersl and published by maintainer Goooler on July 16, 2026, with a fix included in the same release (GradleUp Advisory). The 9.6.0 release received positive reactions from community members on GitHub, with several users reacting with thumbs up and heart emojis to the release notes (Shadow 9.6.0 Release). No significant broader media coverage or notable researcher commentary beyond the advisory itself has been identified.

Additional resources


Source: This report was generated using AI

Related Java vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-106554HIGH7.5
  • Java logoJava
  • pki-deps:10.6::jackson-jaxrs-json-provider
NoYesNov 04, 2026
CVE-2026-46487HIGH7.5
  • Java logoJava
  • org.geonetwork-opensource:geonetwork
NoYesNov 03, 2026
CVE-2026-75598MEDIUM6.3
  • Java logoJava
  • com.gradleup.shadow:com.gradleup.shadow.gradle.plugin
NoYesNov 06, 2026
CVE-2026-59171MEDIUM5.9
  • Java logoJava
  • apicurio-registry-fips
NoYesNov 06, 2026
CVE-2026-54442MEDIUM4.8
  • Java logoJava
  • gov.nsa.emissary:emissary
NoYesNov 05, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management