[{"data":1,"prerenderedAt":1420},["ShallowReactive",2],{"/fr-fr/blog/critical-rce-in-serena":3,"navigation-fr-fr":657,"banner-fr-fr":1093,"footer-fr-fr":1100,"blog-post-authors-fr-fr-Daniel Abeles|Abisheik Magesh":1350,"blog-related-posts-fr-fr-critical-rce-in-serena":1376,"blog-share-wrapper-fr-fr":1401,"next-steps-fr-fr":1411},{"id":4,"title":5,"authors":6,"body":9,"category":639,"date":640,"description":641,"extension":642,"externalUrl":643,"faq":643,"featured":262,"heroImage":644,"meta":645,"navigation":262,"path":646,"seo":647,"slug":650,"stem":651,"tags":652,"template":655,"updatedDate":643,"__hash__":656},"blogPosts/fr-fr/blog/critical-rce-in-serena.md","Exécution critique de code à distance dans Serena, un agent de codage MCP très répandu",[7,8],"Daniel Abeles","Abisheik Magesh",{"type":10,"value":11,"toc":619},"minimark",[12,23,35,38,43,46,53,56,60,65,68,78,88,92,103,137,155,159,173,338,354,358,383,389,438,441,444,448,454,457,461,468,471,475,478,481,484,487,491,495,502,506,509,525,529,532,536,593,595,598,602,605,609,612,615],[13,14,15,16,22],"p",{},"Serena, l'un des agents d'IA pour le code les plus utilisés, exécutait du code fourni par un attaquant dès qu'un développeur ouvrait un projet. Le Threat Research Group de GitLab a découvert une injection de template côté serveur critique (",[17,18,21],"a",{"href":19,"rel":20},"https://github.com/oraios/serena/security/advisories/GHSA-pp25-4cg4-qcr9",[],"GHSA-pp25-4cg4-qcr9",", CVE en attente) qui exécute du code arbitraire dans le processus Serena. Toute personne utilisant serena-agent 1.6.1 ou une version antérieure doit le mettre à jour vers la version 1.7.0 immédiatement.",[13,24,25,26,30,31,34],{},"Un acteur malveillant peut exploiter cette vulnérabilité en dissimulant un fichier ",[27,28,29],"code",{},".serena/project.yml"," malveillant dans un dépôt qu'il contrôle, puis en incitant un développeur à l'ouvrir via le serveur Model Context Protocol (MCP) de Serena. La faille contourne ",[27,32,33],{},"trusted_project_path_patterns",", le mécanisme que Serena a spécifiquement conçu pour empêcher les dépôts non fiables d'exécuter du code. Nous avons signalé cette vulnérabilité de manière confidentielle le 1er août 2026, et les chargés de maintenance ont publié un correctif huit jours plus tard.",[13,36,37],{},"Il s'agit d'un exemple précoce d'une catégorie de risques qui est vouée à se répandre à mesure que les serveurs MCP s'intégreront dans le cycle de développement logiciel.",[39,40,42],"h2",{"id":41},"les-serveurs-mcp-une-surface-dattaque-à-part-entière","Les serveurs MCP, une surface d'attaque à part entière",[13,44,45],{},"La plupart des outils de développement interagissent avec un code source de manière ciblée : un linter lit des fichiers, un formateur les modifie, et un outil de test exécute un harnais spécifique. Les serveurs MCP, en revanche, fournissent à un grand modèle de langage (LLM) une interface polyvalente vers l'environnement du développeur, qui couvre l'accès au système de fichiers, l'exécution de commandes shell, les requêtes vers le serveur de langage, et parfois le réseau. Leur utilité tient précisément à cette portée, et toute compromission du processus serveur devient un incident majeur.",[13,47,48,49,52],{},"Les pipelines CI/CD s'exécutent dans des environnements isolés avec des identifiants à portée limitée. Les serveurs MCP, eux, tournent sur la machine du développeur, dans son propre contexte utilisateur, avec accès à tout ce que le développeur peut atteindre : clés SSH, identifiants de fournisseurs cloud, fichiers ",[27,50,51],{},".env",", sessions de navigateur et ressources réseau internes. Compromettre le processus serveur signifie compromettre l'intégralité de l'environnement local du développeur.",[13,54,55],{},"Les développeurs pointent régulièrement ces serveurs vers des dépôts qu'ils n'ont pas écrits pour évaluer une nouvelle bibliothèque open source, analyser un rapport de bogue ou examiner la branche d'un contributeur. Si le serveur traite des éléments de ce dépôt avant que le développeur ne les inspecte, l'attaquant dispose d'une fenêtre d'opportunité. Serena ne cache rien de cette menace et intègre un modèle de confiance pour empêcher les dépôts non fiables d'exécuter du code, mais ce modèle présentait une lacune.",[39,57,59],{"id":58},"fonctionnement-de-la-vulnérabilité","Fonctionnement de la vulnérabilité",[61,62,64],"h3",{"id":63},"présentation-de-serena","Présentation de Serena",[13,66,67],{},"Serena se décrit comme « l'IDE pour votre agent ». Il connecte Claude, Cursor, Copilot et d'autres assistants d'IA à un code source local via MCP, en fournissant des outils de navigation sémantique du code, de refactorisation et de modification qui vont au-delà de ce qu'un système de fichiers brut offre à un LLM. Les équipes de développement l'exécutent comme un serveur MCP local et y pointent leur assistant :",[69,70,75],"pre",{"className":71,"code":73,"language":74},[72],"language-text","serena start-mcp-server --project /path/to/repo\n","text",[27,76,73],{"__ignoreMap":77},"",[13,79,80,81,83,84,87],{},"Étant donné que Serena opère sur des dépôts locaux arbitraires avec les privilèges complets de l'utilisateur sur le système d'exploitation, il intègre une porte de confiance. ",[27,82,33],{}," contrôle quels chemins de projet sont considérés comme fiables, et seuls les projets fiables peuvent utiliser des fonctionnalités privilégiées telles qu'",[27,85,86],{},"activation_command",", qui exécute une commande shell à l'ouverture du projet. La porte de confiance vise à garantir l'ouverture d'un dépôt non fiable sans danger.",[61,89,91],{"id":90},"le-puits-un-moteur-de-template-non-isolé","Le puits : un moteur de template non isolé",[13,93,94,95,98,99,102],{},"Serena permet à chaque projet de définir des modes personnalisés, soit des configurations nommées avec un champ ",[27,96,97],{},"prompt"," injecté dans le prompt système du LLM lorsque le projet est actif. Serena rend ces prompts sous forme de templates Jinja2, et c'est ce rendu qui pose problème. Dans ",[27,100,101],{},"src/interprompt/jinja_template.py"," :",[69,104,108],{"className":105,"code":106,"language":107,"meta":77,"style":77},"language-py shiki shiki-themes github-light","# line 22\nself._env = jinja2.Environment()\n","py",[27,109,110,119],{"__ignoreMap":77},[111,112,115],"span",{"class":113,"line":114},"line",1,[111,116,118],{"class":117},"sAwPA","# line 22\n",[111,120,122,126,130,134],{"class":113,"line":121},2,[111,123,125],{"class":124},"sYu0t","self",[111,127,129],{"class":128},"sgsFI","._env ",[111,131,133],{"class":132},"sD7c4","=",[111,135,136],{"class":128}," jinja2.Environment()\n",[13,138,139,142,143,146,147,150,151,154],{},[27,140,141],{},"jinja2.Environment()"," est un environnement simple, non isolé. Il expose des variables globales intégrées dont les attributs remontent à travers le graphe d'objets Python jusqu'à ",[27,144,145],{},"os"," et ",[27,148,149],{},"subprocess",". Les techniques permettant d'atteindre une exécution de code arbitraire depuis ce point de départ sont bien documentées et ne requièrent aucune connaissance spécialisée. Jinja2 fournit ",[27,152,153],{},"SandboxedEnvironment"," précisément pour cette raison, mais il n'a pas été utilisé ici.",[61,156,158],{"id":157},"le-vecteur-de-livraison-la-configuration-de-projet-comme-entrée-non-fiable","Le vecteur de livraison : la configuration de projet comme entrée non fiable",[13,160,161,162,164,165,168,169,172],{},"Le fichier ",[27,163,29],{}," d'un projet prend en charge un champ ",[27,166,167],{},"added_modes",", qui liste les modes supplémentaires à activer à l'ouverture du projet. Le chargeur de modes de Serena traite tout nom contenant un séparateur de chemin ou se terminant par ",[27,170,171],{},".yml"," comme un chemin vers un fichier à charger directement :",[69,174,176],{"className":105,"code":175,"language":107,"meta":77,"style":77},"# context_mode.py, lines 29-30\ndef looks_like_yaml_path(s: str) -> bool:\n    return os.sep in s or (os.altsep and os.altsep in s) or s.lower().endswith((\".yml\", \".yaml\"))\n\n# context_mode.py, lines 130-135\n@classmethod\ndef load(cls, name_or_path: str | Path) -> Self:\n    if isinstance(name_or_path, Path) or looks_like_yaml_path(str(name_or_path)):\n        return cls.from_yaml(name_or_path)\n    ...\n",[27,177,178,183,207,257,264,270,279,298,320,332],{"__ignoreMap":77},[111,179,180],{"class":113,"line":114},[111,181,182],{"class":117},"# context_mode.py, lines 29-30\n",[111,184,185,188,192,195,198,201,204],{"class":113,"line":121},[111,186,187],{"class":132},"def",[111,189,191],{"class":190},"s7eDp"," looks_like_yaml_path",[111,193,194],{"class":128},"(s: ",[111,196,197],{"class":124},"str",[111,199,200],{"class":128},") -> ",[111,202,203],{"class":124},"bool",[111,205,206],{"class":128},":\n",[111,208,210,213,216,219,222,225,228,231,234,236,239,241,244,248,251,254],{"class":113,"line":209},3,[111,211,212],{"class":132},"    return",[111,214,215],{"class":128}," os.sep ",[111,217,218],{"class":132},"in",[111,220,221],{"class":128}," s ",[111,223,224],{"class":132},"or",[111,226,227],{"class":128}," (os.altsep ",[111,229,230],{"class":132},"and",[111,232,233],{"class":128}," os.altsep ",[111,235,218],{"class":132},[111,237,238],{"class":128}," s) ",[111,240,224],{"class":132},[111,242,243],{"class":128}," s.lower().endswith((",[111,245,247],{"class":246},"sYBdl","\".yml\"",[111,249,250],{"class":128},", ",[111,252,253],{"class":246},"\".yaml\"",[111,255,256],{"class":128},"))\n",[111,258,260],{"class":113,"line":259},4,[111,261,263],{"emptyLinePlaceholder":262},true,"\n",[111,265,267],{"class":113,"line":266},5,[111,268,269],{"class":117},"# context_mode.py, lines 130-135\n",[111,271,273,276],{"class":113,"line":272},6,[111,274,275],{"class":190},"@",[111,277,278],{"class":124},"classmethod\n",[111,280,282,284,287,290,292,295],{"class":113,"line":281},7,[111,283,187],{"class":132},[111,285,286],{"class":190}," load",[111,288,289],{"class":128},"(cls, name_or_path: ",[111,291,197],{"class":124},[111,293,294],{"class":132}," |",[111,296,297],{"class":128}," Path) -> Self:\n",[111,299,301,304,307,310,312,315,317],{"class":113,"line":300},8,[111,302,303],{"class":132},"    if",[111,305,306],{"class":124}," isinstance",[111,308,309],{"class":128},"(name_or_path, Path) ",[111,311,224],{"class":132},[111,313,314],{"class":128}," looks_like_yaml_path(",[111,316,197],{"class":124},[111,318,319],{"class":128},"(name_or_path)):\n",[111,321,323,326,329],{"class":113,"line":322},9,[111,324,325],{"class":132},"        return",[111,327,328],{"class":124}," cls",[111,330,331],{"class":128},".from_yaml(name_or_path)\n",[111,333,335],{"class":113,"line":334},10,[111,336,337],{"class":124},"    ...\n",[13,339,340,341,343,344,346,347,350,351,353],{},"Une entrée ressemblant à un chemin dans ",[27,342,167],{}," amène Serena à charger ce fichier depuis le dépôt, à lire son champ ",[27,345,97],{}," tel quel, puis à le transmettre au moteur de rendu non isolé. ",[27,348,349],{},"yaml.safe_load"," est utilisé correctement et bloque les gadgets de désérialisation YAML, mais cela n'a aucune incidence sur une chaîne de caractères ordinaire dans le champ ",[27,352,97],{},". L'analyseur YAML voit un texte inoffensif. L'injection se produit plus tard, lorsque cette chaîne est compilée comme template Jinja2.",[61,355,357],{"id":356},"le-contournement-de-la-porte-de-confiance","Le contournement de la porte de confiance",[13,359,360,363,364,366,367,370,371,373,374,376,377,379,380,382],{},[27,361,362],{},"is_trusted()",", le mécanisme de Serena pour empêcher les projets non fiables d'exécuter du code, soumet deux fonctionnalités à une porte de confiance : ",[27,365,86],{},", la commande shell exécutée à l'ouverture du projet, et ",[27,368,369],{},"ls_specific_settings",", les remplacements d'outils propres au projet. Le chemin de chargement des modes et de rendu des prompts n'est jamais vérifié par ",[27,372,362],{},". La liste ",[27,375,167],{}," du fichier ",[27,378,29],{}," d'un projet est traitée sans validation, et le chargeur de modes n'applique ni liste d'autorisation ni vérification de confiance avant de charger le fichier et de transmettre le champ ",[27,381,97],{}," au moteur de template.",[13,384,385,386,388],{},"Nous avons confirmé ce contournement de manière empirique. Nous avons exécuté le même test de bout en bout avec ",[27,387,33],{}," défini comme vide, de sorte qu'aucun projet ne soit considéré comme fiable (une configuration plus stricte que tout paramètre par défaut). Nous avons observé deux résultats :",[390,391,392,409],"table",{},[393,394,395],"thead",{},[396,397,398,403,406],"tr",{},[399,400,402],"th",{"align":401},"left","Fonctionnalité",[399,404,405],{"align":401},"Porte de confiance",[399,407,408],{"align":401},"Résultat sur un projet non fiable",[410,411,412,425],"tbody",{},[396,413,414,419,422],{},[415,416,417],"td",{"align":401},[27,418,86],{},[415,420,421],{"align":401},"Oui",[415,423,424],{"align":401},"Bloquée",[396,426,427,432,435],{},[415,428,429,430],{"align":401},"Injection de template via ",[27,431,167],{},[415,433,434],{"align":401},"Non",[415,436,437],{"align":401},"S'exécute",[439,440],"br",{},[13,442,443],{},"La fonctionnalité dont le seul but est d'exécuter une commande shell est bloquée. L'injection de template atteint le même résultat par un chemin différent et s'exécute librement. Il s'agit d'un échec du mécanisme de protection (CWE-693). Le modèle de confiance existe pour empêcher un dépôt non fiable d'exécuter du code, et ce chemin le contourne tout en ressemblant à un chargement de projet ordinaire.",[61,445,447],{"id":446},"la-chaîne-dappel-complète","La chaîne d'appel complète",[69,449,452],{"className":450,"code":451,"language":74},[72],".serena/project.yml  (attacker-controlled, ships with the repo)\n  added_modes: [\"./path/to/attacker-mode.yml\"]\n        |\n        v\nSerenaAgentMode.load()            context_mode.py:130-135\n  from_yaml(name_or_path)\n  prompt = \u003Cattacker-controlled string>\n        |\n        v\nSerenaAgent._update_active_modes()    agent.py:1063\n        |\n        v\ncreate_system_prompt()                agent.py:996\n  _format_prompt(mode.prompt)\n  JinjaTemplate(prompt).render()      arbitrary code execution\n",[27,453,451],{"__ignoreMap":77},[13,455,456],{},"Le code s'exécute comme effet secondaire du processus ordinaire d'ouverture de projet, avant que Serena ne serve sa première requête au LLM.",[61,458,460],{"id":459},"exposition","Exposition",[13,462,463,464,467],{},"Serena est très présent dans l'écosystème des développeurs. Le dépôt compte 27 800 étoiles GitHub et 1 800 duplications, et le paquet ",[27,465,466],{},"serena-agent"," enregistre environ 136 000 téléchargements par mois sur PyPI. Il s'intègre avec Claude Code, Cursor, VS Code, les IDE JetBrains, Claude Desktop et OpenWebUI, et couvre ainsi l'ensemble des environnements de développement assisté par IA couramment utilisés.",[13,469,470],{},"Une attaque réaliste ne nécessite aucune infrastructure ni ingénierie sociale au-delà du dépôt lui-même. Un attaquant publie une bibliothèque, un exemple de projet, un défi CTF ou un outil en apparence utile. Un développeur le clone, l'ouvre avec Serena, et le code s'exécute. Compte tenu de tout ce qu'une machine de développeur peut atteindre, le gain pour l'attaquant est immédiat. Dans un environnement CI/CD où Serena traite automatiquement des dépôts soumis, aucune interaction humaine n'est requise.",[39,472,474],{"id":473},"pourquoi-les-nouveaux-outils-héritent-danciens-bogues","Pourquoi les nouveaux outils héritent d'anciens bogues",[13,476,477],{},"Aucun des schémas à l'origine de ce bogue n'est propre à Serena.",[13,479,480],{},"Des données fournies par l'utilisateur ont été transmises à un moteur de template sans isolation. L'injection de template est l'une des catégories de vulnérabilités les plus anciennes en sécurité web, et la plupart des moteurs de template proposent un environnement isolé ou restreint pour y remédier. Dans un jeune écosystème, les développeurs qui créent des fonctionnalités de template piloté par la configuration ont souvent recours à la variante simple par défaut. Ce schéma se reproduira dans d'autres outils MCP.",[13,482,483],{},"Les fichiers de configuration du projet ont été traités comme des entrées fiables. Les fichiers de configuration d'un dépôt sont rédigés par le propriétaire de ce dépôt. Dans tout modèle de menace où le dépôt peut être non fiable, ces fichiers constituent des entrées contrôlées par l'attaquant. Cette distinction est facile à négliger lorsqu'on développe un outil et que les fichiers de configuration semblent faire partie de l'outil lui-même.",[13,485,486],{},"Les portes de confiance couvraient certains chemins de code, mais pas d'autres. Le modèle de confiance de Serena était conçu correctement : la porte existe, elle est implémentée, et les fonctionnalités qu'elle couvre sont clairement identifiées. La lacune concernait un chemin de code ayant été ajouté sans avoir été soumis à la même porte. Maintenir une couverture de confiance complète à mesure qu'un code source évolue exige un examen délibéré de chaque nouveau chemin traitant des entrées fournies par le projet, et pas seulement des chemins manifestement privilégiés.",[39,488,490],{"id":489},"ce-que-cela-signifie-pour-vous","Ce que cela signifie pour vous",[61,492,494],{"id":493},"si-vous-utilisez-serena","Si vous utilisez Serena",[13,496,497,498,501],{},"Mettez à jour Serena vers serena-agent 1.7.0 immédiatement. Le correctif remplace le moteur de template par ",[27,499,500],{},"jinja2.sandbox.SandboxedEnvironment",", ce qui ferme le chemin d'injection. Sur les versions 1.6.1 et antérieures, évitez d'ouvrir des dépôts provenant de sources non fiables.",[61,503,505],{"id":504},"si-vous-développez-des-serveurs-mcp-ou-des-outils-de-codage-alimentés-par-lia","Si vous développez des serveurs MCP ou des outils de codage alimentés par l'IA",[13,507,508],{},"Les bonnes pratiques ci-dessous s'appliquent à tout outil qui lit un répertoire de projet pour un LLM.",[510,511,512,516,519,522],"ul",{},[513,514,515],"li",{},"Traitez les fichiers de configuration de projet comme des entrées provenant d'un propriétaire de dépôt potentiellement hostile. Validez-les comme un corps de requête HTTP : vérifiez la structure et rejetez tout ce qui ne correspond pas au schéma attendu.",[513,517,518],{},"Identifiez chaque endroit où une chaîne de caractères devient du code ou une commande : rendu de template, appels de sous-processus, chargement de plug-ins, imports dynamiques. Pour chacun, déterminez si une entrée de projet peut l'atteindre et ce qui l'en empêche.",[513,520,521],{},"Assurez-vous que votre porte de confiance couvre tous les chemins, et non une seule fonctionnalité. Réexaminez-la chaque fois que vous ajoutez une fonctionnalité qui lit des données d'entrée de projet.",[513,523,524],{},"Testez votre outil face à un dépôt hostile avant de le publier. Construisez la configuration la plus agressive possible, confirmez qu'aucun code ne s'exécute à l'ouverture et automatisez ce test.",[61,526,528],{"id":527},"si-vous-dirigez-une-équipe-de-sécurité","Si vous dirigez une équipe de sécurité",[13,530,531],{},"Les serveurs MCP constituent une nouvelle catégorie de surface d'attaque locale qui s'exécute avec le contexte utilisateur complet de vos développeurs ; traitez-les comme tout autre outil privilégié sur ces machines. Commencez par identifier quels serveurs MCP s'exécutent dans votre environnement et où. À grande échelle, cela peut nécessiter des outils et des politiques dédiés. Appliquez ensuite aux mises à jour des serveurs MCP le même niveau de vigilance que vous appliquez ailleurs : une vulnérabilité dans un serveur MCP est une vulnérabilité sur chaque machine qui l'exécute. Lorsque vous évaluez de nouveaux outils MCP, interrogez le fournisseur sur son modèle de confiance et sur la manière dont il le teste face à des entrées de projet non fiables.",[39,533,535],{"id":534},"calendrier-de-divulgation","Calendrier de divulgation",[390,537,538,548],{},[393,539,540],{},[396,541,542,545],{},[399,543,544],{"align":401},"Date",[399,546,547],{"align":401},"Événement",[410,549,550,558,565,573,585],{},[396,551,552,555],{},[415,553,554],{"align":401},"01/08/2026",[415,556,557],{"align":401},"Vulnérabilité identifiée lors de recherches sur les surfaces d'attaque des agents de codage par IA",[396,559,560,562],{},[415,561,554],{"align":401},[415,563,564],{"align":401},"Rapport complet et preuve de concept soumis aux chargés de maintenance via l'avis de sécurité privé GitHub",[396,566,567,570],{},[415,568,569],{"align":401},"05/08/2026",[415,571,572],{"align":401},"Rapport accepté par les chargés de maintenance",[396,574,575,578],{},[415,576,577],{"align":401},"09/08/2026",[415,579,580,581,584],{"align":401},"Correctif publié dans serena-agent 1.7.0 ; avis public publié (",[17,582,21],{"href":19,"rel":583},[],")",[396,586,587,590],{},[415,588,589],{"align":401},"10/08/2026",[415,591,592],{"align":401},"CVE demandée auprès du CNA GitHub par les chargés de maintenance",[439,594],{},[13,596,597],{},"Nous remercions les chargés de maintenance de Serena pour leur traitement rapide de ce rapport et pour leur collaboration.",[39,599,601],{"id":600},"comment-gitlab-peut-vous-aider","Comment GitLab peut vous aider",[13,603,604],{},"L'agent Security Analyst de GitLab Duo peut vous aider à auditer votre code source pour détecter les mêmes schémas. Des questions telles que « ce projet rend-il des chaînes contrôlées par l'utilisateur via un moteur de template ? » ou « existe-t-il des fichiers de configuration dans ce dépôt qui sont transmis à un contexte d'exécution ? » constituent un point de départ concret.",[39,606,608],{"id":607},"perspectives","Perspectives",[13,610,611],{},"L'écosystème MCP se trouve aujourd'hui à peu près là où se trouvait l'écosystème npm il y a dix ans : en croissance rapide, avec une adoption qui dépasse la vigilance en matière de sécurité, et des hypothèses de confiance implicites. La découverte concernant Serena est ordinaire : il s'agit justement du type de problème qui apparaît chaque fois qu'une nouvelle technologie mûrit plus vite que les pratiques de sécurité qui l'entourent, et le MCP mûrit rapidement. Nous nous attendons à voir davantage de cas similaires à mesure que les serveurs MCP deviendront une infrastructure standard pour les développeurs.",[13,613,614],{},"Le Threat Research Group de GitLab continuera d'évaluer les outils de développement d'IA et de partager ses découvertes au fur et à mesure de leur divulgation responsable. Nous encourageons les chercheurs à appliquer aux serveurs MCP le même niveau de vigilance que la communauté de sécurité applique depuis longtemps aux extensions de navigateur, aux plug-ins d'IDE et aux intégrations CI/CD : des outils qui s'exécutent avec des privilèges significatifs sur les machines des équipes de développement et traitent des données provenant de sources qu'ils ne contrôlent pas entièrement.",[616,617,618],"style",{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}",{"title":77,"searchDepth":121,"depth":121,"links":620},[621,622,630,631,636,637,638],{"id":41,"depth":121,"text":42},{"id":58,"depth":121,"text":59,"children":623},[624,625,626,627,628,629],{"id":63,"depth":209,"text":64},{"id":90,"depth":209,"text":91},{"id":157,"depth":209,"text":158},{"id":356,"depth":209,"text":357},{"id":446,"depth":209,"text":447},{"id":459,"depth":209,"text":460},{"id":473,"depth":121,"text":474},{"id":489,"depth":121,"text":490,"children":632},[633,634,635],{"id":493,"depth":209,"text":494},{"id":504,"depth":209,"text":505},{"id":527,"depth":209,"text":528},{"id":534,"depth":121,"text":535},{"id":600,"depth":121,"text":601},{"id":607,"depth":121,"text":608},"security-labs","2026-09-01","Le Threat Research Group de GitLab a découvert une injection de template critique dans Serena, qui exécute du code malveillant dès qu'un développeur ouvre un dépôt.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782237704/cj50chkvprjthczevmog.png",{},"/fr-fr/blog/critical-rce-in-serena",{"config":648,"title":5,"description":641},{"noIndex":649},false,"critical-rce-in-serena","fr-fr/blog/critical-rce-in-serena",[653,654],"security","security research","BlogPost","aZdUNUpzghjE_ZeDANwGdc0vQYeBO2xOOibx2jGxB8s",{"logo":658,"freeTrial":663,"sales":668,"login":673,"items":678,"search":1009,"minimal":1044,"duo":1063,"switchNav":1072,"pricingDeployment":1083},{"config":659},{"href":660,"dataGaName":661,"dataGaLocation":662},"/fr-fr/","gitlab logo","header",{"text":664,"config":665},"Commencer un essai gratuit",{"href":666,"dataGaName":667,"dataGaLocation":662},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":669,"config":670},"Demander une démo",{"href":671,"dataGaName":672,"dataGaLocation":662},"/request-a-demo/","sales",{"text":674,"config":675},"Connexion",{"href":676,"dataGaName":677,"dataGaLocation":662},"https://gitlab.com/users/sign_in/","sign in",[679,765,853,858,933,987],{"text":680,"left":262,"config":681,"menu":683},"Plateforme",{"dataNavLevelOne":682},"platform",{"type":684,"link":685,"columns":689,"feature":754},"lists",{"text":686,"config":687},"Explorer la plateforme",{"href":688,"dataGaName":682,"dataGaLocation":662},"/fr-fr/platform/",[690,713,736],{"title":691,"items":692},"Exécution et workflows",[693,698,703,708],{"text":694,"config":695},"CI/CD",{"href":696,"dataGaLocation":662,"dataGaName":697},"/fr-fr/solutions/continuous-integration/","ci/cd",{"text":699,"config":700},"Gestion du code source",{"href":701,"dataGaLocation":662,"dataGaName":702},"/fr-fr/solutions/source-code-management/","source code management",{"text":704,"config":705},"Méthode de livraison selon les principes Agile",{"href":706,"dataGaLocation":662,"dataGaName":707},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":709,"config":710},"Gestion des artefacts",{"href":711,"dataGaLocation":662,"dataGaName":712},"/fr-fr/artifact-central/","artifact management",{"title":714,"items":715},"Sécurité et gouvernance",[716,721,726,731],{"text":717,"config":718},"Test de sécurité des applications",{"href":719,"dataGaLocation":662,"dataGaName":720},"/fr-fr/solutions/application-security-testing/","application security testing",{"text":722,"config":723},"Gouvernance et conformité",{"href":724,"dataGaLocation":662,"dataGaName":725},"/fr-fr/solutions/software-compliance/","governance and compliance",{"text":727,"config":728},"Gestion des secrets",{"href":729,"dataGaLocation":662,"dataGaName":730},"/fr-fr/gitlab-secrets-manager/","secrets management",{"text":732,"config":733},"Sécurité de la chaîne d'approvisionnement",{"href":734,"dataGaLocation":662,"dataGaName":735},"/fr-fr/solutions/supply-chain/","supply chain security",{"title":737,"items":738},"Contexte et IA",[739,744,749],{"text":740,"config":741},"Orchestration agentique",{"href":742,"dataGaLocation":662,"dataGaName":743},"/fr-fr/gitlab-duo-agent-platform/","agentic orchestration",{"text":745,"config":746},"Graphe de contexte",{"href":747,"dataGaLocation":662,"dataGaName":748},"/fr-fr/gitlab-orbit/","context graph",{"text":750,"config":751},"Visibilité et mesures",{"href":752,"dataGaLocation":662,"dataGaName":753},"/fr-fr/solutions/visibility-measurement/","visibility and measurement",{"config":755,"title":758,"text":759,"link":760},{"background":756,"textColor":757},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1790185102/o7dn32anqcb6z8dgd3as.jpg')","#000","Pourquoi utiliser GitLab","Une plateforme unique offrant une rapidité maîtrisée tout au long du cycle de développement logiciel.",{"text":761,"config":762},"En savoir plus",{"href":763,"dataGaName":764,"dataGaLocation":662},"/fr-fr/why-gitlab/","why gitlab",{"text":766,"left":262,"config":767,"menu":769},"Solutions",{"dataNavLevelOne":768},"solutions",{"type":684,"link":770,"columns":774,"feature":844},{"text":771,"config":772},"Voir toutes les solutions",{"href":773,"dataGaName":768,"dataGaLocation":662},"/fr-fr/solutions/",[775,793,811],{"title":776,"items":777},"Résultats",[778,783,788],{"text":779,"config":780},"Modernisation DevOps",{"href":781,"dataGaLocation":662,"dataGaName":782},"/fr-fr/assessments/devops-modernization-assessment/","devops modernization",{"text":784,"config":785},"Modernisation de la sécurité",{"href":786,"dataGaLocation":662,"dataGaName":787},"/fr-fr/assessments/security-modernization-assessment/","security modernization",{"text":789,"config":790},"Modernisation de l'IA",{"href":791,"dataGaLocation":662,"dataGaName":792},"/fr-fr/assessments/ai-modernization-assessment/","ai modernization",{"title":794,"items":795},"Par taille",[796,801,806],{"text":797,"config":798},"Entreprises",{"href":799,"dataGaLocation":662,"dataGaName":800},"/fr-fr/enterprise/","enterprise",{"text":802,"config":803},"PME",{"href":804,"dataGaLocation":662,"dataGaName":805},"/fr-fr/small-business/","small business",{"text":807,"config":808},"Start-up",{"href":809,"dataGaLocation":662,"dataGaName":810},"/fr-fr/solutions/startups/","startups",{"title":812,"items":813},"Secteurs",[814,819,824,829,834,839],{"text":815,"config":816},"Services financiers",{"href":817,"dataGaLocation":662,"dataGaName":818},"/fr-fr/solutions/finance/","financial services",{"text":820,"config":821},"Secteur public",{"href":822,"dataGaLocation":662,"dataGaName":823},"/fr-fr/solutions/public-sector/","public sector",{"text":825,"config":826},"Télécommunications",{"href":827,"dataGaLocation":662,"dataGaName":828},"/fr-fr/solutions/telecommunications/","telecommunications",{"text":830,"config":831},"Automobile",{"href":832,"dataGaLocation":662,"dataGaName":833},"/fr-fr/solutions/automotive/","automotive",{"text":835,"config":836},"Éducation",{"href":837,"dataGaLocation":662,"dataGaName":838},"/fr-fr/solutions/education/","education",{"text":840,"config":841},"Aérospatiale",{"href":842,"dataGaLocation":662,"dataGaName":843},"/fr-fr/solutions/aerospace/","aerospace",{"config":845,"title":846,"text":847,"link":848},{"background":756,"textColor":757},"GitLab Security Standard","Découvrez comment renforcer votre usine logicielle et permettre aux agents d'IA de gagner en autonomie sans sacrifier la sécurité.",{"text":849,"config":850},"Découvrir GitLab Security Standard",{"href":851,"dataGaName":852,"dataGaLocation":662},"/fr-fr/gitlab-security-standard/","gitlab security standard",{"text":854,"config":855},"Tarifs",{"href":856,"dataGaName":857,"dataGaLocation":662,"dataNavLevelOne":857},"/fr-fr/pricing/","pricing",{"text":859,"config":860,"menu":862},"Ressources",{"dataNavLevelOne":861},"resources",{"type":684,"link":863,"columns":867,"feature":924},{"text":864,"config":865},"Afficher toutes les ressources",{"href":866,"dataGaName":861,"dataGaLocation":662},"/fr-fr/resources/",[868,896],{"title":869,"items":870},"Découvrir",[871,876,881,886,891],{"text":872,"config":873},"Documentation",{"href":874,"dataGaName":875,"dataGaLocation":662},"https://docs.gitlab.com/","docs",{"text":877,"config":878},"GitLab University",{"href":879,"dataGaName":880,"dataGaLocation":662},"https://university.gitlab.com/","university",{"text":882,"config":883},"Démos",{"href":884,"dataGaName":885,"dataGaLocation":662},"/fr-fr/gitlab-technical-demo-series/","demo series",{"text":887,"config":888},"Centre de démos",{"href":889,"dataGaName":890,"dataGaLocation":662},"/fr-fr/demo-hub/","demo hub",{"text":892,"config":893},"Services",{"href":894,"dataGaName":895,"dataGaLocation":662},"/fr-fr/services/","services",{"title":897,"items":898},"Connecter",[899,904,909,914,919],{"text":900,"config":901},"Blog",{"href":902,"dataGaName":903,"dataGaLocation":662},"/fr-fr/blog/","blog",{"text":905,"config":906},"Communauté",{"href":907,"dataGaName":908,"dataGaLocation":662},"/community/","community",{"text":910,"config":911},"Clients",{"href":912,"dataGaName":913,"dataGaLocation":662},"/fr-fr/customers/","customers",{"text":915,"config":916},"Partenaires",{"href":917,"dataGaName":918,"dataGaLocation":662},"/fr-fr/partners/","partners",{"text":920,"config":921},"Événements",{"href":922,"dataGaName":923,"dataGaLocation":662},"/events/","events",{"config":925,"title":926,"text":927,"link":928},{"background":756,"textColor":757},"Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":929,"config":930},"Lire les articles les plus récents",{"href":931,"dataGaName":932,"dataGaLocation":662},"/fr-fr/whats-new/","whats new",{"text":934,"config":935,"menu":937},"Société",{"dataNavLevelOne":936},"company",{"type":684,"columns":938},[939],{"items":940},[941,946,952,957,962,967,972,977,982],{"text":942,"config":943},"À propos",{"href":944,"dataGaName":945,"dataGaLocation":662},"/fr-fr/company/","about",{"text":947,"config":948,"footerGa":951},"Carrières",{"href":949,"dataGaName":950,"dataGaLocation":662},"/jobs/","jobs",{"dataGaName":950},{"text":953,"config":954},"Presse",{"href":955,"dataGaName":956,"dataGaLocation":662},"/press/","press",{"text":958,"config":959},"Manuel",{"href":960,"dataGaName":961,"dataGaLocation":662},"https://handbook.gitlab.com/","handbook",{"text":963,"config":964},"Leadership",{"href":965,"dataGaName":966,"dataGaLocation":662},"/company/team/e-group/","leadership",{"text":968,"config":969},"Relations avec les investisseurs",{"href":970,"dataGaName":971,"dataGaLocation":662},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":973,"config":974},"Trust Center",{"href":975,"dataGaName":976,"dataGaLocation":662},"/fr-fr/security/","trust center",{"text":978,"config":979},"Centre pour la transparence de l'IA",{"href":980,"dataGaName":981,"dataGaLocation":662},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":983,"config":984},"Newsletter",{"href":985,"dataGaName":986,"dataGaLocation":662},"/company/contact/#contact-forms","newsletter",{"text":988,"config":989,"menu":990},"Nous contacter",{"dataNavLevelOne":936},{"type":684,"columns":991},[992],{"items":993},[994,999,1004],{"text":995,"config":996},"Contacter l'équipe commerciale",{"href":997,"dataGaName":998,"dataGaLocation":662},"/fr-fr/sales/","talk to sales",{"text":1000,"config":1001},"Assistance GitLab",{"href":1002,"dataGaName":1003,"dataGaLocation":662},"https://support.gitlab.com/hc/en-us","support portal",{"text":1005,"config":1006},"Portail clients GitLab",{"href":1007,"dataGaName":1008,"dataGaLocation":662},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1010,"login":1011,"suggestions":1018},"Fermer",{"text":1012,"link":1013},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":1014,"config":1015},"GitLab.com",{"href":676,"dataGaName":1016,"dataGaLocation":1017},"search login","search",{"text":1019,"default":1020},"Suggestions",[1021,1025,1029,1031,1036,1041],{"text":1022,"config":1023},"GitLab Duo Agent Platform",{"href":742,"dataGaName":1024,"dataGaLocation":1017},"GitLab Duo Agent Platform",{"text":1026,"config":1027},"Suggestions de code (IA)",{"href":742,"dataGaName":1028,"dataGaLocation":1017},"Code Suggestions (AI)",{"text":694,"config":1030},{"href":696,"dataGaName":694,"dataGaLocation":1017},{"text":1032,"config":1033},"GitLab sur AWS",{"href":1034,"dataGaName":1035,"dataGaLocation":1017},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":1037,"config":1038},"GitLab sur Google Cloud",{"href":1039,"dataGaName":1040,"dataGaLocation":1017},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":758,"config":1042},{"href":763,"dataGaName":1043,"dataGaLocation":1017},"Why GitLab?",{"freeTrial":1045,"mobileIcon":1050,"desktopIcon":1055,"secondaryButton":1058},{"text":1046,"config":1047},"Commencer votre essai gratuit",{"href":1048,"dataGaName":667,"dataGaLocation":1049},"https://gitlab.com/-/trials/new/","nav",{"altText":1051,"config":1052},"Icône GitLab",{"src":1053,"dataGaName":1054,"dataGaLocation":1049},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1051,"config":1056},{"src":1057,"dataGaName":1054,"dataGaLocation":1049},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1059,"config":1060},"Commencer",{"href":1061,"dataGaName":1062,"dataGaLocation":1049},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":1064,"mobileIcon":1068,"desktopIcon":1070},{"text":1065,"config":1066},"En savoir plus sur GitLab Duo",{"href":742,"dataGaName":1067,"dataGaLocation":1049},"gitlab duo",{"altText":1051,"config":1069},{"src":1053,"dataGaName":1054,"dataGaLocation":1049},{"altText":1051,"config":1071},{"src":1057,"dataGaName":1054,"dataGaLocation":1049},{"button":1073,"mobileIcon":1078,"desktopIcon":1080},{"text":1074,"config":1075},"/switch",{"href":1076,"dataGaName":1077,"dataGaLocation":1049},"#contact","switch",{"altText":1051,"config":1079},{"src":1053,"dataGaName":1054,"dataGaLocation":1049},{"altText":1051,"config":1081},{"src":1082,"dataGaName":1054,"dataGaLocation":1049},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1084,"mobileIcon":1089,"desktopIcon":1091},{"text":1085,"config":1086},"Retour aux tarifs",{"href":856,"dataGaName":1087,"dataGaLocation":1049,"icon":1088},"back to pricing","GoBack",{"altText":1051,"config":1090},{"src":1053,"dataGaName":1054,"dataGaLocation":1049},{"altText":1051,"config":1092},{"src":1057,"dataGaName":1054,"dataGaLocation":1049},{"title":1094,"button":1095,"config":1098},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":761,"config":1096},{"href":747,"dataGaName":1097,"dataGaLocation":662},"orbit",{"layout":1099,"disabled":649},"release",{"data":1101},{"text":1102,"source":1103,"edit":1109,"contribute":1114,"config":1119,"items":1124,"minimal":1342},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":1104,"config":1105},"Afficher le code source de la page",{"href":1106,"dataGaName":1107,"dataGaLocation":1108},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1110,"config":1111},"Modifier cette page",{"href":1112,"dataGaName":1113,"dataGaLocation":1108},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1115,"config":1116},"Contribuer",{"href":1117,"dataGaName":1118,"dataGaLocation":1108},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1120,"facebook":1121,"youtube":1122,"linkedin":1123},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1125,1170,1227,1268,1309],{"title":854,"links":1126,"subMenu":1141},[1127,1131,1136],{"text":1128,"config":1129},"Voir les forfaits",{"href":856,"dataGaName":1130,"dataGaLocation":1108},"view plans",{"text":1132,"config":1133},"GitLab Premium",{"href":1134,"dataGaName":1135,"dataGaLocation":1108},"/fr-fr/pricing/premium/","why premium",{"text":1137,"config":1138},"GitLab Ultimate",{"href":1139,"dataGaName":1140,"dataGaLocation":1108},"/fr-fr/pricing/ultimate/","why ultimate",[1142],{"title":988,"links":1143},[1144,1146,1148,1150,1155,1160,1165],{"text":995,"config":1145},{"href":997,"dataGaName":672,"dataGaLocation":1108},{"text":1000,"config":1147},{"href":1002,"dataGaName":1003,"dataGaLocation":1108},{"text":1005,"config":1149},{"href":1007,"dataGaName":1008,"dataGaLocation":1108},{"text":1151,"config":1152},"Statut",{"href":1153,"dataGaName":1154,"dataGaLocation":1108},"https://status.gitlab.com/","status",{"text":1156,"config":1157},"Conditions d'utilisation",{"href":1158,"dataGaName":1159,"dataGaLocation":1108},"/terms/","terms of use",{"text":1161,"config":1162},"Politique de confidentialité",{"href":1163,"dataGaName":1164,"dataGaLocation":1108},"/fr-fr/privacy/","privacy statement",{"text":1166,"config":1167},"Gestion des cookies",{"dataGaName":1168,"dataGaLocation":1108,"id":1169,"isOneTrustButton":262},"cookie preferences","ot-sdk-btn",{"title":680,"links":1171,"subMenu":1184},[1172,1174,1176,1178,1180,1182],{"text":686,"config":1173},{"href":688,"dataGaName":682,"dataGaLocation":1108},{"text":740,"config":1175},{"href":742,"dataGaName":743,"dataGaLocation":1108},{"text":694,"config":1177},{"href":696,"dataGaName":697,"dataGaLocation":1108},{"text":745,"config":1179},{"href":747,"dataGaName":748,"dataGaLocation":1108},{"text":727,"config":1181},{"href":729,"dataGaName":730,"dataGaLocation":1108},{"text":758,"config":1183},{"href":763,"dataGaName":764,"dataGaLocation":1108},[1185],{"title":1186,"links":1187},"Thèmes",[1188,1192,1197,1202,1207,1212,1217,1222],{"text":694,"config":1189},{"href":1190,"dataGaName":1191,"dataGaLocation":1108},"/fr-fr/topics/ci-cd/","cicd",{"text":1193,"config":1194},"GitOps",{"href":1195,"dataGaName":1196,"dataGaLocation":1108},"/fr-fr/topics/gitops/","gitops",{"text":1198,"config":1199},"DevOps",{"href":1200,"dataGaName":1201,"dataGaLocation":1108},"/fr-fr/topics/devops/","devops",{"text":1203,"config":1204},"Contrôle de version",{"href":1205,"dataGaName":1206,"dataGaLocation":1108},"/fr-fr/topics/version-control/","version control",{"text":1208,"config":1209},"DevSecOps",{"href":1210,"dataGaName":1211,"dataGaLocation":1108},"/fr-fr/topics/devsecops/","devsecops",{"text":1213,"config":1214},"Cloud-native",{"href":1215,"dataGaName":1216,"dataGaLocation":1108},"/fr-fr/topics/cloud-native/","cloud native",{"text":1218,"config":1219},"IA pour la programmation",{"href":1220,"dataGaName":1221,"dataGaLocation":1108},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1223,"config":1224},"IA agentique",{"href":1225,"dataGaName":1226,"dataGaLocation":1108},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":766,"links":1228},[1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1256,1260,1264],{"text":779,"config":1230},{"href":781,"dataGaName":782,"dataGaLocation":1108},{"text":784,"config":1232},{"href":786,"dataGaName":787,"dataGaLocation":1108},{"text":789,"config":1234},{"href":791,"dataGaName":792,"dataGaLocation":1108},{"text":815,"config":1236},{"href":817,"dataGaName":818,"dataGaLocation":1108},{"text":820,"config":1238},{"href":822,"dataGaName":823,"dataGaLocation":1108},{"text":825,"config":1240},{"href":827,"dataGaName":828,"dataGaLocation":1108},{"text":830,"config":1242},{"href":832,"dataGaName":833,"dataGaLocation":1108},{"text":835,"config":1244},{"href":837,"dataGaName":838,"dataGaLocation":1108},{"text":840,"config":1246},{"href":842,"dataGaName":843,"dataGaLocation":1108},{"text":797,"config":1248},{"href":799,"dataGaName":800,"dataGaLocation":1108},{"text":802,"config":1250},{"href":804,"dataGaName":805,"dataGaLocation":1108},{"text":807,"config":1252},{"href":809,"dataGaName":810,"dataGaLocation":1108},{"text":1193,"config":1254},{"href":1255,"dataGaName":1196,"dataGaLocation":1108},"/fr-fr/solutions/gitops/",{"text":1257,"config":1258},"Analyse de la composition logicielle",{"href":734,"dataGaName":1259,"dataGaLocation":1108},"software composition analysis",{"text":1261,"config":1262},"Gestion de la chaîne de valeur",{"href":752,"dataGaName":1263,"dataGaLocation":1108},"value stream management",{"text":1265,"config":1266},"Toutes les solutions",{"href":773,"dataGaName":1267,"dataGaLocation":1108},"all solutions",{"title":859,"links":1269},[1270,1275,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1305],{"text":1271,"config":1272},"Installation",{"href":1273,"dataGaName":1274,"dataGaLocation":1108},"/fr-fr/install/","install",{"text":1276,"config":1277},"Guides de démarrage",{"href":1278,"dataGaName":1279,"dataGaLocation":1108},"/fr-fr/get-started/","quick setup checklists",{"text":872,"config":1281},{"href":874,"dataGaName":875,"dataGaLocation":1108},{"text":877,"config":1283},{"href":879,"dataGaName":880,"dataGaLocation":1108},{"text":882,"config":1285},{"href":884,"dataGaName":885,"dataGaLocation":1108},{"text":887,"config":1287},{"href":889,"dataGaName":890,"dataGaLocation":1108},{"text":892,"config":1289},{"href":894,"dataGaName":895,"dataGaLocation":1108},{"text":900,"config":1291},{"href":902,"dataGaName":903,"dataGaLocation":1108},{"text":905,"config":1293},{"href":907,"dataGaName":908,"dataGaLocation":1108},{"text":910,"config":1295},{"href":912,"dataGaName":913,"dataGaLocation":1108},{"text":915,"config":1297},{"href":917,"dataGaName":918,"dataGaLocation":1108},{"text":920,"config":1299},{"href":922,"dataGaName":923,"dataGaLocation":1108},{"text":983,"config":1301},{"href":985,"dataGaName":986,"dataGaLocation":1108},{"text":1303,"config":1304},"Nouveautés",{"href":931,"dataGaName":932,"dataGaLocation":1108},{"text":1306,"config":1307},"Toutes les ressources",{"href":866,"dataGaName":1308,"dataGaLocation":1108},"all resources",{"title":934,"links":1310},[1311,1313,1315,1317,1319,1321,1323,1325,1327,1332,1337],{"text":942,"config":1312},{"href":944,"dataGaName":936,"dataGaLocation":1108},{"text":947,"config":1314},{"href":949,"dataGaName":950,"dataGaLocation":1108},{"text":953,"config":1316},{"href":955,"dataGaName":956,"dataGaLocation":1108},{"text":958,"config":1318},{"href":960,"dataGaName":961,"dataGaLocation":1108},{"text":963,"config":1320},{"href":965,"dataGaName":966,"dataGaLocation":1108},{"text":968,"config":1322},{"href":970,"dataGaName":971,"dataGaLocation":1108},{"text":973,"config":1324},{"href":975,"dataGaName":976,"dataGaLocation":1108},{"text":978,"config":1326},{"href":980,"dataGaName":981,"dataGaLocation":1108},{"text":1328,"config":1329},"Développement durable",{"href":1330,"dataGaName":1331,"dataGaLocation":1108},"/sustainability/","Sustainability",{"text":1333,"config":1334},"Diversité, inclusion et appartenance (DIB)",{"href":1335,"dataGaName":1336,"dataGaLocation":1108},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1338,"config":1339},"Déclaration de transparence sur l'esclavage moderne",{"href":1340,"dataGaName":1341,"dataGaLocation":1108},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1343},[1344,1346,1348],{"text":1156,"config":1345},{"href":1158,"dataGaName":1159,"dataGaLocation":1108},{"text":1166,"config":1347},{"dataGaName":1168,"dataGaLocation":1108,"id":1169,"isOneTrustButton":262},{"text":1161,"config":1349},{"href":1163,"dataGaName":1164,"dataGaLocation":1108},[1351,1365],{"id":1352,"title":7,"body":643,"config":1353,"content":1356,"description":643,"extension":1359,"meta":1360,"navigation":262,"path":1361,"seo":1362,"stem":1363,"__hash__":1364},"blogAuthors/en-us/blog/authors/daniel-abeles.yml",{"template":1354,"gitlabHandle":1355},"BlogAuthor","dabeles",{"name":7,"config":1357},{"headshot":1358},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1786473980/kjzctsiwvfc6afimsdtc.jpg","yml",{},"/en-us/blog/authors/daniel-abeles",{},"en-us/blog/authors/daniel-abeles","9j7gS6WI8857OrOR0VcnHZiFLXpZpnKFA3tgPdDU5hw",{"id":1366,"title":8,"body":643,"config":1367,"content":1368,"description":643,"extension":1359,"meta":1371,"navigation":262,"path":1372,"seo":1373,"stem":1374,"__hash__":1375},"blogAuthors/en-us/blog/authors/abisheik-magesh.yml",{"template":1354},{"name":8,"config":1369},{"headshot":1370},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1787000354/gmgyvfesrvwdlvt52gdw.png",{},"/en-us/blog/authors/abisheik-magesh",{},"en-us/blog/authors/abisheik-magesh","kPev_Acm8MB5tgKMnU_Rkfq1sl42e8DixU6iNMXXfxI",[1377,1384,1393],{"title":1378,"description":1379,"heroImage":1380,"category":639,"date":1381,"authors":1382,"slug":1383,"externalUrl":643},"La sécurité d'un environnement sandbox se mesure à ce qu'un agent d'IA peut atteindre","Bloqué dans une évaluation sans issue, un agent d'IA s'est échappé en une heure via le seul service de sa liste d'autorisation. Découvrez la faille qu'il a exploitée.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786468880/uxouffutvvwsbxzikhyc.png","2026-08-31",[7],"ai-agent-sandbox",{"title":1385,"description":1386,"heroImage":1387,"category":639,"date":1388,"authors":1389,"slug":1392,"externalUrl":643},"Comment détecter et prévenir les attaques de type Contagious Interview dans les IDE","Découvrez comment nous avons développé des contrôles sur mesure pour détecter et prévenir les campagnes de logiciels malveillants comme celles utilisées lors des attaques Contagious Interview, et comment les déployer dans votre environnement.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1774375772/kpaaaiqhokevxxeoxvu0.png","2026-06-24",[1390,1391],"Josh Feehs","Austin Bollinger","how-to-detect-and-prevent-contagious-interview-ide-attacks",{"title":1394,"description":1395,"heroImage":1396,"category":639,"date":1397,"authors":1398,"slug":1400,"externalUrl":643},"Une campagne imitant Shai-Hulud cible les développeurs Python via le typosquatting PyPI","L'équipe Vulnerability Research de GitLab a découvert une attaque de la chaîne d'approvisionnement Python sur PyPI, qui déploie le ver Shai-Hulud pour dérober des identifiants provenant des systèmes CI/CD.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1772630163/akp8ly2mrsfrhsb0liyb.png","2026-06-15",[1399,7],"Dinesh Bolkensteyn","shai-hulud-copycat-campaign-targets-python-developers",{"header":1402,"text":1403,"button":1407,"disclaimer":1410},"Commencez votre essai gratuit\n\nde 30 jours\n",[1404,1405,1406],"Accédez à GitLab Duo Agent Platform","Essayez nos fonctionnalités les plus avancées","Automatisez les tâches complexes avec l'IA",{"text":664,"config":1408},{"href":1409,"dataGaName":667,"dataGaLocation":903},"https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/blog/","Aucune carte de crédit requise.",{"header":1412,"blurb":1413,"button":1414,"secondaryButton":1418},"Commencez à développer plus rapidement dès aujourd'hui","Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.\n",{"text":664,"config":1415},{"href":1416,"dataGaName":667,"dataGaLocation":1417},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":995,"config":1419},{"href":997,"dataGaName":672,"dataGaLocation":1417},1791944927610]