Description
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.
Published: 2026-09-23
Score: 7.6 High
EPSS: n/a
KEV: No
Impact: Cross-user XSS leading to bearer token theft and account takeover
Action: Immediate Patch
AI Analysis

Impact

OpenC3 COSMOS contains a stored, cross-user cross-site scripting flaw that is triggered when an authenticated actor with system_set permission stores a shared screen containing a BUTTON widget. The widget’s action script is later executed in the context of another operator’s browser session, where it runs under the COSMOS origin and can read the localStorage.openc3Token value. This allows the attacker to steal the victim’s bearer token, perform a full account takeover, and carry out any privileged action with the victim’s credentials. Affected systems are OpenC3 COSMOS releases from 5.0.6 through 7.3.0. The vulnerability is discovered in the POST /openc3-api/screen interface which allows storage of screen configurations, and in the ButtonWidget.vue component that evaluates the widget action. An authenticated user must possess system_set privileges to exploit the flaw. The CVSS score is 7.6, indicating high severity. EPSS is not available, and the vulnerability is not listed in CISA’s KEV catalog. The attack vector requires authenticated access with sufficient permissions; once the stored script is invoked, it can read local tokens and impersonate the victim. The permissive content security policy aids execution but is not the root cause. The flaw is fixed starting with version 7.3.0.

Affected Systems

The vulnerability affects OpenC3 COSMOS version 5.0.6 through 7.3.0. The affected product is OpenC3 COSMOS, a platform that manages embedded systems. The flaw is present in the POST /openc3-api/screen endpoint and the ButtonWidget.vue component used to evaluate shared screen configurations. Maintaining a version older than 7.3.0 will leave your installation exposed.

Risk and Exploitability

The CVSS score of 7.6 indicates a high severity impact. EPSS is currently unavailable, so the precise exploitation likelihood cannot be quantified, but the flaw does not rely on uncommon or advanced attacker skills. The vulnerability is not listed in the CISA KEV catalog. Exploit requires an attacker to be authenticated with system_set privileges to store a screen configuration. Once a victim’s session loads the stored screen and activates the BUTTON widget, the embedded script runs under the COSMOS origin, granting access to localStorage.openc3Token and enabling theft of bearer tokens and subsequent account takeover. The permissive content security policy facilitates execution, but the core root cause is the unvalidated execution of stored widget actions.

Generated by OpenCVE AI on September 23, 2026 at 20:51 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade OpenC3 COSMOS to version 7.3.0 or later to receive the patch that removes the vulnerable widget processing
  • If a patch cannot be applied immediately, delete or disable any shared screens that include BUTTON widgets based on the described payload
  • Restrict the system_set permission to only trusted operators and review the content security policy to limit script execution in TOCOSMOS

Generated by OpenCVE AI on September 23, 2026 at 20:51 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-gvf2-2rh5-mpgf OpenC3 COSMOS: Stored, cross-user XSS via Telemetry screen BUTTON widget
History

Wed, 23 Sep 2026 21:15:00 +0000

Type Values Removed Values Added
First Time appeared Openc3
Openc3 cosmos
Vendors & Products Openc3
Openc3 cosmos

Wed, 23 Sep 2026 20:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 23 Sep 2026 19:00:00 +0000

Type Values Removed Values Added
Description 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.
Title OpenC3 COSMOS: Stored, cross-user XSS via Telemetry screen BUTTON widget
Weaknesses CWE-79
References
Metrics cvssV3_1

{'score': 7.6, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-23T19:28:31.603Z

Reserved: 2026-08-20T19:55:27.022Z

Link: CVE-2026-77394

cve-icon Vulnrichment

Updated: 2026-09-23T19:28:25.805Z

cve-icon NVD

Status : Deferred

Published: 2026-09-23T19:19:15.343

Modified: 2026-09-23T20:17:15.660

Link: CVE-2026-77394

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-23T21:00:13Z

Weaknesses
  • CWE-79

    Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')