Read the docs
TI-2026-66170 Aliases GHSA-pfq2-hh62-7m96

Renovate vulnerable to arbitrary command injection via Gradle Wrapper and malicious `distributionUrl`

Priority LOW 38CWE-78Published · Updated

Key facts

Attack vector
—
Privileges required
—
User interaction
—
Attack complexity
—
Impact type
Code execution
Confidentiality · integrity · availability
—
Fix status
Fixed

No CVSS vector from any source. Fix status from GitHub. Impact type from CWE-78.

Summary

### Summary Renovate 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. ### Details When Renovate handles Gradle Wrapper artifacts, it may run a wrapper update command such as: - `./gradlew :wrapper --gradle-distribution-url <value>` In the observed behavior, Renovate executes this via a shell (e.g., `/bin/sh -c ...`). If `distributionUrl` contains shell command substitution syntax like `$(...)`, the shell evaluates it **before** Gradle validates/parses the URL. After that, Gradle attempts to parse the URL as a URI and fails with `URISyntaxException`, but the shell substitution has already executed. This 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”. Prerequisites / attack conditions: - 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). - Renovate must be configured to process Gradle Wrapper updates/artifacts for that repository (default behavior for the Gradle Wrapper manager). ### PoC 1. Create a repository with a Gradle Wrapper (`gradlew`, `gradlew.bat`, `gradle/wrapper/gradle-wrapper.jar`, and `gradle/wrapper/gradle-wrapper.properties`). 2. Set `distributionUrl` in `gradle-wrapper.properties` to include `$(...)`. 3. Run Renovate against the repository. 4. Observe that a file is created during Renovate’s wrapper update step **before** Gradle fails with `URISyntaxException`. A [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. ### Impact This 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. ### Remediation Upgrading 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. If 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.

Why it matters now

Fix Fixed renovate (npm): 42.68.5

SSVC decision points

Not available: CISA has not published SSVC decision points for this record.

Affected products

VendorProductAffected versionsFixed inStatusSource
—renovate (npm)32.124.0 to before 42.68.542.68.5Patch availableGHSA-pfq2-hh62-7m96
  • renovate (npm) Vendor— Affected 32.124.0 to before 42.68.5 Fixed in 42.68.5 Patch available GHSA-pfq2-hh62-7m96

Remediation

  • Fix · GHSA-pfq2-hh62-7m96 renovate (npm) Fixed in 42.68.5 Advisory →

Timeline

  1. 2026-10-03 Threatist record created from GHSA-pfq2-hh62-7m96

References

Sources

This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences