CVE-2026-96656

Plex Media Server External Control of File Name or Path (CVE-2026-96656)

Initial Access Collection Last updated:

Detects exploitation attempts against CVE-2026-96656, an external control of file name or path vulnerability (CWE-73) in Plex Media Server v1.43.2 and earlier. An attacker can manipulate file name or path parameters supplied to Plex Media Server HTTP endpoints to cause the service to read, write, or reference arbitrary files outside intended directories, enabling information disclosure or arbitrary file operations. This CVE is listed in CISA KEV, indicating confirmed in-the-wild exploitation. The detection surfaces path-traversal sequences, suspicious file/path parameters, and anomalous file access by the Plex Media Server process across network and host telemetry.

Vulnerability Intelligence

KEV — Known Exploited

What is CVE-2026-96656 Plex Media Server External Control of File Name or Path (CVE-2026-96656)?

Plex Media Server External Control of File Name or Path (CVE-2026-96656) (CVE-2026-96656) maps to the Initial Access and Collection 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 External Control of File Name or Path (CVE-2026-96656), covering the data sources and telemetry it touches: IIS Logs, Network/Proxy Logs, Firewall. 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 Collection
Microsoft Sentinel / Defender
kusto
let traversal = dynamic(["../","..%2f","..%252f","%2e%2e/","..\\","%2e%2e%5c","....//"]);
union isfuzzy=true
(
W3CIISLog
| where csUriStem has_any ("/library", "/media", "/photo", "/video", "/web", "/transcode") or csUriQuery has_any ("path", "file", "url", "download")
| where csUriStem has_any (traversal) or csUriQuery has_any (traversal)
| extend SourceIP = cIP, Resource = strcat(csUriStem, "?", csUriQuery), DestPort = sPort
),
(
CommonSecurityLog
| where DeviceVendor has "Plex" or DestinationPort in (32400)
| where RequestURL has_any (traversal)
| extend SourceIP = SourceIP, Resource = RequestURL, DestPort = DestinationPort
)
| summarize RequestCount = count(), SampleResources = make_set(Resource, 20), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated) by SourceIP, DestPort
| where RequestCount >= 1
| order by RequestCount desc

Identifies path-traversal and encoded traversal sequences targeting Plex Media Server HTTP endpoints (default TCP 32400) in IIS/proxy or network-firewall logs, consistent with external control of file name or path exploitation.

high severity medium confidence

Data Sources

IIS Logs Network/Proxy Logs Firewall

Required Tables

W3CIISLog CommonSecurityLog

False Positives

  • Legitimate Plex clients requesting deeply nested media library paths that contain '..' as part of a literal folder or file name
  • Vulnerability scanners and authorized penetration testing exercising traversal payloads
  • Reverse-proxy URL rewriting or encoding artifacts that inject '%2e%2e' sequences into logged URIs

Sigma rule & cross-platform mapping

The detection logic for Plex Media Server External Control of File Name or Path (CVE-2026-96656) (CVE-2026-96656) 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:


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.

  1. Test 1 Encoded path traversal against Plex library endpoint

    Expected signal: Proxy/IIS/network logs record an inbound HTTP request to port 32400 with '..%2f' traversal sequences in the URI.

  2. Test 2 Double-encoded traversal in file parameter

    Expected signal: Web/proxy logs capture an HTTP request to Plex with a '..%252f' double-encoded traversal in the path query parameter.

  3. Test 3 Raw dot-dot traversal via transcode endpoint

    Expected signal: Network/proxy telemetry records an HTTP request to port 32400 containing literal '../' traversal in the path parameter.


Response Playbook

Triage

  1. Confirm the targeted host runs Plex Media Server and determine its version; versions v1.43.2 and earlier are vulnerable to CVE-2026-96656.
  2. Extract the full requested URL/path and decode any URL-encoding to determine the exact file or directory the attacker attempted to reference outside the media library.
  3. Correlate the source IP against known Plex clients and threat intelligence; determine whether the endpoint was reachable from the internet (default port 32400).
  4. Review the HTTP response codes and byte counts for the flagged requests to assess whether the traversal succeeded (200/206 with data returned) versus was rejected (403/404).

Containment

  1. Upgrade Plex Media Server to a fixed version (later than v1.43.2) per the Plex security advisory immediately.
  2. Block inbound access to TCP 32400 from untrusted networks and disable Plex Remote Access until patched.
  3. If compromise is suspected, isolate the host from the network and preserve the Plex service for forensic review.

