Función diseñada para mayor comodidad expuso repositorios de terceros

Un simple clic en un enlace podría permitir a un atacante robar el acceso a repositorios privados de GitHub. La vulnerabilidad se encontró en la forma en que Visual Studio Code gestionaba las pulsaciones de teclas dentro de las ventanas web integradas. En el caso de github.dev el ataque es especialmente peligroso, porque basta con que la víctima abra un enlace preparado.
github.dev permite abrir cualquier repositorio al que el usuario tenga acceso directamente en el navegador, en una versión ligera de Visual Studio Code. A través de este editor se pueden ver archivos, modificar código, crear solicitudes de extracción y hacer commits. Para su funcionamiento, GitHub transmite a github.dev un token OAuth que permite actuar en nombre del usuario.
El problema es que el token no está limitado a un solo repositorio abierto. Si el usuario tiene acceso a otros proyectos, incluidos los privados, el token también puede dar acceso a ellos. En caso de un ataque exitoso, el atacante podría obtener el token y solicitar la lista de repositorios privados a través de la interfaz de programación de aplicaciones de GitHub.
El punto débil resultó estar relacionado con las webviews de Visual Studio Code. Ese mecanismo se utiliza, por ejemplo, para la vista previa de archivos Markdown y el trabajo con cuadernos Jupyter. El contenido de una webview se ejecuta en una zona separada del navegador para aislarlo de la ventana principal del editor.
Para comodidad, Visual Studio Code sin embargo transmite parte de las acciones desde la webview a la ventana principal. De otro modo, combinaciones de teclas como invocar la paleta de comandos no funcionarían cuando el cursor está dentro de la ventana integrada. En la implementación se encontró un efecto secundario peligroso: un script dentro de contenido no confiable podía simular pulsaciones y obligar al editor a ejecutar acciones en nombre del usuario.
No se podía introducir texto arbitrario directamente a través de ese mecanismo, pero las combinaciones de teclas integradas resultaron suficientes. El autor de la prueba utilizó una notificación que sugería instalar una extensión recomendada, y luego activó una extensión local del espacio de trabajo. A través de ella logró añadir su propia combinación de teclas y lanzar la instalación de otra extensión eludiendo la comprobación de confianza del editor.
La demostración del ataque se basó en un repositorio con un cuaderno Jupyter y una extensión local dentro del directorio .vscode/extensions. Al abrir el archivo preparado, el script esperaba la aparición de una notificación, simulaba una pulsación para aceptar la acción principal, luego ejecutaba la nueva combinación de teclas e instalaba una extensión que extraía el token de GitHub.
Tras la instalación, la extensión maliciosa contactaba la API de GitHub, obtenía la lista de repositorios privados disponibles y mostraba el token robado. El autor subraya que la demostración no fue un ataque encubierto, pero mostró una vía real para robar acceso mediante un solo clic en un enlace.
La vulnerabilidad afectaba no solo a github.dev, sino también a la versión de escritorio de Visual Studio Code. Sin embargo, en la versión de escritorio el atacante tendría que convencer a la víctima de clonar el repositorio preparado y abrir el cuaderno malicioso. Si existiera otra falla en la webview, las consecuencias podrían ser más graves, hasta la ejecución de código en el equipo.
Se puede reducir el riesgo borrando las cookies y los datos locales del sitio github.dev. Si el usuario no ha completado antes la pantalla inicial de inicio en github.dev, al abrir un enlace sospechoso aparecerá un diálogo adicional y se podrá cerrar la página. Si los datos del sitio ya están guardados, github.dev puede abrirse sin advertencia.
El autor de la publicación señaló por separado que parte de las protecciones de Visual Studio Code sí funcionaron. Una estricta política de seguridad de contenidos y la limpieza de HTML en algunos lugares impidieron ampliar el ataque a través de otros escenarios. El error, sin embargo, mostró que el mecanismo que transmite combinaciones de teclas desde la ventana aislada al editor principal puede convertirse en un canal de control peligroso.
El autor divulgó la vulnerabilidad públicamente el 2 de junio de 2026. Una hora antes de la publicación informó del problema a su antiguo contacto en el equipo de seguridad de GitHub, tras lo cual publicó la descripción y creó un ticket en el rastreador de errores de Visual Studio Code.