
Vulnerabilidad crítica de path traversal a RCE en Jellyfin Media Server (CVSS 9.9). Incluye exploit de prueba de concepto, análisis técnico y herramientas de detección.
Una vulnerabilidad crítica de path traversal en Jellyfin Media Server permite a usuarios autenticados con el permiso "Upload Subtitles" subir archivos a ubicaciones arbitrarias del disco. Al explotar el campo Format no validado en el endpoint de subida de subtítulos, los atacantes pueden escribir archivos en ubicaciones sensibles, extraer datos confidenciales, escalar privilegios y, en última instancia, ejecutar código arbitrario como root mediante la inyección de LD_PRELOAD.
| Propiedad | Valor |
|---|---|
| ID CVE | CVE-2026-35031 |
| Puntuación CVSS | 9.9 (Critical) |
| CWE | CWE-22: Limitación incorrecta del nombre de una ruta a un directorio restringido ('Path Traversal') |
| Producto afectado | Jellyfin Media Server |
| Versiones afectadas | < 10.11.7 |
| Versión corregida | 10.11.7 y posteriores |
| Tipo de vulnerabilidad | Path Traversal + Escritura arbitraria de archivos + RCE |
| Autenticación requerida | Sí (usuario no administrador) |
| Privilegios requeridos | Permiso "Upload Subtitles" |
| Puerto predeterminado | 8096/TCP |
| Aviso de GitHub | GHSA-9p5f-5x8v-x65m |
| Estado del parche | Disponible y publicado |
| Exploit público | Sí |
Jellyfin es un servidor multimedia gratuito y de código abierto diseñado para ayudarte a gestionar y transmitir tu colección multimedia personal. Proporciona una funcionalidad similar a la de los servidores multimedia comerciales, pero con total transparencia del código fuente y control por parte de la comunidad.
Jellyfin Media Server (Port 8096)
/ | \
/ | \
Web UI REST API Media Streams
(Browser) (Authenticated) (Subtitle Upload)
|
/System/Info/Public (unauthenticated)
/Videos/{itemId}/Subtitles (vulnerable)
/Library/Collections (admin)
Client Devices > Network > Jellyfin Server > Database + Storage | /var/lib/jellyfin/ /etc/ld.so.preload (writable via vulnerability)
---
## Análisis en profundidad de la vulnerabilidad
### Análisis de la causa raíz
La vulnerabilidad existe en el endpoint de carga de subtítulos (`/Videos/{itemId}/Subtitles`), que acepta cargas de archivos y los almacena en disco. El fallo crítico radica en la validación insuficiente del parámetro del campo Format.
#### Patrón de código vulnerable
El endpoint procesa las cargas de subtítulos sin validar ni sanear adecuadamente el campo Format:```
POST /Videos/{itemId}/Subtitles HTTP/1.1
Content-Type: multipart/form-data
[Binary subtitle data]
Format: /../../../etc/ld.so.preload
Language: en
El parámetro Format está destinado a especificar el formato de subtítulos (srt, vtt, ass, etc.), pero en su lugar se trata como parte de la ruta del archivo:``` Base Path: /var/lib/jellyfin/subtitles/ User Input: /../../../etc/ld.so.preload Result: /var/lib/jellyfin/subtitles/../../../etc/ld.so.preload Resolved: /etc/ld.so.preload (via path traversal)
### Desglose de la cadena de ataque
La vulnerabilidad combina múltiples debilidades para lograr la ejecución remota de código como root:```
Step 1: Subtitle Upload with Path Traversal
POST /Videos/{itemId}/Subtitles
Format: /../../../etc/ld.so.preload
|
v
Step 2: Arbitrary File Write
Write attacker-controlled data to /etc/ld.so.preload
|
v
Step 3: File Read via .strm Files
Create .strm files pointing to sensitive paths
Extract database contents and credentials
|
v
Step 4: Database Extraction
Access /jellyfin/jellyfin.db via .strm
Extract admin user hashes
|
v
Step 5: Admin Privilege Escalation
Reset admin password or create new admin account
|
v
Step 6: RCE via LD_PRELOAD Injection
LD_PRELOAD=/path/to/malicious.so java
Arbitrary code execution as root
Input Validation Failure:
Format Field Validation: Expected: srt | vtt | ass | ssa | sub | subrip Actual: /../../../etc/ld.so.preload Result: NO VALIDATION > PATH TRAVERSAL ALLOWED
File Write Operation: String Concatenation: "/subtitles/" + user_format + ".srt" | NO CANONICALIZATION: Path component not resolved before write NO WHITELIST: Format values not restricted NO BOUNDS CHECK: ".." sequences not filtered | v Final Path: /etc/ld.so.preload (EXPLOITED)
### Explotación de LD_PRELOAD
La técnica LD_PRELOAD es un poderoso método de escalada de privilegios y ejecución de código en sistemas Linux:```
LD_PRELOAD Injection Flow:
1. Attacker writes malicious .so (shared object) to /etc/ld.so.preload
/etc/ld.so.preload contents:
/path/to/attacker.so