
Vulnérabilité critique de traversée de chemin menant à une exécution de code à distance (RCE) dans Jellyfin Media Server (CVSS 9.9). Comprend un exploit de preuve de concept, une analyse technique et des outils de détection.
Une vulnérabilité critique de traversée de chemin dans Jellyfin Media Server permet aux utilisateurs authentifiés disposant de l'autorisation « Télécharger des sous-titres » de placer des fichiers dans des emplacements arbitraires sur le disque. En exploitant le champ Format non validé du point de terminaison de téléchargement de sous-titres, un attaquant peut écrire des fichiers dans des zones sensibles, extraire des données confidentielles, élever ses privilèges et finalement exécuter du code arbitraire en tant que root via l'injection LD_PRELOAD.
| Propriété | Valeur |
|---|---|
| Identifiant CVE | CVE-2026-35031 |
| Score CVSS | 9.9 (Critique) |
| CWE | CWE-22 : Limitation inappropriée d'un nom de chemin vers un répertoire restreint ('Traversée de chemin') |
| Produit concerné | Jellyfin Media Server |
| Versions concernées | < 10.11.7 |
| Version corrigée | 10.11.7 et ultérieures |
| Type de vulnérabilité | Traversée de chemin + Écriture de fichier arbitraire + RCE |
| Authentification requise | Oui (utilisateur non administrateur) |
| Privilèges requis | Autorisation « Télécharger des sous-titres » |
| Port par défaut | 8096/TCP |
| Avis GitHub | GHSA-9p5f-5x8v-x65m |
| État du correctif | Disponible et publié |
| Exploit public | Oui |
Jellyfin est un serveur multimédia gratuit et open source conçu pour vous aider à gérer et diffuser votre collection multimédia personnelle. Il offre des fonctionnalités similaires aux serveurs multimédias commerciaux, mais avec une transparence totale du code source et un contrôle communautaire.
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)
---
## Analyse Approfondie de la Vulnérabilité
### Analyse de la Cause Racine
La vulnérabilité se trouve dans le point de terminaison de téléchargement de sous-titres (`/Videos/{itemId}/Subtitles`) qui accepte les téléchargements de fichiers et les stocke sur le disque. Le défaut critique réside dans la validation insuffisante du paramètre Format.
#### Schéma de Code Vulnérable
Le point de terminaison traite les téléchargements de sous-titres sans valider ou assainir correctement le champ Format :```
POST /Videos/{itemId}/Subtitles HTTP/1.1
Content-Type: multipart/form-data
[Binary subtitle data]
Format: /../../../etc/ld.so.preload
Language: en
Le paramètre Format est destiné à spécifier le format des sous-titres (srt, vtt, ass, etc.) mais est traité comme faisant partie du chemin du fichier :``` 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)
### Analyse de la chaîne d'attaque
La vulnérabilité enchaîne plusieurs faiblesses pour parvenir à une exécution de code à distance en tant que 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)
### LD_PRELOAD Exploitation
L_ technique LD_PRELOAD est une méthode puissante d'élévation de privilèges et d'exécution de code sur les systèmes 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