Offre Durée limitée : -10% sur tout le site* avec le code ELYPSEWELCOME10

Corriger la faille PixelSmash (CVE-2026-8461) de FFmpeg sur Jellyfin, Nextcloud et Immich

Mis à jour le 12 novembre 2026 22 min de lecture 12 sections

PixelSmash (CVE-2026-8461) : ce que fait la faille

PixelSmash est le nom donné par les chercheurs de JFrog à la vulnérabilité CVE-2026-8461 : une écriture hors limites dans le tas (heap out-of-bounds write, le tas étant la zone de mémoire vive, la RAM, que le programme réserve à la volée) du décodeur MagicYUV de libavcodec, la bibliothèque de décodage de FFmpeg. Son score CVSS 3.1 est de 8.8 (élevé), avec un vecteur réseau, sans authentification, mais qui demande qu'un fichier piégé soit traité. MagicYUV est un codec vidéo sans perte. Son décodeur est compilé par défaut dans FFmpeg et dans les paquets des grandes distributions Linux : tout programme qui confie un fichier vidéo à FFmpeg peut donc déclencher la faille, même si vous n'avez jamais manipulé de MagicYUV.

Le déclencheur est un fichier vidéo piégé dans un conteneur AVI, MKV ou MOV (le décodeur n'accepte pas le MP4). La cause est une incohérence d'arrondi : quand l'en-tête du flux annonce une hauteur de tranche impaire, le calcul de la hauteur des plans de chrominance dépasse la mémoire réservée, et le décodeur écrit une ligne de pixels au-delà du tampon. Cette hauteur est lue dans le fichier lui-même, donc l'attaquant la choisit.

Pour qui administre un serveur, le point critique est l'absence de clic. Un serveur multimédia ou un cloud personnel analyse chaque nouvelle vidéo tout seul : extraction des métadonnées avec ffprobe, génération de miniatures, transcodage. Le fichier piégé est décodé dès qu'il arrive sur le disque, que ce soit par un envoi d'utilisateur ou par une chaîne de téléchargement automatisée. Ce tutoriel s'adresse aux admins qui hébergent Jellyfin, Nextcloud ou Immich sur un VPS Linux ou un serveur dédié. Il couvre aussi les cas moins visibles : un FFmpeg installé à la main depuis une archive, un serveur Jellyfin sous Windows ou sur un Raspberry Pi, et le poste de travail sous Windows, macOS ou Linux depuis lequel vous ouvrez les fichiers suspects.

Le calendrier de la divulgation, d'après le rapport de JFrog :

  • 13 mai 2026 : signalement à l'équipe sécurité de FFmpeg ;
  • 24 au 26 mai 2026 : signalement à Jellyfin, puis à Immich, Nextcloud (par son programme de bug bounty), mpv, OBS Studio et PhotoPrism ;
  • 17 juin 2026 : sortie de FFmpeg 8.1.2, première version corrigée de la branche 8.1 ;
  • 18 juin 2026 : publication de la CVE ;
  • 22 juin 2026 : publication du rapport technique de JFrog.

Quel risque réel : RCE démontrée, déni de service partout

JFrog a démontré une exécution de code à distance (RCE) sur deux logiciels auto-hébergés. Sur Jellyfin 10.11.9, avec son FFmpeg maison jellyfin-ffmpeg 7.1.3, le code s'exécute pendant le scan automatique de la bibliothèque, avec les droits de l'utilisateur système jellyfin. Sur Nextcloud, il s'exécute sous www-data quand le fournisseur d'aperçus vidéo est activé. Ce compte lit config/config.php, qui contient les identifiants de la base MySQL, MariaDB ou PostgreSQL de l'instance : une prise de contrôle de ce processus donne donc accès aux données de tous les utilisateurs. Le scénario décrit pour Jellyfin parle à tous ceux qui alimentent leur médiathèque automatiquement : un fichier piégé récupéré par Sonarr ou Radarr puis déposé dans un dossier surveillé suffit.

Le rapport pose une limite qu'il faut citer : ces RCE ont été obtenues avec l'ASLR désactivé. L'exploit repose sur des adresses fixes et ne fonctionne pas avec la randomisation de l'espace d'adressage, active par défaut sur Linux. Le déni de service, lui, ne dépend pas de l'ASLR : le processus qui décode le fichier plante ou corrompt sa mémoire sur tous les logiciels testés. Jellyfin et Emby ont même terminé l'analyse avec un code de sortie 0 et sans message d'erreur, malgré la corruption du tas. Un serveur qui n'a pas planté n'est donc pas forcément un serveur sain.

Logiciel testé par JFrog FFmpeg utilisé Résultat observé Condition d'exposition
Jellyfin 10.11.9jellyfin-ffmpeg 7.1.3 embarqué (ffprobe)RCE avec ASLR désactivé, corruption silencieuse sinonScan automatique de la bibliothèque
NextcloudFFmpeg du systèmePlantage, RCE avec ASLR désactivéFournisseur d'aperçus OC\Preview\Movie activé (il ne l'est pas par défaut)
ImmichFFmpeg de l'image Docker (transcodage)Arrêt du processus FFmpeg (SIGABRT) : déni de serviceEnvoi d'une vidéo piégée par un utilisateur
Emby 4.8.11emby-ffmpeg 5.1 embarquéCorruption du tas silencieuseAnalyse du fichier
PhotoPrismFFmpeg appelé pour extraire l'image d'aperçu des vidéosArrêt du processus (SIGABRT)Indexation d'une vidéo piégée
Kodi, mpv, OBS Studiolibavcodec du systèmePlantageOuverture du fichier
ffmpegthumbnailer (miniatures des bureaux GNOME, KDE, XFCE)libavcodec du systèmeErreur de segmentation (SIGSEGV)Simple affichage du dossier qui contient le fichier
Plex Media ServerFFmpeg compilé avec une liste blanche de décodeursNon concernéAucune

