Plex Media Server Encoded URI Scheme Neutralization Vulnerability (CVE-2026-96654)
Detects exploitation and exposure of CVE-2026-96654, an improper neutralization of encoded URI schemes in a web page (CWE-84) affecting Plex Media Server v1.43.2 and earlier. An attacker can embed encoded URI schemes (e.g. percent-encoded or HTML-entity-encoded javascript:/data: scheme payloads) into content served by Plex Media Server's web UI, which are decoded and rendered in a victim's browser, enabling stored/reflected XSS and client-side script execution. This CVE is listed in the CISA KEV catalog. The detection surfaces vulnerable/unpatched Plex Media Server instances, suspicious requests containing encoded scheme payloads to Plex web endpoints, and anomalous child-process or outbound activity from the Plex Media Server process.
Vulnerability Intelligence
KEV — Known ExploitedAffected Software
- Vendor
- Plex
- Product
- Media Server
Weakness (CWE)
Timeline
- Disclosed
- October 20, 2026
References & Proof of Concept
- https://forums.plex.tv/t/important-security-update-for-plex-media-server-v1-43-2-and-earlier/942319
- https://www.cisa.gov/news-events/directives/bod-26-04-prioritizing-security-updates-based-risk
- https://www.cisa.gov/news-events/directives/bod-26-04-implementation-guidance-prioritizing-security-updates-based-risk
- https://nvd.nist.gov/vuln/detail/CVE-2026-96654
CVSS
What is CVE-2026-96654 Plex Media Server Encoded URI Scheme Neutralization Vulnerability (CVE-2026-96654)?
Plex Media Server Encoded URI Scheme Neutralization Vulnerability (CVE-2026-96654) (CVE-2026-96654) maps to the Initial Access and Execution tactics — the adversary is trying to get into your network in MITRE ATT&CK.
This page provides production-ready detection logic for Plex Media Server Encoded URI Scheme Neutralization Vulnerability (CVE-2026-96654), covering the data sources and telemetry it touches: W3CIISLog, Reverse proxy / web server access logs. The queries below are rated high severity at medium confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.
MITRE ATT&CK
- Tactic
- Initial Access Execution
let plexPorts = dynamic([32400]);
let encodedSchemePatterns = dynamic(["javascript%3a","java%0ascript","%6a%61%76%61%73%63%72%69%70%74","data%3atext%2fhtml","javascript","javascript","%26%23x6a","vbscript%3a"]);
W3CIISLog
| where csUriStem has_cs "/web" or csUriStem has_cs "/library" or csUriStem has_cs "/:/"
| extend decodedQuery = tolower(url_decode(csUriQuery))
| extend rawLower = tolower(strcat(csUriStem, "?", csUriQuery))
| where rawLower has_any (encodedSchemePatterns) or decodedQuery has "javascript:" or decodedQuery has "data:text/html" or decodedQuery has "vbscript:"
| where sPort in (plexPorts) or csUriStem has_cs "/:/"
| project TimeGenerated, cIP, sIP, sPort, csMethod, csUriStem, csUriQuery, decodedQuery, scStatus, csUserAgent
| sort by TimeGenerated desc Searches IIS/reverse-proxy W3C logs fronting Plex Media Server (port 32400, /web, /library, /:/ endpoints) for requests containing percent-encoded or HTML-entity-encoded javascript:/data:/vbscript: URI schemes indicative of CVE-2026-96654 exploitation attempts.
Data Sources
Required Tables
False Positives
- Security scanners and vulnerability assessment tools (Nessus, Qualys, Burp) probing the Plex web endpoint with encoded scheme payloads.
- Legitimate Plex client deep-links or share URLs that legitimately contain percent-encoded query parameters resembling scheme strings.
- Penetration testers validating the patch during an authorized engagement.
Sigma rule & cross-platform mapping
The detection logic for Plex Media Server Encoded URI Scheme Neutralization Vulnerability (CVE-2026-96654) (CVE-2026-96654) above is provided in a vendor-neutral
form so you can deploy it on any SIEM. The same logic is shipped here as native
KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the
following logsource:
logsource:
category: network_connection
product: windows Browse the community-maintained Sigma rules for this technique:
Platform-specific guides for CVE-2026-96654
References (4)
- https://forums.plex.tv/t/important-security-update-for-plex-media-server-v1-43-2-and-earlier/942319
- https://www.cisa.gov/news-events/directives/bod-26-04-prioritizing-security-updates-based-risk
- https://www.cisa.gov/news-events/directives/bod-26-04-implementation-guidance-prioritizing-security-updates-based-risk
- https://nvd.nist.gov/vuln/detail/CVE-2026-96654
Testing Methodology
Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1 Percent-encoded javascript scheme against Plex web endpoint
Expected signal: Web/proxy access log entry and Plex Media Server.log entry showing a request to /web with a percent-encoded javascript: parameter from the test user-agent.
- Test 2 Hex-encoded javascript scheme payload
Expected signal: Access log shows a /library/metadata request containing the fully percent-encoded 'javascript' token and ':' scheme.
- Test 3 HTML-entity-encoded scheme in stored metadata
Expected signal: Access log and Plex Media Server.log show a /:/ request containing the HTML-entity-encoded javascript scheme; payload may persist in the library database.
Response Playbook
Triage
- Confirm the targeted host is running Plex Media Server and determine its version; any build at or below v1.43.2 is vulnerable to CVE-2026-96654.
- Decode the suspicious URI query/parameter and confirm whether it resolves to a javascript:, data:text/html, or vbscript: scheme after decoding — a genuine encoded scheme payload indicates exploitation intent.
- Identify the source IP and user-agent; determine whether it is an authenticated Plex user, an anonymous external client, or a known scanner.
- Review the HTTP response status: a 200 with the payload reflected/stored suggests the server rendered the encoded scheme (unpatched), whereas a sanitized/neutralized response suggests the patch is applied.
Containment
- Upgrade Plex Media Server to the fixed release (post-v1.43.2) per the Plex security advisory; this is the authoritative remediation.
- If immediate patching is not possible, restrict inbound access to port 32400 to trusted networks/VPN and disable remote access in Plex settings.
- Block the offending source IP(s) at the perimeter/WAF and add a WAF rule to strip or reject encoded javascript:/data:/vbscript: schemes to the Plex web UI.
Evidence Collection
- Preserve the full web/proxy access logs containing the raw and decoded request, including headers and user-agent, for the affected time window.
- Capture the Plex Media Server application logs (Plex Media Server.log) and version string, plus any stored library/metadata content that may contain the injected encoded payload.
- If client compromise is suspected, collect browser history and any session tokens or cookies that may have been exfiltrated via the XSS.
Escalation Criteria
- ! Escalate to incident response if the server is confirmed unpatched (<= v1.43.2) AND a decoded payload rendered a script context, indicating successful client-side execution.
- ! Escalate if the same encoded-scheme payload is observed stored in library/metadata (stored XSS) affecting multiple downstream clients.
- ! Escalate if post-exploitation indicators (session token theft, outbound C2 from a victim browser, or admin account compromise) are observed.
Investigation Guide
Forensic Artifacts
- >
Plex Media Server.log entries showing requests to /web, /library, or /:/ endpoints with encoded query parameters. - >
Reverse-proxy/IIS/nginx access logs containing the raw encoded-scheme request and the HTTP response code. - >
Plex library metadata / database (com.plexapp.plugins.library.db) containing stored payloads in title or description fields.
Tuning Guidance
Baseline legitimate encoded Plex share/deep-link parameters in your environment and allowlist known scanner source IPs to reduce noise. Tighten confidence to high when the request originates from an external IP AND the server version is confirmed <= v1.43.2. If Plex is only reachable internally via VPN, scope the detection to that segment. Prefer alerting on decoded payloads rather than raw strings to catch double-encoding and HTML-entity obfuscation variants.
Hunting Queries
Hunts for any Plex web request whose URL-decoded query resolves to a dangerous URI scheme, grouped by source and user-agent to spot repeated probing or scanning.
W3CIISLog | where csUriStem has_any ("/web","/library","/:/") | extend dec=tolower(url_decode(csUriQuery)) | where dec has "javascript:" or dec has "data:text/html" or dec has "vbscript:" | summarize count() by cIP, csUserAgent, bin(TimeGenerated, 1h) index=web (uri_path="/web*" OR uri_path="/library*" OR dest_port=32400) | eval dec=urldecode(lower(uri_query)) | search dec="*javascript:*" OR dec="*data:text/html*" OR dec="*vbscript:*" | stats count by src_ip http_user_agent Atomic Red Team Tests
Sends a GET request to a lab Plex Media Server with a percent-encoded javascript: scheme in a query parameter to simulate the CVE-2026-96654 encoded-scheme injection.
Command
curl -s -k 'http://plex-lab.internal:32400/web/index.html?url=javascript%3aalert(document.cookie)' -A 'cve-2026-96654-test' Cleanup
echo 'No persistent artifact; clear any stored test entry from the Plex library if the payload was saved.' Expected Telemetry
Web/proxy access log entry and Plex Media Server.log entry showing a request to /web with a percent-encoded javascript: parameter from the test user-agent.
Expected Detection
The kql/spl/elastic_eql detections fire on the encoded 'javascript%3a' pattern in the request to port 32400.
Delivers a fully hex-percent-encoded 'javascript' token to evade naive string matching, exercising the decode-before-match logic.
Command
curl -s -k 'http://plex-lab.internal:32400/library/metadata/1?note=%6a%61%76%61%73%63%72%69%70%74%3aalert(1)' Cleanup
echo 'Remove the test metadata note from the lab library item if persisted.' Expected Telemetry
Access log shows a /library/metadata request containing the fully percent-encoded 'javascript' token and ':' scheme.
Expected Detection
Detections match the '%6a%61%76%61%73%63%72%69%70%74' hex-encoded pattern or the URL-decoded 'javascript:' string.
Submits an HTML-entity-encoded javascript scheme (javascript / j) into a Plex metadata field to simulate stored XSS via encoded-scheme neutralization bypass.
Command
powershell -c "Invoke-WebRequest -UseBasicParsing -Uri 'http://plex-lab.internal:32400/:/scrobble?title=%26%23x6a%3Bavascript%3Aalert(1)' -Headers @{'User-Agent'='cve-2026-96654-test'}" Cleanup
powershell -c "Write-Host 'Delete the test library item/metadata containing the injected entity-encoded payload.'" Expected Telemetry
Access log and Plex Media Server.log show a /:/ request containing the HTML-entity-encoded javascript scheme; payload may persist in the library database.
Expected Detection
Detections match the 'javascript' / 'javascript' HTML-entity-encoded patterns against port 32400.