TeamPCP Supply Chain Attack: Trivy, KICS, and Bitwarden CLI Backdoors — Full Analysis

Análisis forense completo de la campaña TeamPCP: envenenamiento de etiquetas y backdoors de punto de entrada inyectados en Trivy, KICS y Bitwarden CLI.

TeamPCP Supply Chain Attack: Trivy, KICS, and Bitwarden CLI Backdoors — Full Analysis
📌
Serie de Redondas de Seguridad: Semana del 4 de junio de 20264 min de lectura

Volver a la Ronda de Seguridad del 4 de junio

Sinopsis

Entre febrero y abril de 2026, un actor de amenaza rastreó como TeamPCP ejecutó una campaña coordinada de cadena de suministro dirigida a desarrolladores y herramientas de seguridad ampliamente utilizadas: Trivy el escáner de vulnerabilidad Checkmarx KICS el escáner de infraestructura como código, y el Bitwarden CLI Paquete npm. Los atacantes aprovecharon la rotación credencial incompleta en el repositorio Trivy para obtener acceso inicial, luego utilizaron secretos de desarrollador robados para pivotar a KICS y Bitwarden. Cambio 334 desarrolladores Tomó el CLI Bitwarden atrasado en 90 minutos de publicación; el impacto aguas abajo incluyó el robo credencial que afecta a entornos de desarrolladores OpenAI y Vercel.

Timeline

  • Feb 2026: TeamPCP explota la rotación credencial incompleta en el repositorio Trivy GitHub de Aqua Security.
  • Mar 16, 2026: Código malicioso inyectado en Trivy — credenciales de nube de carga de pago de almacenamiento credencial, teclas SSH, archivos de configuración de Kubernetes y secretos de desarrolladores de corredores CI/CD.
  • Mar 23, 2026: Las credenciales de desarrollador robadas de Trivy solían empujar artefactos maliciosos al repositorio de Checkmarx KICS (imagen Docker) checkmarx/kics:v2.1.4-tainted). KICS Ir binario modificado con telemetría no autorizada + exfiltración rutinaria encriptando informes de escaneo al atacante C2.
  • 22 de abril de 2026: Bitwarden troyano CLI v2026.4.0 publicado a npm. JavaScript payload fetches adicional stage from attacker-controlled CDN and exfiltrates password aboveda content + local secrets. Paquete tirado después de ~90 minutos; 334 descargas confirmadas.

Malware Behavior

Los tres implantes comparten el mismo dominio C2 (telemetry-cdn[.]dev) y utilizar un HTTPS POST con un encabezado personalizado (X-Client-ID) para exfiltrar datos robados. La modificación binaria de KICS agrega una goroutina que, después de cada escaneo, AES-256-GCM cifra el informe de escaneo (conteniendo todas las configuraciones erróneas encontradas de IaC y las trayectorias de archivo) y POSTs it to the C2. Los objetivos de carga útil de Bitwarden npm:

  • Bóveda Bitwarden JSON~/.config/Bitwarden CLI/data.json)
  • Archivos credenciales AWS (AWS)~/.aws/credentials, variables ambientales)
  • SSH llaves privadas en ~/.ssh/
  • Docker config~/.docker/config.json) incluyendo fichas de registro
  • Variables de medio ambiente iguales *TOKEN*, *SECRET*, *KEY*, *PASSWORD*

Versiones de paquetes afectadas

  • Trivy: Cualquier imagen Trivy binaria o Docker tirada entre Mar 16–Mar 22, 2026
  • Checkmarx KICS: checkmarx/kics:v2.1.4 Docker image (SHA256: a3f9b2c1...)
  • Bitwarden CLI npm: @bitwarden/[email protected]

COI

  • dominio C2: telemetry-cdn[.]dev (185.220.101[.]47)
  • DNS consultas a telemetry-cdn[.]dev de sistemas CI/CD o estaciones de trabajo de desarrolladores
  • POSTA DE HTTPS de salida con cabecera X-Client-ID: <base64_blob> a 185.220.101[.]47
  • Paquete Bitwarden npm @bitwarden/[email protected] dentro package-lock.json o node_modules
  • KICS Docker imagen digerir: sha256:a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1

Remediación

# 1. Check if affected packages were used
# Bitwarden CLI
npm ls @bitwarden/cli | grep 2026.4.0

# Check KICS Docker image digest
docker inspect checkmarx/kics:v2.1.4 --format '{{index .RepoDigests 0}}'

# 2. Rotate ALL credentials that were present in environments running the affected tools
#    Priority: AWS keys, GCP service account keys, GitHub tokens, NPM tokens

# 3. Revoke and regenerate SSH keys if ~/.ssh/ was accessible during the affected period

# 4. Block C2 domain at DNS/firewall level
#    Block: telemetry-cdn[.]dev (185.220.101.47)
echo "0.0.0.0 telemetry-cdn.dev" | sudo tee -a /etc/hosts

# 5. Scan for active C2 connections
netstat -an | grep 185.220.101.47
ss -tp | grep 185.220.101.47

# 6. Update to clean versions:
#    Trivy: >= 0.62.0 (post-remediation build)
#    KICS: checkmarx/kics:latest (verified clean post Apr 25)
#    Bitwarden CLI: @bitwarden/[email protected] or later
npm install -g @bitwarden/cli@latest

Volver a la Ronda de Seguridad del 4 de junio