CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-5VJQ-5JMG-39XQ

GHSA-5VJQ-5JMG-39XQ: Remote Code Execution in Renovate via Bazel Lockfile Maintenance

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 16, 2026·6 min read·17 visits

Executive Summary (TL;DR)

Renovate versions prior to 43.102.11 execute untrusted code when generating Bazel lockfiles. An attacker controlling a repository processed by Renovate can achieve remote code execution on the runner infrastructure.

A critical Remote Code Execution (RCE) vulnerability exists in the Renovate CLI affecting the `bazel-module` and `bazelisk` managers. By providing a malicious `MODULE.bazel` file, an attacker can execute arbitrary commands on the runner during lockfile maintenance operations.

Vulnerability Overview

Renovate is an automated dependency update tool that operates by parsing repository manifests and invoking ecosystem-native package managers to resolve and lock dependency versions. The vulnerability resides in the implementation of the bazel-module and bazelisk managers. These modules are responsible for maintaining Bazel dependencies and specifically handling MODULE.bazel configurations.

The flaw constitutes an Unsafe Command Execution vulnerability (CWE-94) stemming from the invocation of the Bazel CLI against untrusted inputs. When Renovate performs lockfile maintenance on a repository, it attempts to generate an updated MODULE.bazel.lock file by natively executing Bazel commands within the runner's execution environment.

Because Bazel configuration files allow for the execution of arbitrary scripts and commands during the workspace evaluation phase, invoking the Bazel CLI on untrusted repository contents without strict sandboxing permits remote code execution. This architectural trust boundary violation enables an attacker to compromise the runner infrastructure.

Root Cause Analysis

The root cause of this vulnerability lies in the execution semantics of the Bazel build system and Renovate's failure to require administrative consent before performing high-risk operations. Bazel utilizes Starlark, a dialect of Python, for its configuration and macro definitions within MODULE.bazel files.

During dependency resolution, Bazel executes these Starlark files to dynamically determine build graphs and fetch external dependencies. Starlark macros can invoke host system commands via functions like repository_ctx.execute. When a user runs a Bazel command that forces dependency evaluation, any logic embedded in the MODULE.bazel file executes within the context of the host process.

When lockFileMaintenance is enabled for Bazel managers, Renovate executes the command bazel mod deps --lockfile_mode=update. This command explicitly commands Bazel to evaluate the dependencies defined in the repository's MODULE.bazel file and generate a corresponding lockfile.

Prior to version 43.102.11, Renovate issued this command indiscriminately whenever it encountered a relevant manifest. The system trusted the repository contents implicitly, failing to classify the operation as an unsafe execution. This oversight provided a direct path for repository-supplied code to execute natively on the CI/CD runner hosting the Renovate instance.

Code Analysis and Patch Mechanics

In versions prior to the patch, the lib/modules/manager/bazel-module/lockfile.ts component directly executed the Bazel CLI tool using an internal execution wrapper. The code path retrieved the dependencies and formulated the bazel mod deps command without verifying the global security configuration.

// Conceptual representation of vulnerable logic
export async function updateLockFile(config: LockFileConfig): Promise<UpdateLockFileResult> {
  const cmd = 'bazel mod deps --lockfile_mode=update';
  // Flaw: Execution proceeds without checking allowedUnsafeExecutions
  const result = await exec(cmd, execOptions);
  return { lockFile: result.stdout };
}

The remediation implemented in pull request #42323 addresses this by enforcing an explicit opt-in mechanism for high-risk executions. The patch modifies the lockfile generation logic to interrogate the GlobalConfig object before allowing the Bazel execution to proceed.

// Conceptual representation of patched logic (#42323)
export async function updateLockFile(config: LockFileConfig): Promise<UpdateLockFileResult> {
  const allowedExecutions = GlobalConfig.get('allowedUnsafeExecutions') || [];
  
  if (!allowedExecutions.includes('bazelModDeps')) {
    logger.warn('Bazel command, bazel mod deps --lockfile_mode=update, was requested to run, but bazelModDeps is not permitted in the allowedUnsafeExecutions');
    return { error: 'unsafe-execution-denied' };
  }
  
  const cmd = 'bazel mod deps --lockfile_mode=update';
  const result = await exec(cmd, execOptions);
  return { lockFile: result.stdout };
}

Additionally, the patch updates the configuration schema, adding bazelModDeps to the allowedValues for the allowedUnsafeExecutions array. This ensures that only instance administrators who explicitly modify the runner's configuration can authorize the potentially dangerous Bazel execution phase.

Exploitation Methodology

Exploiting this vulnerability requires the attacker to introduce a malicious repository into the operational scope of a vulnerable Renovate instance. This is typically achieved by hosting a public repository and configuring Renovate to scan it, or by submitting a pull request containing malicious modifications to a repository actively managed by Renovate.

The attacker constructs a specialized payload within the MODULE.bazel file. This payload leverages standard Starlark functions designed for repository rules. By defining a custom repository rule that utilizes the execute method, the attacker can specify arbitrary shell commands to be run by the underlying operating system during the dependency resolution phase.

When Renovate begins its scheduled lockfile maintenance run, it identifies the need to update the MODULE.bazel.lock file. Renovate issues the bazel mod deps --lockfile_mode=update command. Bazel parses the malicious configuration, encounters the execution directive, and executes the payload with the privileges of the Renovate user on the host system.

Impact Assessment

The impact of this vulnerability is critical, directly leading to unauthenticated remote code execution on the system hosting the Renovate CLI. In typical deployments, Renovate operates within a CI/CD environment or as a dedicated automation runner. These environments inherently possess elevated privileges and sensitive credentials necessary to interact with source code management systems and package registries.

Successful exploitation allows the attacker to extract environmental variables, SSH keys, GitHub Personal Access Tokens (PATs), and API tokens configured for the runner. With access to these credentials, the attacker can escalate privileges within the organization's development infrastructure.

Furthermore, an attacker could abuse the compromised runner to tamper with other repositories processed by the same Renovate instance. This introduces a severe supply chain risk, as the attacker could covertly inject malicious code or vulnerable dependencies into downstream projects managed by the organization.

Remediation and Mitigation

The primary remediation for this vulnerability is upgrading the Renovate CLI to version 43.102.11 or later. The patch introduces a secure-by-default posture that categorically denies the execution of bazel mod deps unless explicitly permitted by the instance administrator.

For environments that actively utilize Bazel and require automated lockfile maintenance, administrators must explicitly opt-in to this behavior. This is accomplished by modifying the global (self-hosted) configuration file to include bazelModDeps within the allowedUnsafeExecutions array.

If the configuration is not updated, Renovate will gracefully degrade its functionality for Bazel modules. It will skip the lockfile update process and emit a warning to the logs: Bazel command, bazel mod deps --lockfile_mode=update, was requested to run, but bazelModDeps is not permitted in the allowedUnsafeExecutions. Administrators should monitor these logs to identify repositories impacted by the new security constraint.

Official Patches

RenovatebotFix Pull Request #42323
RenovatebotRelease v43.102.11

Technical Appendix

CVSS Score
9.8/ 10

Affected Systems

Renovate CLI `bazel-module` managerRenovate CLI `bazelisk` managerSelf-hosted Renovate deploymentsRenovate CI/CD Runner environments

Affected Versions Detail

Product
Affected Versions
Fixed Version
Renovate CLI
Renovatebot
< 43.102.1143.102.11
AttributeDetail
Vulnerability TypeImproper Control of Generation of Code (CWE-94) / OS Command Injection
Attack VectorMalicious Repository Payload (MODULE.bazel)
ImpactRemote Code Execution (RCE) on automation runner
Affected ComponentsRenovate CLI (bazel-module, bazelisk)
Fixed Version43.102.11
Configuration RequirementExplicit allowedUnsafeExecutions configuration

MITRE ATT&CK Mapping

