cybersecurity

GitHub hackeado mediante una extensión de VS Code (mayo 2026): el manual de emergencia de 60 minutos que todo desarrollador debería ejecutar esta noche

Escrito por Mert Batur
Actualizado May 20, 2026
19 lectura
GitHub hackeado mediante una extensión de VS Code (mayo 2026): el manual de emergencia de 60 minutos que todo desarrollador debería ejecutar esta noche

GitHub hackeado mediante una extensión de VS Code (mayo 2026): el manual de emergencia de 60 minutos que todo desarrollador debería ejecutar esta noche

El 20 de mayo de 2026, GitHub confirmó que aproximadamente 3.800 de sus repositorios internos de código fuente fueron exfiltrados a través de una extensión maliciosa de VS Code instalada en la estación de trabajo de un empleado. Si has usado un GitHub PAT o un token npm dentro de VS Code en los últimos 14 días, los próximos 60 minutos importan. Esto es el manual: qué ocurrió realmente, si estás afectado y qué rotar primero.

Puntos clave

  • Qué ocurrió: La infraestructura de producción de GitHub.com no fue comprometida — la extensión de VS Code comprometida en el portátil de un empleado (muy probablemente Nx Console v18.95.0) exfiltró PATs y volcó ~3.800 repositorios internos.
  • Datos de clientes: No afectados. Los datos comprometidos son el código fuente interno de GitHub, no el código ni las cuentas de clientes.
  • Quién está en riesgo: Cualquier desarrollador que instalara una extensión de VS Code entre aproximadamente el 18 de mayo, 12:36 UTC y el 18 de mayo, 12:47 UTC (la ventana de 11 minutos), o cualquiera que use GitHub PATs de larga duración desde VS Code.
  • Qué hacer ahora: Rotar los GitHub PATs primero, los tokens npm segundo, las claves AWS/nube tercero — el manual completo está en la sección "Qué deben hacer los desarrolladores" más abajo.

TL;DR: Las 6 cosas que hacer en la próxima hora

La forma más rápida de contener el radio de impacto del incidente de github hackeado por extensión vscode es rotar las credenciales a las que una extensión comprometida puede acceder, auditar lo que está instalado en tu portátil y comprobar el registro de auditoría de tu organización de GitHub para la ventana del 18 al 20 de mayo UTC. Seis acciones, ordenadas por impacto.

  1. Revocar todos los Personal Access Tokens de GitHub creados o usados en VS Code en los últimos 30 días.
  2. Rotar los tokens npm mediante npm token revoke y volver a emitirlos con 2FA + trusted publishing.
  3. Escanear el portátil en busca de IoCs de GHSA-c9j4-9m59-847w (rutas de archivo, procesos; comandos más abajo).
  4. Auditar code --list-extensions --show-versions y desinstalar todo lo que no puedas justificar.
  5. Fijar las versiones de las extensiones en devcontainer.json y aplicar una lista de extensiones permitidas a nivel de organización.
  6. Revisar el registro de auditoría de tu organización de GitHub en busca de pushes no reconocidos entre el 18 y el 20 de mayo UTC.

Si solo tienes tiempo para dos, haz el #1 y el #3. El resto puede esperar una hora.

¿GitHub fue realmente hackeado? Aclaremos el titular

No, la infraestructura de producción de GitHub.com no fue comprometida el 20 de mayo de 2026. La estación de trabajo de un único empleado de GitHub fue comprometida después de que instalara una extensión maliciosa de VS Code (muy probablemente Nx Console v18.95.0). El atacante, que se hace llamar TeamPCP (rastreado como UNC6780), exfiltró aproximadamente 3.800 repositorios internos de código fuente de GitHub. El código de los clientes, sus cuentas y los servicios de producción de GitHub no están afectados.

Esta es la versión más clara de lo que ocurrió y lo que no ocurrió.

