Skip to main content

SOCFortress CoPilot EUVDEUVD-2026-113993

| CVE-2026-61728 CRITICAL
Cross-site Scripting (XSS) (CWE-79)
2026-10-30 GitHub_M
9.9
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Recon
    Authenticate as low-privilege customer_user
  2. Delivery
    Submit stored XSS via alert comment API
  3. Exploit
    Analyst/admin views alert, v-html executes script
  4. Install
    Script reads access and refresh tokens from storage
  5. C2
    Exfiltrate tokens to attacker-controlled host
  6. Execute
    Mint fresh tokens via /auth/refresh for persistence
  7. Impact
    Cross-tenant data access, incident modification or deletion

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 portal account at the lowest role (customer_user) to write stored markup via POST /api/incidents/db_operations/alert/comment; the create route authorizes admin, analyst, and customer_user. The payload executes because AlertComment.vue binds comment.comment to v-html after only a newline-to-<br> transform, with no HTML escaping and no DOMPurify/sanitize-html dependency in either frontend or customer-portal; the same unsanitized v-html pattern affects SocCaseNote.vue, SocCaseItem.vue, SocCaseAssetsItem.vue, SocAlertAssetsItem.vue, and HealthcheckItem.vue, so poisoned comment, case, asset, or health-check fields all trigger. Full privileged account takeover additionally requires that a privileged user (analyst or administrator) views the poisoned alert or case, and depends on the tokens being stored in JavaScript-readable storage (auth.ts) and sent as bearer headers (httpClient.ts) rather than HttpOnly cookies. Limiting factors: an attacker needs a valid portal login, a higher-privilege victim must view the content for escalation, and the issue is confined to affected snapshots preceding 0.1.70 (health-check sink) and 0.1.76 (comment and other SOC sinks).

Impact

This is a genuine high-priority issue, not a CVSS-inflated one. The provided CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H, 9.9) is corroborated by the vuln.today decision label of act_now and by a reporter-confirmed, reproduced proof-of-concept in the GHSA advisory. The combination is the dangerous part: a stored XSS reachable by the lowest-privilege portal role (customer_user) that fires in the browser of whoever views the poisoned alert or case, chained with tokens (both access and refresh) held in JavaScript-readable storage (CWE-922) and sent as bearer headers rather than HttpOnly cookies. That chain converts a low-privilege input flaw into cross-tenant privileged account takeover of a security product. Signals largely agree rather than conflict. Note the gaps: no EPSS score and no CISA KEV entry are present in the input, so there is no quantitative exploitation-probability signal and no evidence of observed in-the-wild exploitation - the urgency rests on the act_now label and the confirmed working PoC, not on KEV. The PR:L in the vector means exploitation is authenticated (an attacker needs a valid, even lowest-tier, portal account); full privileged takeover additionally depends on a privileged user (analyst/admin) later viewing the poisoned content. These are realistic in a multi-tenant SOC portal but are real preconditions, not a drive-by.

Exploit ScenarioDerived

An attacker holding a low-privilege customer_user portal account submits a comment containing an HTML/JavaScript payload through POST /api/incidents/db_operations/alert/comment; the backend stores it verbatim. When a SOC analyst or administrator opens that alert, the comment is rendered via v-html without sanitization and the script runs on the application origin, reading the viewer's access and refresh tokens from JavaScript-readable storage and exfiltrating them. A public, reporter-confirmed working proof-of-concept exists - demonstrated live against the published ghcr.io/socfortress/copilot-backend image, popping document.domain from a stored comment - and the vector is network-reachable with low attack complexity (AV:N/AC:L).

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.5% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 30, 2026

Stored cross-site scripting in SOCFortress CoPilot lets any authenticated portal user, including the lowest-privilege customer_user role, plant HTML/JavaScript through POST /api/incidents/db_operations/alert/comment that is later rendered unsanitized via v-html in AlertComment.vue, executing on the application origin whenever a viewer opens the poisoned alert. Because the customer portal persists access and refresh tokens in JavaScript-readable storage and sends them as bearer headers rather than HttpOnly cookies, an injected script can read both tokens and mint fresh ones through /auth/refresh, so an analyst or administrator who views the poisoned content hands over a persistent privileged session, enabling cross-tenant data access, incident modification or deletion, and subversion of detection and response. Snapshots preceding 0.1.70 (health-check sink) and 0.1.76 (comment and other SOC sinks) are affected, the vendor advisory includes a proof-of-concept demonstrated live against the published ghcr.io/socfortress/copilot-backend image, and priority is act_now. Per the assessed vector the attacker must be authenticated (PR:L) and the issue is scored at 9.9 with scope change.

RemediationAI

