Este mes, un investigador reveló cómo irrumpió en el repositorio oficial de GitHub de Microsoft Visual Studio Code.
Una vulnerabilidad en la función de gestión de problemas de VS Code y la falta de controles de autenticación permitieron al investigador obtener acceso push y escribir en el repositorio.
Por informar responsablemente la vulnerabilidad, el investigador recibió una recompensa por error de una cantidad no revelada.
Regex defectuoso, sin autenticación, inyección de código en scripts de CI
Mientras viajaba en un tren, el investigador RyotaK descubrió una vulnerabilidad en el script de Integración Continua (CI) de VS Code que le permitía ingresar al repositorio oficial de GitHub de Microsoft VS Code y comprometer archivos.
“Estaba demasiado aburrido mientras estaba en el tren, así que decidí leer el código VS Code. Después de un tiempo, noté que VS Code tiene un repositorio separado para scripts de CI llamado vscode-github-triage-actions . Así que decidí para leerlo “, dijo RyotaK a BleepingComputer.
En breve, el investigador notó una línea interesante en el script que podría explotarse en ataques de inyección de código:
El investigador pronto se dio cuenta de que la variable de confirmación podría ser controlada por un atacante debido a dos razones:
- faltan comprobaciones de autenticación dentro del comando closedWith (es decir, no verifica si el usuario tenía la autorización para asociar los hashes de confirmación con un problema), y
- expresión de regex defectuosa utilizada para validar el comando closedWith especificado en un comentario de cierre.
El comando closedWith se usa para asociar un hash de confirmación con el problema antes de que se cierre la confirmación.
Sin embargo, una expresión regular defectuosa (que se muestra a continuación) utilizada para validar los comentarios de cierre y no verificaciones de autenticación en el script CI significaba que cualquier usuario podría asociar una confirmación con un problema e inyectar código dentro del valor closedWith .
Debido a que el flujo de trabajo de CI vulnerable de VS Code se ejecutaba una vez al día, alrededor de la medianoche, el investigador planeó cuidadosamente un exploit de prueba de concepto (PoC) con anticipación, para no cometer errores peligrosos durante las horas nocturnas.
Para hacerlo, el investigador examinó los archivos de código de acciones de GitHub para el proyecto para comprender el flujo de trabajo de integración continua y entrega continua (CI / CD).
“Afortunadamente, los archivos de flujo de trabajo para las acciones de GitHub se publican en GitHub, así que tengo una idea de lo que sucede dentro de las acciones de GitHub”.
“Dado que las acciones / pago se ejecutaron en el paso antes de que se usara el archivo de flujo de trabajo vulnerable, había un token de GitHub con permiso de escritura en el repositorio. Así que hice un plan para usar este token”, dijo el investigador a BleepingComputer.
Al inyectar su exploit básico de PoC en el script CI de VS Code que se ejecutó alrededor de la medianoche, el investigador obtuvo un shell inverso .
Además, el investigador obtuvo el token de autorización de GitHub para el repositorio de VS Code que le daría acceso de escritura al repositorio.
Finalmente, después de obtener el token, el investigador publicó un compromiso de PoC en el repositorio:
Aunque la rama maestra del repositorio tenía protecciones de rama basadas en cuentas que no se podían omitir con el token de Acciones de GitHub, era posible enviar el archivo a la rama de lanzamiento utilizando el token, afirma el investigador.
Vale la pena señalar que RyotaK realizó este exploit PoC mientras se adhería a las pautas de ” puerto seguro ” de Microsoft al informar vulnerabilidades a través de sus programas de recompensas por errores.
“Microsoft permite el diagnóstico de vulnerabilidades a través de puertos seguros. Este artículo describe las vulnerabilidades descubiertas / reportadas de conformidad con el puerto seguro y no pretende recomendar un diagnóstico de vulnerabilidades no autorizado”, afirmó RyotaK en su publicación de blog .
Por su descubrimiento de la vulnerabilidad y siguiendo las pautas de divulgación responsable, el investigador le dijo a BleepingComputer que Microsoft le otorgó un premio en efectivo por una cantidad no revelada.
Las fallas del repositorio de código pueden allanar el camino para los ataques a la cadena de suministro de software
Las fallas de este tipo que permiten a los adversarios ingresar en bases de código de software que de otro modo serían seguras pueden sentar las bases para ataques sofisticados a la cadena de suministro de software.
Este asombroso descubrimiento sale a la luz cuando el incidente del ataque a la cadena de suministro de SolarWinds ya ha estado en los titulares.
En este caso, el hacker ético RyotaK descubrió e informó responsablemente de la falla a Microsoft antes de que los actores de amenazas avanzados pudieran explotarla, para impulsar su código malicioso en sentido ascendente al repositorio de Visual Studio Code.
La corrupción de los editores de código fuente y los IDE en un ataque dirigido a la cadena de suministro puede tener consecuencias devastadoras para sus usuarios, desarrolladores y clientes que luego recibirían las aplicaciones creadas con un IDE contaminado.
Recientemente, otro grupo de investigadores de seguridad informó haber encontrado credenciales de Git expuestas debido a directorios .git mal protegidos en dominios de la ONU.
Este descubrimiento les permitió clonar todo el repositorio de Git del Programa de las Naciones Unidas para el Medio Ambiente (PNUMA) y, finalmente, acceder a más de 100.000 registros de empleados.
Asegurar sus herramientas de CI / CD y auditar proactivamente sus scripts en busca de fallas de seguridad antes de que los adversarios exploten cualquier vulnerabilidad son algunas defensas para prevenir compromisos de la cadena de suministro de software. /Vía: bleepingcomputer.com-