Lo que sí ocurrióLo que NO ocurrió
El portátil de un empleado fue comprometido mediante una extensión de VS Code maliciosaGitHub.com en producción fue comprometido
~3.800 repositorios internos de código fuente fueron exfiltradosRepositorios o cuentas de clientes fueron tocados
Credenciales de empleado de GitHub en ese endpoint fueron robadasPATs de clientes, tokens npm u OAuth fueron robados de los sistemas de GitHub
TeamPCP exigió un rescate (según Tom's Hardware)GitHub pagó (sin evidencia de pago)

¿Por qué importa este encuadre? Porque la conclusión no es "github hackeado." La conclusión es que los endpoints de los desarrolladores son ahora el punto débil de toda organización de ingeniería. Cada credencial de tu equipo (GitHub PATs, tokens npm, claves AWS, sesiones de vault, claves de proveedores de IA) reside en un portátil con escasa o nula cobertura EDR. Una única extensión comprometida que se ejecuta en tu IDE hereda todo eso.

La portavoz de GitHub, citada en Bleeping Computer, confirmó el encuadre de endpoint de empleado y la línea de "sin datos de clientes". Help Net Security añadió la atribución a TeamPCP. La cadena de custodia técnica de la extensión reside en el aviso GHSA-c9j4-9m59-847w.

GitHub.com no fue comprometido. Un empleado de GitHub sí lo fue. Mantén ese marco de referencia mientras lees el resto.

Qué ocurrió realmente: cronología de la brecha de mayo de 2026

La historia de la brecha de github 2026 se desarrolló en cuatro fases a lo largo de aproximadamente 48 horas. Una extensión envenenada fue publicada el 18 de mayo a las 12:36 UTC, retirada 11 minutos después, detectada por GitHub al día siguiente, y divulgada públicamente el 20 de mayo. La cronología compacta, con fuentes:

Hora (UTC)EventoFuente
18 de mayo, 12:36Nx Console v18.95.0 publicada en OpenVSX / Visual Studio Marketplace (muy probable)StepSecurity / GHSA-c9j4-9m59-847w
18 de mayo, 12:47La versión maliciosa fue retirada — ventana de 11 minutosStepSecurity
19 de mayoGitHub detecta el compromiso del endpoint del empleado; contiene el incidentePortavoz de GitHub vía Bleeping Computer
20 de mayoDivulgación pública; TeamPCP / UNC6780 reclaman públicamente la atribuciónHelp Net Security, Hackread

Esa ventana de 11 minutos es el detalle más extraño. Sugiere que el atacante rotó extensiones para evadir la detección del marketplace, el mismo patrón documentado por Koi Security en el gusano GlassWorm de OpenVSX de octubre de 2025. TeamPCP / UNC6780 ha reclamado previamente compromisos en 2026 contra Trivy, KICS, LiteLLM, TanStack y MistralAI. El mismo grupo, el mismo manual, diferentes objetivos.

El mes pasado fueron las variables de entorno de Vercel. Hoy son los repositorios de GitHub. El patrón que hemos observado desarrollarse durante 9 meses sigue ampliando el radio de impacto. Consulta nuestro análisis de la respuesta a la brecha de Vercel para el incidente hermano.

La extensión probablemente responsable: Nx Console v18.95.0 (y por qué GitHub no lo confirma)

GitHub no ha nombrado formalmente la extensión involucrada en el compromiso del endpoint del empleado. La evidencia forense apunta fuertemente a Nx Console v18.95.0, pero esto sigue siendo muy probable, no confirmado. Actualizaremos este artículo si GitHub nombra públicamente una extensión diferente. Trata el resto de esta sección como la mejor atribución disponible, no como un hecho declarado.

Cuatro piezas de evidencia circunstancial alinean a Nx Console con la divulgación de GitHub:

  1. Coincidencia de tiempos: La ventana del aviso GHSA-c9j4-9m59-847w (18 de mayo, 12:36-12:47 UTC) cae dentro de la ventana de compromiso del endpoint del empleado de GitHub según la propia divulgación de GitHub.
  2. Solapamiento forense de IoCs: El análisis publicado por StepSecurity del payload de Nx Console (rutas de archivo, procesos como __DAEMONIZED, endpoints de red) coincide con los artefactos observados en el endpoint comprometido según el análisis de Wiz.
  3. Patrón de atribución de TeamPCP: TeamPCP / UNC6780 ha estado activo en el espacio de cadena de suministro de VS Code (Trivy, KICS, LiteLLM, TanStack, MistralAI en 2026) con una estructura de payload consistente.
  4. La ventana de retirada de 11 minutos: Característica de ataques a la cadena de suministro donde el atacante controla el momento de publicación pero el marketplace lo detecta rápidamente.

Si no instalaste Nx Console, aún no estás completamente fuera de peligro. El patrón de ataque más amplio (procesos __DAEMONIZED, abuso de IMDS, exfiltración de ~/.claude/settings.json) se generaliza a cualquier extensión comprometida. El triaje de la siguiente sección aplica independientemente de qué extensión sospechas.

Una única extensión de VS Code despliega flechas hacia diez objetivos de credenciales etiquetados, incluyendo GitHub PAT, token npm, AWS IMDS, 1Password CLI, Vault y configuración de Claude Code, ilustrando el radio de impacto completo que una extensión maliciosa puede alcanzar
Fuente: editorial techsy.io — alcance de credenciales desde un único proceso de extensión de VS Code

¿Estás afectado? El triaje de 5 minutos

Hay tres pruebas rápidas. (1) ¿Instalaste o actualizaste automáticamente una extensión de VS Code entre el 18 de mayo, 12:36 y 12:47 UTC? (2) ¿Hay algún archivo IoC de GHSA-c9j4-9m59-847w en tu portátil ahora mismo? (3) ¿Has usado un GitHub PAT dentro de VS Code en los últimos 14 días? Ejecuta las tres en menos de cinco minutos.

Prueba 1 — Auditoría de extensiones

bash
# Listar todas las extensiones instaladas con versiones
code --list-extensions --show-versions

# Comprobar específicamente Nx Console v18.95.0
code --list-extensions --show-versions | grep -i "nrwl.angular-console\|nx-console"

Cualquier extensión que se haya actualizado automáticamente entre el 17 y el 18 de mayo merece una segunda revisión. Si ves Nx Console exactamente en 18.95.0, hay una coincidencia probable. La versión parcheada es 18.100.0. Desinstala o pasa directamente al manual más abajo.

Prueba 2 — Escaneo de IoCs

bash
# Comprobar los artefactos del proceso daemonizado de cosecha de credenciales (GHSA-c9j4-9m59-847w)
ps aux | grep -i "__DAEMONIZED" | grep -v grep
ls -la ~/.local/share/kitty/ 2>/dev/null
find ~ -name "*.daemonized*" 2>/dev/null

# Indicador de abuso de IMDS (cosecha de credenciales AWS)
# Comprobar el historial de shell para curl inesperados a 169.254.169.254
grep -E "169\.254\.169\.254|metadata\.google\.internal" ~/.zsh_history ~/.bash_history 2>/dev/null

Una máquina limpia no debería devolver nada para el grep de __DAEMONIZED, sin archivos .daemonized y sin hits de IMDS en el historial de shell. Si alguno de esos da resultado positivo, asume que el portátil está comprometido y trata cada credencial que haya tocado en los últimos 30 días como quemada.

Prueba 3 — Exposición del PAT

Si has usado un GitHub PAT (clásico o de grano fino) dentro de cualquier terminal de VS Code, git integrado o cualquier extensión que llame a la API de GitHub en los últimos 14 días, asume que está comprometido y pasa al manual de rotación más abajo. Este es el valor predeterminado conservador — no puedes auditar si el token estaba en memoria mientras la extensión estaba activa. Rótalo.

Si usas Claude Code, la lista de IoCs incluye específicamente ~/.claude/settings.json. Consulta nuestra guía de hooks de Claude Code para saber qué se almacena en ese archivo y qué claves rotar primero.

Veredicto. Si cualquiera de estas tres pruebas da positivo, deja de leer la narrativa. Pasa directamente al manual de la siguiente sección. Los próximos 55 minutos importan más que el análisis post-mortem.

Qué deben hacer los desarrolladores: el manual de emergencia de 60 minutos

Rota las credenciales en orden de prioridad. Nivel 0 (próximos 30 min): GitHub PATs y tokens npm. Nivel 1 (hoy): claves AWS/nube, 1Password/Vault, secretos de GitHub Actions. Nivel 2 (esta semana): SaaS de terceros, OAuth, claves SSH. Nivel 3 (cuando sea conveniente): claves de solo lectura y públicas. Cada nivel corresponde a una reducción específica del radio de impacto.

Pirámide de rotación de credenciales por niveles: Nivel 0 con GitHub PATs y tokens npm en rojo, Nivel 1 con tokens AWS y vault en ámbar, Nivel 2 con SSH y OAuth en amarillo, Nivel 3 con claves de solo lectura en gris, cada nivel etiquetado con su presupuesto de tiempo
Fuente: editorial techsy.io — prioridad de rotación por niveles para el manual de 60 minutos

AHORA MISMO: Si crees que estás comprometido

Si el triaje dio resultado positivo, haz estas tres cosas en orden antes que cualquier otra cosa.

  1. Elimina el daemon y desinstala la extensión sospechosa:
bash
# Eliminar el payload malicioso (GHSA-c9j4-9m59-847w)
pkill -f __DAEMONIZED
pkill -f "nx-console.*18.95.0"

# Desinstalar la extensión sospechosa inmediatamente
code --uninstall-extension nrwl.angular-console
  1. Desconecta el cable de red del portátil si tienes evidencia de exfiltración activa. Suena extremo. Lo es. Hazlo de todas formas. Puedes reinvestigar sin conexión.
  2. Llama a tu equipo de seguridad o publica en #security de Slack antes de ejecutar cualquier otra cosa. Si trabajas solo, pasa al Nivel 0 abajo.

Nivel 0 (Próximos 30 minutos): GitHub + npm

Revocación del GitHub PAT mediante el CLI gh y la interfaz web de configuración:

bash
# Confirmar con qué cuenta estás autenticado
gh auth status

# Listar instalaciones de apps a las que el token tiene acceso (ayuda a inventariar el radio de impacto)
gh api -H "Accept: application/vnd.github+json" /user/installations

# El CLI gh no puede revocar PATs clásicos directamente — usa la interfaz web:
#   https://github.com/settings/tokens
# Haz clic en "Revoke" en CADA token. No conserves selectivamente "el que probablemente está bien."

# Volver a emitir con PATs de grano fino + caducidad ≤90 días:
#   https://github.com/settings/personal-access-tokens/new
# Limita el alcance a un repositorio a la vez, nunca a toda la cuenta.

# Para PATs e instalaciones propiedad de la organización:
gh api /orgs/{ORG}/installations

Rotación de tokens npm:

bash
# Listar y revocar cada token npm
npm token list
npm token revoke <token-id-1>
npm token revoke <token-id-2>

# Forzar 2FA en autenticación y escrituras
npm profile enable-2fa auth-and-writes

# Para CI: migrar a trusted publishing con OIDC — sin más tokens de larga duración
# Docs: https://docs.npmjs.com/trusted-publishers

Si mantienes paquetes publicados, tu token npm es la credencial más peligrosa que tienes. Rótalo antes que AWS.

Nivel 1 (Hoy): Nube + Vaults + Secretos de CI

Las claves de acceso de AWS son lo siguiente. Los IoCs muestran abuso de IMDS, por lo que cualquier usuario de IAM que haya tocado el endpoint comprometido es sospechoso:

bash
# Listar las claves de acceso para el usuario IAM actual
aws iam list-access-keys --user-name $(aws sts get-caller-identity --query 'Arn' --output text | cut -d/ -f2)

# Desactivar la clave antigua (no borrar todavía — deja que los workloads fallen ruidosamente primero)
aws iam update-access-key --access-key-id AKIA... --status Inactive --user-name <user>

# Crear una nueva clave
aws iam create-access-key --user-name <user>

# Una vez desplegada y verificada, borrar la clave antigua
aws iam delete-access-key --access-key-id AKIA... --user-name <user>

# Si alguna instancia EC2 usaba IMDSv1, forzar IMDSv2 inmediatamente
aws ec2 modify-instance-metadata-options --instance-id i-... --http-tokens required

1Password CLI: cierra sesión en todos los dispositivos (op signout --all), regenera los tokens de sesión y audita el acceso reciente al vault a través del registro de auditoría web de 1Password para cualquier acceso desde el endpoint comprometido.

HashiCorp Vault: revoca tu token de usuario (vault token revoke -self) y pide a un administrador que emita uno nuevo con un TTL más corto.

Secretos de GitHub Actions: si alguna credencial rotada también está en Actions, actualízala. Usa gh secret set GITHUB_PAT --body <new-pat> por repositorio, o la interfaz de organización para secretos de org.

Claves de API de Anthropic y OpenAI: la lista de IoCs de GHSA-c9j4-9m59-847w señala específicamente ~/.claude/settings.json como objetivo de cosecha. Revoca y vuelve a emitir tu clave de API de la consola de Anthropic y cualquier clave de OpenAI que hayas almacenado alguna vez en ese archivo.

Nivel 2 (Esta semana): SSH + OAuth + Password Vaults

Las claves SSH se mueven más lentamente pero siguen en el alcance. La extensión tenía acceso de lectura al sistema de archivos en ~/.ssh/:

bash
# Auditar las claves SSH existentes (¿cuándo fueron generadas?)
for key in ~/.ssh/id_*; do
  if [ -f "$key" ]; then
    echo "Key: $key"
    stat -c '%y' "$key" 2>/dev/null || stat -f '%Sm' "$key"
  fi
done

# Generar una nueva clave Ed25519
ssh-keygen -t ed25519 -C "rotated-$(date +%Y%m%d)" -f ~/.ssh/id_ed25519_new

# Subir la clave pública a GitHub
gh ssh-key add ~/.ssh/id_ed25519_new.pub --title "rotated-$(date +%Y%m%d)"

# Borrar la clave antigua de GitHub mediante la interfaz web, luego verificar que SSH sigue funcionando
ssh -T [email protected]

Gestor de contraseñas del navegador y llavero del sistema operativo: rota cualquier contraseña que la extensión pudiera haber visto a través del portapapeles. La exposición realista son las contraseñas que copiaste al portapapeles mientras la extensión estaba activa.

Nivel 3 (Cuando sea conveniente): Auditar y verificar

Audita el registro de tu organización de GitHub para la ventana de compromiso. Esto requiere ser administrador de la organización:

bash
# Extraer eventos de push para la ventana del 18 al 20 de mayo
gh api -X GET /orgs/{ORG}/audit-log \
  --paginate \
  -f phrase='action:repo.push created:2026-05-18..2026-05-20' | jq '.[] | {actor, created_at, repo}'

# Revisar commits sospechosos (autores inesperados, diffs grandes)
gh api -X GET /repos/{ORG}/{REPO}/commits \
  -f since=2026-05-18T00:00:00Z \
  -f until=2026-05-20T23:59:59Z | jq '.[] | {sha, author: .commit.author, message: .commit.message}'

# Actualizar los grants de OAuth
gh auth refresh -s admin:org -s admin:public_key

Si el registro de auditoría muestra pushes de la ventana de compromiso que no realizaste, escala a tu equipo de seguridad y conserva el JSON del registro de auditoría. No intentes "deshacer" nada en el repositorio. Primero conserva la evidencia.

Cubrimos la misma lógica de rotación por niveles para la brecha de variables de entorno de Vercel en abril: misma forma, diferente capa.

El marco de auditoría de extensiones en 5 preguntas (úsalo siempre)

Antes de instalar o confiar en cualquier extensión de VS Code, pásala por cinco pruebas: antigüedad del dominio del publicador, velocidad de versiones, eventos de activación en package.json, alcance de permisos vs comportamiento esperado, y auditoría del repositorio de código abierto. Nx Console v18.95.0 habría fallado la prueba #2: un salto de versión repentino tras una cadencia de publicación estable es la señal clásica de un ataque a la cadena de suministro.

  1. Antigüedad del dominio del publicador. ¿El dominio del publicador tiene más de un año? Los publicadores nuevos en dominios recién registrados conllevan más riesgo. Compruébalo en la página del publicador del Visual Studio Marketplace o con whois en el dominio del email del publicador.
  2. Velocidad de versiones. ¿El historial de versiones muestra una cadencia normal (una publicación cada 1-4 semanas) o un pico repentino (tres publicaciones en 24 horas)? La velocidad repentina es una señal. Nx Console v18.95.0 fue una anomalía de velocidad.
  3. Eventos de activación en package.json. Abre el archivo .vsix (es un zip) y lee activationEvents. Las extensiones que se activan en * (siempre activas) tienen la mayor superficie de ataque. Prefiere extensiones que se activen en un idioma o nombre de archivo específico.
  4. Permisos requeridos vs comportamiento esperado. ¿Una extensión de "tema" solicita acceso a la red? ¿Una extensión de "snippets" necesita escritura en el sistema de archivos? Las discrepancias son señales de alerta. Contrasta con la documentación de seguridad en tiempo de ejecución de extensiones de Microsoft.
  5. Auditoría del repositorio de código abierto. ¿El código fuente está en GitHub? Lee los últimos cinco commits en busca de cambios sospechosos: hooks post-instalación, blobs codificados en base64, llamadas de red a dominios desconocidos.

Una extensión que se activa en * y solicita acceso a la red es funcionalmente un shell remoto con VS Code como fachada.

El mismo marco de auditoría aplica a los servidores MCP, la próxima superficie de cadena de suministro equivalente a las extensiones. Consulta nuestro análisis de los mejores servidores MCP 2026 para ver cuáles son de confianza y por qué.

Por qué sigue ocurriendo: la ola de cadena de suministro 2025-2026

La brecha de GitHub del 20 de mayo es un nodo en un arco de 9 meses: gusano npm Shai-Hulud (septiembre 2025), gusano GlassWorm de OpenVSX (octubre-noviembre 2025), Shai-Hulud 2.0 (noviembre 2025, más de 25.000 repositorios afectados), Mini Shai-Hulud (principios de 2026), Nx Console (18 de mayo de 2026), compromiso del endpoint de GitHub (20 de mayo de 2026). Los endpoints de los desarrolladores se han convertido en el nuevo punto débil.

  • Septiembre 2025, gusano npm Shai-Hulud. Malware autopropagante en paquetes npm populares. CISA emitió una alerta sobre el compromiso generalizado.
  • Octubre-noviembre 2025, GlassWorm. El primer gusano autopropagante dirigido a extensiones de VS Code en OpenVSX. Divulgación de Koi Security.
  • Noviembre 2025, Shai-Hulud 2.0. Más de 25.000 repositorios exfiltrados. El blog de seguridad de Microsoft publicó orientación de contención.
  • Principios de 2026, Mini Shai-Hulud. Variante de TeamPCP. Repeticiones a menor escala contra Trivy, KICS, LiteLLM, TanStack y MistralAI.
  • 18 de mayo de 2026, Nx Console v18.95.0. Vector muy probable para el compromiso del endpoint de GitHub.
  • 20 de mayo de 2026, GitHub divulga. ~3.800 repositorios internos exfiltrados. Según la serie forense Shai-Hulud de Wiz, el patrón de abuso de IMDS es una evolución directa.

El patrón es claro: los portátiles de los desarrolladores contienen cada credencial de la organización (GitHub PATs, claves AWS, tokens de vault, claves de proveedores de IA) y tienen cobertura EDR casi nula. Hasta que ese desequilibrio se corrija, esta ola continúa.

La IA defensiva es una parte de la respuesta. Cubrimos este ángulo en nuestro análisis de cómo la IA previene las brechas de datos a principios de este año.

La respuesta más amplia de GitHub: Trusted Publishing, FIDO 2FA, tokens de 90 días

GitHub ya estaba implementando cuatro controles de cadena de suministro antes del 20 de mayo: 2FA obligatorio para los publicadores de npm, un límite de 90 días para tokens de escritura granular, la eliminación gradual de TOTP en favor de FIDO y passkeys, y trusted publishing con OIDC para GitHub Actions y GitLab CI. La brecha de mayo acelera una migración ya en curso; no introduce una nueva política.

ControlEstadoAcción para ti
2FA obligatorio para npmActivoActívalo ahora: npm profile enable-2fa auth-and-writes
Límite de 90 días para tokens de escritura granularEn implementación (tokens existentes forzados a caducar)Migra a PATs de grano fino con TTL ≤90 días
Eliminación de TOTP, FIDO / passkeysImplementación gradual 2026Registra una passkey en cada cuenta de GitHub hoy
Trusted publishing con OIDCActivo para GitHub Actions + GitLab CIMigra CI de tokens npm de larga duración a OIDC

El plan de GitHub para una cadena de suministro npm más segura es anterior a este incidente por meses. Cuanto antes te alineas con él, menor será tu radio de impacto la próxima vez.

Fortalecimiento: cómo sobrevivir al siguiente

Seis medidas con visión de futuro: fijar las versiones de extensiones en devcontainer.json, aplicar una lista de extensiones permitidas a nivel de organización, ejecutar EDR con visibilidad de procesos de extensión, escanear secretos en cada push, limitar el alcance de los PATs a un repositorio y adoptar trusted publishing con OIDC en lugar de tokens de larga duración. Ninguna de estas medidas habría prevenido todos los incidentes — juntas reducen el radio de impacto de "todo lo que hay en el portátil" a "un repositorio."

json
{
  "name": "secure-dev",
  "extensions": [
    "[email protected]",
    "[email protected]",
    "[email protected]"
  ],
  "settings": {
    "extensions.autoUpdate": false,
    "extensions.autoCheckUpdates": false
  },
  "containerEnv": {
    "VSCODE_GALLERY_SERVICE_URL": "https://your-internal-allow-list.example.com"
  }
}

En resumen:

  • Fijar cada versión de extensión en devcontainer.json para desactivar la actualización automática.
  • Lista de permitidos a nivel de organización apuntando VSCODE_GALLERY_SERVICE_URL a un mirror interno.
  • EDR con visibilidad de procesos del IDE: Crowdstrike, SentinelOne o Microsoft Defender for Endpoint con VS Code en el alcance.
  • Escaneo de secretos en cada push: pre-commit y en el momento del push, en el servidor.
  • Limita cada PAT a un repositorio: sin alcances *, nunca.
  • Trusted publishing con OIDC: sin tokens npm ni de registro de larga duración en CI.

El CVE de Linux copy_file_range de la semana pasada es una historia paralela: diferente capa, misma lección. El límite de confianza que olvidaste es el que te muerde.

Si estás evaluando agentes de codificación con IA, aplica el mismo marco de auditoría. Tienen el mismo perfil de confianza que las extensiones. Nuestro análisis de los mejores agentes de codificación con IA 2026 explica cuáles se ganan esa confianza.

Preguntas frecuentes

¿GitHub fue hackeado?

No, no en el sentido que implica la mayoría de los titulares. La infraestructura de producción de GitHub.com no fue comprometida. Un empleado de GitHub instaló una extensión maliciosa de VS Code en su estación de trabajo, que exfiltró aproximadamente 3.800 repositorios internos de código fuente de GitHub. El código de los clientes, sus cuentas y los servicios de producción de GitHub no están afectados.

¿Qué extensión de VS Code estaba realmente involucrada?

GitHub no ha confirmado formalmente el nombre de la extensión. La evidencia forense de StepSecurity, Wiz y GHSA-c9j4-9m59-847w apunta muy probablemente a Nx Console v18.95.0, publicada el 18 de mayo a las 12:36 UTC y retirada 11 minutos después. Tratamos esto como "muy probable, no confirmado" hasta que GitHub lo nombre.

¿Es seguro usar Nx Console ahora?

La versión parcheada es 18.100.0. Si tienes instalada la versión v18.95.0, desinstálala inmediatamente, ejecuta el escaneo de IoCs de nuestra sección de triaje, y vuelve a instalar únicamente desde el publicador oficial Nrwl en la versión 18.100.0 o posterior. Verifica el dominio del publicador antes de reinstalar y fija la versión en devcontainer.json.

¿Fueron afectados los datos de los clientes en la brecha de GitHub?

No. Según la declaración oficial de GitHub a través de Bleeping Computer, el código fuente de los clientes, sus cuentas, los tokens OAuth y los datos de producción alojados en GitHub no fueron accedidos. Los datos comprometidos son el código fuente interno de GitHub del endpoint del empleado. Trata esto como un incidente de portátil de empleado, no como una brecha de plataforma.

¿Cómo sé si mi GitHub PAT fue robado?

No puedes saberlo con certeza. La suposición conservadora: si has usado cualquier GitHub PAT dentro de VS Code en los últimos 14 días, trátalo como comprometido y rótalo. Comprueba tu registro de auditoría de GitHub mediante gh api /orgs/{ORG}/audit-log en busca de eventos de push no reconocidos entre el 18 y el 20 de mayo UTC, luego revoca y vuelve a emitir el token.

¿Qué son TeamPCP y UNC6780?

TeamPCP es un grupo de actores de amenazas; UNC6780 es el ID de seguimiento asignado por los proveedores de respuesta a incidentes. Han reclamado públicamente la atribución de la brecha de GitHub. El mismo grupo ha reclamado compromisos en 2026 contra Trivy, KICS, LiteLLM, TanStack y MistralAI — un patrón consistente de targeting de cadena de suministro de VS Code y npm.

¿Las extensiones de VS Code están en un sandbox?

No, no de manera significativa. Las extensiones de VS Code se ejecutan en el proceso Node.js del IDE con los privilegios completos de sistema de archivos y red del usuario. Pueden leer cada archivo de tu directorio home, incluyendo claves SSH, ~/.aws/credentials, ~/.claude/settings.json, y la memoria de procesos a través de /proc/*/mem en Linux. Microsoft documenta el modelo de seguridad en tiempo de ejecución y sus límites en la documentación oficial de extensiones.

¿Afectó esto a GitHub Codespaces o a los runners de CI?

Sin evidencia hasta ahora. El compromiso fue una estación de trabajo de un empleado, no la infraestructura alojada por GitHub. Codespaces, los runners de GitHub Actions y la infraestructura CI orientada al cliente no están reportados como afectados. Actualizaremos este artículo si nuevos IoCs cambian ese panorama.

Conclusión

Tres conclusiones:

  1. GitHub.com no fue hackeado. La estación de trabajo VS Code de un empleado sí lo fue. La lección se generaliza a todos los desarrolladores.
  2. Rota ahora, aplica el marco de auditoría para siempre. El manual de 60 minutos es el parche; el marco de auditoría de 5 preguntas es el sistema inmunológico.
  3. Esto no es un caso aislado. Es el nodo #6 de una ola de cadena de suministro de 9 meses que no está frenando.

Última actualización: 20 de mayo de 2026. Revisaremos este artículo el 27 de mayo de 2026 con nuevos IoCs, avisos de proveedores y cualquier atribución de extensión confirmada por GitHub.

Si tu equipo necesita ayuda para auditar tu superficie de extensiones de VS Code, la higiene de PATs y tokens, o para crear una política de lista de extensiones permitidas a nivel de organización, solicita una consulta gratuita. Llevamos semanas enfocados en seguridad de endpoints de desarrolladores desde la brecha de Vercel en abril, y el manual anterior es lo que ejecutamos con clientes desde el primer día.

Etiquetas

ciberseguridadataque a la cadena de suministrovscodegithubseguridad para desarrolladoresrespuesta a incidentesGHSA-c9j4-9m59-847w

Compartir este artículo

Artículos relacionados

Más en cybersecurity

Inicia Tu Proyecto

¿Listo para construir algo extraordinario?

Convirtamos tu visión en realidad. Nuestro equipo está listo para ayudarte a crear software que marque la diferencia.