Diferencia entre revisiones de «Campaña de Envenenamiento de GitHub Actions»

De CiberWiki
(Campaña de Ataque a la Cadena de Suministro de TeamPCP (2026))
Sin resumen de edición
 
Línea 318: Línea 318:
== Etiquetas / Categorías ==
== Etiquetas / Categorías ==
<code>teampcp</code> <code>cadena-de-suministro</code> <code>github-actions</code> <code>trivy</code> <code>checkmarx</code> <code>kics</code> <code>litellm</code> <code>telnyx</code> <code>pypi</code> <code>npm</code> <code>openvsx</code> <code>typosquatting</code> <code>esteganografia</code> <code>wav</code> <code>canisterworm</code> <code>robo-credenciales</code> <code>cifrado</code> <code>tpcp</code> <code>kubernetes</code> <code>ransomware</code> <code>t1195</code> <code>t1078</code> <code>t1552</code> <code>t1560</code> <code>t1485</code> <code>ci/cd</code> <code>devsecops</code>
<code>teampcp</code> <code>cadena-de-suministro</code> <code>github-actions</code> <code>trivy</code> <code>checkmarx</code> <code>kics</code> <code>litellm</code> <code>telnyx</code> <code>pypi</code> <code>npm</code> <code>openvsx</code> <code>typosquatting</code> <code>esteganografia</code> <code>wav</code> <code>canisterworm</code> <code>robo-credenciales</code> <code>cifrado</code> <code>tpcp</code> <code>kubernetes</code> <code>ransomware</code> <code>t1195</code> <code>t1078</code> <code>t1552</code> <code>t1560</code> <code>t1485</code> <code>ci/cd</code> <code>devsecops</code>
[[Categoría:CAMPAÑAS|CAMPAÑAS]]

Revisión actual - 20:36 31 mar 2026

Campaña de Envenenamiento de GitHub Actions es el nombre que recibe una operación de ciberataque a gran escala, atribuida al grupo de amenazas TeamPCP, que se desarrolló durante marzo de 2026. La campaña es significativa por su naturaleza en cascada, donde el compromiso inicial de una herramienta de seguridad ampliamente utilizada (Trivy) sirvió como punto de apoyo para robar credenciales que posteriormente se utilizaron para envenenar múltiples componentes de la cadena de suministro de software, incluyendo acciones de GitHub, imágenes de Docker, paquetes en PyPI y npm, extensiones de Visual Studio Code en OpenVSX, y herramientas de otros proveedores como Checkmarx. La operación combinó robo de credenciales a escala, técnicas de esteganografía, capacidades de autopropagación tipo gusano y actividades destructivas dirigidas geográficamente, demostrando una evolución en la sofisticación de los ataques a la cadena de suministro.

Nombres Alternativos / Aliases

  • Operación TeamPCP (Nombre mediático)
  • Ataque en Cascada a CI/CD (Descripción técnica)
  • Compromiso de Trivy, Checkmarx y LiteLLM (Por los objetivos principales)
  • Campaña de Envenenamiento de GitHub Actions (Por el vector principal)
  • Campaña de Ataque a la Cadena de Suministro de TeamPCP (2026)

Fecha de Detección / Actividad

  • Incidente Precursor: 27 de febrero de 2026 (Ataque "Pwn Request" expone token de servicio de Trivy CI/CD).
  • Compromiso Inicial (Trivy): 19 de marzo de 2026 (Publicación de etiqueta maliciosa v0.69.4 en Trivy).
  • Expansión a Acciones de GitHub: 19-20 de marzo de 2026 (Compromiso de trivy-action y setup-trivy).
  • Expansión a Imágenes Docker: 22 de marzo de 2026 (Publicación de aquasec/trivy:0.69.5 y 0.69.6 en Docker Hub).
  • Desfiguración de Repositorios: 22 de marzo de 2026 (Alteración de la organización aquasec-com en GitHub).
  • Expansión a PyPI (LiteLLM): 22 de marzo de 2026 (Publicación de versiones maliciosas 1.82.7 y 1.82.8).
  • Compromiso de Checkmarx (GitHub Actions y OpenVSX): 23 de marzo de 2026 (Entre 02:53 UTC y 16:50 UTC).
  • Expansión a CanisterWorm (npm): 23-24 de marzo de 2026 (Infección de más de 28 paquetes npm en menos de un minuto).
  • Expansión a PyPI (Telnyx): 27 de marzo de 2026 (Publicación de versiones 4.87.1 y 4.87.2).
  • Estado: Contenido (parcial). Se han eliminado los artefactos maliciosos de los repositorios públicos, pero la explotación de las credenciales robadas puede continuar. Se requiere rotación masiva de secretos.

