Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with system_set permission
-
DeliveryPOST crafted BUTTON action to /openc3-api/screen
-
ExploitVictim operator opens shared screen and clicks button
-
ExecutionButtonWidget.vue evaluates script in COSMOS origin
-
PersistRead localStorage.openc3Token
-
ImpactExfiltrate bearer token, take over victim account
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, 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 system_set permission to store the malicious shared screen via POST /openc3-api/screen (PR:L), AND a separate victim operator must open that shared screen and activate the BUTTON widget for the stored action to be evaluated by ButtonWidget.vue (UI:R). Affected only in OpenC3 COSMOS versions 5.0.6 up to but not including 7.3.0. Exploitation is aided by the permissive default content security policy, which permitted inline script execution; the 7.3.0 fix both sanitizes the button action and removes 'unsafe-inline' from script-src. The dependence on a pre-existing privileged account plus a privileged victim's click meaningfully limits realistic exploitation. |
| Impact | The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N = 7.6 High) describes a network-exploitable stored XSS requiring low privileges (an authenticated actor holding the system_set permission) plus victim user interaction (a second operator clicking the malicious BUTTON widget). The scope change (S:C) and C:H are justified because the injected script executes in the COSMOS origin and steals localStorage.openc3Token, crossing from the attacker's authorization context into the victim operator's session, yielding token theft and account takeover. No EPSS score, KEV listing, or public POC is provided in the input, so there is no public exploit identified at time of analysis and no evidence of active exploitation - the risk is real but conditional rather than mass-exploitable. This is a legitimate priority for the specific population that runs COSMOS ground-station consoles, but the twin gating factors (attacker must already hold system_set, and a privileged victim must activate the malicious button) plus the niche deployment footprint keep real-world blast radius narrow. The permissive content security policy is noted by the vendor as a contributing (not root-cause) factor; the fix both sanitizes the sink and hardens CSP by removing 'unsafe-inline' (externalizing the import map and bootstrap script). |
| Exploit ScenarioDerived | An authenticated user with system_set permission uses POST /openc3-api/screen to store a shared screen whose BUTTON widget action contains a malicious script payload. A second, higher-privileged operator later opens that shared screen and clicks the button; ButtonWidget.vue evaluates the action in that operator's browser, the script reads localStorage.openc3Token, and the attacker exfiltrates the bearer token to take over the victim's account and act with their privileges. No public POC is referenced, though the vendor advisory (GHSA-gvf2-2rh5-mpgf) and fixing PR #3560 document the mechanism precisely. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 23, 2026
OpenC3 COSMOS versions 5.0.6 through 7.2.x contain a stored cross-site scripting flaw in the shared-screen BUTTON widget, allowing an authenticated actor with the system_set permission to persist a malicious action through POST /openc3-api/screen that is later evaluated in a different operator's browser when they open the shared screen and click the button. Successful execution runs attacker-controlled script in the COSMOS origin, reads localStorage.openc3Token, and steals the victim operator's bearer token, enabling account takeover and any action the victim could perform. The assessed vector (AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N, 7.6 High) reflects that a privileged authoring account plus a second operator's click are both required, and no public exploit code or confirmed active exploitation has been identified at time of analysis. The default permissive content security policy (which allowed inline script) made execution easier, but the root cause is the unsanitized button action; the issue is fixed in version 7.3.0.
RemediationAI
Vendor-released patch: 7.3.0 - upgrade OpenC3 COSMOS to v7.3.0 or later per https://github.com/OpenC3/cosmos/releases/tag/v7.3.0, which sanitizes the stored BUTTON widget action and simultaneously removes 'unsafe-inline' from the CSP script-src by externalizing the SystemJS bootstrap and import map into /js/bootstrap.js and /js/importmap.json (tracked in https://github.com/OpenC3/cosmos/pull/3560 and commit 10371f8f410b9ad588f98dfa3befaaacb6587cd3). If upgrading immediately is not possible, apply compensating controls with awareness of their trade-offs: tighten the served Content-Security-Policy to drop 'unsafe-inline' from script-src (this materially reduces the risk of the injected action executing, but if you have not also applied the 7.3.0 externalized bootstrap/import map you must inline nothing - inline scripts will break and the UI may fail to load, so this is only realistic on builds that already externalize those assets); restrict the system_set permission so that only the smallest necessary set of trusted accounts can create or modify shared screens via POST /openc3-api/screen (this removes the authoring capability from lower-trust users but does not stop a privileged insider); treat shared screens from other operators as untrusted and inspect/limit screen imports until patched (reduces victim exposure, at the cost of collaboration workflows); and shorten browser session/token lifetimes or force re-authentication so a stolen localStorage.openc3Token has a smaller window of use, while accepting increased operator friction. Because the impact depends on a second operator clicking the malicious button, training operators to avoid activating unexpected BUTTON widgets on shared screens provides marginal, non-technical mitigation only.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
COSMOS is a command-and-control framework whose web UI is built on a single-spa shell with Vue 3, Vuetify, Vuex/Pinia, and SystemJS module loading (per the project's index.html and shared dependency import map). The vulnerability is CWE-79 (Improper Neutralization of Input During Web Page Generation), specifically a stored/persistent XSS class: the BUTTON widget action stored via POST /openc3-api/screen is not sanitized on write or on render, and is subsequently evaluated by openc3-cosmos-init/plugins/packages/openc3-vue-common/src/widgets/ButtonWidget.vue inside the browser session of whichever operator activates the button. Because the injected code executes in the COSMOS origin, it has same-origin access to localStorage.openc3Token, the bearer credential used for API authentication - converting a UI-level injection into full session/token theft. The 7.3.0 fix (GitHub PR #3560, commit 10371f8f410b9ad588f98dfa3befaaacb6587cd3) is defense-in-depth on two layers: it removes 'unsafe-inline' from the Content-Security-Policy script-src by externalizing the inline SystemJS bootstrap and import map into /js/bootstrap.js and /js/importmap.json, renames the Vue bundle reference to vue.runtime.global.prod-3.5.39.min.js in the import map, and adjusts the axios response interceptor so HazardousError (409) and CriticalCmdError (428) command-control signals are not swallowed by the generic error banner. The CPE cpe:2.3:a:openc3:cosmos:*:*:*:*:*:*:*:* with the version range 5.0.6 to <7.3.0 defines the affected footprint.
Know when Cosmos 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:R/S:C/C:H/I:L/A:N
Authenticated system_set actor stores payload (PR:L), victim must click the button (UI:R), stored script escapes to another operator's session (S:C) and steals the token (C:H); minor I:L, no A impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
OpenC3 COSMOS provides the functionality needed to send commands to and receive data from one or more embedded systems. From 5.0.6 until 7.3.0, an authenticated actor with system_set permission can store a shared screen through POST /openc3-api/screen whose BUTTON widget action is evaluated by openc3-cosmos-init/plugins/packages/openc3-vue-common/src/widgets/ButtonWidget.vue in another operator's browser session when the button is activated. The stored script runs in the COSMOS origin and can read localStorage.openc3Token, allowing theft of the victim's bearer token, account takeover, and actions with the victim's privileges. The permissive content security policy contributes to execution but is not the primary root cause. This issue is fixed in version 7.3.0.
Technical POC Analysis
Stored, cross-user XSS (CWE-79) compounded by code injection through eval() (CWE-94), with a permissive CSP as a contributing factor (CWE-1021/CWE-693).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A stored cross-site scripting flaw in OpenC3 COSMOS versions 5.0.6 through 7.2.x allows a user holding the privileged system_set permission to plant a malicious button action in a shared mission-operations screen, which then executes in another operator's browser and steals their authentication token. Because COSMOS is typically used to command and monitor spacecraft and other critical systems, a stolen operator token could let an attacker issue commands or alter telemetry views under the victim's identity, directly threatening mission integrity. Leadership should care because the affected population is small but highly privileged, no vendor patch is currently available, and the required authoring permission is exactly the kind granted to trusted engineers, making insider or compromised-credential abuse the primary concern rather than broad internet-scale attack.
No vendor-released patch identified at time of analysis. Interim mitigations: tighten the Content Security Policy to block inline script, minimize and monitor accounts holding system_set, audit and remove untrusted shared-screen BUTTON actions, shorten token lifetimes and force re-authentication, restrict API access to trusted networks, and alert on anomalous token usage or screen modifications.
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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Critical remote code execution vulnerability in OpenC3 COSMOS v6.0.0's Plugin Management component that allows unauthent
OpenC3 COSMOS versions before v6.0.2 contain hardcoded credentials embedded in the Service Account, allowing unauthentic
Critical authentication bypass vulnerability in OpenC3 COSMOS v6.0.0 caused by weak password requirements that enable br
Critical directory traversal vulnerability in OpenC3 COSMOS versions before 6.1.0 affecting the /script-api/scripts/ end
Directory traversal vulnerability in OpenC3 COSMOS versions before 6.1.0 that allows unauthenticated remote attackers to
A security vulnerability in OpenC3 COSMOS (CVSS 7.5) that allows attackers. Risk factors: public PoC available.
A cross-site scripting (XSS) vulnerability in OpenC3 COSMOS before v6.0.2 allows attackers to execute arbitrary web scri
Privilege escalation in OpenC3 COSMOS allows low-privileged authenticated users to bypass API authorization and perform
SQL injection in OpenC3 COSMOS 6.7.0 to 7.0.0-rc2 allows authenticated users with minimal 'tlm' (telemetry viewer) privi
Authenticated OS command injection in OpenC3 COSMOS 5.12.0 through 7.2.1 allows a user with a valid session to run arbit
OpenC3 COSMOS provides the functionality needed to send commands to and receive data from one or more embedded systems.
OpenC3 COSMOS password change functionality accepts valid session tokens in lieu of current passwords, enabling attacker
EUVD-2026-85564
GHSA-gvf2-2rh5-mpgf
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB