Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-76229

CVE-2026-76229: Renovate Kustomize RCE Vulnerability

CVE-2026-76229 is a command injection flaw in Renovate versions 39.218.0 to 40.33.0 affecting the kustomize manager. Attackers with write access can execute arbitrary commands via malicious chart names. This article covers technical details, affected versions, impact, and mitigation strategies.

Updated:

CVE-2026-76229 Overview

CVE-2026-76229 is a command injection vulnerability [CWE-77] in Renovate, the automated dependency update tool. The flaw affects Renovate versions from 39.218.0 before 40.33.0 and resides in the kustomize manager. User-provided Helm chart names are appended to helm pull commands without proper sanitization. An attacker with repository write access can craft a malicious kustomization.yaml file containing specially crafted chart names. When Renovate processes the repository, the injected commands execute on the Renovate host machine. This grants the attacker code execution in the context of the Renovate runner, which typically holds broad access to source repositories and registry credentials.

Critical Impact

Attackers with repository write access can achieve arbitrary command execution on the Renovate host, potentially exposing credentials, source code, and connected CI/CD infrastructure.

Affected Products

  • Renovate versions 39.218.0 through 40.32.x
  • Self-hosted Renovate deployments using the kustomize manager
  • CI/CD pipelines invoking Renovate against untrusted repositories

Discovery Timeline

  • 2026-08-19 - CVE-2026-76229 published to NVD
  • 2026-08-20 - Last updated in NVD database

Technical Details for CVE-2026-76229

Vulnerability Analysis

Renovate supports inflating Helm charts referenced from kustomization.yaml files by invoking the local helm binary. In vulnerable releases, the kustomize manager builds the helm pull command line by concatenating the chart name value directly from the YAML input. Because the chart name is passed through a shell context without escaping, metacharacters such as ;, &&, $(), and backticks trigger arbitrary command execution.

An attacker who can push to a repository monitored by Renovate authors a kustomization.yaml where the helmCharts[].name field embeds shell syntax. When Renovate scans the branch, it executes the crafted string as part of the pull command. The exploit runs with the Renovate process privileges and access to any mounted tokens, SSH keys, or registry secrets.

Root Cause

The root cause is failure to sanitize or safely quote user-controlled input before passing it to a shell-invoked command. The kustomize manager treated kustomization.yaml fields as trusted configuration data rather than untrusted input from repository contributors.

Attack Vector

Exploitation requires repository write access to a repository that Renovate scans with the kustomize manager enabled. The attacker commits a malicious kustomization.yaml referencing a Helm chart with a shell-injected name. On the next Renovate run, the command executes on the Renovate host with the runner's privileges.

typescript
// Security patch excerpt from lib/modules/manager/kustomize/common.ts
// Introduces controlled environment for helm invocations to prevent
// credential leakage and enforces the kustomizeInflateHelmArchives option.
import semver from 'semver';
import upath from 'upath';
import type { ExtraEnv } from '../../../util/exec/types';
import { privateCacheDir } from '../../../util/fs';
import type { UpdateArtifactsConfig } from '../types';

export function generateHelmEnvs(config: UpdateArtifactsConfig): ExtraEnv {
  const cacheDir = privateCacheDir();

  const envs: ExtraEnv = {
    // set cache and config files to a path in privateCacheDir to prevent file and credential leakage
    HELM_REGISTRY_CONFIG: upath.join(cacheDir, 'registry.json'),
    HELM_REPOSITORY_CONFIG: upath.join(cacheDir, 'repositories.yaml'),
    HELM_REPOSITORY_CACHE: upath.join(cacheDir, 'repositories'),
  };

  if (
    config.constraints?.helm &&
    !semver.intersects(config.constraints.helm, '>=3.8.0')
  ) {
    envs.HELM_EXPERIMENTAL_OCI = '1';
  }

  return envs;
}

Source: Renovate commit cc08c6e

Detection Methods for CVE-2026-76229

Indicators of Compromise

  • Unexpected child processes spawned from the Renovate process, particularly shell interpreters invoked from helm pull execution paths
  • kustomization.yaml files containing shell metacharacters (;, &&, |, $(), backticks) inside helmCharts[].name fields
  • Outbound network connections from the Renovate host to unknown hosts during dependency scans
  • Access to CI secrets, SSH keys, or registry credentials from the Renovate process outside normal update flows

Detection Strategies

  • Review repository commit history for kustomization.yaml additions or modifications from lower-trust contributors
  • Audit Renovate execution logs for helm pull invocations that include unusual characters in chart name arguments
  • Monitor process ancestry on Renovate runners for shells or interpreters descended from the Node.js Renovate process

Monitoring Recommendations

  • Enable command-line auditing on Renovate hosts and forward events to a centralized log platform for review
  • Alert on any process launched by the Renovate runner other than the expected package manager binaries
  • Baseline normal outbound network destinations for Renovate runners and alert on deviations

How to Mitigate CVE-2026-76229

Immediate Actions Required

  • Upgrade Renovate to version 40.33.0 or later on all self-hosted deployments
  • Rotate any credentials, tokens, or SSH keys accessible to Renovate runners that processed untrusted repositories on vulnerable versions
  • Restrict repository write access to trusted maintainers on repositories scanned by Renovate

Patch Information

The fix is included in Renovate 40.33.0. The patch adds an explicit kustomizeInflateHelmArchives option and constrains helm invocation environments. See the GitHub Security Advisory GHSA-xv56-3wq5-9997 and the remediation commit. Additional analysis is available in the VulnCheck advisory.

Workarounds

  • Disable the kustomize manager in Renovate configuration until upgrade is possible
  • Run Renovate in isolated, ephemeral containers with least-privilege credentials and no persistent secrets
  • Enforce branch protection and required review on all repositories Renovate scans to prevent untrusted commits
bash
# Disable the kustomize manager in renovate.json as a temporary workaround
{
  "enabledManagers": [
    "npm",
    "dockerfile",
    "github-actions"
  ],
  "kustomize": {
    "enabled": false
  }
}

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.