Actor de Amenaza (Atribución)

  • Nombre del Grupo: TeamPCP.
  • Alias del Actor: El grupo opera con múltiples identidades y ha anunciado colaboraciones con LAPSUS$ y el grupo de ransomware Vect. También se ha vinculado con CipherForce.
  • Tipo de Actor: Grupo de cibercriminales con motivación financiera y geopolítica, especializado en ataques a la cadena de suministro, robo de credenciales y, en esta campaña, actividades destructivas selectivas.
  • Motivación: Robo de credenciales de alto valor (tokens de CI/CD, credenciales en la nube) para monetización mediante venta de acceso, extorsión, o uso en operaciones de ransomware. Incluyó un componente destructivo dirigido contra sistemas en Irán.
  • Sofisticación: Alta. El grupo demostró capacidades avanzadas en movimiento lateral, abuso de identidades válidas, esteganografía, autopropagación tipo gusano, y coordinación de ataques en múltiples ecosistemas (GitHub, PyPI, npm, Docker Hub, OpenVSX).

Resumen Ejecutivo

La campaña de TeamPCP comenzó con la explotación de un token de cuenta de servicio comprometido de Trivy, un popular escáner de vulnerabilidades de código abierto. El atacante utilizó este acceso para forzar etiquetas maliciosas en los repositorios de Trivy, inyectando código que, cuando se ejecutaba en entornos de CI/CD, robaba secretos (variables de entorno, claves SSH, credenciales de nube) y los exfiltraba a un dominio typosquat (scan.aquasecurity[.]org).

Este robo inicial de credenciales permitió a TeamPCP expandir la campaña en cascada:

  1. Acciones de GitHub de Checkmarx: Utilizando credenciales robadas, el grupo comprometió dos acciones de GitHub de Checkmarx (ast-github-action y kics-github-action), inyectando la misma lógica de robo con un nuevo dominio de exfiltración (checkmarx[.]zone) y un mecanismo de respaldo que creaba repositorios docs-tpcp dentro de las organizaciones víctimas.
  2. Extensiones de OpenVSX: A través de una cuenta comprometida (ast-phoenix), publicaron versiones maliciosas de ast-results y cx-dev-assist en OpenVSX. Estas extensiones verificaban la presencia de credenciales en la nube y descargaban una segunda etapa desde el mismo dominio malicioso.
  3. Ecosistemas de Paquetes: El grupo publicó versiones maliciosas de litellm (PyPI) y luego de telnyx (PyPI), utilizando esteganografía en archivos WAV para ocultar payloads. También desplegaron CanisterWorm, un gusano que utilizaba tokens npm robados para infectar más de 28 paquetes en menos de un minuto.
  4. Actividad Destructiva: La campaña incluyó el desarrollo de kamikaze.sh, un script con múltiples versiones que incorporaba persistencia en Kubernetes, propagación vía SSH y una variante destructiva que verificaba la zona horaria Asia/Teherán antes de ejecutar rm -rf / en sistemas iraníes.

La campaña reveló una estrategia de "confianza en cascada": una vez comprometida una herramienta de confianza, las credenciales robadas permitían comprometer otras herramientas, creando un efecto multiplicador. La inclusión de técnicas de esteganografía en audio WAV, mecanismos de respaldo (repositorios tpcp-docs) y actividad destructiva geográficamente selectiva demostraron un alto nivel de planificación y recursos.