Vendor-released patch: upgrade to CoPilot 0.1.76, the provisional first release containing all observed repairs; deployments that only expose the health-check rendering path should note that fix is first contained in 0.1.70, but 0.1.76 is required to cover the comment and other SOC sinks. Refer to the advisory at https://github.com/socfortress/CoPilot/security/advisories/GHSA-8hqj-cqcc-5f6w and the associated fixes in https://github.com/socfortress/CoPilot/pull/904, https://github.com/socfortress/CoPilot/pull/938, and commits 461e8f84794aee8ada588de3bad79430dc9f4f3d and ab9078bdee5d1c737f37f481103984665a670bdd. The vendor's stated fix directions are, first, render these fields as text using {{ }} interpolation with CSS white-space: pre-wrap instead of v-html with newline-to-<br> (this preserves line breaks but removes any rich-text formatting from comments and case notes); second, where HTML is genuinely required, sanitize with DOMPurify before binding to v-html and add a restrictive Content-Security-Policy as defense in depth (a strict CSP can break inline scripts or third-party widgets and requires testing); and third, move the access and refresh tokens from JavaScript-readable storage into HttpOnly, Secure, SameSite cookies so a script on the page cannot read them, which removes the path from XSS to token theft and account takeover but requires coordinated backend changes to authenticate via cookies and to handle CSRF. Because the vendor states that tokens in JavaScript-readable storage combined with bearer headers are what turns the XSS into account takeover, updating is the complete fix and partial frontend-only changes leave the credential-theft path open.

Affected VersionsENISA

CoPilot < 0.1.76

Affected Packages

euvd copilot fix: 0.1.76

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-79: in single-file Vue components such as customer-portal/src/components/alerts/AlertDetails/AlertComment.vue, the computed property commentHtml only replaces newlines with <br> and the result is bound to v-html, which deliberately renders markup rather than text. Neither frontend nor customer-portal declares DOMPurify or sanitize-html, and no global sanitizing wrapper exists, so the backend stores comment markup verbatim and the browser interprets it. The identical pattern is present in SocCaseNote.vue, SocCaseItem.vue, SocCaseAssetsItem.vue, SocAlertAssetsItem.vue and HealthcheckItem.vue, extending the sink surface to server-stored case, asset and health-check fields. The advisory also cites CWE-922 (insecure storage of sensitive information): customer-portal/src/stores/auth.ts persists the entire user object, both access_token and refresh_token, into Pinia storage that is readable from JavaScript, and customer-portal/src/api/httpClient.ts attaches the token as an Authorization bearer header instead of relying on HttpOnly, Secure, SameSite cookies, so any script on the origin can exfiltrate credentials that survive page reload and session expiry via the refresh endpoint.

Know when Copilot 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 9.9 CRITICAL
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
vuln.today AI 9.9 CRITICAL

Authenticated lowest-role write (PR:L) over the network with no special complexity (AC:L); stored payload runs on the app origin crossing the security boundary into other tenants/privileged sessions (S:C), enabling token theft and full takeover (C:H/I:H/A:H).

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Oct 30, 2026 - 16:03 EUVD
CVE Published
Oct 30, 2026 - 14:22 cve.org
CRITICAL 9.9

DescriptionCVE.org

SOCFortress CoPilot focuses on providing a single pane of glass for all your security operations needs. In affected snapshots preceding the respective 0.1.70 and 0.1.76 sink repairs, portal users, including customer_user, can submit stored markup through POST /api/incidents/db_operations/alert/comment. In customer-portal/src/components/alerts/AlertDetails/AlertComment.vue, commentHtml replaces newlines in comment.comment but passes the result to v-html without escaping or sanitizing HTML. When another user views the poisoned alert, stored script executes on the application origin; the same unsanitized rendering pattern affects server-stored SOC case, asset and health-check fields in SocCaseNote.vue, SocCaseItem.vue, SocCaseAssetsItem.vue, SocAlertAssetsItem.vue and HealthcheckItem.vue. The authentication store in customer-portal/src/stores/auth.ts persists both access and refresh tokens in JavaScript-readable storage, and customer-portal/src/api/httpClient.ts uses bearer headers rather than HttpOnly cookies. An injected script can steal both tokens, impersonate the viewer and obtain fresh tokens through /auth/refresh. If an analyst or administrator views the poisoned alert or case, this enables persistent privileged account takeover, cross-tenant data access, incident modification or deletion, and detection/response subversion. The health-check sink repair is first contained in version 0.1.70, while the comment and other SOC sink repairs are first contained in version 0.1.76. Version 0.1.76 is the provisional first release containing all observed repairs; grouped versus split CVE scope requires curator adjudication.

Technical POC Analysis

Primary bug class is CWE-79, stored cross-site scripting.

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 critical stored cross-site scripting flaw in SOCFortress CoPilot (CVSS 9.9) allows any authenticated user-even low-privilege customers-to inject persistent JavaScript that executes in the browsers of security analysts and administrators. Successful exploitation grants attackers persistent privileged sessions, enabling cross-tenant data access, incident tampering, and subversion of detection and response, putting customer data and security operations at severe risk.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include restricting portal access to trusted networks, enabling strict input sanitization on comment submissions, monitoring for anomalous token usage, and considering temporary disablement of the comment feature.

Threat Intelligence Overview

EPSS Score
0.5%
Top 60% exploitable
Prevalence
Low
niche open-source SOC/SIEM orchestration platform, limited enterprise deployment footprint
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

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 CRITICAL
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

50
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +50
PoC: 0
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.

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