highCVSS 8.7Vulnerability

CVE-2026-77615

## Summary The Opencast Paella player renders caption cue text into `innerHTML` without escaping. The captions canvas clears `_captionsContainer.innerHTML` and then appends each active cue with `_captionsContainer.innerHTML += cue`, so HTML inside a WebVTT or DFXP cue becomes live DOM and executes in the Opencast origin. The caption track is read from any media package element with a `captions/*` flavor and is served, with the player manifest, to anonymous viewers through `/search/episode.json`. The caption plugins that consume it are enabled in the default player configuration, the "Subtitles" upload that produces a `captions/source` track is active by default, and no caption processing step escapes the cue text. A user who can upload a subtitle to an event and publish it stores the payload in the published caption file. Any viewer who opens the event and turns captions on runs the script. Result: a non-admin content author stores JavaScript in a subtitle cue that executes in the browser session of every viewer who enables captions on that event, including anonymous viewers and authenticated staff. ## Affected opencast/opencast, `engage-paella-player` module. Supported release lines 19.x and 20.x are affected (and 18.x). Live-confirmed on 18.8 (Paella 7, paella-core 1.50.2) and 20.0 (Paella 8, paella-core 1.50.4); 19.5 ships the code-identical caption path (paella-core 1.50.4, same `EpisodeConversor` and default plugin config as 20.0). The captions canvas uses the same `innerHTML += cue` sink across these versions. Default configuration: the WebVTT and DFXP caption plugins are `enabled: true` in `etc/ui-config/mh_default_org/paella7/config.json`, the "Subtitles" upload option (`captions/source`, `.vtt`) is active in `etc/listproviders/event.upload.asset.options.properties`, and the `fast` workflow publishes `captions/*` to the engage player. Condition: an event with a caption track published to the engage player. No non-default flag required. ## Root cause

Properties

ghsa_id
GHSA-m6c8-jcw2-5r25
severity
high
summary
Opencast: Stored XSS in Paella player via WebVTT/DFXP caption cue text
cvss_score
8.7
cve_id
CVE-2026-77615
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
signal_observed_at
2026-09-18T13:45:58+00:00
is_ghsa_only
false
ghsa_published
2026-09-18T13:11:59Z
source_url
https://github.com/advisories/GHSA-m6c8-jcw2-5r25
ghsa_updated
2026-09-18T13:12:03Z

Related Entities (6)

VULNERABLE_TO (2)

[Software]npm/paella-core
[Software]maven/org.opencastproject:opencast-engage-paella-player-7

AFFECTS (2)

[Software]npm/paella-core
[Software]maven/org.opencastproject:opencast-engage-paella-player-7

HAS_WEAKNESS (1)

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

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-77615 (CVSS 8.7) — Ninja Signal Threat Intelligence | Ninja Signal