Una persona revisa código y alertas de seguridad en un monitor mientras un equipo de desarrollo trabaja en una oficina.

Bug en VS Code expuso tokens de GitHub

Un bug en VS Code permitió robar tokens de GitHub con un solo clic, y eso afecta directo a equipos de desarrollo en LatAm. Te explicamos cómo funcionó, qué riesgo real tuvo y qué controles deberías revisar hoy.

Un bug pequeño en una herramienta que usas todos los días puede terminar en un problema bastante grande. Eso fue justamente lo que mostró el caso de 1-Click GitHub Token Stealing via a VSCode Bug: una combinación entre VS Code, GitHub y una falla explotable que abría la puerta al robo de tokens con muy poca interacción del usuario.

Si trabajas en desarrollo, este tipo de incidente no se queda en una anécdota técnica. Un token de GitHub comprometido puede dar acceso a repositorios privados, pipelines, secretos de despliegue y, en algunos casos, a la cadena completa de entrega de software de un equipo. El problema no es solo el bug; es el efecto dominó que puede producir en organizaciones que dependen de extensiones, autenticación integrada y permisos amplios.

Qué pasó y por qué importa

El caso publicado por Ammar Askar mostró una vía para extraer tokens de GitHub aprovechando un comportamiento inseguro en VS Code. La idea central es simple: si una extensión o un flujo dentro del editor puede inducir a la víctima a abrir o interactuar con contenido controlado por un atacante, el entorno termina filtrando información que no debería salir de allí.

No estamos hablando de una falla teórica. El valor del hallazgo está en que conecta tres piezas muy usadas en el trabajo diario: el editor, la cuenta de GitHub y el token que da acceso programático. Cuando una de esas piezas se comporta mal, el resto queda expuesto. En equipos que usan extensiones para revisar PRs, autenticar herramientas o automatizar tareas, el riesgo sube bastante.

La fuente original lo describe como un escenario de un solo clic. Ese detalle importa porque reduce la barrera de explotación. No necesitas una cadena larga de ataques ni ingeniería social sofisticada; basta con que la víctima abra un archivo, vista una página o interactúe con un recurso preparado para disparar el bug. Para un atacante, eso es oro.

Por qué un token vale tanto

Un token de GitHub no es solo una contraseña más. Dependiendo de su alcance, puede leer repositorios, escribir código, disparar acciones, crear issues o acceder a integraciones internas. En un entorno corporativo, un token mal protegido suele tener más poder que una cuenta de usuario normal porque fue creado justamente para automatizar tareas.

Además, muchos equipos no rotan estos tokens con la frecuencia que deberían. A veces quedan en variables de entorno, en archivos de configuración local o en extensiones que se instalaron hace meses y nadie volvió a revisar. Si ese token cae en manos equivocadas, el atacante puede moverse sin levantar tantas alertas como con un login interactivo.

Cómo se encadenó el ataque

La parte interesante de este caso es la cadena, no solo el bug aislado. El atacante necesitaba que VS Code procesara contenido de una forma específica y que, durante ese proceso, se revelara el token asociado a GitHub. Eso suele pasar cuando una extensión confía demasiado en datos externos o cuando el editor expone información sensible a contextos que no deberían verla.

En términos prácticos, el flujo se parece a esto: primero llega un contenido malicioso, luego el editor lo interpreta, después una extensión o componente auxiliar hace una acción que parece normal y, al final, el token termina accesible para quien no debía verlo. Ese patrón aparece mucho en vulnerabilidades de tooling de desarrollo porque el software está diseñado para ser flexible, no para asumir que todo el contenido es hostil.

El punto débil no siempre está donde miras

Cuando piensas en robo de credenciales, probablemente imaginas phishing, malware o robo de sesión en el navegador. Aquí el ángulo fue distinto: el vector pasó por una herramienta de productividad que la gente abre todo el día y en la que confía. Eso hace que el ataque sea más difícil de detectar a simple vista.

También hay un problema de percepción. Muchos desarrolladores tratan VS Code como un entorno local, casi aislado. Pero en la práctica está conectado a repositorios, extensiones, autenticación, terminal, terminal integrada, Git, perfiles y servicios externos. Esa superficie de ataque es amplia, y cada integración suma riesgo.

Ejemplo de impacto en un equipo real