Ce tableau montre aussi pourquoi la correction n'est pas uniforme. Jellyfin et Immich apportent leur propre FFmpeg : mettre à jour le paquet ffmpeg du système ne les corrige pas. Nextcloud appelle le binaire du système : c'est la distribution qui livre le correctif, pas Nextcloud. JFrog rapporte d'ailleurs que l'équipe de Nextcloud a classé le signalement comme hors de son périmètre, puisque le défaut se trouve dans FFmpeg. Le rapport cite enfin VLC parmi les lecteurs de bureau qui embarquent FFmpeg, sans publier de résultat de test pour lui : nous y revenons dans la partie consacrée aux postes de travail.

Diagnostic : votre serveur est-il exposé ?

Un même serveur contient souvent plusieurs copies de FFmpeg : celle de la distribution, celle de Jellyfin dans /usr/lib/jellyfin-ffmpeg/, et une par conteneur Docker. Il faut les inventorier toutes. Connectez-vous au serveur en SSH : tous les contrôles de ce tutoriel se font dans un terminal, en ligne de commande. Commencez par l'hôte :

command -v ffmpeg && ffmpeg -version | head -n 1
ls -l /usr/lib/jellyfin-ffmpeg/ffmpeg 2>/dev/null
dpkg -l | grep -E 'ffmpeg|libavcodec'

Le gestionnaire de paquets ne connaît que ce qu'il a installé. Un binaire copié depuis une archive statique, ou déposé par un script d'installation, lui échappe : listez tous les ffmpeg présents dans le PATH et sur le disque.

type -a ffmpeg ffprobe
sudo find / -xdev -type f \( -name ffmpeg -o -name ffprobe \) 2>/dev/null

Vérifiez ensuite que le décodeur vulnérable est bien compilé dans chaque binaire trouvé. C'est la commande proposée par JFrog :

ffmpeg -decoders 2>/dev/null | grep magicyuv
/usr/lib/jellyfin-ffmpeg/ffmpeg -decoders 2>/dev/null | grep magicyuv

Une ligne VFS..D magicyuv signifie que le décodeur est présent : c'est alors la version qui décide (section suivante). Aucune ligne : ce binaire n'est pas concerné par PixelSmash. Faites de même dans les conteneurs. Listez-les, puis interrogez le FFmpeg de chacun (les noms jellyfin et immich_server sont ceux des fichiers Compose courants, adaptez-les) :

docker ps --format '{{.Names}}\t{{.Image}}'
docker exec jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -version | head -n 1
docker exec immich_server ffmpeg -version | head -n 1

Dernier contrôle, l'ASLR, dont dépend la différence entre un plantage et une prise de contrôle :

sysctl kernel.randomize_va_space

La valeur 2 correspond à la randomisation complète, réglage par défaut des noyaux Debian et Ubuntu. La valeur 0 désactive l'ASLR, la condition des RCE démontrées : cherchez la ligne responsable dans /etc/sysctl.conf et /etc/sysctl.d/ (les fichiers de ce dossier sont appliqués à chaque boot) et supprimez-la. Un ASLR actif ne dispense pas du correctif, il ne fait que limiter l'impact au déni de service connu à ce jour.

Versions corrigées : FFmpeg, jellyfin-ffmpeg, Debian et Ubuntu

Le correctif amont est un contrôle ajouté dans le décodage des tranches MagicYUV (commit c23d4da3, demande de fusion 23159). La page sécurité de FFmpeg et le suivi de sécurité Debian le rattachent aux versions suivantes. État au 12 novembre 2026 :

