{"id":"GHSA-pfq2-hh62-7m96","revision":null,"records":[{"revision":"c57dca70d0c84852b869df1c9b1c6eec","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-76228","aliases":[],"title":"Renovate before 42.68.5 Remote Code Execution via Gradle Wrapper","description":"Renovate versions >=32.124.0 and before 42.68.5 (and Mend renovate-ce/renovate-ee before 13.3.0) contain a command injection vulnerability in Gradle Wrapper artifact handling. When Renovate processes Gradle Wrapper updates, it invokes a wrapper update command via a shell (e.g. /bin/sh -c ... ./gradlew :wrapper --gradle-distribution-url <value>). If an attacker supplies a malicious gradle-wrapper.properties whose distributionUrl contains shell command substitution syntax such as $(...), the shell evaluates it before Gradle parses the URL, resulting in arbitrary command execution in the Renovate runtime. Exploitation requires the attacker to introduce the malicious file into a repository that Renovate scans; the issue occurs even when allowScripts is disabled.","state":0,"publishedAt":"2026-08-19T14:02:10.197+00:00","modifiedAt":"2026-10-08T15:25:04.592+00:00","affected":[{"ecosystem":"Vendor product","name":"renovate","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"renovatebot\",\n                    \"product\": \"renovate\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"versions\": [\n                        {\n                            \"version\": \"32.124.0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"42.68.5\"\n                        },\n                        {\n                            \"version\": \"42.68.5\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        }\n                    ],\n                    \"packageURL\": \"pkg:npm/renovate\"\n                }"},{"ecosystem":"Vendor product","name":"renovate-ce","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"mend\",\n                    \"product\": \"renovate-ce\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"versions\": [\n                        {\n                            \"version\": \"0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"13.3.0\"\n                        },\n                        {\n                            \"version\": \"13.3.0\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        }\n                    ],\n                    \"packageURL\": \"pkg:npm/renovate\"\n                }"},{"ecosystem":"Vendor product","name":"renovate-ee-server","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"mend\",\n                    \"product\": \"renovate-ee-server\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"versions\": [\n                        {\n                            \"version\": \"0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"13.3.0\"\n                        },\n                        {\n                            \"version\": \"13.3.0\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        }\n                    ],\n                    \"packageURL\": \"pkg:npm/renovate\"\n                }"},{"ecosystem":"Vendor product","name":"renovate-ee-worker","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"mend\",\n                    \"product\": \"renovate-ee-worker\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"versions\": [\n                        {\n                            \"version\": \"0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"13.3.0\"\n                        },\n                        {\n                            \"version\": \"13.3.0\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        }\n                    ],\n                    \"packageURL\": \"pkg:npm/renovate\"\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:L/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":8.4,"severity":"HIGH"},{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H","score":6.7,"severity":"MEDIUM"}],"references":["https://github.com/renovatebot/renovate/security/advisories/GHSA-pfq2-hh62-7m96","https://www.vulncheck.com/advisories/renovate-before-remote-code-execution-via-gradle-wrapper"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-76228","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-76228","identifiers":["CVE-2026-76228"]},"retained":false,"historicalAffected":[]},{"revision":"3003aee09d3d44f49e6ced3b4e499ebb","observedAt":"2026-11-09T15:12:33.628+00:00","statement":{"source":"euvd","id":"EUVD-2026-62469","aliases":["CVE-2026-76228","GHSA-mqp7-cg7m-4hhq"],"title":"Renovate versions >=32.124.0 and before 42.68.5 (and Mend renovate-ce/renovate-ee before 13.3.0) contain a command injection vulnerability in Gradle Wrapper artifact handling. When Renovate processes Gradle Wrapper updates, it invokes a wra…","description":"Renovate versions >=32.124.0 and before 42.68.5 (and Mend renovate-ce/renovate-ee before 13.3.0) contain a command injection vulnerability in Gradle Wrapper artifact handling. When Renovate processes Gradle Wrapper updates, it invokes a wrapper update command via a shell (e.g. /bin/sh -c ... ./gradlew :wrapper --gradle-distribution-url <value>). If an attacker supplies a malicious gradle-wrapper.properties whose distributionUrl contains shell command substitution syntax such as $(...), the shell evaluates it before Gradle parses the URL, resulting in arbitrary command execution in the Renovate runtime. Exploitation requires the attacker to introduce the malicious file into a repository that Renovate scans; the issue occurs even when allowScripts is disabled.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"CVSS:4.0/AV:L/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":8.4,"severity":null}],"references":["https://github.com/renovatebot/renovate/security/advisories/GHSA-pfq2-hh62-7m96","https://www.vulncheck.com/advisories/renovate-before-remote-code-execution-via-gradle-wrapper"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-62469","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Aug 19, 2026, 2:02:10 PM","dateUpdated":"Oct 8, 2026, 3:25:04 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-62469","identifiers":["EUVD-2026-62469","CVE-2026-76228","GHSA-mqp7-cg7m-4hhq"]},"retained":false,"historicalAffected":[]},{"revision":"733b3af460db4adfa32ba9bb87fba3cd","observedAt":"2026-10-25T16:19:04.694+00:00","statement":{"source":"nvd","id":"CVE-2026-76228","aliases":[],"title":"Renovate versions >=32.124.0 and before 42.68.5 (and Mend renovate-ce/renovate-ee before 13.3.0) contain a command injection vulnerability in Gradle Wrapper artifact handling. When Renovate processes Gradle Wrapper updates, it invokes a wra…","description":"Renovate versions >=32.124.0 and before 42.68.5 (and Mend renovate-ce/renovate-ee before 13.3.0) contain a command injection vulnerability in Gradle Wrapper artifact handling. When Renovate processes Gradle Wrapper updates, it invokes a wrapper update command via a shell (e.g. /bin/sh -c ... ./gradlew :wrapper --gradle-distribution-url <value>). If an attacker supplies a malicious gradle-wrapper.properties whose distributionUrl contains shell command substitution syntax such as $(...), the shell evaluates it before Gradle parses the URL, resulting in arbitrary command execution in the Renovate runtime. Exploitation requires the attacker to introduce the malicious file into a repository that Renovate scans; the issue occurs even when allowScripts is disabled.","state":0,"publishedAt":"2026-08-19T14:17:49.52+00:00","modifiedAt":"2026-10-08T16:17:42.583+00:00","affected":[],"metrics":[{"system":"CVSS 4.0 · disclosure@vulncheck.com · Secondary","vector":"CVSS:4.0/AV:L/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","score":8.4,"severity":"HIGH"},{"system":"CVSS 3.1 · disclosure@vulncheck.com · Secondary","vector":"CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H","score":6.7,"severity":"MEDIUM"}],"references":["https://github.com/renovatebot/renovate/security/advisories/GHSA-pfq2-hh62-7m96","https://www.vulncheck.com/advisories/renovate-before-remote-code-execution-via-gradle-wrapper"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-76228","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Awaiting Analysis","weaknesses":["CWE-78"],"productCriteria":[],"sourceDates":{"published":"2026-08-19T14:17:49.520","lastModified":"2026-10-08T16:17:42.583"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-76228","identifiers":["CVE-2026-76228"]},"retained":false,"historicalAffected":[]},{"revision":"36f76be835c440a2a318812257907e44","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"GHSA-pfq2-hh62-7m96","aliases":["CVE-2026-76228"],"title":"Renovate vulnerable to arbitrary command injection via Gradle Wrapper and malicious `distributionUrl`","description":"### Summary\nRenovate can be tricked into executing shell code while updating the Gradle Wrapper. A malicious `distributionUrl` in `gradle/wrapper/gradle-wrapper.properties` can lead to command execution in the Renovate runtime.\n\n### Details\nWhen Renovate handles Gradle Wrapper artifacts, it may run a wrapper update command such as:\n- `./gradlew :wrapper --gradle-distribution-url <value>`\n\nIn the observed behavior, Renovate executes this via a shell (e.g., `/bin/sh -c ...`).  \nIf `distributionUrl` contains shell command substitution syntax like `$(...)`, the shell evaluates it **before** Gradle validates/parses the URL.\n\nAfter that, Gradle attempts to parse the URL as a URI and fails with `URISyntaxException`, but the shell substitution has already executed.\n\nThis is reproducible even when `allowScripts` is disabled (default is OFF), because this execution happens as part of Gradle Wrapper artifact handling rather than “repository install scripts”.\n\nPrerequisites / attack conditions:\n- The attacker must be able to get a malicious `gradle-wrapper.properties` into a repository that Renovate scans (e.g., direct write access, or a maintainer merges an attacker’s change/PR).\n- Renovate must be configured to process Gradle Wrapper updates/artifacts for that repository (default behavior for the Gradle Wrapper manager).\n\n### PoC\n1. Create a repository with a Gradle Wrapper (`gradlew`, `gradlew.bat`, `gradle/wrapper/gradle-wrapper.jar`, and `gradle/wrapper/gradle-wrapper.properties`).\n2. Set `distributionUrl` in `gradle-wrapper.properties` to include `$(...)`.\n3. Run Renovate against the repository.\n4. Observe that a file is created during Renovate’s wrapper update step **before** Gradle fails with `URISyntaxException`.\n\nA [screen recording](https://drive.google.com/file/d/1nveSCgyz4pKPCZuelqDD_xGEO00DXr4P/view) is attached showing end-to-end reproduction. In the demo, the payload creates `/tmp/passwd_dump` containing `/etc/passwd`, demonstrating that file read/exfiltration is possible within the Renovate execution context.\n\n### Impact\nThis allows arbitrary command execution in the Renovate runtime during Gradle Wrapper updates. Depending on deployment, this may expose credentials/tokens available to the bot and may allow an attacker to modify repositories or access internal resources reachable from the Renovate environment.\n\n### Remediation\n\nUpgrading to Renovate [42.68.5](https://github.com/renovatebot/renovate/releases/tag/42.68.5) (2025-12-31) fixes this issue, and closes out other risks of shell evaluation for commands run by Renovate.\n\nIf using the `composer`, `yarn` (v1) or `flux` managers, please upgrade to [42.74.5](https://github.com/renovatebot/renovate/releases/tag/42.74.5) (2026-01-08), as there were follow-up fixes to keep these managers working.","state":0,"publishedAt":"2026-01-13T19:54:29+00:00","modifiedAt":"2026-08-20T04:04:14.4077262+00:00","affected":[{"ecosystem":"npm","name":"renovate","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"32.124.0"},{"kind":"fixed","version":"42.68.5"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"MODERATE"}],"references":["https://github.com/renovatebot/renovate/security/advisories/GHSA-pfq2-hh62-7m96","https://github.com/renovatebot/renovate","https://github.com/renovatebot/renovate/releases/tag/42.68.5"],"sourceUrl":"https://github.com/advisories/GHSA-pfq2-hh62-7m96","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-pfq2-hh62-7m96","identifiers":["GHSA-pfq2-hh62-7m96","CVE-2026-76228"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-10T22:23:33.5401384+00:00","complete":true,"records":1779,"lastAttemptAt":"2026-11-10T22:23:33.5401384+00:00","lastSuccessAt":"2026-11-10T22:23:33.6965753+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:23:33.6965799+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-8859cf40d4337e24bd2f258cc7778fbad01bb24c79d057aaf34cf1dfc6f8917d-902f9d89cb9592f89801572ba7b38f262d85812b20625e476b049fa1364aa36f","complete":true,"records":423743,"lastAttemptAt":"2026-11-10T22:21:33.9128231+00:00","lastSuccessAt":"2026-11-10T22:21:32.8363068+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:21:33.9128231+00:00","snapshotPublishedAt":"2026-11-10T21:27:38+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-6198dffe2f0f4aa8a2fd0cc471cc35a0","complete":true,"records":13715,"lastAttemptAt":"2026-11-10T22:24:23.9499156+00:00","lastSuccessAt":"2026-11-10T22:24:23.945+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:24:23.945+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13769,"expectedIdentifiers":13769,"failedIdentifiers":0},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-10T22:23:33.5401384+00:00","complete":true,"records":1097,"lastAttemptAt":"2026-11-10T22:23:33.5401384+00:00","lastSuccessAt":"2026-11-10T22:23:33.6974109+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:23:33.6974219+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-dcda6428995c421894bf8d7b10e13bb8","complete":false,"records":13721,"lastAttemptAt":"2026-11-10T22:24:13.873882+00:00","lastSuccessAt":"2026-11-10T22:24:13.869+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:24:13.869+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13748,"expectedIdentifiers":13769,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-e41003cabc4bca6ffa7416326ea16ef9368e02303054ea1c5ab1ac33fb67507c","complete":true,"records":9935,"lastAttemptAt":"2026-11-10T22:23:33.385398+00:00","lastSuccessAt":"2026-11-10T20:24:04.2273564+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:23:33.385398+00:00","snapshotPublishedAt":"2026-11-10T20:03:04+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-26503967ae4379db8f374089589d6e03fb15bd31f820c9e992aaf93840c2236c","complete":true,"records":1971,"lastAttemptAt":"2026-11-10T22:21:34.9608794+00:00","lastSuccessAt":"2026-11-09T21:02:20.472473+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:21:34.9608794+00:00","snapshotPublishedAt":"2026-11-09T20:18:18+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-0e3796c351bac632fda8fc3b3641da2bc6f0237cd79e78b1e59d17ce0aa22d32","complete":true,"records":3081,"lastAttemptAt":"2026-11-10T22:23:33.4918093+00:00","lastSuccessAt":"2026-11-10T20:24:10.5326555+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:23:33.4918093+00:00","snapshotPublishedAt":"2026-11-10T20:03:04+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-d536f37361cfcff54586943d83991f2773b811cb69141755834da509a9011b58","complete":true,"records":231641,"lastAttemptAt":"2026-11-10T22:23:33.2524814+00:00","lastSuccessAt":"2026-11-10T22:23:31.6606167+00:00","error":null,"lastVerifiedAt":"2026-11-10T22:23:33.2524814+00:00","snapshotPublishedAt":"2026-11-10T21:33:26+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}