Imagina un equipo de 12 personas que usa tokens personales para automatizar revisiones, publicar paquetes y acceder a repositorios privados. Si uno de esos tokens se filtra, el atacante podría leer código fuente, buscar secretos hardcodeados, modificar workflows o intentar persistir con nuevas credenciales.

En una empresa de LatAm, donde a veces se mezclan cuentas personales con cuentas de trabajo por rapidez operativa, el problema puede ser peor. Si el mismo usuario usa su GitHub personal para proyectos freelance y para un repositorio de la empresa, el impacto se cruza entre contextos. Eso complica la respuesta y el análisis forense.

Qué riesgos concretos abre para tu equipo

El primer riesgo es el acceso no autorizado a repositorios privados. Si el token tenía permisos de lectura, el atacante puede clonar código, revisar historial y buscar secretos. Si tenía permisos de escritura, el escenario ya incluye inyección de cambios, manipulación de releases o alteración de workflows.

El segundo riesgo es la persistencia. Un token robado puede sobrevivir al cierre de sesión del usuario, porque no depende del navegador ni de una cookie efímera. Si no lo revocas, sigue funcionando hasta que expire o sea invalidado. En entornos donde no hay inventario claro de tokens, eso puede pasar desapercibido durante días.

El tercer riesgo es la cadena de suministro. Un token con acceso a GitHub Actions, paquetes o integraciones puede servir para insertar código malicioso en procesos automáticos. No hace falta comprometer a toda la organización; a veces basta con una cuenta que tenga permisos demasiado amplios.

RiesgoQué puede pasarImpacto típico
Lectura de repos privadosExfiltración de código y secretosAlto
Escritura en reposCambios maliciosos o backdoorsMuy alto
Acceso a CI/CDModificación de pipelines y releasesMuy alto
Persistencia del tokenAcceso prolongado sin sesión activaAlto
Movimiento lateralUso del token para llegar a más sistemasAlto

Qué revisar en VS Code y GitHub hoy

Si usas VS Code en tu equipo, no basta con confiar en que “todo está actualizado”. Necesitas revisar extensiones, permisos y el modo en que se almacenan las credenciales. Muchas organizaciones actualizan el editor, pero no auditan lo que corre encima del editor.

En GitHub, el foco debería estar en el principio de menor privilegio. Un token no debería tener más acceso del necesario para la tarea que cumple. Si una automatización solo necesita leer un repositorio, no le des permisos de escritura. Si una integración no usa Actions, no le des acceso a Actions. Parece obvio, pero en la práctica se rompe mucho.

La documentación oficial de GitHub sobre tokens y permisos es un buen punto de partida para revisar tu postura de seguridad: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

Controles que sí bajan el riesgo

  1. Revisa y elimina tokens que no uses hace meses.
  2. Usa tokens de vida corta cuando la herramienta lo permita.
  3. Limita scopes al mínimo necesario.
  4. Separa cuentas personales y de trabajo.
  5. Audita extensiones instaladas en VS Code y desinstala las que no aportan valor real.
  6. Activa MFA en GitHub, aunque eso no reemplaza la gestión de tokens.
  7. Centraliza secretos en un gestor de secretos, no en archivos locales ni notas compartidas.

También conviene revisar la guía oficial de extensiones de VS Code para entender qué capacidad tiene cada una y qué permisos está pidiendo el entorno: https://code.visualstudio.com/docs/editor/extension-marketplace

Señales de alerta que no deberías ignorar

Si ves actividad extraña en repositorios, tokens creados fuera de horario o accesos desde ubicaciones inusuales, actúa rápido. Un token comprometido puede usarse desde cualquier lugar, así que no te fíes solo de la IP o del país de acceso. El atacante puede usar infraestructura intermedia y parecer un usuario normal.

Otra señal es la aparición de extensiones desconocidas o configuraciones cambiadas sin explicación. En equipos grandes, alguien puede instalar una extensión para probar algo y dejarla ahí. Ese tipo de descuido abre puertas que luego nadie recuerda haber dejado abiertas.

Lecciones para equipos de desarrollo en LatAm

En muchas empresas de la región, el trabajo de desarrollo todavía mezcla urgencia con poca estandarización. Hay equipos que usan cuentas personales, tokens sin expiración, máquinas compartidas y poca revisión de extensiones. Ese combo no es raro, pero sí riesgoso.

La lección más clara de este caso es que la seguridad de desarrollo no empieza en el servidor. Empieza en el editor, en la cuenta del proveedor y en la forma en que el equipo maneja credenciales. Si ese primer eslabón falla, el resto del stack puede caer bastante rápido.

