/

CVE-2026-61728

Severity:

CRITICAL RISK

(9.9)

Stored XSS (CWE-79) in SOCFortress CoPilot Portal App

CVE-2026-61728

Deferred

Vulnerability type

Category:

Stored Cross-Site Scripting

CWE:

CWE-79, CWE-922

Impact:

Persistent Cross-Site Scripting, Session Token Theft, and Account Takeover

Severity:

CRITICAL RISK

(9.9)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

SOCFortress CoPilot contains stored cross-site scripting flaws in portal fields that render user-controlled and server-stored markup without escaping or sanitization. When a victim views poisoned alert, case, asset, or health-check content, script may execute in the application origin, enabling token theft, account impersonation, and unauthorized data or incident operations.

SOCFortress CoPilot contains stored cross-site scripting flaws in portal fields that render user-controlled and server-stored markup without escaping or sanitization. When a victim views poisoned alert, case, asset, or health-check content, script may execute in the application origin, enabling token theft, account impersonation, and unauthorized data or incident operations.

Affected context

The issue occurs in customer-portal views that pass stored values to Vue's v-html rendering mechanism without a trusted sanitization boundary. Relevant data can enter through incident alert comments and may also be present in SOC case, asset, and health-check fields. The risk is greatest when analysts or administrators view attacker-controlled content and authentication tokens are accessible to JavaScript.

The issue occurs in customer-portal views that pass stored values to Vue's v-html rendering mechanism without a trusted sanitization boundary. Relevant data can enter through incident alert comments and may also be present in SOC case, asset, and health-check fields. The risk is greatest when analysts or administrators view attacker-controlled content and authentication tokens are accessible to JavaScript.

Exploit preconditions

  • Attack surface: Authenticated customer-portal alert, case, asset, and health-check views
  • Required access: Ability to submit or influence content stored in an affected record
  • Trigger point: A user views the affected record in a vulnerable portal component
  • Why exploitation is possible: Stored markup is rendered through an unsanitized HTML sink, while access and refresh tokens are available to client-side code
  • Attack surface: Authenticated customer-portal alert, case, asset, and health-check views
  • Required access: Ability to submit or influence content stored in an affected record
  • Trigger point: A user views the affected record in a vulnerable portal component
  • Why exploitation is possible: Stored markup is rendered through an unsanitized HTML sink, while access and refresh tokens are available to client-side code

Why this happens

The underlying bug is a failure to treat stored content as untrusted before rendering it as HTML. Values are transformed for display but are not contextually escaped or sanitized before reaching v-html, allowing markup and script-capable content to execute in the viewer's origin. This maps to CWE-79, Improper Neutralization of Input During Web Page Generation. The use of JavaScript-readable access and refresh token storage, associated with CWE-922, increases the consequence because injected code may access those credentials.

The underlying bug is a failure to treat stored content as untrusted before rendering it as HTML. Values are transformed for display but are not contextually escaped or sanitized before reaching v-html, allowing markup and script-capable content to execute in the viewer's origin. This maps to CWE-79, Improper Neutralization of Input During Web Page Generation. The use of JavaScript-readable access and refresh token storage, associated with CWE-922, increases the consequence because injected code may access those credentials.

Potential impact

  • An attacker may steal access and refresh tokens from affected viewers.
  • A stolen token may enable impersonation of analysts or administrators.
  • Attackers could gain unauthorized access across tenant boundaries.
  • Incident records may be modified, deleted, or otherwise manipulated.
  • Detection and response workflows could be subverted.
  • The application origin and associated user session may be compromised.
  • An attacker may steal access and refresh tokens from affected viewers.
  • A stolen token may enable impersonation of analysts or administrators.
  • Attackers could gain unauthorized access across tenant boundaries.
  • Incident records may be modified, deleted, or otherwise manipulated.
  • Detection and response workflows could be subverted.
  • The application origin and associated user session may be compromised.

General mitigation guidance

Mitigation generally focuses on eliminating unsafe HTML rendering and

reducing the value of any script that executes in the portal.

