auto-changelog: code execution via untrusted in-repository configuration (handlebarsSetup/plugins), plus argument injection, path traversal, and SSRF
Summary
| CVE | CVE-2026-12171 |
|---|---|
| State | PUBLISHED |
| Assigner | harborist |
| Source Priority | CVE Program / NVD first with legacy fallback |
| Published | 2026-10-05 17:17:14 UTC |
| Updated | 2026-10-05 20:17:21 UTC |
| Description | auto-changelog before 2.6.1 merges configuration from inside the target repository (the .auto-changelog file and the auto-changelog key in package.json) into its options, and honors security-sensitive options from that untrusted source. The handlebarsSetup option is passed to require(), so running auto-changelog over attacker-controlled repository content (for example, in a CI workflow that checks out an untrusted pull request head, or locally on a forked or third-party repository) executes attacker-chosen code with the privileges of the invoking user or CI job, including access to workflow secrets, without the repository dependencies ever being installed. The plugins option similarly loads attacker-controlled modules from the repository. Under the same conditions, appendGitLog/appendGitTag allow git argument injection (e.g. --output= to write arbitrary files), output allows writing attacker-influenced content to arbitrary paths, and template causes an outbound request to an attacker-chosen URL. Version 2.6.1 treats in-repository configuration as untrusted and refuses to run when it sets these options, unless the new --unsafe-config flag is passed. |
Risk And Classification
Primary CVSS: v4.0 8.4 HIGH from 7ffcee3d-2c14-4c3e-b844-86c6a321a158
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:A/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
Problem Types: CWE-22 | CWE-88 | CWE-94 | CWE-829 | CWE-918 | CWE-829 CWE-829: Inclusion of Functionality from Untrusted Control Sphere | CWE-94 CWE-94: Improper Control of Generation of Code ('Code Injection') | CWE-88 CWE-88: Improper Neutralization of Argument Delimiters in a Command ('Argument Injection') | CWE-22 CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') | CWE-918 CWE-918: Server-Side Request Forgery (SSRF)
| Version | Source | Type | Score | Severity | Vector |
|---|---|---|---|---|---|
| 4.0 | 7ffcee3d-2c14-4c3e-b844-86c6a321a158 | Secondary | 8.4 | HIGH | CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/C... |
| 4.0 | CNA | CVSS | 8.4 | HIGH | CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| 3.1 | 7ffcee3d-2c14-4c3e-b844-86c6a321a158 | Secondary | 7.8 | HIGH | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| 3.1 | CNA | CVSS | 7.8 | HIGH | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
CVSS v4.0 Breakdown
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:A/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
CVSS v3.1 Breakdown
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Vendor Declared Affected Products
| Source | Vendor | Product | Version | Platforms |
|---|---|---|---|---|
| CNA | Cookpete | Auto-changelog | affected 2.6.1 semver | Not specified |
References
| Reference | Source | Link | Tags |
|---|---|---|---|
| github.com/cookpete/auto-changelog/security/advisories/GHSA-xpvr-2hvx-m8q4 | 134c704f-9b21-4f2e-91b3-4a467353bcc0 | github.com | |
| github.com/cookpete/auto-changelog/commit/1d02a48a0a57c69a3cd268aca375d6... | 7ffcee3d-2c14-4c3e-b844-86c6a321a158 | github.com | |
| CVE Program record | CVE.ORG | www.cve.org | canonical |
| NVD vulnerability detail | NVD | nvd.nist.gov | canonical, analysis |
Vendor Comments And Credit
Discovery Credit
CNA: d00xy-hash (en)
CNA: Jordan Harband (ljharb) (en)
Additional Advisory Data
Solutions
CNA: Upgrade to auto-changelog 2.6.1 or later. Options that load code, inject git arguments, write outside the repository, or fetch URLs must now be passed on the command line; `--unsafe-config` restores the old behavior for fully trusted repositories only.
Workarounds
CNA: Do not run auto-changelog over untrusted repository content, including CI workflows that check out pull request heads from forks.