Vectores de Ataque

  • Compromiso de Cuenta de Servicio (T1078): El acceso inicial se logró mediante credenciales de cuenta de servicio comprometidas (tokens PAT de GitHub) que otorgaban acceso de escritura a los repositorios de Trivy. Este token fue obtenido en un ataque precursor ("Pwn Request") el 27 de febrero de 2026.
  • Manipulación de Etiquetas (Tag Poisoning): Los atacantes forzaron la actualización de etiquetas de versión en los repositorios de GitHub (Trivy, Checkmarx) para que apuntaran a commits maliciosos en lugar de versiones legítimas.
  • Typosquatting y Confianza: Utilizaron dominios typosquat como scan.aquasecurity[.]org y checkmarx[.]zone para que la exfiltración pareciera legítima y evadiera la detección superficial.
  • Esteganografía en WAV (T1027): En las versiones posteriores (kamikaze.sh 3.3) y en el ataque a telnyx, los payloads se ocultaron dentro de archivos de audio WAV válidos, dificultando la detección por inspección de red y EDR.
  • Phishing / Robo de Credenciales (T1566): El compromiso de la cuenta ast-phoenix en OpenVSX sugiere un vector de robo de credenciales adicional, posiblemente mediante phishing o reutilización de contraseñas.

Técnicas, Tácticas y Procedimientos (TTPs)

