
Vulnerabilità critica di path traversal che consente RCE in Jellyfin Media Server (CVSS 9.9). Include exploit proof-of-concept, analisi tecnica e strumenti di rilevamento.
Una vulnerabilità critica di path traversal in Jellyfin Media Server consente agli utenti autenticati con il permesso "Upload Subtitles" di caricare file in posizioni arbitrarie del disco. Sfruttando il campo Format non validato nell'endpoint di caricamento dei sottotitoli, gli attaccanti possono scrivere file in posizioni sensibili, estrarre dati sensibili, aumentare i propri privilegi e infine eseguire codice arbitrario come root tramite l'iniezione LD_PRELOAD.
| Proprietà | Valore |
|---|---|
| ID CVE | CVE-2026-35031 |
| Punteggio CVSS | 9.9 (Critico) |
| CWE | CWE-22: Limitazione impropria del nome di un percorso a una directory ristretta ('Path Traversal') |
| Prodotto interessato | Jellyfin Media Server |
| Versioni interessate | < 10.11.7 |
| Versione corretta | 10.11.7 e successive |
| Tipo di vulnerabilità | Path Traversal + Scrittura arbitraria di file + RCE |
| Autenticazione richiesta | Sì (utente non amministratore) |
| Privilegi richiesti | Permesso "Upload Subtitles" |
| Porta predefinita | 8096/TCP |
| Advisory GitHub | GHSA-9p5f-5x8v-x65m |
| Stato della patch | Disponibile e rilasciata |
| Exploit pubblico | Sì |
Jellyfin è un server multimediale gratuito e open source progettato per aiutarti a gestire e riprodurre in streaming la tua collezione personale di contenuti multimediali. Offre funzionalità simili ai server multimediali commerciali, ma con piena trasparenza del codice sorgente e controllo da parte della community.
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)
---
## Analisi Approfondita della Vulnerabilità
### Analisi della Causa Radice
La vulnerabilità è presente nell'endpoint di caricamento dei sottotitoli (`/Videos/{itemId}/Subtitles`) che accetta il caricamento di file e li memorizza su disco. Il difetto critico risiede nella validazione insufficiente del parametro del campo Format.
#### Schema di Codice Vulnerabile
L'endpoint elabora i caricamenti di sottotitoli senza validare o sanificare adeguatamente il campo Format:```
POST /Videos/{itemId}/Subtitles HTTP/1.1
Content-Type: multipart/form-data
[Binary subtitle data]
Format: /../../../etc/ld.so.preload
Language: en
Il parametro Format è pensato per specificare il formato dei sottotitoli (srt, vtt, ass, ecc.) ma viene invece trattato come parte del percorso del file:``` 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)
### Analisi della catena di attacco
La vulnerabilità combina più debolezze per ottenere l'esecuzione remota di codice come 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)
### Sfruttamento di LD_PRELOAD
La tecnica LD_PRELOAD è un potente metodo di escalation dei privilegi ed esecuzione di codice sui sistemi 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