Composant Version corrigée Encore vulnérable
FFmpeg amont8.1.2 et suivantes (8.1.3, 9.0), 8.0.3, 7.1.5, 5.1.108.1.1 et antérieures de la branche 8.1, versions sans rétroportage
jellyfin-ffmpeg (Jellyfin, Immich)7.1.4-1 (25 mai 2026) et suivantes, 8.1.1-1 (28 mai 2026) et suivantes7.1.3-6 et antérieures
Debian 13 trixie7:7.1.5-0+deb13u1 (DSA-6361-1 du 22 juin 2026)Versions antérieures du paquet
Debian 12 bookwormAucune à cette date7:5.1.9-0+deb12u1
Ubuntu 22.04 LTS7:4.4.2-0ubuntu0.22.04.1+esm16, avec Ubuntu Pro (ESM Apps)Paquet de base sans Ubuntu Pro
Ubuntu 24.04 LTS et 26.04 LTSAucune à cette dateStatut « Vulnerable » chez Canonical

Une précision sur jellyfin-ffmpeg : ses notes de version ne mentionnent ni MagicYUV ni la CVE. Nous avons donc comparé le fichier libavcodec/magicyuv.c des tags publiés. La modification du commit c23d4da3 est absente de v7.1.3-6 et présente dans v7.1.4-1, v7.1.4-3 et v8.1.1-1. Les paquets jellyfin-ffmpeg sortis depuis fin mai 2026 contiennent donc le correctif.

Pour qui installe FFmpeg directement depuis l'amont, les dernières versions stables publiées sur la page de téléchargement de FFmpeg sont la 9.0.2 (18 septembre 2026) et la 8.1.3 (21 septembre 2026). Les deux branches contiennent le correctif : inutile de passer en 9.0 si votre outillage dépend de la 8.1.

Côté distributions, FFmpeg est un paquet de la section universe chez Ubuntu : les correctifs des anciennes LTS passent par ESM Apps, réservé aux machines rattachées à Ubuntu Pro. Canonical classe la faille en priorité moyenne et n'a pas encore publié de paquet pour 24.04 et 26.04. Sur ces versions comme sur Debian 12, la seule protection immédiate pour Nextcloud est de couper l'appel à FFmpeg (voir plus bas). Jellyfin et Immich, qui embarquent leur propre FFmpeg, ne dépendent pas de ce calendrier.

Corriger Jellyfin : mettre à jour jellyfin-ffmpeg

Jellyfin n'utilise jamais le FFmpeg de la distribution : il appelle le binaire /usr/lib/jellyfin-ffmpeg/ffmpeg, livré par le paquet jellyfin-ffmpeg. Le paquet s'appelle jellyfin-ffmpeg7 sur la branche 10.11 et jellyfin-ffmpeg8 depuis Jellyfin 12.0, publié le 8 septembre 2026 et passé à FFmpeg 8.1. La version actuelle est Jellyfin 12.4, du 26 octobre 2026.

Installation par le dépôt apt de Jellyfin

Sur une installation faite avec le script install-debuntu.sh, le dépôt de Jellyfin fournit le serveur et son FFmpeg. Une mise à jour par le gestionnaire de paquets apt suffit, suivie d'un contrôle de la version et d'un redémarrage du service :

dpkg -l | grep jellyfin
sudo apt update
sudo apt upgrade
/usr/lib/jellyfin-ffmpeg/ffmpeg -version | head -n 1
sudo systemctl restart jellyfin

La première ligne doit annoncer une version 7.1.4 ou plus récente sur la branche 7, ou une version 8.1. Avant de passer de 10.11 à 12.x, sauvegardez le répertoire de données (/var/lib/jellyfin) : les notes de version de la 12.0 le recommandent fortement, acceptent la mise à jour directe depuis 10.10.7 et 10.11.x, et préviennent que les plugins doivent être recompilés pour .NET 10. Ne cédez pas à la tentation de pointer Jellyfin vers le FFmpeg de la distribution pour aller plus vite : la documentation de Jellyfin prévient qu'un FFmpeg venu d'ailleurs ne donne qu'une accélération matérielle partielle, et vous perdriez le suivi des correctifs de jellyfin-ffmpeg. Pour une installation dans un conteneur LXC Proxmox, la procédure de snapshot et de mise à jour est détaillée dans notre guide Jellyfin en LXC sur Proxmox.

Installation Docker

L'image officielle jellyfin/jellyfin embarque jellyfin-ffmpeg. Si votre docker-compose.yml épingle un ancien tag, l'image garde le FFmpeg de l'époque : changez le tag avant de tirer la nouvelle image.

cd /opt/jellyfin
docker compose pull
docker compose up -d
docker exec jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -version | head -n 1

Remplacez /opt/jellyfin par le dossier de votre fichier Compose et jellyfin par le nom du conteneur. Le déploiement complet (volumes, reverse proxy, transcodage matériel) est décrit dans notre guide Jellyfin avec Docker sur un VPS Linux.

Jellyfin sous Windows ou sur un Raspberry Pi

La documentation de Jellyfin indique que jellyfin-ffmpeg est livré avec le paquet deb, les images Docker officielles et l'installeur Windows. Sous Windows, la mise à jour consiste donc à réinstaller par-dessus : arrêtez Jellyfin depuis son icône dans la zone de notification, téléchargez l'installeur de la nouvelle version sur le site du projet, puis lancez-le. Une installation portable (archive zip décompressée à la main) fait exception : elle n'embarque pas FFmpeg, et c'est à vous de remplacer ffmpeg.exe et ffprobe.exe par ceux d'une version corrigée de jellyfin-ffmpeg.

