Desde hace tiempo hemos tenido todo tipo de noticias relacionada con la gestión de paquetes. Todos los problemas tienen que ver con la mala gestión de los repositorios, o de los dueños de los repositorios. Y esto nunca hay que olvidarlo. Quién olvida su historia esta condenado a repetirla.
¿Qué es un repositorio de paquetes o de dependencias?
Es un lugar dónde se almacena un paquete, sea código o ejecutables, para su posterior uso de forma sencilla. Es la forma de compartir de la forma más sencilla posible. El problema es que se ha llegado a utilizar para tener código sin sentido. Hace mucho tiempo, un desarrollador eliminó diez líneas de código [1], estas diez líneas eran muy utilizadas. Una vez borrado el código, muchísimas personas se vieron afectadas por este problema. Los más sencillo hubiera sido añadir estas líneas a nuestro código fuente.
Privado o público
Las empresas suelen tener repositorios privados alojados en infraestructuras propias, para poder gestionar todos los paquetes. Normalmente tienen tanto paquetes públicos como privados. Aunque pueden también utilizar los públicos. Los públicos cada vez son más seguros, e implementan mejores medidas para prevenir problemas. Siempre el problema es el usuario.
¿Cómo se deberían gestionar?
La mejor forma de gestionarlo es utilizar sólo de un tipo. Si se dispone de uno público, utilizar el público para todo. Pero en caso de tener uno privado utilizarlo para todo, utilizando copias de los paquetes públicos para protegerse. Uno de los ataques más frecuentes a empresas es nombrar paquetes púbicos con nombre de paquetes privados conocidos. Si cualquier persona ejecuta el comando de instalar por error en el repositorio púbico, se descargará un paquete erróneo sin querer, generando posibles problemas.
Otro de los problemas más comunes es el typosquatting, es decir, juegan con el nombre de los paquetes. Si un paquete se llama google podría utilizar: gogle, goggle o goofle. Buscan que un defecto al escribir el nombre acabe descargando el paquete erróneo, que tiene código malicioso.
Herramientas útiles para minimizar problemas
Para minimizar problemas hay que utilizar herramientas que analicen el código de todas las dependencias. Una vez revisado y que todo esté correcto, hay que analizar de forma continua los paquetes instalados y la versión de éstos. En diversas herramientas de gestión de paquetes existe una gestión de vulnerabilidades, pero siempre hay que ir revisándolas.
Por ejemplo, en Github existe un robot automático llamado dependabot que realizará el trabajo por nosotros, inclusive propone los cambios. Otro ejemplo es el comando npm con la opción audit.
Resumen
Después de todos los datos comentados, vamos a resumir las precauciones que debemos tener en cuenta:
- Intentar tener todo actualizado y con las versiones oficiales.
- Tener las versiones fijas e ir actualizando continuamente.
- Utilizar sólo un tipo de repositorio, o privado o público.
- Revisar lo que se instala, y confirmar que es lo que estamos instalando.
- Automatizar el proceso de revisión de dependencias