CVE-2026-77394: OpenC3 COSMOS stored cross-user XSS in BUTTON widget

CVE-2026-77394 · Severity: high · CVSS 7.6 · Published 2026-09-23

OpenC3 COSMOS is a command and telemetry system for spacecraft operations and mission control. Users with screen-editing permissions can inject malicious JavaScript into BUTTON widgets on shared telemetry screens. When other operators view and interact with these screens, the attacker's code executes in their authenticated browser sessions, allowing theft of session tokens and account takeover without any user interaction beyond normal job duties.

Technologies: Openc3 Cosmos. Vendors: npm, Openc3.

Quick answers

Is CVE-2026-77394 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-77394 being exploited in the wild.
How severe is CVE-2026-77394?
High severity, with a CVSS score of 7.6, published 23 September 2026.
Which products and versions are affected?
@openc3/vue-common (npm) >= 5.0.6, <= 7.2.1, SEMVER:introduced=5.0.6,fixed=7.3.0; Openc3 Cosmos 7.2.0 and likely earlier; code path present on main branch.
Is there a fix for CVE-2026-77394?
Yes. @openc3/vue-common (npm): upgrade to 7.3.0 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-77394 attacked?
It is attacked over the network.
Am I affected by CVE-2026-77394?
Check whether you run @openc3/vue-common (npm) or Openc3 Cosmos at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • @openc3/vue-common (npm): upgrade to 7.3.0 or later
    npm install @openc3/vue-common@7.3.0

Technical details

The vulnerability is a stored, cross-user XSS in the BUTTON widget implementation. The root cause: the BUTTON widget stores user-supplied action code as plain text in the database (no sanitization in `ScreensController#create`), then executes it via `eval()` in the browser when clicked (`ButtonWidget.vue:109`). Screens are shared across users within a scope, so JavaScript injected by user A runs in user B's authenticated session. An attacker with `system_set` permission can save a screen with a malicious BUTTON action; any user viewing that screen will execute the injected code in their security context. The payload can exfiltrate `localStorage.openc3Token` (the session bearer token) or pivot to the Script Runner for server-side code execution. The site's permissive Content-Security-Policy (`'unsafe-inline' 'unsafe-eval'`) does not block injected or eval'd code. Patch status: not yet released as of the advisory publication date.

Affected products

  • OpenC3 COSMOS 7.2.0 and likely earlier; code path present on main branch

Identifiers

  • CVE-2026-77394
  • GHSA-gvf2-2rh5-mpgf

Timeline

  • 2026-09-23: disclosed: GHSA-gvf2-2rh5-mpgf published
  • 2026-06-25: other: Vulnerability confirmed in version 7.2.0 (latest tested at disclosure)

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.