App::cpanminus (cpanm) es una herramienta ampliamente utilizada en la comunidad Perl para instalar y gestionar módulos desde CPAN (Comprehensive Perl Archive Network), que es un repositorio central para módulos Perl (lenguaje de programación de alto nivel), cpanm se destaca por su simplicidad y rapidez, lo que facilita a los desarrolladores la instalación de módulos sin complicaciones. Sin embargo, recientemente se ha descubierto una vulnerabilidad crítica en cpanm, identificada como CVE-2024-45321, que plantea serios riesgos para la seguridad de los sistemas que utilizan esta herramienta.
La vulnerabilidad CVE-2024-45321 tiene una alta severidad, con una puntuación CVSS de 9.8, y se clasifica como una debilidad CWE-494: “Descarga de código sin comprobación de integridad”. Esto significa que, en su configuración predeterminada, cpanm descarga módulos usando HTTP en lugar de HTTPS.
HTTP es un protocolo no seguro que no cifra los datos, lo que permite que los atacantes intercepten y alteren el código durante la descarga. Como resultado, un atacante podría modificar el código malicioso que se instala en el sistema del usuario, comprometiendo así la seguridad de la máquina. Esta vulnerabilidad destaca la necesidad urgente de asegurar las descargas utilizando HTTPS para proteger la integridad del código y la seguridad del sistema.
Productos y versiones afectadas:
- App::cpanminus (cpanm), en todas sus versiones predeterminadas.
Workaround:
Hasta el momento, no se ha lanzado un parche oficial para la vulnerabilidad. Sin embargo, existen varias soluciones para mitigar el riesgo:
- La manera más fácil es ajustar cpanminus para que use un espejo HTTPS mediante el argumento –from en la línea de comandos. Se puede establecer esta opción al ejecutar el comando, reemplazando DISTNAME con el nombre del módulo que deseas instalar.
$ cpanm --from https://www.cpan.org DISTNAME
- Como alternativa, puedes ajustar la opción –from a través de la variable de entorno PERL_CPANM_OPT:
$ export PERL_CPANM_OPT="--from https://www.cpan.org"
- Otra alternativa es modificar los puntos finales HTTP en el ejecutable mediante parches. Esto permite mantener la compatibilidad con BackPan y las versiones de prueba:
$ perl -pi -E 's{https://(www\.cpan\.org|backpan\.perl\.org|cpan\.metacpan\.org|fastapi\.metacpan\.org|cpanmetadb\.plackperl\.org)}{https://$1}g' /path/to/cpanm
Utilizar un Cliente Alternativo:
- Cambiar a CPAN.pm (cpan) 2.35 o posterior.
- Utilizar App::cpm (cpm), que prioriza conexiones HTTPS de forma predeterminada.
Recomendaciones:
- Configurar cpanminus para utilizar un espejo HTTPS, garantizando la seguridad de las descargas.
- Actualizar el ejecutable de cpanm para reemplazar HTTP con HTTPS en todos los enlaces de descarga.
- Elegir clientes alternativos que usen conexiones HTTPS seguras de manera predeterminada.
Referencias: