/

CVE-2026-12171

Severity:

HIGH RISK

(7.8)

Code Injection (CWE-94) in auto-changelog CLI Utility

CVE-2026-12171

Deferred

Vulnerability type

Category:

Code Injection

CWE:

CWE-22, CWE-88, CWE-94, CWE-829, CWE-918

Impact:

Arbitrary Code Execution

Severity:

HIGH RISK

(7.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

auto-changelog trusts security-sensitive configuration values loaded from the repository it processes, allowing attacker-controlled files to influence module loading, command execution, file output, and network requests. This becomes high risk when the tool runs against an untrusted pull request, fork, or third-party repository with the privileges of a local user or CI job.

auto-changelog trusts security-sensitive configuration values loaded from the repository it processes, allowing attacker-controlled files to influence module loading, command execution, file output, and network requests. This becomes high risk when the tool runs against an untrusted pull request, fork, or third-party repository with the privileges of a local user or CI job.

Affected context

The vulnerability occurs when auto-changelog processes a repository whose .auto-changelog file or package.json contains configuration that is merged into runtime options. Deployments are especially exposed when the tool runs in CI against untrusted repository content, or when users run it locally without treating repository configuration as untrusted. Security-sensitive options include module loading, Git argument handling, output paths, and template URLs.

The vulnerability occurs when auto-changelog processes a repository whose .auto-changelog file or package.json contains configuration that is merged into runtime options. Deployments are especially exposed when the tool runs in CI against untrusted repository content, or when users run it locally without treating repository configuration as untrusted. Security-sensitive options include module loading, Git argument handling, output paths, and template URLs.

Exploit preconditions

  • Attack surface: Repository-processing command-line execution in local or

CI environments

  • Required access: Ability to introduce or modify repository configuration

or related modules

  • Trigger point: Running auto-changelog against the attacker-influenced

repository

  • Why exploitation is possible: Repository configuration is merged into

trusted runtime options and security-sensitive values are honored before

the repository is treated as untrusted

  • Privilege context: Code and related actions execute with the

permissions, filesystem access, network access, and secrets available to

the invoking user or CI job

  • Attack surface: Repository-processing command-line execution in local or

CI environments

  • Required access: Ability to introduce or modify repository configuration

or related modules

  • Trigger point: Running auto-changelog against the attacker-influenced

repository

  • Why exploitation is possible: Repository configuration is merged into

trusted runtime options and security-sensitive values are honored before

the repository is treated as untrusted

  • Privilege context: Code and related actions execute with the

permissions, filesystem access, network access, and secrets available to

the invoking user or CI job

Why this happens

The underlying flaw is a failure to maintain a trust boundary between repository content and application configuration. Configuration values sourced from the target repository can select modules for loading, influence Git arguments, control output destinations, and determine network targets. This maps primarily to CWE-94: Improper Control of Generation of Code, with related behavior involving CWE-22 path traversal, CWE-88 argument injection, CWE-829 inclusion of functionality from an untrusted source, and CWE-918 server-side request forgery.

The underlying flaw is a failure to maintain a trust boundary between repository content and application configuration. Configuration values sourced from the target repository can select modules for loading, influence Git arguments, control output destinations, and determine network targets. This maps primarily to CWE-94: Improper Control of Generation of Code, with related behavior involving CWE-22 path traversal, CWE-88 argument injection, CWE-829 inclusion of functionality from an untrusted source, and CWE-918 server-side request forgery.

Potential impact

  • Attacker-chosen code may execute with the privileges of the local user or CI job
  • Workflow secrets, tokens, and environment data could be exposed
  • Attacker-controlled modules may be loaded without dependency installation
  • Git operations may be redirected to create or overwrite files
  • Output may be written to unintended filesystem locations
  • The process may make outbound requests to attacker-selected destinations
  • Build, release, or repository automation could be compromised
  • Attacker-chosen code may execute with the privileges of the local user or CI job
  • Workflow secrets, tokens, and environment data could be exposed
  • Attacker-controlled modules may be loaded without dependency installation
  • Git operations may be redirected to create or overwrite files
  • Output may be written to unintended filesystem locations
  • The process may make outbound requests to attacker-selected destinations
  • Build, release, or repository automation could be compromised

General mitigation guidance

Mitigation centers on treating all in-repository configuration as untrusted input and separating data parsing from executable behavior. Secure-by-default designs should reject or ignore repository-controlled settings that load modules, alter command arguments, select arbitrary output paths, or initiate network access. Configuration should use an allowlisted schema with explicit types and permitted values, while Git arguments and filesystem paths should be constructed from fixed program logic rather than concatenated input. CI workflows should isolate untrusted checkouts, avoid exposing secrets to untrusted jobs, restrict network access, and run with least privilege.

Mitigation centers on treating all in-repository configuration as untrusted input and separating data parsing from executable behavior. Secure-by-default designs should reject or ignore repository-controlled settings that load modules, alter command arguments, select arbitrary output paths, or initiate network access. Configuration should use an allowlisted schema with explicit types and permitted values, while Git arguments and filesystem paths should be constructed from fixed program logic rather than concatenated input. CI workflows should isolate untrusted checkouts, avoid exposing secrets to untrusted jobs, restrict network access, and run with least privilege.

How teams detect issues like this

Detection can include static analysis and code review rules for merging repository configuration into executable options, dynamic module loading from project paths, shell or Git argument construction from untrusted values, attacker-controlled output paths, and URL-fetching template logic. CI policy checks can flag changelog tools that process untrusted pull request content with secrets or write access. Runtime monitoring can alert on unexpected child processes, file writes outside approved directories, module loads, and outbound connections. Automated review tools may help identify these patterns, but should complement manual trust-boundary analysis.

Detection can include static analysis and code review rules for merging repository configuration into executable options, dynamic module loading from project paths, shell or Git argument construction from untrusted values, attacker-controlled output paths, and URL-fetching template logic. CI policy checks can flag changelog tools that process untrusted pull request content with secrets or write access. Runtime monitoring can alert on unexpected child processes, file writes outside approved directories, module loads, and outbound connections. Automated review tools may help identify these patterns, but should complement manual trust-boundary analysis.

Sources

SourceLink
github.comgithub.com/cookpete/auto-changelog/commit/1d02a48a0a57c69a3cd268aca375d64d50877c1a
github.comgithub.com/cookpete/auto-changelog/security/advisories/GHSA-xpvr-2hvx-m8q4

Frequently asked

questions

It can be triggered through automated repository-processing workflows when an

attacker can submit or modify repository content that the workflow checks

out and processes. Direct exploitation still depends on the tool being run

in that environment.

The attacker generally needs a way to influence the target repository's

configuration or modules, such as through an untrusted pull request or fork.

The resulting impact depends on the privileges, secrets, filesystem access,

and network permissions granted to the invoking process.

Treat repository-provided configuration as untrusted, reject

security-sensitive options by default, and permit only narrowly defined

values through an explicit allowlist and schema.

Enforce trust-boundary checks in code review and CI policy, isolate jobs that

process untrusted content, minimize credentials and filesystem permissions,

restrict network access, and monitor for unexpected module loads, process

creation, and file writes.

It can be triggered through automated repository-processing workflows when an

attacker can submit or modify repository content that the workflow checks

out and processes. Direct exploitation still depends on the tool being run

in that environment.

The attacker generally needs a way to influence the target repository's

configuration or modules, such as through an untrusted pull request or fork.

The resulting impact depends on the privileges, secrets, filesystem access,

and network permissions granted to the invoking process.

Treat repository-provided configuration as untrusted, reject

security-sensitive options by default, and permit only narrowly defined

values through an explicit allowlist and schema.

Enforce trust-boundary checks in code review and CI policy, isolate jobs that

process untrusted content, minimize credentials and filesystem permissions,

restrict network access, and monitor for unexpected module loads, process

creation, and file writes.

Find out what's already
exploitable in your codebase.