Una nueva investigación reveló que más de 15.000 repositorios de módulos Go en GitHub están expuestos a un tipo de ataque conocido como repojacking. "Existen más de 9.000 repositorios susceptibles al repojacking debido a cambios en los nombres de usuario de GitHub", indicó Jacob Baines, director de tecnología de VulnCheck, en un informe. Además, señaló que "más de 6.000 repositorios son vulnerables debido a la eliminación de cuentas". En total, estos repositorios comprenden al menos 800.000 versiones de módulos Go.
El "repojacking" es una técnica de ciberseguridad maliciosa que implica tomar el control de un repositorio de software. En el contexto de la programación y el desarrollo de software, un "repositorio" es un lugar de almacenamiento donde se mantiene y gestiona el código fuente de un proyecto. Repojar un repositorio puede ser posible cuando:
Nombres de repositorios abandonados o inactivos: Si un repositorio de software popular ya no se mantiene y el nombre del repositorio se libera, un atacante puede crear un nuevo repositorio con el mismo nombre. Los usuarios que aún dependen de este repositorio pueden terminar descargando e instalando software malicioso sin saberlo.
Suplantación de dependencias: Un atacante podría registrar un paquete con un nombre similar al de un paquete popular pero abandonado o mal escrito. Los desarrolladores que accidentalmente dependen de este paquete mal escrito o abandonado pueden terminar instalando código malicioso.
Cambios maliciosos en el código: En algunos casos, un repositorio puede ser secuestrado por un atacante que luego introduce cambios dañinos en el código. Esto puede ocurrir si las credenciales de un colaborador del repositorio son comprometidas.
El repojacking es especialmente peligroso porque puede ser difícil de detectar y puede propagar software malicioso a un gran número de usuarios, particularmente en repositorios populares utilizados por muchos proyectos.
Te podrá interesar leer: Seguridad en Desarrollo de Software: Compromiso Obligatorio
A principios de junio, una empresa especializada en seguridad en la nube reveló que millones de repositorios de software en GitHub podrían ser vulnerables a una amenaza conocida como repojacking. Instaron a las organizaciones que cambian de nombre a asegurarse de mantener su nombre anterior como marcador de posición para evitar abusos.
Los módulos escritos en Go son particularmente susceptibles al repojacking. A diferencia de otras soluciones de gestión de paquetes como npm o PyPI, están descentralizados, ya que se publican en plataformas de control de versiones como GitHub o Bitbucket.
Te podrá interesar leer: Descubriendo el Peligro Oculto: 27 Paquetes Maliciosos en PyPI
"Cualquiera puede indicar al espejo del módulo Go y a pkg.go.dev que almacenen en caché los detalles del módulo", explicó Baines. "Un atacante podría registrar el nombre de usuario no utilizado, duplicar el repositorio del módulo y publicar un nuevo módulo en proxy.golang.org y go.pkg.dev".
Para prevenir la eliminación de paquetes potencialmente inseguros, GitHub ha implementado una contramedida conocida como retiro de espacio de nombres de repositorios populares, que impide la creación de repositorios con nombres de espacios de nombres retirados que hayan sido clonados más de 100 veces antes de un cambio de nombre o eliminación de la cuenta del propietario.
Sin embargo, VulnCheck señaló que esta protección no es efectiva para módulos Go, ya que el espejo del módulo los almacena en caché, evitando la necesidad de interactuar con un repositorio o clonarlo. Podría haber repositorios de módulos Go populares que han sido clonados menos de 100 veces, lo que supone una brecha de seguridad.
"Desafortunadamente, mitigar todos estos repositorios es una tarea para Go o GitHub", dijo Baines. "Un tercero no puede registrar razonablemente 15.000 cuentas de GitHub. Hasta entonces, es crucial que los desarrolladores de Go conozcan los módulos que usan y el estado del repositorio de origen".
Esta divulgación coincide con el hallazgo de Lasso Security, que identificó 1.681 tokens API expuestos en Hugging Face y GitHub, incluyendo aquellos asociados con Google, Meta, Microsoft y VMware, que podrían ser explotados en ataques de cadena de suministro, envenenamiento de datos de entrenamiento y robo de modelos.
Podrá interesarte: Uso de Wazuh para Monitorear GitHub
En conclusión, el fenómeno del repojacking en GitHub plantea serios desafíos de seguridad para los desarrolladores, particularmente en el ecosistema del lenguaje de programación Go. La vulnerabilidad surge principalmente de la naturaleza descentralizada de los módulos Go y los cambios en los nombres de usuario de GitHub. Aunque GitHub ha implementado medidas como el retiro de espacio de nombres de repositorios populares, esta solución no es totalmente efectiva para los módulos Go debido a sus mecanismos de almacenamiento en caché.
Esta situación subraya la importancia de una vigilancia continua por parte de los desarrolladores en cuanto a las dependencias de sus proyectos y el estado de los repositorios de los que dependen. Además, resalta la necesidad de una acción coordinada entre Go y GitHub para abordar de manera más efectiva este tipo de vulnerabilidades de seguridad. La reciente revelación de tokens API expuestos agrega otra capa de urgencia a la necesidad de medidas de seguridad robustas en el ámbito del desarrollo de software y la gestión de repositorios.