{"id":"CVE-2026-75598","kind":"vulnerability","aliases":["CVE-2026-75598"],"related":[],"title":"Gradle Shadow plugin: malicious dependency can write files outside extraction directory","description":"The Gradle Shadow plugin creates fat or uber JARs and supports file transformation and package relocation. Prior to version 9.6.0, Shadow does not independently validate ZIP entry names before writing them to its output archive. A malicious dependency can cause traversal entry names to be preserved when the applicable archive-processing path does not reject them. Some affected Shadow implementations process dependency archives directly, so upgrading Gradle alone does not universally prevent this behavior. If the resulting archive is extracted without path traversal protection, attacker-controlled files can be written outside the intended destination. This issue is fixed in version 9.6.0.","summary":"The Gradle Shadow plugin, which builds fat or uber JARs, does not validate ZIP entry names before writing them, so path traversal names from a malicious dependency can be kept in the output archive. If that archive is extracted without path traversal protection, an attacker can write files to locations outside the intended destination.","severity":"medium","cvss":6.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["build-tooling","gradle","java","jvm","kotlin","package"],"not_affected_if":["no-shadow-plugin","output-never-extracted","path-traversal-protection-in-place"],"how_to_check":"- Check the Shadow plugin version in the build file (for example `plugins { id 'com.gradleup.shadow' version '...' }`) and compare it with `9.6.0`\n- Review build scripts for any use of the Shadow plugin and whether the output JAR is extracted anywhere afterward","fix":"- Shadow plugin: `9.6.0`","status":"open","published_at":"2026-11-06T18:18:18+00:00","first_seen_at":"2026-11-06T18:44:09+00:00","triaged_at":"2026-11-06T18:45:22+00:00","updated_at":"2026-11-06T18:45:22+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-06T18:45:22Z","model":"claude-haiku-5-5","output":{"fix":"- Shadow plugin: `9.6.0`","reach":"local","title":"Gradle Shadow plugin: malicious dependency can write files outside extraction directory","impact":"medium","summary":"The Gradle Shadow plugin, which builds fat or uber JARs, does not validate ZIP entry names before writing them, so path traversal names from a malicious dependency can be kept in the output archive. If that archive is extracted without path traversal protection, an attacker can write files to locations outside the intended destination.","audience":"developers","category":"package","nicknames":[],"who_cares":["gradle","java","kotlin","jvm","build-tooling"],"confidence":0.6,"fix_status":"available","needs_auth":"no","worst_case":"attacker-chosen files written outside the extraction directory during archive extraction","analyst_note":"","how_to_check":"- Check the Shadow plugin version in the build file (for example `plugins { id 'com.gradleup.shadow' version '...' }`) and compare it with `9.6.0`\n- Review build scripts for any use of the Shadow plugin and whether the output JAR is extracted anywhere afterward","plain_action":"","needs_analyst":false,"not_affected_if":["no-shadow-plugin","output-never-extracted","path-traversal-protection-in-place"],"who_is_affected":"Projects that use the Gradle Shadow plugin to build fat or uber JARs, especially when they pull in third-party dependencies that could be malicious and when the resulting archive is extracted by another tool or process. Projects that do not use Shadow, or that never extract its output without path traversal protection, are less exposed. The sources note that upgrading Gradle alone does not fully prevent the behavior in some Shadow implementations, so the plugin version itself matters.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000757,"input_tokens":4373,"output_tokens":640,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-75598':14A,17A '9.6.0':99C,182C 'affect':138C 'alon':148C 'applic':128C 'archiv':59B,62B,114C,130C,143C,158C 'archive-process':129C 'attack':70B,166C 'attacker-control':165C 'behavior':154C 'build':19B,31B 'build-tool':18B 'caus':119C 'control':167C 'creat':84C 'cve':12A,15A 'depend':5A,52B,117C,142C 'destin':79B,175C 'direct':144C 'directori':11A 'entri':40B,106C,121C 'extract':10A,64B,160C 'fat':32B,85C 'file':8A,73B,91C,168C 'fix':179C 'gradl':1A,21B,27B,81C,147C 'implement':140C 'independ':103C 'intend':78B,174C 'issu':177C 'jar':35B,88C 'java':22B 'jvm':23B 'kept':55B 'kotlin':24B 'locat':75B 'malici':4A,51B,116C 'name':41B,48B,107C,122C 'output':58B,113C 'outsid':9A,76B,172C 'packag':25B,94C 'path':46B,66B,132C,162C 'plugin':3A,29B,83C 'preserv':125C 'prevent':152C 'prior':96C 'process':131C,141C 'protect':68B,164C 'reject':135C 'reloc':95C 'result':157C 'shadow':2A,28B,82C,100C,139C 'support':90C 'tool':20B 'transform':92C 'travers':47B,67B,120C,163C 'uber':34B,87C 'univers':151C 'upgrad':146C 'valid':38B,104C 'version':98C,181C 'without':65B,161C 'write':7A,43B,72B,109C 'written':171C 'zip':39B,105C","nicknames":[],"mitigations":[],"who_affected":"Projects that use the Gradle Shadow plugin to build fat or uber JARs, especially when they pull in third-party dependencies that could be malicious and when the resulting archive is extracted by another tool or process. Projects that do not use Shadow, or that never extract its output without path traversal protection, are less exposed. The sources note that upgrading Gradle alone does not fully prevent the behavior in some Shadow implementations, so the plugin version itself matters.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["buildtooling","gradle","java","jvm","kotlin","medium","package"],"campaign_type":null,"search_a":"'-2026':13A,16A '-75598':14A,17A 'cve':12A,15A 'depend':5A 'directori':11A 'extract':10A 'file':8A 'gradl':1A 'malici':4A 'outsid':9A 'plugin':3A 'shadow':2A 'write':7A","search_b":"'archiv':59B,62B 'attack':70B 'build':19B,31B 'build-tool':18B 'depend':52B 'destin':79B 'entri':40B 'extract':64B 'fat':32B 'file':73B 'gradl':21B,27B 'intend':78B 'jar':35B 'java':22B 'jvm':23B 'kept':55B 'kotlin':24B 'locat':75B 'malici':51B 'name':41B,48B 'output':58B 'outsid':76B 'packag':25B 'path':46B,66B 'plugin':29B 'protect':68B 'shadow':28B 'tool':20B 'travers':47B,67B 'uber':34B 'valid':38B 'without':65B 'write':43B,72B 'zip':39B","search_c":"'9.6.0':99C,182C 'affect':138C 'alon':148C 'applic':128C 'archiv':114C,130C,143C,158C 'archive-process':129C 'attack':166C 'attacker-control':165C 'behavior':154C 'caus':119C 'control':167C 'creat':84C 'depend':117C,142C 'destin':175C 'direct':144C 'entri':106C,121C 'extract':160C 'fat':85C 'file':91C,168C 'fix':179C 'gradl':81C,147C 'implement':140C 'independ':103C 'intend':174C 'issu':177C 'jar':88C 'malici':116C 'name':107C,122C 'output':113C 'outsid':172C 'packag':94C 'path':132C,162C 'plugin':83C 'preserv':125C 'prevent':152C 'prior':96C 'process':131C,141C 'protect':164C 'reject':135C 'reloc':95C 'result':157C 'shadow':82C,100C,139C 'support':90C 'transform':92C 'travers':120C,163C 'uber':87C 'univers':151C 'upgrad':146C 'valid':104C 'version':98C,181C 'without':161C 'write':109C 'written':171C 'zip':105C","first_public_at":"2026-07-16T08:11:23+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-75598","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-75598","severity":null,"published_at":"2026-11-06T18:18:18+00:00","modified_at":"2026-11-06T18:18:18+00:00","first_seen_at":"2026-11-06T18:44:09+00:00","fetched_at":"2026-11-06T18:44:09+00:00","note":null}],"documents":[{"id":88850,"url":"https://github.com/GradleUp/shadow/commit/0c2744fcc050e34a084f5131d5e167b13c342bfd","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":88851,"url":"https://github.com/GradleUp/shadow/releases/tag/9.6.0","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":88852,"url":"https://github.com/GradleUp/shadow/security/advisories/GHSA-rr8v-fxxf-c986","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-07-16T08:11:23+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}