Evidence Collection

  1. Collect Plex Media Server access and server logs (Plex Media Server/Logs/) covering the request window.
  2. Capture IIS/reverse-proxy and firewall logs showing the source IP, requested URIs, and response sizes for the traversal attempts.
  3. Snapshot or hash any files the attacker may have read or written (config, tokens, credential stores) referenced by the traversal path.

Escalation Criteria

  • ! Escalate to incident response if traversal requests returned data (2xx with non-trivial body) indicating successful file disclosure.
  • ! Escalate if evidence shows the Plex process accessed sensitive files outside the media library (e.g., Preferences.xml, OS credential or token stores) following the request.

Investigation Guide

Forensic Artifacts

  • > Plex Media Server access logs under 'Plex Media Server/Logs/' showing traversal URIs and response sizes
  • > Plex 'Preferences.xml' and token/database files whose access timestamps changed during the request window
  • > IIS/reverse-proxy W3C logs and firewall flow records capturing the source IP and requested paths

Tuning Guidance

Baseline legitimate Plex client traffic and the media library's real directory names first, then suppress source IPs and paths matching known-good folders that literally contain dot-dot substrings. Prioritize alerts where traversal requests returned 2xx/206 with non-trivial byte counts, and raise confidence to high for internet-sourced IPs hitting port 32400. Decode URL encoding before matching to catch %2e%2e and double-encoded variants, and exclude authorized scanner source ranges.


Hunting Queries

Surfaces Plex-bound HTTP requests containing traversal sequences along with response status and byte counts to distinguish successful disclosure from blocked attempts.

Hunting — KQL
kql
W3CIISLog | where csUriQuery has_any ("path","file","url") | where csUriStem has_any ("../","%2e%2e") or csUriQuery has_any ("../","%2e%2e") | project TimeGenerated, cIP, csUriStem, csUriQuery, scStatus, scBytes | order by TimeGenerated desc
Hunting — SPL
spl
index=web OR index=proxy (dest_port=32400 OR uri=*/library*) | regex _raw="(?i)(\.\.\/|%2e%2e)" | table _time, src_ip, uri, status, bytes | sort - _time

Atomic Red Team Tests

Test 1 Encoded path traversal against Plex library endpoint
linux

Sends an HTTP request with an encoded directory-traversal sequence to the Plex Media Server library endpoint to simulate CVE-2026-96656 exploitation.

Command

bash
curl -s -o /dev/null -w '%{http_code}\n' 'http://127.0.0.1:32400/library/parts/..%2f..%2f..%2f..%2fetc%2fpasswd?X-Plex-Token=test'

Cleanup

bash
echo 'No cleanup required; request is read-only'

Expected Telemetry

Proxy/IIS/network logs record an inbound HTTP request to port 32400 with '..%2f' traversal sequences in the URI.

Expected Detection

The kql/spl/network queries flag the traversal payload against the Plex endpoint.

Test 2 Double-encoded traversal in file parameter
windows

Issues a request with a double-encoded traversal sequence in a file/path parameter to test detection of obfuscated CVE-2026-96656 payloads.

Command

powershell
powershell -c "try { Invoke-WebRequest -UseBasicParsing -Uri 'http://127.0.0.1:32400/web/index.html?path=..%252f..%252f..%252fWindows%252fwin.ini' } catch { $_.Exception.Response.StatusCode.value__ }"

Cleanup

powershell
Remove-Item -ErrorAction SilentlyContinue $null

Expected Telemetry

Web/proxy logs capture an HTTP request to Plex with a '..%252f' double-encoded traversal in the path query parameter.

Expected Detection

Queries matching %252f double-encoded sequences flag the request.

Test 3 Raw dot-dot traversal via transcode endpoint
macos

Sends a raw (unencoded) directory-traversal payload to the Plex transcode endpoint to exercise plain-text traversal detection.

Command

bash
curl -s -o /dev/null -w '%{http_code}\n' 'http://127.0.0.1:32400/video/:/transcode/universal/start?path=../../../../etc/hosts'

Cleanup

bash
echo 'No cleanup required; request is read-only'

Expected Telemetry

Network/proxy telemetry records an HTTP request to port 32400 containing literal '../' traversal in the path parameter.

Expected Detection

Queries matching raw '../' sequences against the Plex endpoint raise an alert.

Related Detections