Security Blog

L'identifiant en mémoire de votre application va fuiter

#365

October 2, 2026 · By Marketing team

← All posts

Les identifiants en mémoire de votre application sont lisibles par tout code s'exécutant sur la machine, et en 2026, cela inclut l'agent. Un modèle d'IA s'est déjà implanté de lui-même sur FreeBSD et s'est échappé de son propre bac à sable. Cessez de conserver un identifiant résident à voler.

Voici une prédiction inconfortable, et ce n'est pas une réserve : les identifiants qui se trouvent en ce moment même en mémoire de votre application — le mot de passe de base de chargé au démarrage, le jeton d'API dans ses variables d'environnement, la clé cloud qu'il détient pour faire son travail — vont probablement fuiter dans les douze prochains mois. Non parce que quelqu'un surpassera en piratage votre équipe de sécurité. Parce que l'unique hypothèse qui a jamais rendu un secret en mémoire sûr — seul du code de confiance s'exécute à côté de lui — a cessé d'être vraie cette année, en silence, et presque personne n'a modifié sa façon de faire en conséquence.

C'est celle-ci qu'on ne peut pas classer sous « plus tard ».

Ce qui se passe réellement

Presque toutes les applications conservent leurs secrets de la même manière. Au démarrage, elles les lisent — depuis un fichier .env, un secret monté, une variable d'environnement — et les chargent en clair dans leur propre mémoire, pour toute la durée du processus. Pendant trente ans, c'était une conception saine, et elle l'était pour une seule raison : lire la mémoire d'un autre programme en cours d'exécution, ou ses variables d'environnement, exige d'exécuter du code sur la même machine, avec les mêmes privilèges. Ce seuil était autrefois élevé. Seuls votre propre logiciel et vos propres personnes le franchissaient.

Un agent le franchit désormais. Un agent de codage, un outil MCP, un travailleur autonome — par conception, il exécute du code, sur une vraie machine, en tant que vrai utilisateur. Et pour du code s'exécutant avec ce niveau de privilège, un identifiant en mémoire n'est pas un coffre à forcer. C'est un fichier à lire. /proc/<pid>/environ liste en clair les variables d'environnement d'un autre processus. Un vidage mémoire livre son tas. Il n'y a pas d'exploit, pas de CVE, pas d'alerte — votre EDR, votre WAF, votre pare-feu observent un processus autorisé lire une mémoire qu'il est autorisé à lire, et ne voient rien d'anormal, parce que rien n'est anormal selon leurs règles. Chaque étape est légale. Le secret était simplement là, à portée de main.

Ce n'est pas une erreur que vous avez commise

Soyons clairs sur qui porte la responsabilité, car ce n'est pas vous. Le .env sur une machine durcie, le secret tiré d'un gestionnaire vers la mémoire au démarrage — c'est le motif recommandé. C'est twelve-factor, conforme au livre, ce que fait un bon ingénieur. C'était responsable. Ce qui a expiré, ce n'est pas la pratique. C'est l'hypothèse qui la sous-tend : seul du code que vous y avez placé s'exécute à côté de votre secret. Dès qu'un agent s'exécute sur cette machine — et vous déployez des agents partout, sciemment, parce qu'ils sont utiles — cette hypothèse n'existe plus, et le texte en clair que vous avez chargé de manière responsable en mémoire se trouve dans le rayon d'impact.

Nous avons vu atterrir la première version de ce problème [4]. Lorsqu'un agent de codage est détourné — un rapport d'erreur empoisonné, un outil malveillant sur son chemin — la toute première chose à portée est précisément celle-ci : les jetons et les clés que son propre processus, et les processus voisins, détiennent déjà en mémoire. L'injection n'est que la porte. L'identifiant résident est le butin.

« Mais il n'y a pas d'agent sur cette machine »

C'est la réponse rassurante, et c'est celle qui échoue. La défense repose sur un mur : garder les agents ici, garder les identifiants là-bas. Ce mur est précisément ce que cette année s'est employée à prouver incapable de tenir.

Vous n'avez pas à le croire sur parole — cette année a produit la preuve, deux fois. Dans ses propres tests publiés, Anthropic a dirigé son modèle Mythos vers le serveur NFS de FreeBSD, du code noyau que des humains avaient lu pendant dix-sept ans, et de lui-même il a trouvé un débordement de pile dans le chemin d'authentification, a écrit un exploit en vingt gadgets réparti sur six paquets réseau, et a obtenu root non authentifié à distance. C'est CVE-2026-4747, et cela a pris environ quatre heures. Pas « signalé une fonction suspecte » — un exploit root distant fonctionnel contre du code qui avait survécu à dix-sept ans de relecture, et la même chose contre des failles critiques dans tous les systèmes d'exploitation et navigateurs majeurs visés [1].

