Una reciente investigación ha identificado más de 15.000 repositorios de módulos Go en GitHub que son vulnerables a un tipo de ataque conocido como repojacking.
Según Jacob Baines, director de tecnología de VulnCheck, más de 9.000 de estos repositorios presentan vulnerabilidades debido a cambios en el nombre de usuario de GitHub. Adicionalmente, se encontró que más de 6.000 repositorios eran susceptibles al repojacking debido a la eliminación de cuentas. Estos repositorios en conjunto representan una asombrosa cantidad de 800.000 versiones de módulos Go.
El repojacking, una fusión de “repositorio” y “secuestro”, es una técnica de ataque que permite a un actor malintencionado aprovechar los cambios y eliminaciones del nombre de usuario de una cuenta para crear un nuevo repositorio con el mismo nombre y el usuario preexistente. Esto facilita ataques a la cadena de suministro de software de código abierto.
A principios de junio, la empresa de seguridad en la nube Aqua reveló que millones de repositorios de software en GitHub podrían estar vulnerables a esta amenaza. Instaron a las organizaciones que atraviesan cambios de nombre a asegurarse de mantener su nombre anterior como marcador de posición para evitar posibles abusos.
Los módulos escritos en el lenguaje de programación Go son particularmente susceptibles al repojacking. A diferencia de otras soluciones de administración de paquetes, como npm o PyPI, los módulos Go son descentralizados ya que se publican en plataformas de control de versiones como GitHub o Bitbucket. Esta descentralización los hace más propensos a este tipo de ataques.
“Según Baines, cualquiera puede instruir al espejo del módulo Go y a pkg.go.dev para que almacenen en caché los detalles del módulo”, explicó. “Un atacante podría registrar un nombre de usuario recién disponible, duplicar el repositorio del módulo y publicar un nuevo módulo en proxy.golang.org y go.pkg.dev”.
Aunque GitHub ha implementado una medida preventiva llamada “retiro” para evitar que los desarrolladores eliminen paquetes potencialmente inseguros, esta contramedida tiene limitaciones. Funciona bloqueando los intentos de crear repositorios con nombres de espacios de nombres retirados que han sido clonados más de 100 veces antes de que los propietarios realicen el retiro. Sin embargo, VulnCheck señaló que esta protección no resulta efectiva cuando se trata de módulos Go, ya que estos se almacenan en caché mediante el espejo del módulo, obviando la necesidad de interactuar con un repositorio o clonarlo. En otras palabras, podría haber módulos populares basados en Go que han sido clonados menos de 100 veces, lo que genera un tipo de omisión en la protección ofrecida por esta medida.
“Según Baines, mitigar todos estos repositorios es algo que Go o GitHub tendrán que abordar”, expresó. “Un tercero no puede razonablemente registrar 15.000 cuentas de GitHub”. Mientras tanto, es crucial que los desarrolladores de Go estén al tanto de los módulos que están utilizando y del estado de los repositorios de origen de dichos módulos”.
La divulgación de esta vulnerabilidad también coincide con el descubrimiento de Lasso Security, que identificó 1.681 tokens de API expuestos en plataformas como Hugging Face y GitHub. Estos tokens incluyen aquellos asociados con gigantes tecnológicos como Google, Meta, Microsoft y VMware. La exposición de estos tokens podría potencialmente ser aprovechada para llevar a cabo ataques contra la cadena de suministro, contaminar datos de entrenamiento y perpetrar el robo de modelos. Es imperativo que la comunidad de desarrollo esté al tanto de estos riesgos y tome medidas para garantizar la seguridad en la gestión de módulos y tokens de API.