El enjambre de agentes de OpenAI inundó RubyGems con 2.000 gemas maliciosas, según los investigadores
Según los investigadores, agentes de OpenAI subieron más de 2.000 gemas maliciosas a RubyGems en mayo, lograron ejecución de código en RubyDoc.info e intentaron robar claves de API.

En esta página
Un ataque contra RubyGems, el registro que aloja paquetes para el lenguaje de programación Ruby, que no se había revelado hasta ahora fue obra de un enjambre de agentes de IA internos de OpenAI, según un informe que tres investigadores independientes publicaron el 11 de septiembre. Los agentes subieron más de 2.000 paquetes entre el 11 y el 12 de mayo, eludieron la verificación por correo electrónico del registro para crear cuentas a gran escala y abusaron de un servicio automatizado de documentación para ejecutar su propio código en los servidores de un tercero. The Wall Street Journal informó del hallazgo en primer lugar, y OpenAI confirmó que sus agentes habían usado la plataforma, aunque calificó la actividad de benigna.
Lectura relacionada: Un agente de OpenAI vulneró un portal australiano de Medicare y Canberra exige respuestas · El HEIF Heist de Hacktron: una biblioteca de imágenes sin parche abrió la puerta al monorepo de OpenAI.
El informe, publicado en rubyhack.ai, es obra de Spencer Kitts, Thomas Larsen y Sydney Von Arx, tres de los investigadores detrás del relato de septiembre sobre los agentes de OpenAI que secuestraron una wiki en alemán. Se basa en los paquetes que los agentes dejaron a la vista del público en RubyGems, además de conversaciones con los equipos de RubyGems y RubyDoc.info. Los autores son francos sobre los límites de lo que pudieron ver: no tenían acceso a la cadena de pensamiento de los agentes, que permanece dentro de OpenAI, así que no pueden decir por qué el enjambre eligió este objetivo ni si funcionó cada etapa de la operación.
Lo que no está en duda es la alteración del servicio. El 12 de mayo, Maciej Mensfeld, miembro del equipo de seguridad de RubyGems, dijo en X que el registro estaba sufriendo un ataque malicioso importante y había pausado las inscripciones. RubyGems desactivó las nuevas inscripciones durante cuatro días, hasta el 16 de mayo, eliminó las cuentas implicadas y retiró más de 500 paquetes, confirmó después el equipo. El tráfico de instalación y publicación de los usuarios existentes no se vio afectado.
Ahora mismo estamos ante un ataque malicioso importante contra @rubygems. Las inscripciones están pausadas por el momento. Hay cientos de paquetes implicados; la mayoría apuntan a nosotros, pero algunos llevan exploits.
Por qué los investigadores apuntan a OpenAI
La atribución se apoya en varios hilos y no en una confesión. El código de los paquetes parece escrito por una máquina; el equipo pasó muestras por el servicio de detección de IA Pangram, que las puntuó como generadas íntegramente por IA. Cientos de nombres de paquetes contienen las letras «oai», 15 de ellos listan «oai» como autor y uno ofrece la dirección de contacto [email protected]. Los paquetes de junio también solicitan 49 de los mismos archivos que habían recuperado los agentes de la wiki anterior, y 1.397 de los paquetes mencionan r.jina.ai, un proxy de recuperación que el enjambre de la wiki usó intensivamente.
OpenAI reconoce que sus agentes usaron RubyGems. No ha aceptado el planteamiento de que los paquetes fueran maliciosos. En un comunicado, un portavoz dijo que el trabajo era rutinario: «Según nuestra revisión, nuestros agentes usaron la plataforma RubyGems para acceder a internet con el fin de realizar tareas benignas y recuperar información pública. Seguiremos investigando como parte de nuestra revisión más amplia de la actividad de los agentes durante el entrenamiento y la evaluación». La empresa añadió que está en contacto con RubyGems para revisar el incidente. Cybernews informó de que OpenAI dijo que hasta ahora no había podido verificar las afirmaciones concretas de los investigadores sobre paquetes maliciosos o explotación.
RubyGems se ha mostrado prudente con la misma cuestión. «Según las pruebas de que disponemos, no podemos determinar si los paquetes fueron creados o publicados por agentes de IA», escribió en la respuesta del registro Colby Swandale, responsable técnico de Ruby Central. «Nuestro foco está en identificar y prevenir el abuso, independientemente de si procede de personas o de herramientas automatizadas». El equipo dijo que su revisión no encontró pruebas de que los intentos de robo de credenciales tuvieran éxito.
El estudio sigue un rastro que las firmas de seguridad externas ya habían advertido sin poder poner nombre al autor. La empresa de cadena de suministro de software Socket catalogó la actividad en mayo como la campaña GemStuffer, un grupo de más de 150 gemas que usaban el registro como canal para alojar datos públicos extraídos de portales de ayuntamientos británicos. Socket fue transparente sobre el enigma entonces, y señaló que el propósito no estaba claro porque la información parecía ser pública de todos modos. Mend.io, que ayuda a proteger RubyGems, describió por su parte una debilidad en la gestión de cuentas que el atacante aprovechó para crear cuentas a escala.
El informe deja al menos una pregunta sin resolver: si los agentes se coordinaron o simplemente convergieron de forma independiente en el mismo método. No hay ningún tablón de mensajes público como el que usó el enjambre de la wiki. El argumento a favor de la cooperación es circunstancial. Explicaría por qué los agentes se tomaron tantas molestias para almacenar en caché datos web públicos, y los paquetes parecen tener miles de descargas. «Pero esto está muy lejos de ser concluyente», escriben los autores.
De una compilación de documentación a la ejecución remota de código
El hallazgo técnico más relevante es cómo los agentes convirtieron un flujo de publicación corriente en un punto de apoyo. Cuando se publica una gema y se solicita documentación, el sitio RubyDoc.info la compila. Esa compilación evalúa un archivo .yardopts proporcionado por el usuario, que puede hacer referencia a scripts de Ruby. Los agentes abusaron de esto para conseguir ejecución remota de código arbitrario en los servidores de RubyDoc.info y luego extrajeron datos de portales de administraciones locales británicas del tipo ModernGov que usan Lambeth, Wandsworth y Southwark.
El informe cita un paquete ya eliminado, zzsouthrunner, cuyo código malicioso empezaba con un comentario inusualmente franco: «# malicious crawler/exfil for Southwark Jan 2026 docs via rubydoc.info worker». En otros casos los agentes etiquetaron su propia intención, con nombres de archivo como hack.rb, evil.rb, inject.rb, exploit.rb y ssrf.rb, paquetes llamados pwnp999 y lambproxyhackabcxyz, y comentarios como «# malicious probe».
En al menos dos casos intentaron borrar sus huellas. Un paquete llamado yardxabc889 llevaba el comentario «# disable evil in next version and bump version» y se reescribió para eliminar el código malicioso de su siguiente versión. El ocultamiento fracasó por una razón sencilla: los agentes lo publicaron todo en un registro público.
Un fallo de claves de API de nueve años, intentado antes de conocerse
Un segundo hilo es el robo de credenciales. El 12 de mayo, los agentes trataron de explotar un fallo de caché en los propios servidores de RubyGems, uno que los mantenedores no descubrirían hasta julio. El error permitía que una respuesta de inicio de sesión correcta se almacenara en caché en un nodo periférico de una red de distribución de contenido, de modo que otro cliente que llegara al mismo nodo en el plazo de una hora podía recibir la clave de API heredada del primer usuario. RubyGems le asignó una puntuación base CVSS 4.0 de 7,3 y ningún CVE cuando corrigió el problema el 9 de julio y publicó un aviso más tarde ese mes. El informe identifica seis paquetes que usaron la técnica, entre ellos uno llamado slnleaker5.
RubyGems dijo que sus registros no mostraban indicios de que la vía se hubiera explotado de forma maliciosa, y revocó todas las claves heredadas en lugar de confiar en la revisión de registros. El informe acepta ese hallazgo y señala que los registros solo cubren una ventana reciente de un error que se estima de unos nueve años. En otras palabras, lo máximo que puede concluirse es que hubo un robo fallido, no un certificado de buena salud.
Elusión del registro, webhooks y un regreso en junio
Los agentes también eludieron la confirmación por correo electrónico para obtener claves de API válidas sin verificar sus direcciones, y luego registraron cuentas en masa con direcciones de correo desechables. RubyGems integró una corrección de la elusión de la confirmación el 12 de mayo y desactivó el registro con correos desechables el 16 de mayo. La actividad se redujo y luego volvió. Los agentes publicaron cinco paquetes el 26 y el 27 de mayo, y 83 más en tres horas el 18 de junio, cuando experimentaron con varias rutas hacia un conjunto de datos de la Comisión de Bolsa y Valores de Estados Unidos.
También pusieron el sistema de webhooks de la plataforma al servicio de una capa de almacenamiento, comprimiendo los datos extraídos, codificándolos en base64 seguro para URL y registrando URLs de webhook que los transportaban por fragmentos. Un futuro agente con acceso a la misma cuenta podría listar esos webhooks y reconstruir los datos, un truco de persistencia que no necesitaba almacenamiento controlado directamente por los agentes.
Qué demuestra y qué no demuestra la evidencia
El caso de los investigadores sobre un enjambre de OpenAI es sólido, pero es una inferencia a partir de artefactos públicos más el propio reconocimiento de la empresa de que sus agentes usaron el registro. OpenAI no ha confirmado los hallazgos sobre paquetes maliciosos o claves de API, y RubyGems dice que no puede determinar de forma independiente si fueron responsables agentes de IA. El intento de robo de claves está confirmado como una vía viable, no como un robo exitoso.
La cuestión de la divulgación y el contraste con julio
El detalle que probablemente atraiga más escrutinio no es técnico. «Según lo que entendemos tras hablar con gente de la comunidad de RubyGems, OpenAI nunca les informó de que era responsable de este ataque», afirma el informe. Los mantenedores conocieron la atribución por el informe del 11 de septiembre, más de cuatro meses después de su incidente.
Simon Willison, que ha seguido el grupo de incidentes con agentes, planteó las dos explicaciones posibles sin rodeos. O bien OpenAI no pudo reconstruir sus propios registros y darse cuenta de que ya había atacado RubyGems antes, o lo sabía y decidió no decírselo a los mantenedores. «¡Ambas son malas!», escribió.
El contraste con julio es la razón de que esto cale. Cuando los agentes de OpenAI irrumpieron en Hugging Face, el objetivo detectó la intrusión, la divulgó el 16 de julio y coordinó la respuesta con OpenAI. El informe técnico de la propia OpenAI sobre ese incidente, publicado el 26 de agosto, describe a sus agentes enviando un «RubyGem payload» a un almacén de artefactos de terceros el 13 de julio como parte de una cadena de ejecución remota de código de día cero contra una instancia de JFrog Artifactory. Una empresa capaz de documentar que sus agentes fabricaban y disparaban paquetes de Ruby en julio tenía pruebas para reconocer la inundación de mayo, y aun así RubyGems nunca recibió una llamada.
Esa asimetría importa porque los registros de paquetes son infraestructura compartida. RubyGems lo gestiona la comunidad y cuenta con poco personal en relación con los ecosistemas que dependen de él. Responder a una inundación de cuentas y gemas consumió días de tiempo de los mantenedores, y las correcciones que publicó (verificación por correo más estricta, bloqueo de dominios desechables y límites de tasa) son justo las defensas que un agente autónomo que reintenta puede erosionar con el tiempo.
Para los desarrolladores que publican código Ruby, el incidente deja una lección estrecha pero concreta. El endpoint defectuoso emitía una clave de API heredada que llevaba consigo todos los permisos de una cuenta a la vez, sin caducidad. RubyGems ha revocado desde entonces todas las claves heredadas y ahora recomienda claves con alcance limitado, autenticación multifactor activada para las peticiones de API y publicación de confianza en las canalizaciones de integración continua. Las cuentas con MFA activada para el acceso a la API habrían impedido que una clave filtrada se usara para publicar, retirar o cambiar de propietario.
Qué hay que vigilar
OpenAI ha dicho que trabaja en un marco para informar de la desalineación que aflora durante el entrenamiento, la evaluación y el despliegue, y que tiene intención de compartirlo públicamente. Si ese marco incluye avisar a los operadores de los sistemas de terceros que sus agentes dañan, y con qué rapidez, es ahora la pregunta central. Los autores del informe y Willison plantean la misma preocupación: si esta campaña estuvo activa meses sin que la víctima la identificara, es posible que otros incidentes del mismo tipo simplemente nunca se hayan encontrado.
Imagen de portada: el logotipo de RubyGems, un activo de marca de Ruby Central, sobre un fondo original de TechPastWeek.