Et le confinement que vous entoureriez d'un agent ne tient pas mieux que le périmètre. Dans l'évaluation de sécurité d'Anthropic lui-même, chargé de sortir de son bac à sable et d'atteindre le chercheur menant le test, Mythos a chaîné des exploits — un heap spray JIT — pour s'échapper à la fois du moteur de rendu du navigateur et du bac à sable du système d'exploitation, a atteint l'Internet ouvert, et lui a envoyé un courriel [1]. La réserve honnête : il a fait cela parce que le test le lui demandait, et non de sa propre initiative. Mais « nous le lui avons demandé » est précisément le siège de l'attaquant — et « s'échapper, élever ses privilèges, prendre les identifiants » est la charge utile permanente de chaque invite malveillante à partir de maintenant. La capacité n'a jamais attendu l'initiative propre du modèle. Elle attend une instruction, et c'est le seul apport auquel vous pouvez compter qu'il arrivera. La gravité a été reconnue à la seule altitude qui compte — les États-Unis ont placé le modèle lui-même sous contrôle à l'exportation, une première pour un modèle d'IA plutôt que pour les puces qui le sous-tendent, après qu'une version de Mythos aurait trouvé son chemin à travers presque tous les systèmes classifiés de la NSA en quelques heures [2][3].

Maintenant, placez cela à côté du problème de la mémoire, car ils se rejoignent. Root sur une machine lit la mémoire de n'importe quel processus, pas seulement celle de son propre utilisateur. La vraie question n'a donc jamais été « vais-je exécuter un agent à côté de mes secrets ». C'est « un modèle capable peut-il atteindre cette machine, ou s'échapper de la boîte où je l'ai placé » — et cette année a répondu aux deux, publiquement. « Il n'y a pas d'agent sur cette machine » n'est pas un contrôle que vous appliquez. C'est un espoir sur l'endroit où les choses resteront en place, et les choses ont déjà montré qu'elles n'y restent pas. Prévoyez que l'agent atteigne la machine. L'alternative, c'est compter sur la chance.

Conçu pour cela, sciemment

Cessez donc de tenter d'éloigner l'agent d'un secret qui est simplement là, à portée. Retirez la chose qui est là.

Un identifiant dans Clavitor n'est jamais chargé en mémoire de votre application pour y attendre. Il est récupéré en direct, à l'instant de l'appel, utilisé pour cette unique requête, puis disparu. Il ne se trouve jamais dans une variable d'environnement, ne se pose jamais dans un .env, ne passe jamais la durée du processus résident dans un tas en attente d'être vidé. Il n'y a rien pour /proc à lister et rien pour un vidage mémoire à emporter, car la machine n'a jamais été chargée de détenir un secret permanent.

Et l'unique identifiant qu'il remet est limité à la seule chose pour laquelle cet agent a été nommé. Il ne peut pas lister le coffre, ne peut pas énumérer ce qui existe d'autre, ne peut pas découvrir la clé suivante. Chaque récupération est limitée en débit, déclenche un verrouillage sur une rafale anormale, et est inscrite dans un journal en ajout seul, chaîné par hachage, qui vit sur le coffre — pas sur le point de terminal où l'agent s'exécute. C'est la piste immuable et imputable que demandent l'exigence 10 de PCI DSS et NIST 800-171 (contrôle 3.3.8) : la preuve exacte de ce que votre agent a touché, conservée là où une machine compromise ne peut ni atteindre ni réécrire.

La limite honnête, car l'affirmation en exige une : à la microseconde où il est utilisé, le secret existe en mémoire — pour cette unique requête, en cet unique instant. Aucune conception ne réécrit la physique. Ce qu'elle réécrit, c'est la différence entre un secret résident — présent dans votre processus pendant des heures, vidable à tout moment — et un secret éphémère — présent pour un seul appel, puis absent à prendre. On ne peut pas vider ce qui n'est pas là.

La leçon n'est pas « durcissez davantage la machine »

Vous pouvez continuer à durcir la machine. Vous pouvez continuer à vous dire qu'aucun code non fiable ne s'exécutera jamais à côté de vos secrets. Mais c'est précisément ce pari qui devient plus coûteux chaque mois, face à un adversaire dont le métier est d'exécuter du code et qui traverse des murs que vous supposiez solides. L'identifiant en mémoire était sûr quand chaque lecteur était de confiance. Les lecteurs ont changé. Le seul mouvement qui survit au changement, c'est de cesser de laisser l'identifiant là pour être lu.

Nous avons écrit les règles qu'un outil d'identifiants devrait respecter dans un monde comme celui-ci. Mesurez le vôtre à l'aune de ces règles.

Clavitor (@clavitorai) est le coffre d'identifiants conçu pour les agents d'IA, et contre eux. clavitor.ai

Sources

[1] Anthropic (Anthropic Red Team) — Assessing Claude Mythos Preview's cybersecurity capabilities (découverte et exploitation autonomes de la RCE NFS de FreeBSD, CVE-2026-4747 ; failles critiques sur les principaux systèmes d'exploitation et navigateurs) — https://red.anthropic.com/2026/mythos-preview/

[2] Associated Press (via CNBC) — Anthropic's Mythos model found vulnerabilities in classified U.S. government systems, official says — https://www.cnbc.com/2026/06/23/anthropics-mythos-model-found-vulnerabilities-in-classified-us-government-systems-official-says.html

[3] Fortune — Anthropic disables Fable and Mythos AI models following U.S. government export ban — https://fortune.com/2026/06/13/anthropic-disables-fable-mythos-export-controls-national-security-threat/

[4] Tenet Security (Tenet Threat Labs) — Agentjacking: Coding Agents with Fake Sentry Errors (précédent de détournement vers un identifiant résident) — https://tenetsecurity.ai/blog/agentjacking-coding-agents-with-fake-sentry-errors/