Sur un Raspberry Pi sous Raspberry Pi OS, le script install-debuntu.sh est pris en charge et installe le même dépôt apt : la procédure de la section précédente s'applique telle quelle, contrôle de /usr/lib/jellyfin-ffmpeg/ffmpeg -version compris. Seule différence notable, l'accélération matérielle V4L2 du Raspberry Pi est dépréciée par Jellyfin : ne comptez pas sur elle pour décharger le processeur après la mise à jour.

Repérer un fichier MagicYUV dans la médiathèque

MagicYUV est un codec sans perte destiné à la capture et au montage : il n'a guère de raison d'apparaître dans une bibliothèque de films et de séries. Une fois jellyfin-ffmpeg à jour, et seulement à ce moment (lancer ffprobe vulnérable sur un fichier piégé, c'est déclencher la faille), ce petit script shell liste les vidéos dont le premier flux est en MagicYUV :

find /srv/media -type f \( -iname '*.mkv' -o -iname '*.avi' -o -iname '*.mov' \) \
  -exec sh -c '/usr/lib/jellyfin-ffmpeg/ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of csv=p=0 "$1" | grep -q magicyuv && echo "$1"' _ {} \;

Un résultat n'est pas forcément malveillant. D'après son éditeur, MagicYUV sert surtout à l'enregistrement de jeux (Dxtory, MSI Afterburner) et au montage (Premiere Pro, DaVinci Resolve Studio), avec un codec Video for Windows sous Windows, un composant QuickTime sous macOS et un plugin VLC. Un enregistrement de partie déposé par un membre de votre communauté peut donc légitimement en contenir. Un fichier trouvé là sans explication mérite en revanche d'être mis de côté, avec son historique de téléchargement, avant d'être supprimé.

Corriger Nextcloud : aperçus vidéo et FFmpeg du système

Nextcloud ne livre pas FFmpeg. Les aperçus vidéo passent par le fournisseur OC\Preview\Movie, qui appelle le binaire ffmpeg trouvé dans le PATH, ou celui indiqué par le paramètre preview_ffmpeg_path. Ce fournisseur fait partie de ceux que la documentation de Nextcloud désactive par défaut, pour des raisons de performance et de confidentialité. Et l'image Docker officielle nextcloud n'installe pas FFmpeg (nous avons vérifié les Dockerfile Apache des branches 32 et 35). Votre instance n'est donc exposée que si deux conditions sont réunies : OC\Preview\Movie ajouté à la configuration, et un FFmpeg vulnérable installé.

Ces deux conditions sont pourtant réunies sur beaucoup d'instances, à cause d'une extension très répandue : Memories, l'application de galerie photo de Nextcloud. Sa documentation demande d'ajouter OC\Preview\Movie à enabledPreviewProviders pour afficher les vidéos, et d'installer ffmpeg et ffprobe. Memories a aussi ses propres chemins vers ces binaires, les clés memories.vod.ffmpeg et memories.vod.ffprobe, utilisés par son serveur de transcodage (désactivé par défaut, activable depuis le panneau d'administration). Si Memories est installé, contrôlez donc trois chemins, pas un. L'outil de métadonnées qu'il embarque, exiftool, est écrit en Perl et lit les en-têtes sans décoder l'image : il n'est pas concerné par PixelSmash.

Vérifiez les deux, sur une installation classique :

sudo -u www-data php /var/www/nextcloud/occ config:system:get enabledPreviewProviders
sudo -u www-data php /var/www/nextcloud/occ config:system:get preview_ffmpeg_path
sudo -u www-data php /var/www/nextcloud/occ config:system:get memories.vod.ffmpeg
command -v ffmpeg && ffmpeg -version | head -n 1

Ou dans un déploiement Docker Compose, comme celui de notre guide Nextcloud avec Docker Compose sur un VPS Linux :

docker compose exec --user www-data app php occ config:system:get enabledPreviewProviders
docker compose exec app sh -c 'command -v ffmpeg || echo "pas de ffmpeg"'

Une sortie vide pour enabledPreviewProviders signifie que la liste par défaut s'applique, sans aperçu vidéo. Si OC\Preview\Movie apparaît et qu'un FFmpeg est présent, appliquez la solution qui correspond à votre système :

  • Debian 13 : sudo apt update && sudo apt upgrade, puis vérifiez avec dpkg -l | grep -E 'ffmpeg|libavcodec' que la version installée est 7:7.1.5-0+deb13u1 ou plus récente ;
  • Ubuntu 22.04 avec Ubuntu Pro : activez le service avec sudo pro enable esm-apps, puis mettez à jour par apt ;
  • Ubuntu 24.04, Ubuntu 26.04, Debian 12, ou image Docker dérivée : aucun paquet corrigé n'est disponible à ce jour, retirez le fournisseur vidéo jusqu'à sa publication.

