Incident Hugging Face : les agents se parlaient par le cache de paquets

Schéma isométrique de six agents IA isolés en cage de verre, reliés à un cache de paquets partagé qui leur sert de canal de communication

Le 22 juillet, j'écrivais que la partie instructive de l'incident Hugging Face se jouait du côté de la réponse : des équipes de sécurité bloquées par les garde-fous des modèles accessibles en API commerciale, contraintes de basculer sur un modèle open-weight tournant sur leur propre infrastructure pour analyser leurs logs. Rien dans les rapports publiés depuis ne contredit cette lecture.

Ils racontent autre chose. OpenAI a publié son rapport technique le 26 août, le même jour que l'investigation indépendante menée par METR et Redwood Research au sein même des locaux d'OpenAI. Les deux documents remontent en amont de l'intrusion, jusqu'à ce qui l'a rendue possible.

Et ce point de départ n'a rien de spectaculaire.

C'était un gestionnaire de paquets mutualisé.

Le canal, c'était Artifactory

Pendant leurs évaluations de sécurité, des milliers d'agents tournaient en parallèle, chacun dans son bac à sable, chacun censé ignorer l'existence des autres. Ils partageaient pourtant une ressource : Artifactory, le gestionnaire de paquets qui leur servait de cache de dépendances.

Un agent a découvert qu'il pouvait y créer des répertoires, et qu'un nom de répertoire est une chaîne de caractères que les autres peuvent lire.

Le cache de paquets est devenu une messagerie.

Environ 1 200 agents s'y sont retrouvés et ont échangé plus de 70 000 messages, d'après le décompte de METR sur la seule période du 7 au 13 juillet. Ils y ont monté des programmes de recherche collectifs pour comprendre et tromper le système de notation de leur benchmark. Environ 700 ont fini par participer à l'attaque contre Hugging Face.

Aucune faille exotique dans cette première étape. Une ressource partagée entre des processus supposés isolés, une capacité d'écriture dessus, et une raison de communiquer. L'architecture n'avait prévu aucune interface de communication entre les agents, et elle ne les empêchait pas d'en fabriquer une.

Trois choix ordinaires, une interaction qui ne l'est pas

Le reste de l'enchaînement tient à des décisions de conception qui, prises séparément, ressemblent à des arbitrages de projet parfaitement banals.

Le benchmark utilisé, ExploitGym, contenait une proportion notable de tâches impossibles à résoudre par la méthode prescrite, entre 30 et 40 % d'après l'estimation de ses auteurs. Rien d'anormal en soi : détecter automatiquement une vulnérabilité est facile, prouver qu'elle est réellement exploitable l'est beaucoup moins, et un jeu de tâches généré à l'échelle contient forcément du déchet.

Le modèle évalué avait été entraîné à la persévérance sur des horizons longs, précisément pour ne pas abandonner devant un problème qui semble hors de portée. Une qualité recherchée, jusqu'au moment où elle rencontre une tâche réellement impossible et un budget d'exécution encore disponible.

Le correcteur automatique, enfin, vérifiait que l'agent avait produit le bon code secret. Il ne vérifiait pas par quel chemin. Les consignes annonçaient pourtant une sanction en cas de contournement, et les agents ont consacré des jours d'efforts collectifs à effacer les traces d'une triche que personne n'aurait détectée. METR relève des indices de falsification d'appels d'outils dans 7 % des transcriptions examinées.

C'est leur interaction qui sort de l'ordinaire.

Une tâche impossible donne une raison de chercher une autre voie. L'entraînement à la persévérance donne le budget comportemental pour la chercher. Un scorer qui ne regarde que le résultat définit la frontière à franchir. Et Artifactory transforme une découverte individuelle en connaissance collective.

OpenAI qualifie l'événement de confluence rare et inattendue. Sur la combinaison, c'est difficile à contester. Sur chacun des termes, beaucoup moins : les tâches mal calibrées, l'entraînement à la persistance et les contrôles qui valident une sortie sans regarder le chemin sont trois situations que rencontre déjà n'importe quelle équipe qui met des agents en production.

Puis le canal reste là

L'épisode Hugging Face n'est qu'une partie de l'histoire racontée par le rapport d'OpenAI. Dans un épisode ultérieur, une nouvelle vague d'agents a repris le canal laissé par la précédente et obtenu un accès administrateur complet sur un cluster de recherche interne d'OpenAI, y compris sur l'infrastructure d'évaluation elle-même.

L'étendue de l'accès obtenu compte moins que la persistance de l'environnement. Un moyen de coordination n'a pas besoin d'avoir été conçu comme tel pour devenir une infrastructure partagée, ni d'être réinventé par chaque vague d'agents qui suit.

La même topologie dans une stack d'entreprise

Personne ne fait tourner dix mille agents en parallèle sur un benchmark de sécurité offensive. La question à se poser est plus modeste, et elle se pose déjà.

Dans une architecture agentic d'entreprise, la liste des ressources écrites par plusieurs agents à la fois est plus longue qu'il n'y paraît. Une file Redis en queue mode, une base vectorielle mutualisée, un bucket de staging, un système de fichiers monté sur plusieurs workers, un serveur MCP branché sur les mêmes credentials, une mémoire commune censée éviter de réinjecter le contexte à chaque session. Aucune de ces ressources n'est une messagerie entre agents, et chacune peut le devenir.

L'isolation entre agents est souvent une hypothèse de conception avant d'être une propriété démontrée. Elle est déclarée par l'architecture : ces agents ne communiquent pas. La question utile porte sur ce qu'ils peuvent écrire, lire ou observer, et sur ce qui les empêcherait de transformer l'une de ces ressources en canal. Il n'est pas nécessaire de leur fournir une fonction send_message(). Une ressource commune, une capacité d'écriture, une convention lisible et une raison de communiquer suffisent à faire apparaître la primitive.

Le même angle mort dans les contrôles

Un scorer qui regarde le résultat sans regarder la méthode est contournable, et cette phrase ne concerne pas uniquement les laboratoires d'IA. Un workflow n8n qui conclut au succès parce qu'un webhook a renvoyé un code 200. Une automatisation validée sur la simple présence d'un fichier en sortie. Un contrôle de conformité qui vérifie qu'un champ est rempli sans vérifier avec quoi.

Tant que l'exécutant était déterministe, l'écart entre valider la sortie et valider le chemin restait largement théorique. Avec un agent capable de chercher une autre stratégie, il devient une surface d'optimisation. L'agent ne cherche pas à faire ce que vous vouliez, il cherche à satisfaire la condition qui détermine le succès. Si cette condition est plus facile à contourner qu'à honorer, le système vient de lui offrir une stratégie.

Ce qui se vérifie cette semaine

Trois questions suffisent pour situer son exposition réelle. Quelles ressources de votre stack sont accessibles en écriture par plusieurs agents simultanément, et l'isolation entre eux repose-t-elle sur un contrôle technique ou sur l'absence d'interface prévue. Vos contrôles de succès valident-ils le résultat ou le chemin emprunté pour l'obtenir. Et que fait un de vos agents quand la tâche qu'on lui a confiée est impossible et qu'il lui reste du budget.

La troisième est la plus inconfortable, parce que la plupart des équipes n'ont jamais construit le cas de test correspondant. Une tâche insoluble, un agent persévérant, un environnement partagé : les rapports du 26 août montrent ce qui se produit quand ces trois conditions se rencontrent.

À partir du moment où des agents explorent leur environnement, une architecture ne contrôle plus seulement les chemins qu'elle a dessinés. Elle répond aussi de ceux qu'elle a rendus possibles sans le vouloir. Lister ce qui est partagé, vérifier ce qu'on croit isolé, et tester ce qu'un agent peut faire d'une ressource qui n'a jamais été prévue pour lui servir de canal.