T1648Server-Side Execution
Execution
T1190Exploit Public-Facing Application
Initial Access
T1525Implant Internal Image
Persistence
CWE-94
Improper Control of Generation of Code ('Code Injection')

Improper Control of Generation of Code ('Code Injection')

References & Sources

  • [1]GitHub Advisory: GHSA-5VJQ-5JMG-39XQ
  • [2]Renovate Self-Hosted Configuration - allowedUnsafeExecutions

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•40 minutes ago•CVE-2026-72802
6.9

CVE-2026-72802: Sensitive Information Disclosure via Administrative Asset Resolvers in SiYuan Note

SiYuan Note versions prior to v3.7.4 contain an information disclosure vulnerability in the `/api/asset/resolveAssetPath` endpoint. This endpoint returns absolute backend filesystem paths unmodified to CheckAuth-only requests. Low-privileged users or unauthenticated readers under publish mode can exploit this to leak the local directory layout, operating system username, and overall host deployment structure.

Amit Schendel
Amit Schendel
0 views•6 min read
•about 2 hours ago•CVE-2026-72801
8.7

CVE-2026-72801: Information Disclosure of Cryptographic Key Material in SiYuan

An access control vulnerability in the SiYuan personal knowledge management platform before version v3.7.4 exposes notebook encryption parameters to unauthenticated remote attackers. When the platform is configured in Publish Mode, specific API endpoints fail to enforce authorization checks. This access failure leaks key-derivation materials, password verifiers, and wrapped database keys to anonymous network clients.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 4 hours ago•CVE-2026-72800
5.8

CVE-2026-72800: Missing Authorization in SiYuan Personal Knowledge Management System

A security vulnerability in the SiYuan local-first personal knowledge management system allows unauthenticated remote attackers to bypass logical boundary controls in publish (read-only) mode. By interacting with endpoints that lack proper publish-access validation, an attacker can disclose the application's internal database schemas and harvest block IDs across both public and private notebooks. This metadata leakage compromises the confidentiality of restricted documents and provides foundational information for targeted extraction.

Alon Barad
Alon Barad
2 views•5 min read
•about 5 hours ago•CVE-2026-72803
6.9

CVE-2026-72803: Information Disclosure via Missing Authorization in SiYuan API

An information disclosure vulnerability exists in the SiYuan personal knowledge management system versions prior to v3.7.4. The application fails to enforce publish-access filters on block attribute retrieval endpoints. Consequently, unauthenticated remote attackers can bypass document-level protection rules (such as password protection or disabled-publish flags) to retrieve sensitive block-level attributes, including aliases, memos, block names, and custom metadata fields, by querying the API using guessed or known block IDs.

Alon Barad
Alon Barad
4 views•7 min read
•about 6 hours ago•GHSA-7J72-F6WG-CXW6
8.6

CVE-2026-68584: Authentication Bypass via Auxiliary Content Endpoints in SiYuan

An authentication bypass vulnerability (classified as CWE-288) exists in the publish-mode component of SiYuan, a Go-based note-taking application. This security flaw allows unauthenticated remote attackers to bypass password-protected note boundaries by leveraging auxiliary block endpoints that fail to enforce document access checks. Attackers can exploit this issue by first harvesting document metadata via a public search endpoint and subsequently fetching full rendered document contents using vulnerable block endpoints. This technical analysis explores the root cause, exploitation methodology, and remediation path.

Alon Barad
Alon Barad
2 views•7 min read
•about 7 hours ago•CVE-2026-77465
7.5

CVE-2026-77465: Uncontrolled Recursion in toml-node Deserializer Leads to Denial of Service

An uncontrolled recursion vulnerability (CWE-674) in the toml-node NPM package (published as toml) prior to version 4.2.0 allows unauthenticated remote attackers to trigger process-wide Denial of Service (DoS) crashes. By submitting TOML payloads with deep bracket or brace nesting, attackers exhaust the V8 runtime stack limit.

Amit Schendel
Amit Schendel
6 views•6 min read