Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-55879

CVE-2026-55879: OpenReplay Session Replay XSS Vulnerability

CVE-2026-55879 is a stored XSS vulnerability in OpenReplay that allows attackers to inject malicious scripts via custom events, execute code in admin dashboards, and steal session tokens. This article covers technical details, affected versions, impact, and mitigation steps.

Published:

CVE-2026-55879 Overview

CVE-2026-55879 is a stored Cross-Site Scripting (XSS) vulnerability [CWE-79] in OpenReplay, a self-hosted session replay suite. The OpenReplay tracking SDK accepts custom event names and captured page URLs from any visitor using a public project key. The backend stores this input in ClickHouse without output encoding. The authenticated dashboard later renders the values through the TextEllipsis component and the event-details modal, executing attacker-controlled script in the dashboard origin. The flaw affects versions from 1.24.0 before 1.25.0 and is fixed in 1.25.0.

Critical Impact

An unauthenticated attacker can inject persistent JavaScript that executes in the dashboard, read the session JWT from localStorage, and take over authenticated dashboard accounts.

Affected Products

  • OpenReplay 1.24.0
  • OpenReplay versions between 1.24.0 and 1.25.0
  • OpenReplay tracking SDK and analytics backend

Discovery Timeline

  • 2026-07-10 - CVE-2026-55879 published to NVD
  • 2026-07-13 - Last updated in NVD database

Technical Details for CVE-2026-55879

Vulnerability Analysis

OpenReplay ingests telemetry from any visitor loading the tracking SDK with a public project key. Custom event names and captured page URLs are attacker-controllable inputs. The analytics backend persists these fields to ClickHouse without sanitizing HTML metacharacters. When a dashboard user opens the events view, the frontend renders these fields through the TextEllipsis component and the event-details modal without escaping.

The result is a stored XSS primitive that runs script in the authenticated dashboard origin. The injected script reads the session JWT from localStorage and exfiltrates it to an attacker-controlled endpoint, allowing full session hijack of any dashboard user who views the poisoned events.

Root Cause

The root cause is missing output encoding on event read paths in the analytics service. The patch centralizes sanitization by introducing a sanitizer package and invoking entry.SanitizeForHTML() before events are returned to the dashboard.

Attack Vector

The attack requires no authentication. An attacker loads the OpenReplay tracking SDK against a target project using the public project key, then emits a custom event whose name contains an HTML payload, or navigates to a URL crafted to embed script markup. When any authenticated dashboard user later views sessions or events, the payload executes.

go
// Patch: backend/pkg/analytics/events/events.go
// Applies HTML-safe encoding before events reach the dashboard
            continue
        }

+       entry.SanitizeForHTML()
+
        events = append(events, entry)
    }

Source: GitHub Commit ec41f44

go
// Patch: backend/pkg/analytics/events/model/event.go
// Imports the new centralized sanitizer package

import (
    "openreplay/backend/pkg/analytics/filters"
+   "openreplay/backend/pkg/analytics/sanitizer"
)

Source: GitHub Commit ec41f44

Detection Methods for CVE-2026-55879

Indicators of Compromise

  • Custom event names or captured URLs in ClickHouse containing <script, onerror=, onload=, or javascript: substrings.
  • Outbound requests from dashboard user browsers to unfamiliar domains carrying JWT-shaped strings in query or body parameters.
  • Dashboard sessions authenticating from new IPs or user agents shortly after event views.

Detection Strategies

  • Query ClickHouse event and page tables for HTML metacharacters (<, >, ", ') in event_name and url columns.
  • Inspect Content Security Policy violation reports from the dashboard origin for inline script blocks.
  • Review web proxy logs for tracking SDK ingest requests containing script markup in event payloads.

Monitoring Recommendations

  • Alert on anomalous dashboard API activity following event-list or event-details rendering.
  • Monitor for unusual localStorage access patterns and JWT usage from geographies or clients that differ from the account owner.
  • Track OpenReplay version strings across deployments to confirm all instances are at 1.25.0 or later.

How to Mitigate CVE-2026-55879

Immediate Actions Required

  • Upgrade all OpenReplay deployments to version 1.25.0 immediately.
  • Invalidate existing dashboard sessions and rotate JWT signing keys to void any tokens that may have been exfiltrated.
  • Audit ClickHouse event tables for stored payloads and purge malicious rows before restoring dashboard access.

Patch Information

The fix is included in OpenReplay v1.25.0. The relevant code change is tracked in commit ec41f44 and documented in the GHSA-3mfc-7hf4-jfxh advisory. The patch introduces a centralized sanitizer package and calls SanitizeForHTML() on event entries before they are returned to the dashboard.

Workarounds

  • Restrict dashboard access to trusted networks until the upgrade is applied.
  • Rotate public project keys and consider temporarily disabling ingestion from untrusted origins.
  • Deploy a strict Content Security Policy on the dashboard origin that blocks inline script execution.
bash
# Verify the installed OpenReplay version and upgrade if below 1.25.0
git -C /opt/openreplay describe --tags
helm upgrade openreplay openreplay/openreplay --version 1.25.0

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.