Pour retirer le fournisseur, éditez config/config.php et supprimez la ligne 'OC\Preview\Movie', du tableau enabledPreviewProviders. Si vous voulez simplement revenir à la configuration d'origine, voici la liste par défaut documentée :

'enabledPreviewProviders' => [
  'OC\Preview\PNG',
  'OC\Preview\JPEG',
  'OC\Preview\GIF',
  'OC\Preview\BMP',
  'OC\Preview\XBitmap',
  'OC\Preview\Krita',
  'OC\Preview\WebP',
  'OC\Preview\AVIF',
  'OC\Preview\MarkDown',
  'OC\Preview\TXT',
  'OC\Preview\OpenDocument',
],

Relancez la commande config:system:get pour confirmer la prise en compte. Les vidéos n'auront plus de miniature, les autres aperçus continuent de fonctionner. Si vous tenez aux aperçus vidéo, preview_ffmpeg_path permet de pointer vers un binaire FFmpeg 8.1.2 ou plus récent que vous maintenez vous-même, à condition de le mettre à jour aussi sérieusement que le reste. Pensez enfin aux liens de partage publics qui autorisent le dépôt de fichiers : ils permettent à n'importe qui de faire traiter une vidéo par votre serveur. Pour une autre faille récente touchant un environnement Nextcloud, voir notre article sur la faille Collabora CODE.

Corriger Immich : mettre à jour l'image Docker

Immich s'installe avec Docker Compose et son image serveur, ghcr.io/immich-app/immich-server, embarque jellyfin-ffmpeg 7. Le script de construction des images de base d'Immich installe le paquet jellyfin-ffmpeg7 et crée les liens /usr/bin/ffmpeg et /usr/bin/ffprobe vers /usr/lib/jellyfin-ffmpeg/. La version épinglée aujourd'hui dans ce dépôt est la 7.1.4-3, qui contient le correctif. Comme pour Jellyfin, le FFmpeg de l'hôte ne joue aucun rôle.

Mettez à jour depuis le dossier qui contient le docker-compose.yml et le fichier .env d'Immich, puis contrôlez la version embarquée :

cd /opt/immich
docker compose pull
docker compose up -d
docker exec immich_server ffmpeg -version | head -n 1

La version affichée doit être 7.1.4 ou plus récente. Si la variable IMMICH_VERSION de votre .env fige une ancienne version, l'image ne bouge pas : la valeur par défaut du fichier Compose officiel est release, qui suit la dernière version publiée (Immich 3.4.1, sortie le 11 novembre 2026). Lisez les notes de version avant tout saut de version majeure et sauvegardez la base PostgreSQL d'Immich avant de tirer la nouvelle image. Immich fonctionne sur les plateformes amd64 et arm64 : la procédure est la même sur un Raspberry Pi 64 bits, à condition qu'il dispose des 6 Go de RAM minimum (8 Go recommandés) demandés par la documentation. Sous Windows ou macOS avec Docker Desktop, configuration que la documentation d'Immich déconseille, les mêmes commandes se lancent dans le terminal du système. Notre guide installer Immich sur un VPS Linux avec Docker reprend l'installation et la procédure de mise à jour.

Sur Immich, JFrog n'a observé qu'un déni de service : le processus FFmpeg lancé pour le transcodage s'arrête sur un SIGABRT. La surface d'attaque, ce sont les comptes et les liens partagés qui autorisent l'envoi de vidéos : n'en donnez qu'à des personnes de confiance.

FFmpeg installé à la main : archive statique, scripts Python et shell

Beaucoup d'admins installent FFmpeg sans passer par la distribution, pour avoir une version plus récente que celle de Debian ou d'Ubuntu. La page de téléchargement de FFmpeg renvoie pour Linux vers des builds statiques et partagés distribués en archive. Un binaire installé ainsi, en général dans /usr/local/bin ou dans /opt, ne reçoit aucune mise à jour automatique : ni apt upgrade ni les mises à jour de sécurité sans surveillance ne le touchent. S'il apparaît dans la sortie de type -a ffmpeg et que ffmpeg -version annonce une version antérieure aux versions corrigées, remplacez-le.

Pour installer la nouvelle version, téléchargez l'archive d'une version stable corrigée, décompressez-la, puis copiez les deux binaires à la place des anciens (le chemin des fichiers dans l'archive varie selon le fournisseur du build, adaptez-le) :

tar -xf ffmpeg-*.tar.xz
sudo install -m 755 chemin/vers/ffmpeg chemin/vers/ffprobe /usr/local/bin/
ffmpeg -version | head -n 1
ffmpeg -decoders 2>/dev/null | grep magicyuv

Pensez aussi aux outils qui appellent FFmpeg sans que vous le voyiez. Un script Python comme yt-dlp, un script shell de conversion lancé par cron ou un outil de la chaîne de téléchargement utilisent le premier ffmpeg trouvé dans le PATH de l'utilisateur qui les exécute. Si un vieux binaire statique traîne dans /usr/local/bin, il passe devant celui de la distribution, même corrigé. Après la mise à jour, supprimez les copies devenues inutiles plutôt que de les laisser dormir.

Sur les postes de travail : Windows, macOS, Linux Desktop et VLC

Le fichier piégé ne vise pas que le serveur. L'admin qui récupère une vidéo suspecte pour l'examiner l'ouvre souvent sur son propre poste, et JFrog rappelle que sur un bureau Linux, il suffit d'afficher le dossier qui la contient : le générateur de miniatures du gestionnaire de fichiers décode le fichier tout seul. Avant de toucher à un échantillon douteux, mettez donc à jour votre poste.

  • Linux Desktop (Ubuntu Desktop, Debian avec GNOME, KDE ou XFCE) : la libavcodec du système sert aux miniatures, à mpv, à Kodi et au VLC de la distribution. Les versions corrigées sont celles du tableau plus haut ; tant que votre distribution n'a pas publié de paquet, n'ouvrez pas de fichier suspect sur ce poste.
  • VLC sous Windows et sur macOS : ces versions embarquent leur propre copie de FFmpeg. VLC 3.0.24, publié en septembre 2026, met à jour les bibliothèques intégrées, dont FFmpeg, mais le bulletin de sécurité de VideoLAN ne cite pas CVE-2026-8461 nommément. Installez la dernière version stable de VLC et considérez toute version plus ancienne comme exposée.
  • FFmpeg sur macOS avec Homebrew : brew update && brew upgrade ffmpeg. La formule ffmpeg de Homebrew est en version 9.0.2 au 12 novembre 2026, une version corrigée.
  • FFmpeg sous Windows : le projet ne publie pas d'installeur officiel pour Windows, sa page de téléchargement renvoie vers des builds tiers distribués en archive. Remplacez le dossier par celui d'une version corrigée, puis vérifiez avec ffmpeg -version dans un terminal PowerShell.

Le codec MagicYUV officiel (codec Video for Windows, composant QuickTime, plugin VLC) est un logiciel distinct du décodeur de FFmpeg : la CVE ne le vise pas. Pour analyser un fichier suspect, le plus sûr reste une machine jetable, par exemple un petit VPS dédié à cet usage et détruit ensuite, plutôt que le poste qui détient vos accès SSH.

Réduire la surface d'attaque au-delà du correctif

PixelSmash ne sera pas le dernier bug d'un décodeur vidéo : FFmpeg embarque des centaines de décodeurs, écrits en C pour la vitesse, et chacun lit des données fournies par le fichier. Dans le même rapport, JFrog signale une fuite d'informations distincte dans le décodeur FlashSV, non corrigée au 22 juin 2026 et jugée de faible portée, en notant qu'une fuite de ce type pourrait un jour servir à contourner l'ASLR ; ce chaînage n'a pas été démontré. Quelques réglages limitent les dégâts d'un fichier piégé, quel que soit le défaut exploité :

  • Garder l'ASLR actif : si kernel.randomize_va_space n'est pas à 2, fixez-le durablement avec echo 'kernel.randomize_va_space = 2' | sudo tee /etc/sysctl.d/99-aslr.conf puis sudo sysctl --system ;
  • Faire tourner chaque service sous un utilisateur dédié, jamais en root : jellyfin, www-data, ou une directive user: dans le fichier Compose. Notre guide Docker Compose sur VPS Linux détaille la syntaxe ;
  • Monter la médiathèque en lecture seule dans le conteneur Jellyfin (/srv/media:/media:ro) : un processus compromis ne peut alors ni modifier ni chiffrer vos fichiers. Hors Docker, des permissions Unix qui ne donnent à l'utilisateur jellyfin que la lecture produisent le même effet ;
  • Séparer la chaîne de téléchargement de la médiathèque : un dossier de transit, puis un déplacement vers la bibliothèque une fois le fichier contrôlé. Même règle pour un dossier alimenté par FTP, SFTP ou un client de synchronisation : tout ce qui y arrive sans relecture humaine est une porte d'entrée ;
  • Compiler FFmpeg sans le décodeur si vous maintenez votre propre build : ./configure --disable-decoder=magicyuv, ou mieux une liste blanche des seuls décodeurs utiles ;
  • Surveiller les plantages : journalctl -k | grep -i segfault révèle les erreurs de segmentation de ffmpeg ou ffprobe. Une journalisation d'audit, comme celle de notre guide auditd sur VPS Linux, garde la trace des exécutions suspectes lancées par ces utilisateurs.

Pour que les correctifs de la distribution arrivent sans attendre une intervention manuelle, configurez les mises à jour de sécurité automatiques décrites dans notre guide automatiser les mises à jour de sécurité. Si votre serveur tourne encore sous Debian 12, PixelSmash est un bon argument pour migrer vers Debian 13, qui a reçu son paquet corrigé dès le 22 juin.

Récapitulatif : quoi mettre à jour selon votre installation

Installation FFmpeg utilisé Action Contrôle
Jellyfin par le dépôt apt (Debian, Ubuntu, Raspberry Pi OS)jellyfin-ffmpeg7 ou jellyfin-ffmpeg8apt update puis apt upgrade, redémarrage du service/usr/lib/jellyfin-ffmpeg/ffmpeg -version : 7.1.4 ou plus, ou 8.1
Jellyfin en Dockerjellyfin-ffmpeg de l'imageTag récent, docker compose pull puis up -ddocker exec jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -version
Jellyfin sous Windows (installeur)jellyfin-ffmpeg livré par l'installeurArrêt du serveur, installeur de la nouvelle versionJellyfin 12.x, publié depuis septembre 2026, après les paquets jellyfin-ffmpeg corrigés
Immich (Docker Compose)jellyfin-ffmpeg 7 de l'image serveurdocker compose pull puis up -ddocker exec immich_server ffmpeg -version : 7.1.4 ou plus
Nextcloud sur Debian 13Paquet ffmpeg de la distributionapt upgrade7:7.1.5-0+deb13u1 ou plus récent
Nextcloud sur Debian 12, Ubuntu 24.04 ou 26.04Paquet ffmpeg de la distribution, non corrigéRetirer OC\Preview\Movie, vérifier Memoriesocc config:system:get enabledPreviewProviders
FFmpeg statique dans /usr/local/binBuild issu d'une archiveRemplacer par une version stable corrigéetype -a ffmpeg puis ffmpeg -version
Poste de travail (VLC, Homebrew, bureau Linux)Copie embarquée ou libavcodec du systèmeDernière version de VLC, brew upgrade ffmpeg, mises à jour du systèmeVersion affichée par chaque logiciel

Conclusion

PixelSmash touche le maillon que tous les serveurs multimédias partagent : le décodeur vidéo de FFmpeg. Le correctif tient en trois gestes, selon l'application. Pour Jellyfin, mettez à jour jellyfin-ffmpeg en 7.1.4-1 ou plus récent, ou passez à Jellyfin 12 et jellyfin-ffmpeg8. Pour Immich, tirez une image récente et vérifiez la version de son FFmpeg. Pour Nextcloud, mettez à jour le paquet ffmpeg de la distribution quand il existe, sinon retirez OC\Preview\Movie en attendant, sans oublier les chemins propres à l'extension Memories. Dans tous les cas, contrôlez chaque copie de FFmpeg présente sur la machine, dans les conteneurs et sur votre poste de travail, remplacez les binaires statiques oubliés, et vérifiez que l'ASLR est actif. Avant d'exposer un service à des fichiers venus d'ailleurs, les premiers réglages de sécurité d'un serveur dédié restent la base.

FAQ

Qu'est-ce que la faille PixelSmash ?

PixelSmash est le nom donné par JFrog à CVE-2026-8461, une écriture hors limites dans le tas du décodeur MagicYUV de libavcodec, la bibliothèque de décodage de FFmpeg. Un fichier vidéo piégé en AVI, MKV ou MOV suffit à la déclencher. Le score CVSS 3.1 est de 8.8. Le correctif amont est arrivé avec FFmpeg 8.1.2, publié le 17 juin 2026.

PixelSmash permet-il de prendre le contrôle d'un serveur Jellyfin ou Nextcloud ?

JFrog a démontré une exécution de code à distance sur Jellyfin 10.11.9 et sur Nextcloud avec les aperçus vidéo activés, sous les droits du service (jellyfin ou www-data), mais uniquement avec l'ASLR désactivé. Avec l'ASLR actif, réglage par défaut de Linux, l'impact démontré est un déni de service. Le correctif reste indispensable : l'ASLR limite l'exploitation connue, il ne supprime pas le défaut.

Quelles versions de FFmpeg corrigent CVE-2026-8461 ?

Côté amont : 8.1.2 et suivantes (dont 8.1.3 et 9.0), 8.0.3, 7.1.5 et 5.1.10. Côté Jellyfin, les paquets jellyfin-ffmpeg 7.1.4-1 et suivants, et 8.1.1-1 et suivants, contiennent la modification du décodeur MagicYUV. Debian 13 est corrigé en 7:7.1.5-0+deb13u1 (DSA-6361-1). Au 12 novembre 2026, Debian 12, Ubuntu 24.04 et Ubuntu 26.04 n'ont pas encore de paquet corrigé.

Comment savoir si mon FFmpeg contient le décodeur MagicYUV ?

Lancez ffmpeg -decoders 2>/dev/null | grep magicyuv, et la même commande avec /usr/lib/jellyfin-ffmpeg/ffmpeg si Jellyfin est installé. Une ligne VFS..D magicyuv indique que le décodeur est compilé : vérifiez alors la version avec ffmpeg -version. Répétez le contrôle dans chaque conteneur Docker avec docker exec, car chacun embarque sa propre copie de FFmpeg.

Mettre à jour le paquet ffmpeg du système corrige-t-il Jellyfin et Immich ?

Non. Jellyfin utilise son propre binaire /usr/lib/jellyfin-ffmpeg/ffmpeg, livré par le paquet jellyfin-ffmpeg7 ou jellyfin-ffmpeg8, et l'image Docker d'Immich embarque jellyfin-ffmpeg 7. Il faut mettre à jour ces paquets ou ces images. Le paquet ffmpeg de la distribution ne concerne que les logiciels qui l'appellent, comme Nextcloud pour ses aperçus vidéo.

Nextcloud est-il vulnérable par défaut à PixelSmash ?

Non. Le fournisseur d'aperçus vidéo OC\Preview\Movie est désactivé par défaut, et l'image Docker officielle nextcloud n'installe pas FFmpeg. Une instance n'est exposée que si OC\Preview\Movie a été ajouté à enabledPreviewProviders et qu'un FFmpeg vulnérable est présent. Vérifiez avec occ config:system:get enabledPreviewProviders.

Que faire sur Ubuntu 24.04 tant que le paquet ffmpeg n'est pas corrigé ?

Pour Nextcloud, retirez OC\Preview\Movie de enabledPreviewProviders dans config/config.php : les vidéos n'auront plus de miniature, les autres aperçus continuent de fonctionner. Une autre option consiste à pointer preview_ffmpeg_path vers un FFmpeg 8.1.2 ou plus récent que vous maintenez. Jellyfin et Immich ne sont pas concernés par ce délai, car ils embarquent leur propre FFmpeg.

Immich est-il touché par PixelSmash ?

Oui, mais JFrog n'y a observé qu'un déni de service : le processus FFmpeg de transcodage s'arrête sur un SIGABRT. L'image serveur embarque jellyfin-ffmpeg 7, et les images de base d'Immich épinglent aujourd'hui la version 7.1.4-3, qui contient le correctif. Mettez à jour avec docker compose pull puis docker compose up -d, et vérifiez avec docker exec immich_server ffmpeg -version.

Plex Media Server est-il concerné ?

Non selon JFrog : Plex compile son FFmpeg avec une liste blanche de décodeurs qui n'inclut pas MagicYUV. C'est la meilleure pratique pour qui compile FFmpeg lui-même : désactiver tous les décodeurs puis n'activer que ceux qui servent, ou au minimum ajouter --disable-decoder=magicyuv à la commande configure.

Comment vérifier que l'ASLR est actif sur mon serveur Linux ?

La commande sysctl kernel.randomize_va_space doit renvoyer 2, la randomisation complète, réglage par défaut des noyaux Debian et Ubuntu. La valeur 0 désactive l'ASLR, condition des exécutions de code démontrées par JFrog. Pour fixer la valeur durablement, créez /etc/sysctl.d/99-aslr.conf avec la ligne kernel.randomize_va_space = 2 puis lancez sysctl --system.

L'extension Memories de Nextcloud rend-elle mon instance vulnérable ?

Elle augmente fortement le risque. La documentation de Memories demande d'ajouter OC\Preview\Movie à enabledPreviewProviders et d'installer ffmpeg et ffprobe pour afficher les vidéos, ce qui réunit les deux conditions d'exposition. Memories a aussi ses propres chemins, memories.vod.ffmpeg et memories.vod.ffprobe, pour son transcodage : vérifiez que chacun pointe vers une version corrigée.

Comment mettre à jour un FFmpeg installé depuis une archive statique ?

Ni apt ni les mises à jour automatiques ne touchent un binaire copié à la main dans /usr/local/bin ou /opt. Repérez-le avec type -a ffmpeg, téléchargez l'archive d'une version stable corrigée (9.0.2 ou 8.1.3 au 12 novembre 2026), puis remplacez ffmpeg et ffprobe avec sudo install -m 755. Contrôlez ensuite avec ffmpeg -version.

VLC est-il concerné par PixelSmash sous Windows ou macOS ?

JFrog cite VLC parmi les lecteurs qui embarquent FFmpeg, sans publier de test le concernant. VLC 3.0.24, sorti en septembre 2026, met à jour le FFmpeg intégré, mais le bulletin de VideoLAN ne nomme pas CVE-2026-8461. Installez la dernière version stable de VLC. Sur Linux, le VLC de la distribution utilise la libavcodec du système : il est corrigé quand la distribution publie son paquet, ce qui n'est pas encore le cas sur Debian 12, Ubuntu 24.04 et Ubuntu 26.04 au 12 novembre 2026.

Comment mettre à jour Jellyfin sous Windows ?

L'installeur Windows de Jellyfin embarque jellyfin-ffmpeg. Arrêtez le serveur depuis l'icône de la zone de notification, téléchargez l'installeur de la nouvelle version et lancez-le : la réinstallation par-dessus met à jour le serveur et son FFmpeg. Une installation portable en archive zip n'embarque pas FFmpeg, remplacez alors ffmpeg.exe et ffprobe.exe vous-même.