Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain project Manager/Owner account
-
DeliverySubmit repository with git_url '--upload-pack=/tmp/evil.sh'
-
Exploitgit ls-remote parses value as option
-
ExecutionScheduled polling triggers execution
-
PersistArbitrary OS commands run as Semaphore process
-
ImpactFull server/host compromise
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated account holding the project Manager or Owner role (PR:L); it is not exploitable by anonymous or read-only users. The attacker sets the repository git_url to a value beginning with a dash - specifically a git option such as '--upload-pack=<path/script>' or '-oProxyCommand=<cmd>' - via POST /api/project/{id}/repositories. Execution occurs when Semaphore invokes git ls-remote for that repository, either at save time or through scheduled commit-hash polling, so no victim interaction is needed. Exploitation is limited to versions before 2.18.17 / 2.19.5-beta2; patched builds reject dash-prefixed URLs and append '--end-of-options'. |
| Impact | The signals are largely consistent and point to a genuine high priority. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H, 9.9) reflects network reachability, low complexity, only project-level privileges, no user interaction, and full host compromise with a scope change as code escapes the application into the server OS. The one important nuance is PR:L: exploitation is NOT unauthenticated - an attacker must already hold a Manager or Owner role on a project, which narrows the practical threat to insiders or attackers who have compromised such an account. Offsetting that, the scheduled commit-hash polling path means the payload executes on a timer with no additional interaction, raising reliability. No EPSS score, KEV entry, or SSVC decision data was provided, and no public exploit was identified at analysis time, so I cannot cite an exploitation-probability figure; the absence of KEV suggests no confirmed active exploitation, but the public advisory and fix commits make the technique easy to reconstruct. Given self-hosted Semaphore instances often run with broad access to CI/CD credentials and target infrastructure, even a mid-sized operator should treat this as urgent and patch promptly rather than relying on the privilege requirement as a durable barrier. |
| Exploit ScenarioDerived | An authenticated user with Manager or Owner rights on any project creates or edits a repository and sets git_url to '--upload-pack=/tmp/evil.sh' (or points it at an attacker-staged script). When Semaphore next runs ls-remote - either immediately on save or during scheduled commit-hash polling - git interprets the value as an option and executes the referenced program as the Semaphore server process, yielding arbitrary OS command execution. No public exploit was identified at analysis time, but the fix commits and advisory disclose the exact payload pattern. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
Argument (git option) injection in Semaphore UI before 2.18.17 and 2.19.5-beta2 lets a project Manager or Owner achieve OS command execution on the server by supplying a repository git_url beginning with a dash (e.g. --upload-pack=/tmp/evil.sh). The malicious URL is passed as a positional argument to the git binary via CmdGitClient.GetLastRemoteCommitHash, triggered both by POST /api/project/{id}/repositories and by scheduled commit-hash polling, so exploitation can fire automatically without further attacker action. No public exploit identified at time of analysis, though the fixing commits and a detailed GHSA advisory publicly document the mechanism.
RemediationAI
Vendor-released patch: upgrade to Semaphore UI 2.18.17 (stable) or 2.19.5-beta2 (pre-release), which add server-side ValidateGitURL rejection of dash-prefixed repository URLs and pass '--end-of-options' to git before the URL in clone/pull/ls-remote operations; see GHSA-xp7j-h7jc-4w8p and commits 7e8a9434bd81b82cf42220151c74801ea97542d6 and a7a7a33a64aea382a0726b3722856f298663eacf. If you cannot patch immediately, restrict who holds project Manager and Owner roles to trusted operators only (the sole prerequisite for exploitation), audit existing repository definitions for any git_url beginning with '-' and remove them, and consider disabling or pausing scheduled commit-hash polling to remove the automatic trigger path - noting the trade-off that polling-based auto-updates of repository state will stop until re-enabled. Network-restricting the Semaphore admin/API surface to trusted management networks further limits who can reach POST /api/project/{id}/repositories.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 3 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Semaphore UI is an open-source web front-end for orchestrating DevOps tooling (Ansible, Terraform, bash, etc.), which stores per-project git repository definitions and periodically polls them for the latest commit hash. The flaw is CWE-78 (OS Command Injection), but more precisely a git argument-injection variant: the CmdGitClient shells out to the git binary and placed the user-controlled repository URL as a positional argument to commands like 'ls-remote' without an option terminator. Because git interprets any argument starting with '-' as an option, a value such as '--upload-pack=<script>' or '-oProxyCommand=<cmd>' is parsed as a flag that causes git to execute an attacker-named program. The remediation adds ValidateGitURL (rejecting URLs whose trimmed value starts with '-') and inserts a '--end-of-options' separator before the URL in Clone/pull/ls-remote invocations. The affected CPE is cpe:2.3:a:semaphoreui:semaphore:*.
Know when Semaphore gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Network-reachable API with low complexity and no UI; requires project Manager/Owner so PR:L; git option injection yields OS command execution escaping the app to the host, giving S:C and full C/I/A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Semaphore UI is a web interface for managing DevOps tools. Prior to 2.18.17 and 2.19.5-beta2, repository git_url handling passes an attacker-controlled --upload-pack option to CmdGitClient.GetLastRemoteCommitHash through POST /api/project/{id}/repositories and scheduled commit-hash polling, allowing a project Manager or Owner to execute arbitrary OS commands in the Semaphore server process. This issue is fixed in versions 2.18.17 and 2.19.5-beta2.
Executive ViewAI
Semaphore CI/CD platform versions prior to 2.18.17 and 2.19.5-beta2 contain a critical argument injection vulnerability that allows project managers and owners to execute arbitrary operating system commands on the deployment server. An attacker can exploit this through malicious git repository URLs to achieve complete server compromise, exposing build artifacts, deployment credentials, and connected production systems to unauthorized access and manipulation. This vulnerability directly threatens the integrity and confidentiality of all applications and infrastructure managed through affected Semaphore instances.
No vendor-released patch identified at time of analysis. Implement git URL input validation and sanitization to reject or escape any git_url parameter beginning with a dash character; restrict project manager role assignments to minimize attack surface; disable automated scheduled commit-hash polling operations if operationally feasible; deploy Web Application Firewall (WAF) rules to inspect and block suspicious POST /api/project/{id}/repositories requests; segment network access to limit Semaphore server command execution capabilities; and implement enhanced logging and alerting on CmdGitClient.GetLastRemoteCommitHash operations.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
Password takeover in Semaphore UI prior to version 2.18.21 enables an unauthenticated attacker to reset any authenticate
Semaphore UI through 2.19.12 fails to enforce project-level resource permissions on GET and HEAD requests in its GetMust
Remote code execution in Semaphore prior to version 2.18.20 allows authenticated project Managers and Owners to execute
Privilege escalation in Semaphore UI allows an authenticated project manager to gain owner-level project control by expl
Same weakness CWE-78 – OS Command Injection
View allSame technique Command Injection
View allVendor StatusVendor
SUSE
Severity: Critical| Product | Status |
|---|---|
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
EUVD-2026-57320
GHSA-xp7j-h7jc-4w8p
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB