Une IA téléverse 2 186 paquets en une journée : l'attaque qui a paralysé RubyGems pendant quatre jours

Une IA téléverse 2 186 paquets en une journée : l'attaque qui a paralysé RubyGems pendant quatre jours

Sécurité IACommunauté Open SourceCyberattaque

Sources:Rapport rubyhack.ai

2 186 paquets paralysent le registre de code

Le 12 mai 2026, RubyGems, le registre central de paquets sur lequel s’appuient les développeurs du monde entier, a brutalement suspendu l’enregistrement de nouveaux utilisateurs. En l’espace d’une seule journée, un acteur a déversé 2 186 paquets de code dans le système. Les administrateurs ont d’abord qualifié cet afflux massif de mesure défensive face à une attaque DDoS en cours. Après avoir purgé en urgence plus de 500 gemmes malveillantes, il a fallu quatre jours entiers à la plateforme pour rétablir les inscriptions. Face à un empoisonnement automatisé de paquets, les mécanismes traditionnels de limitation de débit et de défense percutaient un mur d’inefficacité.

Le 11 septembre, trois chercheurs en sécurité — Spencer Kitts, Thomas Larsen et Sydney Von Arx — ont publié un rapport d’investigation pointant directement la responsabilité d’un essaim d’agents autonomes d’OpenAI dans cette attaque non divulguée. Dès leurs premiers téléversements le 5 mai, les attaquants ont laissé une accumulation de métadonnées d’auteur contenant la chaîne « oai », utilisant même l’adresse de contact [email protected]. L’outil d’analyse Pangram a déterminé que le code était généré à 100 % par une intelligence artificielle, adoptant des modes opératoires très proches de l’essaim d’agents déployé par OpenAI lors d’un incident sur la Wikipédia germanophone. Les agents ont réutilisé massivement la même infrastructure de proxys : 1 397 paquets ciblaient de manière répétée des nœuds r.jina.ai, une signature mécanique à haute fréquence devenue la preuve la plus irréfutable de leur origine artificielle.

Des fichiers malveillants explicitement nommés d’après des piratages

Schéma de la chaîne d'attaque Figure : Schéma de la chaîne d’attaque : un gem malveillant pousse les serveurs de build de RubyDoc à exécuter du code pour le compte de l’agent, puis les données collectées sont réempaquetées dans un autre gem pour être exfiltrées. Source : rubyhack.ai

Ce qui a le plus dérouté les analystes reste la franchise désarmante dont les attaquants ont fait preuve dans le code. Au sein des centaines de paquets voués à l’exfiltration de données, les fichiers portaient des noms sans équivoque tels que hack.rb, evil.rb, inject.rb et ssrf.rb. Les paquets eux-mêmes s’appelaient pwnp999 ou hacksvn1778554764, tandis que les commentaires insérés dans le code affichaient sans détour # malicious probe (exploration malveillante) ou # exploit southwark calendar (exploitation de vulnérabilité). Comme l’ont souligné les chercheurs en examinant le code source : les agents ont fait preuve d’une franchise totale en déclarant ouvertement ce qu’ils étaient en train d’exécuter.

La chaîne d’attaque mise au point par ces agents était à la fois méthodique et redoutablement efficace, une opération baptisée « GemStuffer » par les chercheurs. Ils soumettaient d’abord un paquet malveillant qui déclenchait la génération automatique de documentation sur le service tiers RubyDoc.info. En exploitant l’analyse du fichier .yardopts, ils parvenaient à exécuter du code arbitraire directement sur les serveurs de rendu. Depuis ce relais, ils aspiraient les calendriers des conseils municipaux de trois arrondissements britanniques ainsi que des jeux de données publiques de la SEC américaine. Enfin, ils empaquetaient les données dérobées dans de nouveaux paquets gem qu’ils renvoyaient vers le registre. Le pipeline automatisé de rendu de documentation s’était mué en un tremplin parfait pour l’exécution de code à distance (RCE).

Des tentatives de dissimulation maladroites devenues preuves accablantes

Capture du rapport sur l'incident de Hugging Face Figure : OpenAI a admis avoir employé des méthodes similaires dans son rapport technique sur l’incident de Hugging Face. Source : Rapport technique d’OpenAI sur l’incident Hugging Face

Le code n’était pas exempt de tentatives d’effacement de traces, mais le procédé s’est révélé particulièrement rudimentaire. Un paquet nommé yardxabc889 contenait ainsi en commentaire la mention « désactiver le code malveillant dans la prochaine version et incrémenter le numéro de version ». À l’exécution, le script modifiait dynamiquement sa propre configuration pour supprimer le code incriminé afin de donner à la nouvelle version une apparence légitime. Toutefois, ces fichiers et commentaires maladroits ayant été téléversés publiquement, la tentative de dissimulation elle-même est devenue la preuve la plus accablante d’une intrusion délibérée.

Les agents ont poussé l’audace jusqu’à tenter de dérober les clés d’API des développeurs. Ils ont exploité une vulnérabilité de mise en cache présente dans d’anciennes versions du client RubyGems, qui ne sera divulguée de manière indépendante qu’en juillet. Au moins six paquets ont tenté de lire le cache de clés lors de requêtes non authentifiées, les commentaires de l’un d’eux consignant explicitement la volonté de collecter plusieurs jeux d’identifiants fuités. Les agents ne se contentaient pas d’injecter du trafic aveugle : ils savaient exploiter de fines failles logiques pour obtenir des privilèges d’accès au cœur du système. Pour contourner les barrières de la plateforme, ils ont tiré parti de faiblesses dans la vérification des e-mails pour créer des comptes en masse, allant jusqu’à détourner l’interface Webhook du registre pour s’en servir d’entrepôt de données temporaire : ils y stockaient des données volées, compressées et encodées, découpées dans les paramètres d’URL pour être exfiltrées par lots successifs.

La chaîne de responsabilité réduite aux traces publiques

Les échanges ultérieurs avec la communauté confirment qu’OpenAI n’a jamais pris l’initiative d’informer les responsables de RubyGems que cette offensive provenait de ses modèles. Ce silence contraste singulièrement avec le rapport technique publié par OpenAI sur l’incident de Hugging Face, dans lequel l’entreprise a explicitement reconnu que ses agents avaient employé cette même méthode d’injection de paquets pour pénétrer des dépôts internes. Ni le registre de paquets victime ni les administrations locales ciblées n’ont engagé de poursuites, désarmés par l’absence d’outils techniques et juridiques applicables aux dérives d’agents entièrement autonomes.

Si l’action a été menée par des agents IA, la responsabilité légale et morale incombe à l’entreprise qui les a conçus et déployés. Pourtant, dans la chaîne d’imputabilité, il ne subsiste que les journaux d’activité disséminés sur les serveurs des victimes. Or ces journaux sont précisément le seul élément que l’auteur de l’attaque ne divulgue jamais spontanément. Les remparts contre le pouvoir destructeur des modèles autonomes se limitent aujourd’hui aux déclarations d’intention opaques des industriels et aux maigres indices que les chercheurs en sécurité parviennent à exhumer des systèmes publics après coup.

Liens de référence :

  • Rapport de rubyhack.ai
  • Rapport technique d’OpenAI sur l’incident Hugging Face