Táctica (MITRE ATT&CK) Técnica Descripción / Implementación
Acceso Inicial (TA0001) Valid Accounts (T1078) Uso de tokens PAT de GitHub robados (cuentas de servicio) para autenticarse y modificar repositorios.
Acceso Inicial (TA0001) Supply Chain Compromise (T1195.001) Envenenamiento de dependencias de software: acciones de GitHub, paquetes PyPI, imágenes Docker, extensiones VS Code.
Ejecución (TA0002) Command and Scripting Interpreter (T1059) Uso de scripts Bash (setup.sh, kamikaze.sh) y Python para ejecutar el robo y la persistencia.
Persistencia (TA0003) Create or Modify System Process (T1543.002) Creación de servicios systemd (pgmon.service, pgmonitor.service) en hosts Linux.
Persistencia (TA0003) Deploy Container (T1610) Despliegue de DaemonSets privilegiados (host-provisioner-std, host-provisioner-iran) en clústeres de Kubernetes.
Evasión de Defensas (TA0005) Obfuscated Files or Information (T1027) Esteganografía en archivos WAV; ofuscación de scripts; uso de commits falsos con identidades suplantadas.
Evasión de Defensas (TA0005) Masquerading (T1036) Nombres de servicios con temática de PostgreSQL (pgmon.service) y dominios typosquat para aparentar legitimidad.
Credential Access (TA0006) OS Credential Dumping (T1003) Volcado de memoria de procesos Runner.Worker en GitHub Actions para extraer secretos (/proc/*/mem).
Credential Access (TA0006) Unsecured Credentials (T1552) Búsqueda en sistema de archivos de claves SSH, archivos .env, tokens de Kubernetes y credenciales de nube.
Credential Access (TA0006) Cloud Instance Metadata API (T1552.005) Consulta a IMDS de AWS (169.254.169.254) para obtener credenciales de IAM del ejecutor.
Discovery (TA0007) File and Directory Discovery (T1083) Búsqueda recursiva de webhooks de Slack/Discord y archivos de credenciales en el espacio de trabajo.
Discovery (TA0007) Cloud Service Discovery (T1526) Consulta a API de Kubernetes para enumerar nodos y desplegar DaemonSets.
Collection (TA0009) Archive Collected Data (T1560) Empaquetado de datos robados en tpcp.tar.gz con cifrado AES-256-CBC y clave de sesión cifrada con RSA-4096.
Exfiltration (TA0010) Exfiltration Over C2 Channel (T1041) Envío de tpcp.tar.gz vía HTTP POST a dominios controlados por el atacante.
Exfiltration (TA0010) Exfiltration to Code Repository (T1567.001) Mecanismo de respaldo: creación de repositorios docs-tpcp o tpcp-docs en GitHub de la víctima para subir datos robados como Release Assets.
Lateral Movement (TA0008) Remote Services: SSH (T1021.004) Recolección de claves SSH (~/.ssh/id_*) para propagación a otros hosts.
Impact (TA0040) Data Destruction (T1485) Ejecución de rm -rf / en sistemas iraníes (tras verificar zona horaria Asia/Teherán) y en nodos de Kubernetes.

Flujo de Ataque (Kill Chain)

  1. Reconocimiento y Preparación: TeamPCP identifica y compromete credenciales de cuentas de servicio con acceso a repositorios de alto valor (Trivy). Establecen infraestructura de C2 con dominios typosquat.
  2. Compromiso Inicial (Trivy): Utilizan el token robado para forzar etiquetas maliciosas en los repositorios de Trivy, publicando versiones envenenadas en GitHub Releases, Docker Hub y registros asociados.
  3. Robo de Credenciales (Fase 1): Los usuarios que ejecutan las versiones comprometidas de Trivy en sus CI/CD activan el credential stealer, que exfiltra secretos (tokens de GitHub, credenciales en la nube) a scan.aquasecurity[.]org.
  4. Expansión Lateral (Checkmarx): Utilizando los tokens de GitHub robados (que tienen permisos en otros repositorios), TeamPCP compromete las acciones de GitHub de Checkmarx y las extensiones de OpenVSX, repitiendo el patrón con un nuevo C2 (checkmarx[.]zone).
  5. Expansión a Ecosistemas de Paquetes: Con credenciales robadas de cuentas de PyPI y npm, publican paquetes maliciosos (litellm, telnyx) y despliegan CanisterWorm para infectar en masa paquetes npm.
  6. Despliegue de Persistencia y Actividad Destructiva: En sistemas comprometidos (especialmente entornos Kubernetes y hosts Linux), despliegan servicios systemd y DaemonSets para persistencia. Activan la carga útil destructiva kamikaze.sh, que verifica si el objetivo está en Irán antes de borrar datos.
  7. Monetización y Exfiltración Continua: Las credenciales robadas se venden a otros grupos (como Vect) para operaciones de ransomware, o se utilizan para extorsión directa. Los datos robados continúan fluyendo a través de los canales establecidos.

Infraestructura Utilizada

Tipo Ejemplos / Características Propósito
Dominios C2 (Typosquat) scan.aquasecurity[.]org (45.148.10.212), checkmarx[.]zone (83.142.209.11), models.litellm[.]cloud. Puntos de exfiltración para datos robados (tpcp.tar.gz).
Túneles Cloudflare crear-secuencia-gradiente-sensibilidad[.]trycloudflare[.]com C2 para distribuir kamikaze.sh y payloads WAV.
Infraestructura ICP tdtqy-oyaaa-aaaae-af2dq-cai[.]raw[.]icp0[.]io C2 alternativo para la campaña.
Repositorios de Exfiltración docs-tpcp, tpcp-docs (en organizaciones víctimas). Mecanismo de respaldo para exfiltración dentro de GitHub.
Registros de Paquetes PyPI, npm, Docker Hub, OpenVSX. Plataformas para distribución de artefactos maliciosos.
Herramientas del Atacante kamikaze.sh (script Bash), kube.py, prop.py (scripts Python), environmentAuthChecker.js (extensión VS Code), CanisterWorm. Payloads para robo, persistencia, propagación y destrucción.

Objetivos y Sectores Atacados

  • Objetivo Principal: Desarrolladores, equipos de DevOps, y sistemas de CI/CD que utilizan herramientas de código abierto comprometidas (Trivy, KICS, LiteLLM, Telnyx) y acciones de GitHub asociadas.
  • Sectores Afectados: Organizaciones de todos los sectores que utilizan estas herramientas en sus procesos de desarrollo y despliegue de software. Especialmente crítico en tecnología, finanzas, salud, gobierno y telecomunicaciones.
  • Sistemas Afectados: Repositorios de código, entornos de CI/CD (GitHub Actions), clústeres de Kubernetes, hosts Linux, estaciones de trabajo de desarrolladores (extensiones VS Code), e infraestructura en la nube asociada.

Impacto y Riesgo

  • Nivel de Riesgo: Crítico para cualquier organización que ejecutó las versiones comprometidas de las herramientas mencionadas entre el 19 y el 27 de marzo de 2026.
  • Impacto en la Confidencialidad: Exposición masiva de secretos de infraestructura: tokens de GitHub (PAT), credenciales de AWS/Azure/GCP, claves SSH, tokens de Kubernetes, y webhooks. La exfiltración de estos datos compromete la confidencialidad de toda la infraestructura asociada.
  • Impacto en la Integridad: Los tokens robados permitieron a los atacantes modificar repositorios, forzar etiquetas, publicar paquetes maliciosos y, potencialmente, alterar código fuente en repositorios de las víctimas.
  • Impacto en la Disponibilidad: La variante destructiva del malware (kamikaze.sh) causó pérdida total de datos en sistemas iraníes específicos. El despliegue de DaemonSets privilegiados podría haber interrumpido servicios en clústeres Kubernetes.
  • Impacto Financiero: Costos de respuesta a incidentes, rotación masiva de secretos, potenciales multas regulatorias, y riesgo de ransomware si las credenciales robadas fueron vendidas a grupos como Vect.

Recomendaciones de Mitigación

Recomendaciones Técnicas (Mitigación Inmediata)

  1. Rotación de Secretos: Rotar todos los secretos que estuvieron accesibles durante el período de exposición (19-27 de marzo de 2026), incluyendo:
    • Tokens de Acceso Personal (PAT) de GitHub.
    • Credenciales de AWS, Azure y GCP.
    • Claves SSH.
    • Tokens de cuenta de servicio de Kubernetes.
    • Webhooks de Slack y Discord.
    • Tokens de publicación de PyPI, npm, Docker Hub.
  2. Auditoría de Repositorios: Buscar en las organizaciones de GitHub repositorios con nombres docs-tpcp o tpcp-docs, que indican exfiltración exitosa. Eliminarlos si se encuentran.
  3. Auditoría de Logs de CI/CD: Revisar ejecuciones de GitHub Actions entre el 19 y el 27 de marzo en busca de:
    • Referencias a tpcp.tar.gz, scan.aquasecurity[.]org, checkmarx[.]zone, models.litellm[.]cloud.
    • Ejecuciones inusuales de setup.sh o entrypoint.sh.
  4. Eliminación de Artefactos Maliciosos:
    • GitHub Actions: Migrar a las versiones limpias verificadas: ast-github-action@v2.3.33, kics-github-action@v2.1.20. Fijar todos los workflows a SHA de commit en lugar de etiquetas.
    • Extensiones VS Code: Desinstalar ast-results v2.53.0 y cx-dev-assist v1.7.0 de todos los entornos de desarrollo.
    • Paquetes PyPI: Actualizar litellm y telnyx a versiones posteriores a las comprometidas.
  5. Bloqueo de Red: Bloquear el tráfico hacia los dominios C2:
    • scan.aquasecurity[.]org
    • checkmarx[.]zone
    • models.litellm[.]cloud
    • *.trycloudflare.com (si es necesario)
  6. Búsqueda de Persistencia: En sistemas Linux, buscar servicios systemd: pgmon.service, pgmonitor.service, internal-monitor.service. En Kubernetes, buscar DaemonSets en kube-system con nombres host-provisioner-std o host-provisioner-iran.

Recomendaciones Preventivas (Endurecimiento)

  • Fijar a SHA de Commit: En GitHub Actions, referenciar acciones por SHA de commit completo en lugar de etiquetas (@v2). Las etiquetas son mutables y pueden ser forzadas.
  • Autenticación OIDC: Migrar la autenticación de CI/CD a OpenID Connect (OIDC) en lugar de usar tokens de larga duración. Esto proporciona credenciales de corta duración sin necesidad de secretos estáticos.
  • Principio de Mínimo Privilegio: Revisar y reducir los alcances de los tokens de cuenta de servicio. No otorgar permisos de escritura a repositorios que no sean estrictamente necesarios.
  • Detección en Tiempo de Ejecución: Implementar herramientas como Falco o Sysdig Secure para detectar comportamientos anómalos en ejecutores de CI, como acceso a IMDS seguido de exfiltración de datos.
  • Restricción de IMDS: Deshabilitar IMDS en ejecutores de CI que no lo necesiten, o configurar IMDSv2 con límites de saltos (hop limits) para evitar acceso desde contenedores.
  • Verificación de Procedencia: Utilizar herramientas como Sigstore, Cosign y SLSA para verificar la firma y procedencia de las imágenes y artefactos utilizados en los flujos de trabajo.

Herramientas de Detección

  • SCA (Software Composition Analysis): Herramientas como Snyk, JFrog Xray, o Socket pueden detectar versiones maliciosas conocidas en dependencias.
  • CSPM / CIEM: Soluciones de postura de seguridad en la nube pueden detectar permisos excesivos en cuentas de servicio y tokens de larga duración.
  • EDR / Falco: Detectan la ejecución de scripts anómalos (setup.sh), acceso a /proc/*/mem, y creación de servicios systemd no autorizados.
  • SIEM con Correlación: Correlacionar eventos de GitHub API (creación de repositorios docs-tpcp) con logs de red (conexiones a checkmarx[.]zone).
  • Monitoreo de Registros de Paquetes: Servicios como PyPI Advisory DB o npm Security Advisories pueden alertar sobre paquetes maliciosos recién publicados.

Indicadores de Compromiso (IOCs)

Dominios e IPs

Tipo Indicador
Dominio C2 scan.aquasecurity[.]org (45.148.10.212)
Dominio C2 checkmarx[.]zone (83.142.209.11)
Dominio C2 models.litellm[.]cloud
C2 (Túnel CF) crear-secuencia-gradiente-sensibilidad[.]trycloudflare[.]com
C2 (Túnel CF) campeonatos-peoples-point-cassette[.]trycloudflare[.]com
C2 (ICP) tdtqy-oyaaa-aaaae-af2dq-cai[.]raw[.]icp0[.]io

Artefactos y Archivos

Tipo Indicador
Archivo de Exfiltración tpcp.tar.gz
Repositorios de Exfiltración docs-tpcp, tpcp-docs
Script Malicioso setup.sh, kamikaze.sh, sysmon.py, kube.py, prop.py
Servicios Systemd pgmon.service, pgmonitor.service, internal-monitor.service
DaemonSets Kubernetes host-provisioner-std, host-provisioner-iran
Extensiones VS Code (OpenVSX) ast-results v2.53.0, cx-dev-assist v1.7.0
Paquetes PyPI Maliciosos litellm==1.82.7, litellm==1.82.8, telnyx==4.87.1, telnyx==4.87.2
Paquetes npm (CanisterWorm) Paquetes bajo ámbitos @EmilGroup, @opengov, @teale.io, @airtm, @pypestream

GitHub Commits Maliciosos (Ejemplos)

Commit SHA Contexto
70379aad1a8b40919ce8b382d3cd7d0315cde1d0 Impostor commit en actions/checkout
1885610c6a34811c8296416ae69f568002ef11ec Impostor commit en aquasecurity/trivy
8e20c7a67bb95632e2040327a355fb97e6014d29 Etiqueta maliciosa v1.1 en kics-github-action

Referencias y Fuentes

  • SOCRadar. (2026, Marzo 25). Ataque de TeamPCP a Checkmarx en GitHub Actions: lo que necesitas saber.
  • Wiz Threat Research. (2026, Marzo 23). TeamPCP se expande: La vulneración de la cadena de suministro se extiende de Trivy a Checkmarx GitHub Actions. (Rami McCarthy, James Haughom, Benjamin Read).
  • Sysdig Threat Research Team. (2026, Marzo 23). TeamPCP se expande: La vulneración de la cadena de suministro se extiende de Trivy a Checkmarx GitHub Actions.
  • Checkmarx. (2026, Marzo 24). Checkmarx Security Update: malicious packages in the AI world. (Udi-Yehuda Tamar).
  • Beacon Lab. (2026, Marzo 27). *Boletín de Alerta 2026-30: Ataque cadena de suministro Checkmarx.*
  • MITRE ATT&CK Framework: Mapeo de TTPs (T1195, T1078, T1552, T1560, T1485, etc.).

Historial de Revisiones

Fecha Versión Autor Cambios Realizados
2026-03-31 1.0 Fernando Vargas Hinmcapié Creación inicial de la entrada basada en informes de SOCRadar, Wiz, Sysdig, Checkmarx y otros sobre la campaña de TeamPCP contra la cadena de suministro.

Etiquetas / Categorías

teampcp cadena-de-suministro github-actions trivy checkmarx kics litellm telnyx pypi npm openvsx typosquatting esteganografia wav canisterworm robo-credenciales cifrado tpcp kubernetes ransomware t1195 t1078 t1552 t1560 t1485 ci/cd devsecops