Common defensive patterns include:

  • Prefer context-aware output encoding and plain-text rendering by default.
  • When rich text is required, apply a narrowly scoped, well-maintained HTML sanitizer before rendering.
  • Enforce server-side validation and sanitization rather than relying only on client-side checks.
  • Avoid using v-html or equivalent sinks for untrusted or insufficiently trusted fields.
  • Store authentication credentials in mechanisms that are not readable by page scripts, with appropriate cookie protections where suitable.
  • Use short-lived access credentials, rotation, revocation, and narrowly scoped privileges.
  • Apply strong content security policies and frame protections as defense in depth.
  • Enforce tenant isolation and least privilege for portal actions and API tokens.

Mitigation generally focuses on eliminating unsafe HTML rendering and

reducing the value of any script that executes in the portal.

Common defensive patterns include:

  • Prefer context-aware output encoding and plain-text rendering by default.
  • When rich text is required, apply a narrowly scoped, well-maintained HTML sanitizer before rendering.
  • Enforce server-side validation and sanitization rather than relying only on client-side checks.
  • Avoid using v-html or equivalent sinks for untrusted or insufficiently trusted fields.
  • Store authentication credentials in mechanisms that are not readable by page scripts, with appropriate cookie protections where suitable.
  • Use short-lived access credentials, rotation, revocation, and narrowly scoped privileges.
  • Apply strong content security policies and frame protections as defense in depth.
  • Enforce tenant isolation and least privilege for portal actions and API tokens.

How teams detect issues like this

Organizations can identify this class of issue through:

  • Static analysis rules for v-html, innerHTML, unsafe template interpolation, and equivalent HTML sinks.
  • Code review checks tracing user and server-stored fields into browser rendering APIs.
  • Repository searches for JavaScript-readable token persistence and client-side credential access.
  • Dynamic tests that submit benign markup markers and verify contextual encoding or sanitization.
  • Content Security Policy reporting and monitoring for unexpected script execution attempts.
  • Policy enforcement in CI that blocks unsafe rendering patterns or requires approved sanitizer wrappers.
  • Automated security review tools that model data flow from storage and APIs to DOM sinks.

Organizations can identify this class of issue through:

  • Static analysis rules for v-html, innerHTML, unsafe template interpolation, and equivalent HTML sinks.
  • Code review checks tracing user and server-stored fields into browser rendering APIs.
  • Repository searches for JavaScript-readable token persistence and client-side credential access.
  • Dynamic tests that submit benign markup markers and verify contextual encoding or sanitization.
  • Content Security Policy reporting and monitoring for unexpected script execution attempts.
  • Policy enforcement in CI that blocks unsafe rendering patterns or requires approved sanitizer wrappers.
  • Automated security review tools that model data flow from storage and APIs to DOM sinks.

Sources

SourceLink
github.comgithub.com/socfortress/CoPilot/commit/461e8f84794aee8ada588de3bad79430dc9f4f3d
github.comgithub.com/socfortress/CoPilot/commit/ab9078bdee5d1c737f37f481103984665a670bdd
github.comgithub.com/socfortress/CoPilot/pull/904
github.comgithub.com/socfortress/CoPilot/pull/938
github.comgithub.com/socfortress/CoPilot/security/advisories/GHSA-8hqj-cqcc-5f6w
github.comgithub.com/socfortress/CoPilot/tree/v0.1.76

Frequently asked

questions

It can be exploitable through the portal when an attacker can submit or

influence content that is later viewed by another user. The exact scope

depends on which records and submission paths are exposed by the deployment.

Administrative access is not necessarily required to store the content.

However, a privileged user must view the poisoned record for privileged

account takeover and higher-impact administrative actions to become possible.

Render untrusted values as text by default. Where rich HTML is necessary,

enforce strict server-side validation and contextual sanitization before the

value reaches any HTML rendering sink.

Track untrusted data flows into DOM sinks during review and automated testing,

restrict JavaScript access to authentication credentials, apply strong

browser security policies, and enforce least privilege and tenant isolation.

It can be exploitable through the portal when an attacker can submit or

influence content that is later viewed by another user. The exact scope

depends on which records and submission paths are exposed by the deployment.

Administrative access is not necessarily required to store the content.

However, a privileged user must view the poisoned record for privileged

account takeover and higher-impact administrative actions to become possible.

Render untrusted values as text by default. Where rich HTML is necessary,

enforce strict server-side validation and contextual sanitization before the

value reaches any HTML rendering sink.

Track untrusted data flows into DOM sinks during review and automated testing,

restrict JavaScript access to authentication credentials, apply strong

browser security policies, and enforce least privilege and tenant isolation.

Find out what's already
exploitable in your codebase.