media

CVE

Sin asignar

CWE

CWE-506, CWE-200

Sistemas afectados

  • RubyGems package registry
  • 155 GemStuffer RubyGems package artifacts tracked by Socket
  • Representative gems and artifacts including lambeth71b, agenda-sample-result, and rubydocran_*
  • UK ModernGov council portals for Lambeth, Wandsworth, and Southwark
  • Ruby environments where payload.rb, script.rb, evil.rb, yardload.rb, yard_plugin.rb, exploit.rb, extconf.rb, or fetcher.rb were executed

GemStuffer es una campaña de abuso del registro RubyGems divulgada el 13 de mayo de 2026. Socket está rastreando 155 artefactos de paquetes vinculados a la campaña, todos dentro del ecosistema RubyGems. La actividad resulta inusual porque los paquetes no parecen estar optimizados para comprometer masivamente a desarrolladores; en su lugar, usan RubyGems como una capa de exfiltración y almacenamiento de datos extraídos.

Las cargas útiles obtienen páginas públicas de ModernGov utilizadas por ayuntamientos locales del Reino Unido, empaquetan las respuestas HTTP recopiladas en archivos .gem válidos y publican esos archivos de nuevo en rubygems.org con claves de API de RubyGems codificadas de forma fija. RubyGems se convierte entonces en la capa de transporte y recuperación: el atacante puede descargar más tarde la versión del paquete y extraer el contenido extraído del archivo gem.

Paquetes y proyectos afectados

El registro y los proyectos afectados son:

  • RubyGems, como el canal de exfiltración y alojamiento de paquetes que se abusó.
  • 155 artefactos de paquetes GemStuffer rastreados por Socket.
  • Nombres de gems y artefactos representativos descritos en el análisis público incluyen lambeth71b, agenda-sample-result y nombres de preparación en formato rubydocran_*.
  • Los portales municipales ModernGov del Reino Unido para Lambeth, Wandsworth y Southwark, que fueron extraídos por las muestras analizadas por Socket.

Los mantenedores de RubyGems informaron por separado sobre una campaña coordinada de publicación de spam desde cuentas recién registradas. SecurityWeek informó que se eliminaron más de 500 paquetes basura, incluidos paquetes con intentos de exploit, y que el registro de nuevas cuentas se deshabilitó temporalmente mientras RubyGems reforzaba los límites de tasa y la protección WAF. Los informes públicos indican que las cuentas existentes de RubyGems, los paquetes existentes, las instalaciones de gems y las publicaciones de usuarios existentes no se vieron comprometidas.

Cadena de ataque

Las muestras son scripts de Ruby en lugar de cargas útiles de dependencias convencionales. El análisis público describe un flujo repetible:

  1. Recopilar el contexto de ejecución, como la hora actual, el directorio de trabajo, la ruta del script y los argumentos.
  2. Obtener URLs de portales municipales codificadas de forma fija con Net::HTTP de Ruby, incluyendo moderngov.lambeth.gov.uk, democracy.wandsworth.gov.uk y moderngov.southwark.gov.uk.
  3. Extraer y seguir enlaces de agendas y comités como las rutas ieList y mgCommittee.
  4. Escribir las respuestas recopiladas en un árbol de paquetes local, comúnmente bajo lib/result.txt o un archivo README.
  5. Construir un archivo .gem válido.
  6. Publicar el archivo en RubyGems mediante la CLI gem push o una solicitud POST directa a https://rubygems.org/api/v1/gems.

El manejo de credenciales es destacable. Algunas muestras crean /tmp/gemhome/.gem/credentials, escriben un token de API de RubyGems codificado de forma fija, establecen permisos 0600 y sobrescriben HOME para que la CLI gem lea el archivo de credenciales controlado por el atacante. Otras muestras evitan la CLI e incluyen el token de API directamente en la cabecera HTTP Authorization.

Por qué esto importa

GemStuffer no tiene la misma forma que un typosquat o una vulneración de mantenedor. La víctima inmediata no es necesariamente un desarrollador que instala un paquete popular. La técnica importa porque convierte un registro de paquetes de confianza en un depósito público encubierto de datos.

Esto tiene consecuencias prácticas de seguridad:

  • El tráfico de salida hacia rubygems.org a menudo parece normal desde estaciones de trabajo de desarrolladores y sistemas de CI.
  • Un archivo .gem puede ocultar datos extraídos dentro del contenido comprimido del paquete.
  • La publicación en el registro puede eludir controles de seguridad que se centran únicamente en la instalación de paquetes.
  • El spam de cuentas nuevas puede generar suficiente ruido para enmascarar un abuso de registro más selectivo.

Para los equipos de seguridad de aplicaciones, la lección es que los registros de paquetes son superficies de confianza bidireccionales. Proteger las rutas de instalación es necesario, pero las rutas de publicación y las llamadas salientes a la API del registro también necesitan políticas, registro y mínimo privilegio.

Detección

Busca los nombres de scripts y los artefactos del sistema de archivos publicados en los indicadores de Socket:

  • payload.rb
  • script.rb
  • evil.rb
  • yardload.rb
  • yard_plugin.rb
  • exploit.rb
  • extconf.rb
  • fetcher.rb
  • /tmp/gemhome/.gem/credentials
  • /tmp/rubydocran_*
  • lambeth71b*
  • lib/result.txt dentro de archivos gem generados inesperadamente

La telemetría de red debe marcar las solicitudes POST inesperadas a https://rubygems.org/api/v1/gems, especialmente desde trabajos de CI o hosts que no publican gems. La publicación en RubyGems desde un entorno de ejecución de aplicaciones, un scraper o un trabajo de compilación que no sea de lanzamiento debe tratarse como sospechosa.

Para cargas de trabajo Ruby, alerta sobre procesos que establecen HOME en una ruta /tmp inmediatamente antes de invocar gem build, gem push o llamadas a la API de RubyGems. Ese patrón es poco frecuente en aplicaciones legítimas y aparece directamente en las muestras de GemStuffer.

Remediación

Si un host ejecutó uno de los scripts de GemStuffer, trátalo como un incidente de exfiltración. Preserva los directorios de preparación relevantes bajo /tmp y el historial de shell, luego elimina la carga útil y rota cualquier clave de API de RubyGems u otras credenciales disponibles para el proceso.

Restringe la publicación de salida hacia RubyGems:

  • Permite gem push solo desde flujos de trabajo de lanzamiento aprobados.
  • Bloquea las solicitudes POST a rubygems.org/api/v1/gems desde trabajos de CI que no publican gems.
  • Limita las claves de API de RubyGems al conjunto mínimo de paquetes y rótalas con regularidad.
  • Supervisa la escritura de nuevas credenciales de RubyGems fuera de los directorios de inicio esperados.

Para la gobernanza del registro, revisa los paquetes RubyGems creados recientemente en espejos internos de dependencias y bloquea las gems externas recién publicadas hasta que pasen una revisión. La campaña demuestra que los paquetes con pocas descargas y apariencia de basura pueden seguir siendo útiles para los atacantes cuando el propio registro es el canal de exfiltración.

De la investigación a la remediación

Comprueba si este patrón existe en tu código

Convierte esta investigación en un flujo de remediación. Analiza dependencias y manifiestos para detectar riesgos similares en la cadena de suministro y prioriza las correcciones con contexto de alcanzabilidad.

Referencias