El «Repo-jacking» es un tipo de ataque en la cadena de suministro que ha captado la atención debido a su potencial impacto en el software de código abierto. Consiste en sustituir un paquete de software confiable por malware, lo que podría permitir a un atacante distribuir software malicioso a una cantidad considerable de dispositivos. Este tipo de ataque se vuelve especialmente relevante en escenarios donde los desarrolladores descargan dependencias directamente desde repositorios en GitHub.
El riesgo de sufrir un ataque de «repo-jacking» es relativamente bajo si se utilizan gestores de paquetes como npm o PyPI para obtener dependencias de software, ya que estos gestores imponen controles de autenticación que dificultan la inyección de paquetes maliciosos sin acceso a las credenciales del mantenedor original. Sin embargo, para aquellos desarrolladores que extraen directamente dependencias desde GitHub, la amenaza es más real.
El «Repo-jacking» podría ocurrir si un usuario de GitHub decide cambiar su nombre de usuario. En tales casos, si un atacante logra registrar el nombre de usuario anterior del desarrollador y crea un repositorio con el mismo nombre que el original, podría engañar a otros desarrolladores para que descarguen un paquete malicioso en lugar del legítimo. Sin embargo, GitHub ha implementado un algoritmo de «tombstoning» que reduce significativamente este riesgo al retirar permanentemente las combinaciones de nombre de propietario y nombre de repositorio que han alcanzado cierto nivel de uso.
Aun así, el problema persiste para repositorios que no superan estos umbrales de uso. La redirección automática al renombrar repositorios también agrega un nivel de riesgo, ya que los desarrolladores pueden no notar que uno de sus dependencias ha cambiado de nombre, facilitando el trabajo del atacante.
Para mitigar este riesgo, se recomienda a los desarrolladores que bloqueen sus dependencias a un ID de commit específico. Este método asegura que se descargue un commit específico que no puede ser alterado fácilmente por un atacante, a menos que logren comprometer el algoritmo de hash SHA-1, lo cual es teóricamente posible pero extremadamente improbable. Utilizando herramientas como archivos go.sum en Go, o referencias específicas a commits en GitHub Actions, se puede proteger significativamente contra los ataques de «repo-jacking».
GitHub también ofrece la posibilidad de verificar si un repositorio ha sido renombrado o reemplazado mediante la API de GitHub. Cada repositorio tiene un ID único que no cambia, aunque el nombre del repositorio lo haga. Verificar que el ID del repositorio no ha cambiado es una manera eficaz de detectar posibles «repo-jacks».
En resumen, aunque el «Repo-jacking» es una amenaza potencial, utilizando buenas prácticas de seguridad y las herramientas que proporciona GitHub, los desarrolladores pueden protegerse de manera efectiva. Nuevas iniciativas en la seguridad de la cadena de suministro, como el uso de tokens OIDC en los flujos de trabajo de GitHub, están mejorando aún más la seguridad y reduciendo la posibilidad de estos ataques.