Skip to main content

OpenC3 COSMOS CVE-2026-77394

| EUVDEUVD-2026-85564 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-09-23 GitHub_M GHSA-gvf2-2rh5-mpgf
7.6
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate with system_set permission
  2. Delivery
    POST crafted BUTTON action to /openc3-api/screen
  3. Exploit
    Victim operator opens shared screen and clicks button
  4. Execution
    ButtonWidget.vue evaluates script in COSMOS origin
  5. Persist
    Read localStorage.openc3Token
  6. Impact
    Exfiltrate 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

cosmos 5.0.6, < 7.3.0

Affected Packages

npm @openc3/vue-common fix: 7.3.0
euvd cosmos_5_0_6 fix: 7.3.0

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

Vendor (GitHub_M) PRIMARY 7.6 HIGH
AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N
vuln.today AI 7.6 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
High
Integrity
Low
Availability
None

Lifecycle Timeline

2
Patch available
Sep 23, 2026 - 20:03 EUVD
CVE Published
Sep 23, 2026 - 18:53 cve.org
HIGH 7.6

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Low
niche open-source satellite/aerospace ground-station command-and-control software
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

58
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

More in Cosmos

View all
CVE-2025-28386 CRITICAL POC
9.8 Jun 13

Critical remote code execution vulnerability in OpenC3 COSMOS v6.0.0's Plugin Management component that allows unauthent

CVE-2025-28388 CRITICAL POC
9.8 Jun 13

OpenC3 COSMOS versions before v6.0.2 contain hardcoded credentials embedded in the Service Account, allowing unauthentic

CVE-2025-28389 CRITICAL POC
9.8 Jun 13

Critical authentication bypass vulnerability in OpenC3 COSMOS v6.0.0 caused by weak password requirements that enable br

CVE-2025-28384 CRITICAL POC
9.1 Jun 13

Critical directory traversal vulnerability in OpenC3 COSMOS versions before 6.1.0 affecting the /script-api/scripts/ end

CVE-2025-28382 HIGH POC
7.5 Jun 13

Directory traversal vulnerability in OpenC3 COSMOS versions before 6.1.0 that allows unauthenticated remote attackers to

CVE-2025-28381 HIGH POC
7.5 Jun 13

A security vulnerability in OpenC3 COSMOS (CVSS 7.5) that allows attackers. Risk factors: public PoC available.

CVE-2025-28380 MEDIUM POC
6.1 Jun 13

A cross-site scripting (XSS) vulnerability in OpenC3 COSMOS before v6.0.2 allows attackers to execute arbitrary web scri

CVE-2026-42088 CRITICAL
9.6 May 04

Privilege escalation in OpenC3 COSMOS allows low-privileged authenticated users to bypass API authorization and perform

CVE-2026-42087 CRITICAL
9.6 May 04

SQL injection in OpenC3 COSMOS 6.7.0 to 7.0.0-rc2 allows authenticated users with minimal 'tlm' (telemetry viewer) privi

CVE-2026-77601 HIGH POC
8.8 Sep 23

Authenticated OS command injection in OpenC3 COSMOS 5.12.0 through 7.2.1 allows a user with a valid session to run arbit

CVE-2024-47529 MEDIUM POC
4.8 Oct 02

OpenC3 COSMOS provides the functionality needed to send commands to and receive data from one or more embedded systems.

CVE-2026-42084 HIGH
8.1 May 04

OpenC3 COSMOS password change functionality accepts valid session tokens in lieu of current passwords, enabling attacker

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy