{"id":171119,"date":"2026-01-13T06:56:53","date_gmt":"2026-01-13T14:56:53","guid":{"rendered":"https:\/\/unit42.paloaltonetworks.com\/?p=171119"},"modified":"2026-01-26T08:41:29","modified_gmt":"2026-01-26T16:41:29","slug":"rce-vulnerabilities-in-ai-python-libraries","status":"publish","type":"post","link":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/","title":{"rendered":"Ex\u00e9cution de code \u00e0 distance dans des formats et biblioth\u00e8ques IA\/ML modernes"},"content":{"rendered":"<h2><a id=\"post-171119-_heading=h.a127d99t1w9a\"><\/a>Avant-propos<\/h2>\n<p>Nous avons identifi\u00e9 des vuln\u00e9rabilit\u00e9s dans trois\u00a0biblioth\u00e8ques Python d\u2019intelligence artificielle\/de machine learning (IA\/ML) open-source publi\u00e9es par Apple, Salesforce et NVIDIA dans leurs r\u00e9f\u00e9rentiels GitHub. Lorsqu\u2019un fichier mod\u00e8le contenant des m\u00e9tadonn\u00e9es malveillantes est charg\u00e9, les versions vuln\u00e9rables de ces biblioth\u00e8ques permettent l\u2019ex\u00e9cution de code \u00e0 distance (RCE).<\/p>\n<p>Il s\u2019agit notamment des biblioth\u00e8ques suivantes\u00a0:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/NVIDIA-NeMo\/NeMo\/tree\/main\" target=\"_blank\" rel=\"noopener\"><strong>NeMo<\/strong><\/a><strong>\u00a0:<\/strong> un framework bas\u00e9 sur PyTorch cr\u00e9\u00e9 \u00e0 des fins de recherche et con\u00e7u pour le d\u00e9veloppement de divers mod\u00e8les IA\/ML et de syst\u00e8mes complexes \u00e9labor\u00e9s par NVIDIA.<\/li>\n<li><a href=\"https:\/\/github.com\/SalesforceAIResearch\/uni2ts\" target=\"_blank\" rel=\"noopener\"><strong>Uni2TS<\/strong><\/a>\u00a0: une biblioth\u00e8que PyTorch cr\u00e9\u00e9e \u00e0 des fins de recherche et utilis\u00e9e par Morai de Salesforce, un mod\u00e8le de base pour l\u2019analyse des s\u00e9ries temporelles qui pr\u00e9voit les tendances \u00e0 partir de vastes ensembles de donn\u00e9es.<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/ml-flextok\" target=\"_blank\" rel=\"noopener\"><strong>FlexTok<\/strong><\/a><strong>\u00a0:<\/strong> un framework bas\u00e9 sur Python, cr\u00e9\u00e9 \u00e0 des fins de recherche, qui permet aux mod\u00e8les IA\/ML de traiter les images en ex\u00e9cutant les fonctions d\u2019encodage et de d\u00e9codage, d\u00e9velopp\u00e9 par des chercheurs d\u2019Apple et du laboratoire Visual Intelligence and Learning Lab de l\u2019\u00c9cole polytechnique f\u00e9d\u00e9rale de Suisse.<\/li>\n<\/ul>\n<p>Ces biblioth\u00e8ques sont utilis\u00e9es dans des mod\u00e8les populaires sur HuggingFace avec des dizaines de millions de t\u00e9l\u00e9chargements au total.<\/p>\n<p>Les vuln\u00e9rabilit\u00e9s proviennent des biblioth\u00e8ques qui utilisent des m\u00e9tadonn\u00e9es pour configurer des mod\u00e8les et des pipelines complexes, lorsqu\u2019une biblioth\u00e8que tierce partag\u00e9e instancie des classes \u00e0 l\u2019aide de ces m\u00e9tadonn\u00e9es. Les versions vuln\u00e9rables de ces biblioth\u00e8ques ex\u00e9cutent simplement les donn\u00e9es fournies sous forme de code. Un attaquant peut ainsi int\u00e9grer du code arbitraire dans les m\u00e9tadonn\u00e9es du mod\u00e8le, qui s\u2019ex\u00e9cute automatiquement lorsque les biblioth\u00e8ques vuln\u00e9rables chargent ces mod\u00e8les modifi\u00e9s.<\/p>\n<p>En d\u00e9cembre 2025, aucune attaque r\u00e9elle utilisant ces vuln\u00e9rabilit\u00e9s n\u2019a \u00e9t\u00e9 observ\u00e9e. Palo\u00a0Alto\u00a0Networks a notifi\u00e9 tous les fournisseurs concern\u00e9s en avril\u00a02025 afin qu\u2019ils aient la possibilit\u00e9 de mettre en \u0153uvre des mesures d\u2019att\u00e9nuation ou de r\u00e9soudre les probl\u00e8mes avant la publication.<\/p>\n<ul>\n<li>NVIDIA a publi\u00e9 des informations sur la vuln\u00e9rabilit\u00e9 <a href=\"https:\/\/nvidia.custhelp.com\/app\/answers\/detail\/a_id\/5686\" target=\"_blank\" rel=\"noopener\">CVE-2025-23304<\/a>, class\u00e9e de gravit\u00e9 \u00e9lev\u00e9e, et a d\u00e9ploy\u00e9 un correctif dans la version\u00a02.3.2 de NeMo.<\/li>\n<li>Les chercheurs ayant con\u00e7u FlexTok ont mis \u00e0 jour leur code en juin\u00a02025 pour r\u00e9soudre ces probl\u00e8mes.<\/li>\n<li>Salesforce a publi\u00e9 des informations sur la vuln\u00e9rabilit\u00e9 <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=005239354&amp;type=1\" target=\"_blank\" rel=\"noopener\">CVE-2026-22584<\/a>, class\u00e9e de gravit\u00e9 \u00e9lev\u00e9e, et a d\u00e9ploy\u00e9 un correctif le 31\u00a0juillet\u00a02025.<\/li>\n<\/ul>\n<p>Ces vuln\u00e9rabilit\u00e9s ont \u00e9t\u00e9 d\u00e9tect\u00e9es par <a href=\"https:\/\/www.paloaltonetworks.com\/prisma\/prisma-ai-runtime-security\" target=\"_blank\" rel=\"noopener\">Prisma AIRS<\/a>, capable d\u2019identifier les mod\u00e8les exploitant ces vuln\u00e9rabilit\u00e9s et d\u2019extraire leurs payloads.<\/p>\n<p>En compl\u00e9ment, les clients de Palo\u00a0Alto\u00a0Networks b\u00e9n\u00e9ficient d\u2019une protection renforc\u00e9e contre les menaces d\u00e9crites ci-dessus gr\u00e2ce aux produits et services suivants\u00a0:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.paloaltonetworks.com\/cortex\/cloud\/vulnerability-management\" target=\"_blank\" rel=\"noopener\">Gestion des vuln\u00e9rabilit\u00e9s<\/a> de Cortex\u00a0Cloud<\/li>\n<li>Le <a href=\"https:\/\/www.paloaltonetworks.com\/resources\/datasheets\/unit-42-ai-security-assessment\" target=\"_blank\" rel=\"noopener\">bilan de s\u00e9curit\u00e9 de l\u2019IA d\u2019Unit\u00a042<\/a> aide les organisations \u00e0 r\u00e9duire les risques li\u00e9s \u00e0 l\u2019adoption de l\u2019IA, \u00e0 s\u00e9curiser l\u2019innovation en IA et \u00e0 renforcer la gouvernance de l\u2019IA.<\/li>\n<li>Si vous pensez que votre entreprise a pu \u00eatre compromise ou si vous faites face \u00e0 une urgence, contactez l\u2019<a href=\"https:\/\/start.paloaltonetworks.com\/contact-unit42.html\" target=\"_blank\" rel=\"noopener\">\u00e9quipe Unit\u00a042 de r\u00e9ponse \u00e0 incident<\/a>.<\/li>\n<\/ul>\n<table style=\"width: 98.6323%;\">\n<thead>\n<tr>\n<td style=\"width: 35%;\"><b>Unit\u00a042 -\u00a0Th\u00e9matiques connexes<\/b><\/td>\n<td style=\"width: 219.636%;\"><a href=\"https:\/\/unit42.paloaltonetworks.com\/fr\/tag\/python-fr\/\" target=\"_blank\" rel=\"noopener\"><b>Python<\/b><\/a>, <strong><a href=\"https:\/\/unit42.paloaltonetworks.com\/fr\/tag\/llm-fr\/\" target=\"_blank\" rel=\"noopener\">LLMs<\/a>, <a href=\"https:\/\/unit42.paloaltonetworks.com\/fr\/tag\/machine-learning-fr\/\" target=\"_blank\" rel=\"noopener\"><b>Machine Learning<\/b><\/a><\/strong><\/td>\n<\/tr>\n<\/thead>\n<\/table>\n<h2><a id=\"post-171119-_heading=h.fxmo0qxe6mc3\"><\/a>Formats des mod\u00e8les IA\/ML<\/h2>\n<p>Les pipelines d\u2019entra\u00eenement et d\u2019inf\u00e9rence en IA\/ML reposent sur la sauvegarde d\u2019\u00e9tats internes complexes, tels que les poids appris et les d\u00e9finitions d\u2019architecture. Ces \u00e9tats internes sont sauvegard\u00e9s sous forme d\u2019artefacts de mod\u00e8le, qui, \u00e0 leur tour, doivent \u00eatre partag\u00e9s entre les producteurs et les consommateurs. Les biblioth\u00e8ques fournissent des m\u00e9canismes int\u00e9gr\u00e9s pour s\u00e9rialiser ces artefacts.<\/p>\n<p>Depuis longtemps, les biblioth\u00e8ques Python d\u00e9di\u00e9es \u00e0 l\u2019IA\/ML reposent sur le module standard <a href=\"https:\/\/docs.python.org\/3\/library\/pickle.html\" target=\"_blank\" rel=\"noopener\">pickle<\/a> pour enregistrer des objets Python dans des fichiers et les charger \u00e0 partir de ces derniers. . Ce module s\u00e9rialise les objets Python en cr\u00e9ant un programme simple capable de les reconstruire. Il est ex\u00e9cut\u00e9 lorsque les objets Python sont charg\u00e9s. Comme ce module ex\u00e9cute du code au moment du chargement des fichiers, son utilisation entra\u00eene des risques de s\u00e9curit\u00e9 importants.<\/p>\n<p>Le <a href=\"https:\/\/docs.pytorch.org\/tutorials\/beginner\/saving_loading_models.html\" target=\"_blank\" rel=\"noopener\">format de fichier<\/a> de la biblioth\u00e8que PyTorch int\u00e8gre simplement les fichiers <span style=\"font-family: 'courier new', courier, monospace;\">.pickle<\/span> dans un format de conteneur. D\u2019autres biblioth\u00e8ques comme <a href=\"https:\/\/scikit-learn.org\/stable\/model_persistence.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">scikit-learn<\/span><\/a> utilisent <span style=\"font-family: 'courier new', courier, monospace;\">.pickle<\/span> ou d\u2019autres extensions associ\u00e9es \u00e0 pickle (comme <a href=\"https:\/\/joblib.readthedocs.io\/en\/latest\/persistence.html#persistence\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">.joblib<\/span><\/a>). La plupart des biblioth\u00e8ques populaires d\u2019IA\/ML documentent clairement ces risques et proposent des mesures d\u2019att\u00e9nuation robustes pour emp\u00eacher l\u2019ex\u00e9cution par d\u00e9faut de code inattendu.<\/p>\n<h2><a id=\"post-171119-_heading=h.n6phde4ifwsy\"><\/a>Failles de s\u00e9curit\u00e9 dans les nouveaux formats de mod\u00e8les<\/h2>\n<p>De nouveaux formats ont \u00e9t\u00e9 mis au point pour r\u00e9soudre les probl\u00e8mes de s\u00e9curit\u00e9 li\u00e9s aux formats bas\u00e9s sur pickle. Ces formats dits \u00ab\u00a0s\u00fbrs\u00a0\u00bb y parviennent en grande partie en se limitant \u00e0 la s\u00e9rialisation des poids des mod\u00e8les ou en d\u00e9crivant les pipelines sous forme de donn\u00e9es et non de code, \u00e0 l\u2019aide de formats tels que JSON. Par exemple, le format <a href=\"https:\/\/huggingface.co\/docs\/safetensors\/en\/index\" target=\"_blank\" rel=\"noopener\">safetensors<\/a> de HuggingFace ne permet de stocker que les poids des mod\u00e8les et un seul objet JSON pour conserver les m\u00e9tadonn\u00e9es des mod\u00e8les.<\/p>\n<p>Les formats plus anciens ont eux aussi progressivement abandonn\u00e9 l\u2019utilisation du module pickle. Par exemple, PyTorch ne charge que les poids des mod\u00e8les <a href=\"https:\/\/docs.pytorch.org\/docs\/stable\/generated\/torch.load.html\" target=\"_blank\" rel=\"noopener\">par d\u00e9faut<\/a>. Lorsque le chargement pickle est activ\u00e9, PyTorch n\u2019ex\u00e9cute que les fonctions d\u2019une <a href=\"https:\/\/docs.pytorch.org\/docs\/stable\/notes\/serialization.html#torch.serialization.add_safe_globals\" target=\"_blank\" rel=\"noopener\">liste des autorisations<\/a> pr\u00e9d\u00e9finie qui devrait emp\u00eacher l\u2019ex\u00e9cution de code arbitraire.<\/p>\n<p>M\u00eame si ces nouveaux formats et mises \u00e0 jour suppriment la possibilit\u00e9 de s\u00e9rialiser les pipelines sous forme de code, ils ne rendent pas pour autant les applications et les biblioth\u00e8ques utilisant ces mod\u00e8les immunis\u00e9es contre les exploits classiques. Des <a href=\"https:\/\/jfrog.com\/blog\/machine-learning-bug-bonanza-exploiting-ml-clients-and-safe-models\/\" target=\"_blank\" rel=\"noopener\">chercheurs en s\u00e9curit\u00e9 de JFrog<\/a> ont identifi\u00e9 des vuln\u00e9rabilit\u00e9s dans des applications utilisant ces formats, en exploitant des techniques bien connues telles que le cross-site scripting (XSS) et l\u2019exploitation par chemin d\u2019acc\u00e8s.<\/p>\n<h2><a id=\"post-171119-_heading=h.4c8wn4s938y9\"><\/a>Analyse technique<\/h2>\n<p>M\u00eame si les formats r\u00e9cents ne permettent plus de stocker l\u2019\u00e9tat des mod\u00e8les et leurs configurations sous forme de code, les chercheurs ont toujours besoin de s\u00e9rialiser ces informations dans certains cas. \u00c9tant donn\u00e9 la taille de ces biblioth\u00e8ques et la complexit\u00e9 des configurations de leurs classes, de nombreuses biblioth\u00e8ques recourent \u00e0 des outils tiers pour g\u00e9rer cette s\u00e9rialisation.<\/p>\n<p><a href=\"https:\/\/hydra.cc\/\" target=\"_blank\" rel=\"noopener\">Hydra<\/a>, une biblioth\u00e8que Python optimis\u00e9e par Meta, est couramment utilis\u00e9e pour s\u00e9rialiser l\u2019\u00e9tat des mod\u00e8les et les informations de configuration.<\/p>\n<p>Nous avons identifi\u00e9 trois\u00a0biblioth\u00e8ques Python IA\/ML open-source, utilis\u00e9es par des mod\u00e8les sur HuggingFace, qui exploitent Hydra pour charger ces configurations \u00e0 partir des m\u00e9tadonn\u00e9es des mod\u00e8les d\u2019une mani\u00e8re qui permet l\u2019ex\u00e9cution de code arbitraire\u00a0:<\/p>\n<ul>\n<li><strong>NeMo\u00a0:<\/strong> un framework bas\u00e9 sur PyTorch cr\u00e9\u00e9 \u00e0 des fins de recherche pour le d\u00e9veloppement de divers mod\u00e8les IA\/ML et de syst\u00e8mes complexes d\u00e9velopp\u00e9s par NVIDIA.<\/li>\n<li><strong>Uni2TS\u00a0<\/strong>: une biblioth\u00e8que PyTorch cr\u00e9\u00e9e \u00e0 des fins de recherche et utilis\u00e9e par Morai de Salesforce, un mod\u00e8le de base pour l\u2019analyse des s\u00e9ries temporelles qui pr\u00e9voit les tendances \u00e0 partir de vastes ensembles de donn\u00e9es.<\/li>\n<li><strong>FlexTok\u00a0:<\/strong> un framework bas\u00e9 sur Python, cr\u00e9\u00e9 \u00e0 des fins de recherche, qui permet aux mod\u00e8les IA\/ML de traiter les images en ex\u00e9cutant les fonctions d\u2019encodage et de d\u00e9codage, d\u00e9velopp\u00e9 par des chercheurs d\u2019Apple et du laboratoire Visual Intelligence and Learning Lab de l\u2019\u00c9cole polytechnique f\u00e9d\u00e9rale de Suisse.<\/li>\n<\/ul>\n<h3><a id=\"post-171119-_heading=h.39e32yrixua\"><\/a>Hydra<\/h3>\n<p>Toutes les vuln\u00e9rabilit\u00e9s que nous avons identifi\u00e9es utilisent la fonction <a href=\"https:\/\/hydra.cc\/docs\/advanced\/instantiate_objects\/overview\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">hydra.utils.instantiate()<\/span><\/a>, dont l\u2019objectif est \u00ab\u00a0d\u2019instancier diff\u00e9rentes mises en \u0153uvre d\u2019une interface\u00a0\u00bb.<\/p>\n<p>L\u2019API Hydra prend comme argument un objet de configuration (comme un dictionnaire Python ou un objet <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/omegaconf.readthedocs.io\/en\/2.3_branch\/usage.html\" target=\"_blank\" rel=\"noopener\">OmegaConf<\/a><\/span>) qui d\u00e9crit l\u2019interface cible \u00e0 <a href=\"https:\/\/dataplatform.cloud.ibm.com\/docs\/content\/wsd\/nodes\/type_instantiation.html?context=cpdaas\" target=\"_blank\" rel=\"noopener\">instancier<\/a> ainsi que des param\u00e8tres optionnels *<span style=\"font-family: 'courier new', courier, monospace;\">args<\/span> et **<span style=\"font-family: 'courier new', courier, monospace;\">kwargs<\/span> \u00e0 transmettre \u00e0 cette interface. Cette configuration attend une valeur <span style=\"font-family: 'courier new', courier, monospace;\">_target_<\/span> sp\u00e9cifiant la classe ou la fonction <a href=\"https:\/\/typing.python.org\/en\/latest\/spec\/callables.html\" target=\"_blank\" rel=\"noopener\">appelable<\/a> \u00e0 instancier, ainsi qu\u2019une valeur optionnelle <span style=\"font-family: 'courier new', courier, monospace;\">_args_<\/span> d\u00e9finissant les arguments \u00e0 transmettre \u00e0 <span style=\"font-family: 'courier new', courier, monospace;\">_target_<\/span>.<\/p>\n<p>Dans chacun des cas identifi\u00e9s, <span style=\"font-family: 'courier new', courier, monospace;\">hydra.utils.instantiate()<\/span> n\u2019est utilis\u00e9 que pour instancier des instances de classes de biblioth\u00e8ques avec des arguments simples stock\u00e9s dans les m\u00e9tadonn\u00e9es. La figure\u00a01 montre un exemple de m\u00e9tadonn\u00e9es que NeMo transmet \u00e0 la fonction <span style=\"font-family: 'courier new', courier, monospace;\">instantiate()<\/span>.<\/p>\n<figure id=\"attachment_171120\" aria-describedby=\"caption-attachment-171120\" style=\"width: 1000px\" class=\"wp-caption alignnone\"><img  class=\"wp-image-171120 lozad\"  data-src=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-160931-171119-1.png\" alt=\"Capture d\u2019\u00e9cran d\u2019un code informatique contenant les param\u00e8tres de configuration d\u2019un mod\u00e8le machine learning.\" width=\"1000\" height=\"234\" srcset=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-160931-171119-1.png 1018w, https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-160931-171119-1-786x184.png 786w, https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-160931-171119-1-768x180.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><figcaption id=\"caption-attachment-171120\" class=\"wp-caption-text\">Figure 1. M\u00e9tadonn\u00e9es d\u2019un fichier NeMo.<\/figcaption><\/figure>\n<p>Ce que ces biblioth\u00e8ques semblent avoir n\u00e9glig\u00e9, c\u2019est que <span style=\"font-family: 'courier new', courier, monospace;\">instantiate()<\/span> n\u2019accepte pas seulement le nom des classes \u00e0 instancier, mais aussi le nom de toute fonction appelable et lui transmet les arguments fournis.<\/p>\n<p>En exploitant cela, un attaquant peut plus facilement r\u00e9aliser une ex\u00e9cution de code \u00e0 distance (RCE) en utilisant les fonctions int\u00e9gr\u00e9es de Python telles que <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/docs.python.org\/3\/library\/functions.html#eval\" target=\"_blank\" rel=\"noopener\">eval()<\/a><\/span> et <a href=\"https:\/\/docs.python.org\/3\/library\/os.html#os.system\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">os.system()<\/span><\/a>. Dans toutes les preuves de concept que nous avons utilis\u00e9es pour tester ces vuln\u00e9rabilit\u00e9s, nous avons employ\u00e9 un payload utilisant <span style=\"font-family: 'courier new', courier, monospace;\">builtins.exec()<\/span> comme fonction appelable et une cha\u00eene contenant du code Python comme argument.<\/p>\n<p>Depuis la d\u00e9couverte de ces vuln\u00e9rabilit\u00e9s, <a href=\"https:\/\/github.com\/facebookresearch\/hydra\/commit\/4d30546745561adf4e92ad897edb2e340d5685f0\" target=\"_blank\" rel=\"noopener\">Hydra a \u00e9t\u00e9 mis \u00e0 jour<\/a> pour ajouter un avertissement \u00e0 sa documentation pr\u00e9cisant qu\u2019une ex\u00e9cution de code \u00e0 distance (RCE) avec <span style=\"font-family: 'courier new', courier, monospace;\">instantiate()<\/span>, et pour int\u00e9grer un m\u00e9canisme simple de liste de blocage. Ce m\u00e9canisme consiste \u00e0 comparer la valeur <span style=\"font-family: 'courier new', courier, monospace;\">_target_<\/span> \u00e0 une liste de fonctions dangereuses telles que <span style=\"font-family: 'courier new', courier, monospace;\">builtins.exec()<\/span> avant qu\u2019elle ne soit appel\u00e9e.<\/p>\n<p>Parce que ce m\u00e9canisme utilise des correspondances exactes avec les cibles d\u2019importation avant leur chargement, il peut \u00eatre contourn\u00e9 tr\u00e8s facilement en utilisant des importations implicites de la biblioth\u00e8que standard de Python (p. ex., <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/github.com\/python\/cpython\/blob\/3.14\/Lib\/enum.py#L2\" target=\"_blank\" rel=\"noopener\">enum.bltns.eval<\/a><\/span>) ou de l\u2019application cible (p. ex., <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/nemo.core.classes.common.os\" target=\"_blank\" rel=\"noopener\">nemo.core.classes.common.os.system<\/a><\/span>). Cependant, la documentation de Hydra indique clairement que ce m\u00e9canisme n\u2019est pas exhaustif et qu\u2019il ne doit pas \u00eatre utilis\u00e9 comme seule mesure pour emp\u00eacher l\u2019ex\u00e9cution de code malveillant. En janvier 2026, ce m\u00e9canisme de liste de blocage n\u2019est toujours pas disponible dans une version publi\u00e9e de Hydra.<\/p>\n<h3><a id=\"post-171119-_heading=h.objxmydpw4e0\"><\/a>NeMo<\/h3>\n<p>Depuis 2019, NVIDIA d\u00e9veloppe la biblioth\u00e8que <a href=\"https:\/\/github.com\/NVIDIA\/NeMo\/tree\/main\" target=\"_blank\" rel=\"noopener\">NeMo<\/a> en tant que \u00ab\u00a0framework d\u2019IA g\u00e9n\u00e9rative \u00e9volutive et cloud-native\u00a0\u00bb. NeMo utilise <a href=\"https:\/\/docs.nvidia.com\/nemo-framework\/user-guide\/24.07\/playbooks\/ptq.html#convert-nemo-checkpoint-to-qnemo-format\">ses propres formats de fichiers<\/a> avec les extensions <span style=\"font-family: 'courier new', courier, monospace;\">.nemo<\/span> et <span style=\"font-family: 'courier new', courier, monospace;\">.qnemo<\/span>, qui sont en r\u00e9alit\u00e9 des fichiers TAR contenant un fichier <span style=\"font-family: 'courier new', courier, monospace;\">model_config.yaml<\/span> qui stocke les m\u00e9tadonn\u00e9es du mod\u00e8le, ainsi qu\u2019un fichier <span style=\"font-family: 'courier new', courier, monospace;\">.pt<\/span> ou <span style=\"font-family: 'courier new', courier, monospace;\">.safetensors<\/span>, selon le cas.<\/p>\n<p>Les principaux points d\u2019entr\u00e9e pour charger ces fichiers de mod\u00e8les <span style=\"font-family: 'courier new', courier, monospace;\">.nemo<\/span> sont <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/github.com\/NVIDIA\/NeMo\/blob\/cd55157cb05e0a60066caf31e3354ff0e690b086\/nemo\/core\/classes\/common.py#L580\" target=\"_blank\" rel=\"noopener\">restore_from()<\/a><\/span> et <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/github.com\/NVIDIA\/NeMo\/blob\/cd55157cb05e0a60066caf31e3354ff0e690b086\/nemo\/core\/classes\/common.py#L711\" target=\"_blank\" rel=\"noopener\">from_pretrained()<\/a><\/span>. Derri\u00e8re plusieurs couches d\u2019abstraction, c\u2019est finalement un module mixte de <a href=\"https:\/\/github.com\/NVIDIA\/NeMo\/blob\/cd55157cb05e0a60066caf31e3354ff0e690b086\/nemo\/core\/classes\/common.py#L472\" target=\"_blank\" rel=\"noopener\">s\u00e9rialisation<\/a> qui est utilis\u00e9 pour g\u00e9rer le chargement de la configuration du mod\u00e8le une fois celle-ci extraite du fichier <span style=\"font-family: 'courier new', courier, monospace;\">model_config.yaml<\/span> int\u00e9gr\u00e9. La figure\u00a02 met en \u00e9vidence l\u2019appel vuln\u00e9rable de <span style=\"font-family: 'courier new', courier, monospace;\">hydra.utils.instantiate()<\/span>.<\/p>\n<figure id=\"attachment_171131\" aria-describedby=\"caption-attachment-171131\" style=\"width: 745px\" class=\"wp-caption alignnone\"><img  class=\"wp-image-171131 lozad\"  data-src=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-163238-171119-2.png\" alt=\"Capture d\u2019\u00e9cran du code informatique de l\u2019API Hydra montrant des instructions conditionnelles \u00e9crites en Python pour g\u00e9rer l\u2019instanciation bas\u00e9e sur la configuration.\" width=\"745\" height=\"225\" \/><figcaption id=\"caption-attachment-171131\" class=\"wp-caption-text\">Figure 2. Appel de <span style=\"font-family: 'courier new', courier, monospace;\">hydra.utils.instantiate()<\/span> dans NeMo.<\/figcaption><\/figure>\n<p>\u00c0 aucun moment, les m\u00e9tadonn\u00e9es ne sont nettoy\u00e9es avant d\u2019\u00eatre transmises \u00e0 <span style=\"font-family: 'courier new', courier, monospace;\">instantiate()<\/span>. \u00c9tant donn\u00e9 que l\u2019appel est effectu\u00e9 avant que la classe de mod\u00e8le cible ne commence son initialisation, il est facile de cr\u00e9er un fichier <span style=\"font-family: 'courier new', courier, monospace;\">model_config.yaml<\/span> contenant un payload op\u00e9rationnel, comme indiqu\u00e9 \u00e0 la figure\u00a03.<\/p>\n<figure id=\"attachment_171142\" aria-describedby=\"caption-attachment-171142\" style=\"width: 400px\" class=\"wp-caption alignnone\"><img  class=\"wp-image-171142 lozad\"  data-src=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-165043-171119-3.png\" alt=\"Capture d\u2019\u00e9cran d\u2019un code dans un \u00e9diteur de texte contenant des lignes \u00e9crites en Python. Ce code comprend une instruction d\u2019impression affichant \u00ab\u00a0Hello world\u00a0\u00bb.\" width=\"400\" height=\"111\" \/><figcaption id=\"caption-attachment-171142\" class=\"wp-caption-text\">Figure 3. Exemple de m\u00e9tadonn\u00e9es d\u00e9clenchant la vuln\u00e9rabilit\u00e9 NeMo.<\/figcaption><\/figure>\n<p>NeMo s\u2019int\u00e8gre \u00e9galement \u00e0 HuggingFace et permet de transmettre le nom d\u2019un mod\u00e8le h\u00e9berg\u00e9 sur HuggingFace \u00e0 <span style=\"font-family: 'courier new', courier, monospace;\">from_pretrained()<\/span>, ce qui correspond \u00e0 la fa\u00e7on dont la plupart des mod\u00e8les NeMo sur HuggingFace sont utilis\u00e9s. Cet appel reste vuln\u00e9rable parce qu\u2019une fois le mod\u00e8le t\u00e9l\u00e9charg\u00e9 depuis HuggingFace, les m\u00eames chemins de code sont ex\u00e9cut\u00e9s.<\/p>\n<p>En janvier 2026, plus de 700\u00a0mod\u00e8les sur HuggingFace provenant de divers d\u00e9veloppeurs sont fournis au format NeMo. Un grand nombre de ces mod\u00e8les figurent parmi les plus populaires sur HuggingFace, comme <a href=\"https:\/\/huggingface.co\/nvidia\/parakeet-tdt-0.6b-v2\" target=\"_blank\" rel=\"noopener\">parakeet<\/a> de NVIDIA. Cette vuln\u00e9rabilit\u00e9 semble exister <a href=\"https:\/\/github.com\/NVIDIA\/NeMo\/commit\/3206fafab654d9448297211ac50dfd4089338fe5\" target=\"_blank\" rel=\"noopener\">depuis au moins 2020<\/a>.<\/p>\n<p>Le format PyTorch sur lequel s\u2019appuie NeMo autorise l\u2019ex\u00e9cution de code via des fichiers <span style=\"font-family: 'courier new', courier, monospace;\">.pickle<\/span> int\u00e9gr\u00e9s, mais cela <a href=\"https:\/\/docs.pytorch.org\/docs\/stable\/generated\/torch.load.html#torch.load\" target=\"_blank\" rel=\"noopener\">est clairement document\u00e9<\/a>. Ce format PyTorch d\u00e9sactive \u00e9galement l\u2019ex\u00e9cution arbitraire par d\u00e9faut et offre plusieurs m\u00e9canismes de protection, tels que la <a href=\"https:\/\/docs.pytorch.org\/docs\/stable\/notes\/serialization.html#torch.serialization.add_safe_globals\" target=\"_blank\" rel=\"noopener\">mise en liste blanche des modules utilisables<\/a> lors du chargement des fichiers <span style=\"font-family: 'courier new', courier, monospace;\">.pickle<\/span>. NeMo permet de charger des fichiers <span style=\"font-family: 'courier new', courier, monospace;\">.pickle<\/span> int\u00e9gr\u00e9s dans les fichiers PyTorch contenus dans les fichiers <span style=\"font-family: 'courier new', courier, monospace;\">.nemo<\/span>, mais le m\u00e9canisme de liste des autorisations int\u00e9gr\u00e9 \u00e0 PyTorch devrait emp\u00eacher toute ex\u00e9cution de code arbitraire.<\/p>\n<p>NVIDIA a reconnu ce probl\u00e8me, a publi\u00e9 des informations sur la vuln\u00e9rabilit\u00e9 <a href=\"https:\/\/nvidia.custhelp.com\/app\/answers\/detail\/a_id\/5686\" target=\"_blank\" rel=\"noopener\">CVE-2025-23304<\/a>, class\u00e9e de gravit\u00e9 \u00e9lev\u00e9e, et a d\u00e9ploy\u00e9 un correctif dans la version\u00a02.3.2 de NeMo.<\/p>\n<p>Pour r\u00e9soudre ce probl\u00e8me, NeMo a ajout\u00e9 une fonction <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/github.com\/NVIDIA-NeMo\/NeMo\/blob\/v2.5.2\/nemo\/core\/classes\/common.py#L165\" target=\"_blank\" rel=\"noopener\">safe_instantiate<\/a> <\/span>pour valider les valeurs <span style=\"font-family: 'courier new', courier, monospace;\">_target_<\/span> des configurations Hydra avant leur ex\u00e9cution. Cette fonction recherche de mani\u00e8re r\u00e9cursive les valeurs <span style=\"font-family: 'courier new', courier, monospace;\">_target_<\/span> dans la configuration et valide chacune d\u2019entre elles, emp\u00eachant ainsi l\u2019utilisation d'objets imbriqu\u00e9s pour l\u2019ex\u00e9cution de code \u00e0 distance (RCE). Une nouvelle fonction <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/github.com\/NVIDIA-NeMo\/NeMo\/blob\/v2.5.2\/nemo\/core\/classes\/common.py#L92\" target=\"_blank\" rel=\"noopener\">_is_target_allowed<\/a><\/span> v\u00e9rifie d\u2019abord chaque valeur <span style=\"font-family: 'courier new', courier, monospace;\">_target_<\/span> en la comparant \u00e0 une liste des pr\u00e9fixes autoris\u00e9s contenant des noms de packages de NeMo, PyTorch et de biblioth\u00e8ques associ\u00e9es.<\/p>\n<p>Cette v\u00e9rification des pr\u00e9fixes ne suffirait pas \u00e0 emp\u00eacher l\u2019importation implicite de modules dangereux, comme c\u2019est le cas pour le nouveau m\u00e9canisme de liste de blocage de Hydra. Cependant, NeMo va plus loin et importe chaque cible via Hydra et v\u00e9rifie ensuite si\u00a0:<\/p>\n<ul>\n<li>Il s\u2019agit d\u2019une sous-classe d\u2019une classe attendue.<\/li>\n<li>le nom du module import\u00e9 figure dans une liste des autorisations de modules attendus.<\/li>\n<\/ul>\n<p>En v\u00e9rifiant la valeur r\u00e9ellement import\u00e9e par rapport \u00e0 ces listes d\u2019autorisations, NeMo s\u2019assure que seules les cibles attendues sont ex\u00e9cut\u00e9es. Par exemple, la cible <span style=\"font-family: 'courier new', courier, monospace;\">nemo.core.classes.common.os.system<\/span> renvoie au module <span style=\"font-family: 'courier new', courier, monospace;\">posix<\/span>, qui ne fait manifestement pas partie de la biblioth\u00e8que\u00a0NeMo.<\/p>\n<h3><a id=\"post-171119-_heading=h.3btkcs6wffhw\"><\/a>Uni2TS<\/h3>\n<p>En 2024, l\u2019\u00e9quipe de recherche en IA de Salesforce a publi\u00e9 un article intitul\u00e9 <a href=\"https:\/\/arxiv.org\/abs\/2402.02592\" target=\"_blank\" rel=\"noopener\">Unified Training of Universal Time Series Transformers<\/a> (Formation unifi\u00e9e des transformateurs de s\u00e9ries temporelles universelles), pr\u00e9sentant un ensemble de mod\u00e8les publi\u00e9s sur le site <a href=\"https:\/\/huggingface.co\/collections\/Salesforce\/moirai-r-models-65c8d3a94c51428c300e0742\" target=\"_blank\" rel=\"noopener\">HuggingFace<\/a>. Cet article et l\u2019utilisation de ces mod\u00e8les d\u00e9pendent de <a href=\"https:\/\/github.com\/SalesforceAIResearch\/uni2ts\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">uni2TS<\/span><\/a>, une biblioth\u00e8que Python open-source publi\u00e9e en m\u00eame temps que l\u2019article de Salesforce.<\/p>\n<p>La biblioth\u00e8que <span style=\"font-family: 'courier new', courier, monospace;\">uni2TS<\/span> fonctionne exclusivement avec des fichiers <span style=\"font-family: 'courier new', courier, monospace;\">.safetensors<\/span>, qui ont \u00e9t\u00e9 <a href=\"https:\/\/github.com\/huggingface\/safetensors?tab=readme-ov-file#safetensors-1\" target=\"_blank\" rel=\"noopener\">explicitement con\u00e7us<\/a> pour offrir une alternative s\u00fbre aux formats de mod\u00e8les permettant l\u2019ex\u00e9cution de code. Le format safetensors ne permet pas non plus de stocker explicitement les configurations de mod\u00e8les ou de pipelines.<\/p>\n<p>Pour faciliter le stockage de ces configurations, des biblioth\u00e8ques telles que <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/huggingface.co\/docs\/huggingface_hub\/main\/en\/guides\/integrations#config\" target=\"_blank\" rel=\"noopener\">huggingface_hub<\/a><\/span> de HuggingFace utilisent un fichier <span style=\"font-family: 'courier new', courier, monospace;\">config.json<\/span> stock\u00e9 dans le r\u00e9f\u00e9rentiel d\u2019un mod\u00e8le. Pour les mod\u00e8les utilisant des classes d\u2019une des biblioth\u00e8ques ML centrales de HuggingFace, cette op\u00e9ration se fait en toute s\u00e9curit\u00e9, car seuls les param\u00e8tres pouvant \u00eatre stock\u00e9s directement sous forme de types primitifs JSON sont utilis\u00e9s. Ces valeurs sont ensuite transmises \u00e0 un ensemble de classes pr\u00e9d\u00e9finies et cod\u00e9es en dur.<\/p>\n<p>Cependant, <span style=\"font-family: 'courier new', courier, monospace;\">huggingface_hub<\/span> fournit une interface <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/huggingface.co\/docs\/huggingface_hub\/en\/package_reference\/mixins#huggingface_hub.PyTorchModelHubMixin\" target=\"_blank\" rel=\"noopener\">PyTorchModelHubMixin<\/a><\/span> pour cr\u00e9er des classes de mod\u00e8les personnalis\u00e9es qui peuvent \u00eatre int\u00e9gr\u00e9es au reste de leur framework. Dans le cadre de cette interface, les valeurs sont lues \u00e0 partir du fichier <span style=\"font-family: 'courier new', courier, monospace;\">config.json<\/span> et transmises \u00e0 la classe du mod\u00e8le.<\/p>\n<p>Cette interface fournit un m\u00e9canisme peu utilis\u00e9 pour enregistrer des fonctions appel\u00e9es codeurs, qui traitent certains arguments avant qu\u2019ils ne soient transmis \u00e0 la classe. La biblioth\u00e8que <span style=\"font-family: 'courier new', courier, monospace;\">uni2TS<\/span> <a href=\"https:\/\/github.com\/SalesforceAIResearch\/uni2ts\/blob\/964240482e1f444987fe8ef8451871f1a57dd568\/src\/uni2ts\/model\/moirai_moe\/module.py#L59\" target=\"_blank\" rel=\"noopener\">exploite ce m\u00e9canisme<\/a> pour d\u00e9coder la configuration d\u2019un argument sp\u00e9cifique \u00e0 l\u2019aide d\u2019un appel \u00e0 <span style=\"font-family: 'courier new', courier, monospace;\">hydra.utils.instantiate()<\/span> avant qu\u2019il ne soit transmis \u00e0 la classe cible, comme indiqu\u00e9 \u00e0 la figure\u00a04.<\/p>\n<figure id=\"attachment_171153\" aria-describedby=\"caption-attachment-171153\" style=\"width: 807px\" class=\"wp-caption alignnone\"><img  class=\"wp-image-171153 lozad\"  data-src=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-166735-171119-4.png\" alt=\"Capture d\u2019\u00e9cran d\u2019un code Python comprenant une fonction de d\u00e9codage de la sortie de distribution et une d\u00e9finition de classe via PyTorch.\" width=\"807\" height=\"253\" srcset=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-166735-171119-4.png 807w, https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-166735-171119-4-786x246.png 786w, https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-166735-171119-4-768x241.png 768w\" sizes=\"(max-width: 807px) 100vw, 807px\" \/><figcaption id=\"caption-attachment-171153\" class=\"wp-caption-text\">Figure 4. Call to <span style=\"font-family: 'courier new', courier, monospace;\">hydra.utils.instantiate()<\/span> in <span style=\"font-family: 'courier new', courier, monospace;\">uni2TS<\/span>.<\/figcaption><\/figure>\n<p>Ce code est ex\u00e9cut\u00e9 lorsque l\u2019un des mod\u00e8les publi\u00e9s est charg\u00e9 via <span style=\"font-family: 'courier new', courier, monospace;\">MoraiModule.from_pretrained()<\/span> ou <span style=\"font-family: 'courier new', courier, monospace;\">MoraiMoEModule.from_pretrained()<\/span>. En ajoutant notre payload au fichier <span style=\"font-family: 'courier new', courier, monospace;\">config.json<\/span> fourni avec les mod\u00e8les utilisant <span style=\"font-family: 'courier new', courier, monospace;\">uni2TS<\/span>, comme indiqu\u00e9 \u00e0 la figure\u00a05, il est possible de r\u00e9aliser une ex\u00e9cution de code \u00e0 distance (RCE) lors du chargement du mod\u00e8le.<\/p>\n<figure id=\"attachment_171164\" aria-describedby=\"caption-attachment-171164\" style=\"width: 400px\" class=\"wp-caption alignnone\"><img  class=\"wp-image-171164 lozad\"  data-src=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-168582-171119-5.png\" alt=\"Capture d\u2019\u00e9cran d\u2019un script JSON contenant un code de fonction d\u2019impression Python qui affiche \u00ab\u00a0Hello world\u00a0\u00bb.\" width=\"400\" height=\"211\" \/><figcaption id=\"caption-attachment-171164\" class=\"wp-caption-text\">Figure 5. Exemple de m\u00e9tadonn\u00e9es <span style=\"font-family: 'courier new', courier, monospace;\">config.json<\/span> d\u00e9clenchant la vuln\u00e9rabilit\u00e9 <span style=\"font-family: 'courier new', courier, monospace;\">uni2TS<\/span>.<\/figcaption><\/figure>\n<p>Les mod\u00e8les Salesforce comptent d\u00e9j\u00e0 des centaines de milliers de t\u00e9l\u00e9chargements sur HuggingFace. Plusieurs adaptations de ces mod\u00e8les ont \u00e9galement \u00e9t\u00e9 publi\u00e9es sur HuggingFace par d\u2019autres utilisateurs. Aucune preuve d\u2019activit\u00e9 malveillante impliquant ces mod\u00e8les n\u2019a \u00e9t\u00e9 d\u00e9tect\u00e9e.<\/p>\n<p>Salesforce a reconnu ce probl\u00e8me, a publi\u00e9 des informations sur la vuln\u00e9rabilit\u00e9 <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=005239354&amp;type=1\" target=\"_blank\" rel=\"noopener\">CVE-2026-22584<\/a>, class\u00e9e de gravit\u00e9 \u00e9lev\u00e9e, et a d\u00e9ploy\u00e9 un correctif le 31\u00a0juillet. Ce correctif met en \u0153uvre une liste des autorisations et un contr\u00f4le de validation strict afin de garantir que seuls les modules explicitement autoris\u00e9s peuvent \u00eatre ex\u00e9cut\u00e9s.<\/p>\n<h3><a id=\"post-171119-_heading=h.awgw3yxhwsi7\"><\/a>ml-flextok<\/h3>\n<p>D\u00e9but 2025, <a href=\"https:\/\/arxiv.org\/abs\/2502.13967\" target=\"_blank\" rel=\"noopener\">Apple et le laboratoire Visual Intelligence and Learning Lab de l\u2019\u00c9cole polytechnique f\u00e9d\u00e9rale de Suisse (EPFL VILAB) ont publi\u00e9 des recherches<\/a> pr\u00e9sentant une biblioth\u00e8que Python associ\u00e9e appel\u00e9e <a href=\"https:\/\/github.com\/apple\/ml-flextok\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">ml-flextok<\/span><\/a>. Comme <span style=\"font-family: 'courier new', courier, monospace;\">uni2TS<\/span>, <span style=\"font-family: 'courier new', courier, monospace;\">ml-flextok<\/span> fonctionne exclusivement avec le format safetensors et \u00e9tend <span style=\"font-family: 'courier new', courier, monospace;\">PyTorchModelHubMixin<\/span>. Il peut \u00e9galement charger des m\u00e9tadonn\u00e9es \u00e0 partir d\u2019un fichier <span style=\"font-family: 'courier new', courier, monospace;\">config.json<\/span> inclus dans le r\u00e9f\u00e9rentiel de mod\u00e8les. Cette biblioth\u00e8que permet \u00e9galement de charger directement les donn\u00e9es de configuration du fichier <span style=\"font-family: 'courier new', courier, monospace;\">.safetensors<\/span>, en stockant ces informations dans la section des m\u00e9tadonn\u00e9es du fichier sous la cl\u00e9 <span style=\"font-family: 'courier new', courier, monospace;\">__metadata__<\/span>.<\/p>\n<p>Comme le format safetensors repr\u00e9sente les m\u00e9tadonn\u00e9es sous forme de dictionnaire dont les cl\u00e9s et les valeurs sont des cha\u00eenes de caract\u00e8res, et comme la configuration du mod\u00e8le d\u00e9pend de listes de param\u00e8tres, un codage secondaire doit \u00eatre utilis\u00e9. <span style=\"font-family: 'courier new', courier, monospace;\">ml-flextok<\/span> utilise Python comme codage secondaire et recourt \u00e0 <a href=\"https:\/\/github.com\/apple\/ml-flextok\/blob\/87d00cc8babf4a25ffce0f3f0c4d8b529d3d6abf\/flextok\/utils\/checkpoint.py#L35\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">ast.literal_eval()<\/span><\/a> de la biblioth\u00e8que standard de Python pour d\u00e9coder les m\u00e9tadonn\u00e9es.<\/p>\n<p><a href=\"https:\/\/docs.python.org\/3\/library\/ast.html#ast.literal_eval\" target=\"_blank\" rel=\"noopener\">Comme indiqu\u00e9 dans la documentation<\/a>, cette fonction ne permet pas l\u2019ex\u00e9cution de code arbitraire, mais elle est susceptible de faire l\u2019objet d\u2019attaques entra\u00eenant l\u2019\u00e9puisement de la m\u00e9moire, une consommation excessive du processeur et le blocage du processus. Une fois les m\u00e9tadonn\u00e9es d\u00e9cod\u00e9es, ml-flextok les transmet directement \u00e0 la fonction <a href=\"https:\/\/github.com\/apple\/ml-flextok\/blob\/87d00cc8babf4a25ffce0f3f0c4d8b529d3d6abf\/flextok\/utils\/checkpoint.py#L78\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">hydra.utils.instantiate()<\/span><\/a>.<\/p>\n<p>Si le mod\u00e8le est charg\u00e9 \u00e0 partir de HuggingFace, ces m\u00e9tadonn\u00e9es sont lues depuis <span style=\"font-family: 'courier new', courier, monospace;\">config.json<\/span> et ne sont pas doublement cod\u00e9es, car les structures complexes sont prises en charge. Ces donn\u00e9es JSON sont charg\u00e9es sous forme de dictionnaire, et des sections sp\u00e9cifiques sont transmises directement \u00e0 la fonction <span style=\"font-family: 'courier new', courier, monospace;\"><a href=\"https:\/\/github.com\/apple\/ml-flextok\/blob\/82379009ef7ee69bcda648fce8a1bbe3226ae377\/flextok\/flextok_wrapper.py#L264\" target=\"_blank\" rel=\"noopener\">instantiate()<\/a><\/span>.<\/p>\n<p>Dans les deux cas, les payloads sont cr\u00e9\u00e9s avec des noms correspondant aux arguments de <span style=\"font-family: 'courier new', courier, monospace;\">instantiate()<\/span>. Que le payload soit ajout\u00e9 directement au fichier <span style=\"font-family: 'courier new', courier, monospace;\">.safetensors<\/span> ou au package config.json, son codage et son emplacement diff\u00e8rent l\u00e9g\u00e8rement, mais l\u2019exploitation reste simple et directe. La figure\u00a06 illustre le payload plac\u00e9 dans les m\u00e9tadonn\u00e9es d\u2019un fichier <span style=\"font-family: 'courier new', courier, monospace;\">.safetensors<\/span>.<\/p>\n<figure id=\"attachment_171175\" aria-describedby=\"caption-attachment-171175\" style=\"width: 885px\" class=\"wp-caption alignnone\"><img  class=\"wp-image-171175 lozad\"  data-src=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-170404-171119-6.png\" alt=\"Ligne de code affich\u00e9e sur un fond sombre qui comprend les termes \u00ab\u00a0payload\u00a0\u00bb, \u00ab\u00a0target\u00a0\u00bb et \u00ab\u00a0builtins\u00a0\u00bb.\" width=\"885\" height=\"73\" srcset=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-170404-171119-6.png 885w, https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-170404-171119-6-786x65.png 786w, https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/word-image-170404-171119-6-768x63.png 768w\" sizes=\"(max-width: 885px) 100vw, 885px\" \/><figcaption id=\"caption-attachment-171175\" class=\"wp-caption-text\">Figure 6. Exemple de m\u00e9tadonn\u00e9es <span style=\"font-family: 'courier new', courier, monospace;\">.safetensors<\/span> d\u00e9clenchant la vuln\u00e9rabilit\u00e9 <span style=\"font-family: 'courier new', courier, monospace;\">uni2TS<\/span>.<\/figcaption><\/figure>\n<p>En janvier 2026, aucun mod\u00e8le sur HuggingFace ne semble utiliser la biblioth\u00e8que <span style=\"font-family: 'courier new', courier, monospace;\">ml-flextok<\/span>, \u00e0 l\u2019exception de ceux publi\u00e9s par EPFL VILAB, qui cumulent des dizaines de milliers de t\u00e9l\u00e9chargements au total.<\/p>\n<p>Apple et EPFL VILAB ont mis \u00e0 jour leur code pour corriger ces vuln\u00e9rabilit\u00e9s en utilisant des fichiers <a href=\"https:\/\/yaml.org\/\" target=\"_blank\" rel=\"noopener\">YAML<\/a> pour analyser leurs configurations et en ajoutant une <a href=\"https:\/\/github.com\/apple\/ml-flextok\/blob\/28e0ffc24e590bdab0099d4a317b601cdc674a5b\/flextok\/utils\/checkpoint.py#L23\" target=\"_blank\" rel=\"noopener\">liste de classes autoris\u00e9es<\/a> transmise \u00e0 la fonction <span style=\"font-family: 'courier new', courier, monospace;\">instantiate()<\/span> de Hydra. Ils ont \u00e9galement <a href=\"https:\/\/github.com\/apple\/ml-flextok\/blob\/28e0ffc24e590bdab0099d4a317b601cdc674a5b\/README.md#model-zoo\" target=\"_blank\" rel=\"noopener\">mis \u00e0 jour leur documentation<\/a> pour indiquer que les cha\u00eenes de caract\u00e8res stock\u00e9es dans les fichiers de mod\u00e8les sont ex\u00e9cut\u00e9es comme du code et que seuls les mod\u00e8les provenant de sources fiables doivent \u00eatre charg\u00e9s.<\/p>\n<h2><a id=\"post-171119-_heading=h.3sgwz7nig754\"><\/a>Conclusion<\/h2>\n<p>Palo\u00a0Alto\u00a0Networks n\u2019a identifi\u00e9 aucun fichier de mod\u00e8le exploitant ces vuln\u00e9rabilit\u00e9s dans des attaques r\u00e9elles. Cependant, les attaquants ont de nombreuses possibilit\u00e9s de le faire.<\/p>\n<p>Il est courant que les d\u00e9veloppeurs cr\u00e9ent leurs propres variantes des mod\u00e8les de pointe avec diff\u00e9rents r\u00e9glages et quantifications, souvent provenant de chercheurs non affili\u00e9s \u00e0 des institutions reconnues. Un attaquant n\u2019aurait qu\u2019\u00e0 modifier un mod\u00e8le populaire existant, en promettant un avantage r\u00e9el ou suppos\u00e9, puis \u00e0 ajouter des m\u00e9tadonn\u00e9es malveillantes.<\/p>\n<p>Avant cette d\u00e9couverte, rien n\u2019indiquait que ces biblioth\u00e8ques pouvaient \u00eatre vuln\u00e9rables ou qu\u2019il fallait charger uniquement des fichiers provenant de sources fiables. De plus, HuggingFace ne rend pas le contenu des m\u00e9tadonn\u00e9es de ces fichiers facilement accessible aux utilisateurs comme il le fait dans d\u2019autres cas (par exemple, les API r\u00e9f\u00e9renc\u00e9es dans les fichiers <span style=\"font-family: 'courier new', courier, monospace;\">.pickle<\/span>). Il ne signale pas non plus les fichiers au format safetensors ou NeMo comme \u00e9tant potentiellement dangereux.<\/p>\n<p>Enfin, comme les derni\u00e8res avanc\u00e9es dans ce domaine requi\u00e8rent souvent du code et pas seulement des poids de mod\u00e8les, on observe une prolif\u00e9ration de biblioth\u00e8ques associ\u00e9es. En octobre 2025, nous avons identifi\u00e9 plus d\u2019une centaine de biblioth\u00e8ques Python diff\u00e9rentes utilis\u00e9es par des mod\u00e8les sur HuggingFace, dont pr\u00e8s de 50\u00a0exploitent Hydra d\u2019une mani\u00e8re ou d\u2019une autre. M\u00eame si ces formats sont s\u00fbrs en eux-m\u00eames, le code qui les exploite pr\u00e9sente une vaste surface d\u2019attaque.<\/p>\n<h3><a id=\"post-171119-_heading=h.4dwruh5c8f2c\"><\/a>Protection et att\u00e9nuation des risques par Palo\u00a0Alto\u00a0Networks<\/h3>\n<p>Les clients de Palo\u00a0Alto\u00a0Networks sont mieux prot\u00e9g\u00e9s contre les menaces d\u00e9crites ci-dessus gr\u00e2ce aux produits suivants\u00a0:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.paloaltonetworks.com\/prisma\/prisma-ai-runtime-security\" target=\"_blank\" rel=\"noopener\">Prisma AIRS<\/a> est capable d\u2019identifier les mod\u00e8les exploitant ces vuln\u00e9rabilit\u00e9s et d\u2019extraire leurs payloads.<\/li>\n<li>La <a href=\"https:\/\/www.paloaltonetworks.com\/cortex\/cloud\/vulnerability-management\" target=\"_blank\" rel=\"noopener\">gestion des vuln\u00e9rabilit\u00e9s<\/a> de Cortex\u00a0Cloud identifie et g\u00e8re les images de base pour les environnements cloud de machines virtuelles et de conteneurs. Cela permet de d\u00e9tecter et de signaler les vuln\u00e9rabilit\u00e9s et les configurations erron\u00e9es, puis de fournir des t\u00e2ches de rem\u00e9diation pour les images de conteneurs de niveau de base identifi\u00e9es. L\u2019agent Cortex Cloud permet \u00e9galement de d\u00e9tecter les op\u00e9rations du runtime d\u00e9crites dans cet article.<\/li>\n<li>Le <a href=\"https:\/\/www.paloaltonetworks.com\/resources\/datasheets\/unit-42-ai-security-assessment\" target=\"_blank\" rel=\"noopener\">bilan de s\u00e9curit\u00e9 de l\u2019IA d\u2019Unit\u00a042<\/a> aide les organisations \u00e0 r\u00e9duire les risques li\u00e9s \u00e0 l\u2019adoption de l\u2019IA, \u00e0 s\u00e9curiser l\u2019innovation en IA et \u00e0 renforcer la gouvernance de l\u2019IA.<\/li>\n<\/ul>\n<p>Si vous pensez que votre entreprise a pu \u00eatre compromise ou si vous faites face \u00e0 une urgence, contactez l\u2019<a href=\"https:\/\/start.paloaltonetworks.com\/contact-unit42.html\" target=\"_blank\" rel=\"noopener\">\u00e9quipe Unit\u00a042 de r\u00e9ponse \u00e0 incident<\/a> ou composez l\u2019un des num\u00e9ros suivants\u00a0:<\/p>\n<ul>\n<li>Am\u00e9rique du Nord\u00a0: Gratuit\u00a0: +1 (866) 486-4842 (866.4.UNIT42)<\/li>\n<li>Royaume-Uni\u00a0: +44\u00a020\u00a03743\u00a03660<\/li>\n<li>Europe et Moyen-Orient\u00a0: +31.20.299.3130<\/li>\n<li>Asie\u00a0: +65.6983.8730<\/li>\n<li>Japon\u00a0: +81\u00a050\u00a01790\u00a00200<\/li>\n<li>Australie\u00a0: +61.2.4062.7950<\/li>\n<li>Inde\u00a0: 000 800 050 45107<\/li>\n<li>Cor\u00e9e du Sud\u00a0: +82.080.467.8774<\/li>\n<\/ul>\n<p>Palo\u00a0Alto\u00a0Networks a partag\u00e9 ces conclusions avec les autres membres de la Cyber\u00a0Threat\u00a0Alliance (CTA). Les membres de la CTA s\u2019appuient sur ces renseignements pour d\u00e9ployer rapidement des mesures de protection aupr\u00e8s de leurs clients et perturber de mani\u00e8re coordonn\u00e9e les activit\u00e9s des cybercriminels. Cliquez ici pour en savoir plus sur la <a href=\"https:\/\/www.cyberthreatalliance.org\" target=\"_blank\" rel=\"noopener\">Cyber\u00a0Threat Alliance<\/a>.<\/p>\n<h2><a id=\"post-171119-_heading=h.r5hws4qyuodj\"><\/a>Pour aller plus loin<\/h2>\n<ul>\n<li><a href=\"https:\/\/hydra.cc\/\" target=\"_blank\" rel=\"noopener\">Documentation de Hydra<\/a> \u2013 Hydra<\/li>\n<li><a href=\"https:\/\/github.com\/NVIDIA\/NeMo\/tree\/main\" target=\"_blank\" rel=\"noopener\">Code source de NeMo <\/a>\u2013 NVIDIA-NeMo on GitHub<\/li>\n<li><a href=\"https:\/\/github.com\/SalesforceAIResearch\/uni2ts\" target=\"_blank\" rel=\"noopener\">Code source de uni2ts <\/a>\u2013 SalesforceAIResearch on GitHub<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/ml-flextok\" target=\"_blank\" rel=\"noopener\">Code source de ml-flextok <\/a>\u2013 Apple on GitHub<\/li>\n<li><a href=\"https:\/\/huggingface.co\/models?library=nemo\" target=\"_blank\" rel=\"noopener\">Mod\u00e8les NeMo sur HuggingFace <\/a>\u2013 HuggingFace<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Nous avons identifi\u00e9 des vuln\u00e9rabilit\u00e9s li\u00e9es \u00e0 l\u2019ex\u00e9cution de code \u00e0 distance dans des biblioth\u00e8ques IA\/ML open-source publi\u00e9es par Apple, Salesforce et NVIDIA.<\/p>\n","protected":false},"author":366,"featured_media":170314,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[8832,8850],"tags":[9761,9899,9900,9898,9546,9897,9509],"product_categories":[9005,9041,9046,9165,9151],"coauthors":[9870],"class_list":["post-171119","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-threat-research-fr","category-vulnerabilities-fr","tag-apple-fr","tag-cve-2025-23304","tag-cve-2026-22584","tag-nvidia","tag-python-fr","tag-pytorch","tag-salesforce-fr","product_categories-code-to-cloud-platform-fr","product_categories-cortex-fr","product_categories-cortex-cloud-fr","product_categories-ai-security-assessment-fr","product_categories-unit-42-incident-response-fr"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v27.0) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Ex\u00e9cution de code \u00e0 distance dans des formats et biblioth\u00e8ques IA\/ML modernes<\/title>\n<meta name=\"description\" content=\"Nous avons identifi\u00e9 des vuln\u00e9rabilit\u00e9s li\u00e9es \u00e0 l\u2019ex\u00e9cution de code \u00e0 distance dans des biblioth\u00e8ques IA\/ML open-source publi\u00e9es par Apple, Salesforce et NVIDIA.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ex\u00e9cution de code \u00e0 distance dans des formats et biblioth\u00e8ques IA\/ML modernes\" \/>\n<meta property=\"og:description\" content=\"Nous avons identifi\u00e9 des vuln\u00e9rabilit\u00e9s li\u00e9es \u00e0 l\u2019ex\u00e9cution de code \u00e0 distance dans des biblioth\u00e8ques IA\/ML open-source publi\u00e9es par Apple, Salesforce et NVIDIA.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/\" \/>\n<meta property=\"og:site_name\" content=\"Unit 42\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-13T14:56:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-26T16:41:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/05_Vulnerabilities_1920x900.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Curtis Carmony\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ex\u00e9cution de code \u00e0 distance dans des formats et biblioth\u00e8ques IA\/ML modernes","description":"Nous avons identifi\u00e9 des vuln\u00e9rabilit\u00e9s li\u00e9es \u00e0 l\u2019ex\u00e9cution de code \u00e0 distance dans des biblioth\u00e8ques IA\/ML open-source publi\u00e9es par Apple, Salesforce et NVIDIA.","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:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/","og_locale":"fr_FR","og_type":"article","og_title":"Ex\u00e9cution de code \u00e0 distance dans des formats et biblioth\u00e8ques IA\/ML modernes","og_description":"Nous avons identifi\u00e9 des vuln\u00e9rabilit\u00e9s li\u00e9es \u00e0 l\u2019ex\u00e9cution de code \u00e0 distance dans des biblioth\u00e8ques IA\/ML open-source publi\u00e9es par Apple, Salesforce et NVIDIA.","og_url":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/","og_site_name":"Unit 42","article_published_time":"2026-01-13T14:56:53+00:00","article_modified_time":"2026-01-26T16:41:29+00:00","og_image":[{"width":1920,"height":900,"url":"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/05_Vulnerabilities_1920x900.jpg","type":"image\/jpeg"}],"author":"Curtis Carmony","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/#article","isPartOf":{"@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/"},"author":{"name":"Sheida Azimi","@id":"https:\/\/unit42.paloaltonetworks.com\/#\/schema\/person\/7ee97ec6f224446d57c0383eb5fd3639"},"headline":"Ex\u00e9cution de code \u00e0 distance dans des formats et biblioth\u00e8ques IA\/ML modernes","datePublished":"2026-01-13T14:56:53+00:00","dateModified":"2026-01-26T16:41:29+00:00","mainEntityOfPage":{"@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/"},"wordCount":4131,"image":{"@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/#primaryimage"},"thumbnailUrl":"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/05_Vulnerabilities_1920x900.jpg","keywords":["Apple","CVE-2025-23304","CVE-2026-22584","NVIDIA","Python","PyTorch","Salesforce"],"articleSection":["Recherche sur les menaces","Vuln\u00e9rabilit\u00e9s"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/","url":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/","name":"Ex\u00e9cution de code \u00e0 distance dans des formats et biblioth\u00e8ques IA\/ML modernes","isPartOf":{"@id":"https:\/\/unit42.paloaltonetworks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/#primaryimage"},"image":{"@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/#primaryimage"},"thumbnailUrl":"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/05_Vulnerabilities_1920x900.jpg","datePublished":"2026-01-13T14:56:53+00:00","dateModified":"2026-01-26T16:41:29+00:00","author":{"@id":"https:\/\/unit42.paloaltonetworks.com\/#\/schema\/person\/7ee97ec6f224446d57c0383eb5fd3639"},"description":"Nous avons identifi\u00e9 des vuln\u00e9rabilit\u00e9s li\u00e9es \u00e0 l\u2019ex\u00e9cution de code \u00e0 distance dans des biblioth\u00e8ques IA\/ML open-source publi\u00e9es par Apple, Salesforce et NVIDIA.","breadcrumb":{"@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/#primaryimage","url":"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/05_Vulnerabilities_1920x900.jpg","contentUrl":"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2026\/01\/05_Vulnerabilities_1920x900.jpg","width":1920,"height":900,"caption":"Pictorial representation of remote code execution in AI and machine learning libraries. Close-up of a woman wearing glasses and focusing intently on a computer screen."},{"@type":"BreadcrumbList","@id":"https:\/\/unit42.paloaltonetworks.com\/fr\/rce-vulnerabilities-in-ai-python-libraries\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/unit42.paloaltonetworks.com\/"},{"@type":"ListItem","position":2,"name":"Ex\u00e9cution de code \u00e0 distance dans des formats et biblioth\u00e8ques IA\/ML modernes"}]},{"@type":"WebSite","@id":"https:\/\/unit42.paloaltonetworks.com\/#website","url":"https:\/\/unit42.paloaltonetworks.com\/","name":"Unit 42","description":"Palo Alto Networks","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/unit42.paloaltonetworks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/unit42.paloaltonetworks.com\/#\/schema\/person\/7ee97ec6f224446d57c0383eb5fd3639","name":"Sheida Azimi","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/unit42.paloaltonetworks.com\/#\/schema\/person\/image\/4ffb3c2d260a0150fb91b3715442f8b3","url":"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2018\/11\/unit-news-meta.svg","contentUrl":"https:\/\/unit42.paloaltonetworks.com\/wp-content\/uploads\/2018\/11\/unit-news-meta.svg","caption":"Sheida Azimi"},"url":"https:\/\/unit42.paloaltonetworks.com\/fr\/author\/sheida-azimi\/"}]}},"_links":{"self":[{"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/posts\/171119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/users\/366"}],"replies":[{"embeddable":true,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/comments?post=171119"}],"version-history":[{"count":1,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/posts\/171119\/revisions"}],"predecessor-version":[{"id":171186,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/posts\/171119\/revisions\/171186"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/media\/170314"}],"wp:attachment":[{"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/media?parent=171119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/categories?post=171119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/tags?post=171119"},{"taxonomy":"product_categories","embeddable":true,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/product_categories?post=171119"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/unit42.paloaltonetworks.com\/fr\/wp-json\/wp\/v2\/coauthors?post=171119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}