Bug En GitHub Permitiría A Un Atacante Suplantar Repositorios
El servicio de hosting de repositorios de código en la nube GitHub ha identificado un fallo de seguridad grave que podría haberse explotado para tomar el control de repositorios ajenos y crear ataques a cadenas de suministro de software.
Antecedentes
Este tipo de ataque, denominado repojacking, ocurre cuando el creador de un repositorio decide cambiar su nombre de usuario. Esto implica que la URL del repositorio cambiaría de usuario/repo
a nuevousuario/repo
. Durante el proceso de renombrado, un atacante puede cambiar su nombre de usuario al nombre antiguo que utilizaba la víctima y crear un repositorio bajo el mismo nombre, suplantándolo.
Como contramedida, si se clona un repositorio más de 100 veces durante la semana en la que el dueño del repositorio cambia su nombre de usuario, ese repositorio está «retirado» (retired). Esto significa que la combinación de nombre de usuario y nombre de repositorio no se puede volver a registrar. Si el repositorio usuario/repo
ha sido clonado más de 100 veces esta semana, su dueño cambia su nombre de usuario y después otra persona intenta crear un repositorio en la URL usuario/repo
, no podrá hacerlo.
Descripción del ataque
Sin embargo, Checkmarx ha revelado que esta protección no es suficiente. En un artículo publicado el 26 de octubre, se muestra una manera de evadir el mecanismo de retiro de repositorios populares (popular repository namespace retirement) utilizando una cuenta auxiliar y la funcionalidad de transferencia de repositorios de GitHub. El procedimiento es el siguiente:
- El
atacante
crea un repositorio con el mismo nombre que el repositorio retirado (por ejemplo,repo
), pero bajo un nombre de usuario diferente (por ejemplo, cómplice). - Cómplice transfiere la propiedad del repositorio repo al
atacante
. Atacante
renombra su usuario al nombre de usuario original de la víctima (por ejemplo, víctima). De esta forma, el repositoriovíctima/repo
queda bajo el control del actor malicioso.
Checkmarx ha encontrado la vulnerabilidad el 13 de junio de 2022 y GitHub la eliminó tres meses después, el 19 de septiembre.
Conclusiones
De haberse explotado esta vulnerabilidad, más de 10.000 paquetes alojados en gestores de paquetes como Packagist, Go o Swift estarían en riesgo. Además, al tomar el control de las GitHub Actions, que también pueden robarse mediante el ataque anteriormente descrito, es posible envenenar las cadenas de suministro de software, con graves repercusiones.
Además, para identificar paquetes susceptibles de ser víctimas de repojacking, Checkmarx ha publicado la herramienta Chainjacking.
En todo caso, puede que el exploit de Checkmarx no sea la única forma de tomar el control de un repositorio ajeno a partir de un cambio de nombre de usuario.
Más información:
Via: unaaldia.hispasec.com