También hay un tema de madurez operativa. No necesitas un SOC gigante para mejorar esto. Con inventario de tokens, políticas de scopes, revisión mensual de extensiones y una regla clara de separación de cuentas, ya reduces bastante la superficie de ataque.

Un plan mínimo de 30 días

  • Semana 1: inventario de tokens y extensiones instaladas.
  • Semana 2: revocación de tokens viejos y cambio a permisos mínimos.
  • Semana 3: revisión de cuentas compartidas y separación personal/trabajo.
  • Semana 4: documentación interna y checklist para nuevas herramientas.

Si tienes un equipo pequeño, este plan ya te da una base útil. Si tienes más de 20 desarrolladores, conviene sumar alertas automáticas en GitHub y una política interna para aprobar extensiones o herramientas nuevas.

Qué nos deja este bug más allá del caso puntual

El aprendizaje no es solo “actualiza VS Code”. Eso sería quedarse corto. La señal real es que la confianza por defecto en herramientas de desarrollo ya no alcanza. Los atacantes saben que el editor es un punto de concentración de acceso y buscan fallas ahí porque el retorno es alto.

También queda claro que el desarrollo moderno depende de demasiadas piezas conectadas. GitHub, VS Code, extensiones, tokens, Actions, gestores de secretos y terminales viven pegados. Si una de esas capas expone datos sensibles, el resto hereda el problema. Por eso la seguridad de desarrollo tiene que tratarse como un sistema, no como parches sueltos.

Si quieres profundizar en el contexto técnico del hallazgo, la publicación original está aquí: https://blog.ammaraskar.com/github-token-stealing/

Tabla resumen

Pregunta cortaRespuesta corta
¿Qué explotó el atacante?Un bug en VS Code con una cadena de interacción de un clic.
¿Qué robó?Tokens de GitHub con distintos niveles de acceso.
¿Qué riesgo principal genera?Acceso a repos privados, CI/CD y secretos.
¿Qué debes revisar primero?Tokens activos, scopes y extensiones instaladas.
¿Qué ayuda más a reducir impacto?Menor privilegio, rotación y separación de cuentas.

Preguntas frecuentes

¿Un bug en VS Code puede comprometer mi cuenta de GitHub aunque tenga MFA?
Sí. MFA protege el inicio de sesión interactivo, pero un token robado puede seguir siendo válido si no lo revocas. Por eso MFA ayuda, pero no reemplaza la gestión de tokens ni la revisión de permisos.
¿Qué tipo de token es más peligroso en este escenario?
El más peligroso es el que tiene más permisos de los necesarios y no expira pronto. Un token con acceso a repos privados, escritura o GitHub Actions puede causar mucho más daño que uno de solo lectura.
¿Actualizar VS Code alcanza para estar tranquilo?
No. Actualizar el editor es necesario, pero también tienes que revisar extensiones, scopes de GitHub y hábitos de uso. Muchas filtraciones ocurren por combinaciones de configuración, no por una sola falla aislada.
¿Cómo sé si mi equipo está usando tokens demasiado amplios?
Revisa qué permisos tiene cada token y si realmente necesita esos accesos. Si una automatización solo lee un repo, no debería poder escribir ni tocar Actions. Si no puedes justificar un permiso en una frase simple, probablemente sobra.
¿Qué hago si sospecho que un token se filtró?
Revócalo de inmediato, rota cualquier secreto relacionado y revisa actividad reciente en repositorios y pipelines. Después, busca cómo se expuso para cerrar la puerta técnica y no repetir el problema.
¿Este tipo de ataque afecta solo a empresas grandes?
No. Los equipos pequeños suelen sentirlo más porque tienen menos controles y más confianza operativa. En una startup o agencia, un solo token comprometido puede dar acceso a varios proyectos a la vez.
¿Conviene usar cuentas personales para proyectos de trabajo?
No es lo ideal. Mezclar contextos complica auditoría, revocación y respuesta a incidentes. Lo mejor es separar cuentas y usar políticas claras para cada entorno.

Azirgo

¿Listo para construir tu Producto Digital?

Sitios web, apps móviles, software a medida y soluciones blockchain. Cuéntanos qué tienes en mente y armamos un plan claro contigo.

  • Cotización clara en 48 horas
  • Equipo en Ecuador, atención en español
  • Desde un MVP hasta un producto en producción