jellyfin
Runs Jellyfin 10.10.3, exposes port 8096 mapped to host port 8112, mounts named volumes for config/cache and a bind mount for lab output, and includes a healthcheck.
CVE-2026-35031-lab/docker-compose.yml:3-22Jellyfin: Potential RCE via subtitle upload path traversal + .strm chain
CVE-2026-35031 has a selected CVSS score of 10.0 (critical); EIP currently links 1 repository PoC and 1 lab environment.
Jellyfin is an open source self hosted media server. Versions prior to 10.11.7 contain a vulnerability chain in the subtitle upload endpoint (POST /Videos/{itemId}/Subtitles), where the Format field is not validated, allowing path traversal via the file extension and enabling arbitrary file write. This arbitrary file write can be chained into arbitrary file read via .strm files, database extraction, admin privilege escalation, and ultimately remote code execution as root via ld.so.preload. Exploitation requires an administrator account or a user that has been explicitly granted the "Upload Subtitles" permission. This issue has been fixed in version 10.11.7. If users are unable to upgrade immediately, they can grant non-administrator users Subtitle upload permissions to reduce attack surface.
| Product | Source | Version range | Status |
|---|---|---|---|
jellyfinBrowse jellyfin / jellyfin | CVE List | < 10.11.7 | affected |
The artifact is a Python-based detection script and accompanying documentation for CVE-2026-35031. The script identifies Jellyfin instances and checks their version against the vulnerable range (< 10.11.7) by querying the unauthenticated payload withheld endpoint. It also probes the subtitle upload endpoint to confirm its existence but does not upload any files or attempt to exploit the path traversal vulnerability.
No backdoor observed in reviewed code
The repository contains a Python detection scanner, a README documentation file, and a requirements file for CVE-2026-35031. The Python script performs only passive version checks and endpoint probing against a user-supplied target; it does not execute any exploit payload, establish persistence, exfiltrate data, or contain concealed harmful behavior. The README describes the vulnerability and remediation steps. No backdoor, trojan, or deceptive payload was observed.
The Python script (CVE-2026-35031_Jellyfin_RCE_detector.py) is explicitly described as a 'Detection Script' (line 3) and its behavior is limited to version checking and endpoint probing. It does not contain any code to upload a file, inject a path traversal payload, or execute commands. The README.md provides a technical writeup but the primary executable artifact is a scanner.
CVE-2026-35031_Jellyfin_RCE_detector.py:3CVE-2026-35031_Jellyfin_RCE_detector.py:71-76CVE-2026-35031_Jellyfin_RCE_detector.py:175-181CVE-2026-35031_Jellyfin_RCE_detector.py:175-181CVE-2026-35031_Jellyfin_RCE_detector.py:270-275CVE-2026-35031_Jellyfin_RCE_detector.py:89-133CVE-2026-35031_Jellyfin_RCE_detector.py:288-298CVE-2026-35031_Jellyfin_RCE_detector.py:175CVE-2026-35031_Jellyfin_RCE_detector.py:89CVE-2026-35031_Jellyfin_RCE_detector.py:39This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.
A Docker Compose environment for reproducing CVE-2026-35031, a path traversal vulnerability in Jellyfin 10.10.3 subtitle upload. It consists of a Jellyfin service and a setup service that automates initial configuration.
CVE-2026-35031-lab/README.md:1-3CVE-2026-35031-lab/docker-compose.yml:1-44The README explicitly states the environment is for reproducing CVE-2026-35031, and the Compose file and setup script are designed to deploy a vulnerable Jellyfin instance and automate configuration for the exploit exercise.
CVE-2026-35031-lab/README.md:1-3CVE-2026-35031-lab/docker-compose.yml:1-44Runs Jellyfin 10.10.3, exposes port 8096 mapped to host port 8112, mounts named volumes for config/cache and a bind mount for lab output, and includes a healthcheck.
CVE-2026-35031-lab/docker-compose.yml:3-22Runs setup.sh --configure-only after jellyfin is healthy, authenticates as admin, creates a media library, scans for the test video, and writes runtime.env with ACCESS_TOKEN, USER_ID, and ITEM_ID to the shared lab volume.
CVE-2026-35031-lab/docker-compose.yml:24-38CVE-2026-35031-lab/setup.sh:1-140Extends jellyfin/jellyfin:10.10.3, installs ffmpeg and curl, creates a minimal test video at /media/lab/cve-2026-35031.mp4, and sets permissions.
CVE-2026-35031-lab/Dockerfile:1-13Supported by supplied evidence
The lab is explicitly built to reproduce CVE-2026-35031, using the vulnerable Jellyfin 10.10.3 image and providing a path traversal payload in the README that matches the described vulnerability.
CVE-2026-35031-lab/README.md:1-3CVE-2026-35031-lab/README.md:55-70CVE-2026-35031-lab/Dockerfile:1CVE-2026-35031-lab/setup.sh:125-130CVE-2026-35031-lab/README.md:15-17CVE-2026-35031-lab/setup.sh:133-135CVE-2026-35031-lab/README.md:27-33CVE-2026-35031-lab/README.md:15-17CVE-2026-35031-lab/README.md:27-33CVE-2026-35031-lab/README.md:55-70CVE-2026-35031-lab/README.md:103-108All visible behavior is confined to the lab's own containers and volumes. The exploit writes proof files to /tmp inside the jellyfin container, which is the intended target. There is no evidence of host escape, external connections, persistence, credential theft, or destructive actions beyond the documented exercise.
CVE-2026-35031-lab/README.md:55-108CVE-2026-35031-lab/docker-compose.yml:1-44This review is limited to the supplied lab evidence packet. It does not assert that the environment runs, reproduces a vulnerability, or is safe to execute. Contract: eip-docker-lab-analysis-v1.