Pruebas de vulnerabilidades de seguridad en PHP Composer con Snyk
DeveloperSteve Coochin
20 de mayo de 2021
0 minutos de lecturaPHP se usa ampliamente para impulsar sitios web. Desde blogs hasta comercio electrónico, está presente en nuestra vida cotidiana y potencia gran parte de Internet tal como lo usamos hoy. Según un informe de Wappalyzer sobre los principales lenguajes de programación de 2020, PHP tiene una participación del 79 % entre los lenguajes de backend que se usan actualmente en Internet.
Uno de los mayores desafíos de las bibliotecas de PHP a lo largo de los años ha sido la gestión de paquetes. Ha habido varias formas de instalar y mantener bibliotecas fácilmente, entre ellas PECL y CPAN. Mención especial para PEAR, que se presentó en 2009 y se convirtió en una de las primeras formas de cargar y distribuir bibliotecas. Más tarde se convirtió en PEAR2 y, con el tiempo, pasó a formar parte de PHP Composer (¡que ya va por su noveno año!), que es lo que veremos hoy.
¿Qué es PHP Composer?
PHP Composer es una herramienta de administración de paquetes que se usa para instalar y actualizar bibliotecas y dependencias en PHP. Se popularizó rápidamente por la forma en que carga y mantiene bibliotecas y dependencias en frameworks y proyectos. Funciona desde la línea de comandos y permite instalar aplicaciones, bibliotecas y dependencias de PHP, con capacidades de carga automática, dentro de los proyectos. Es importante tener en cuenta que PHP Composer no instala nada de forma global.
Veamos la seguridad de PHP Composer
Aunque PHP Composer agiliza el desarrollo de aplicaciones, también reduce cierto nivel de control y visibilidad. Así que, si bien facilita la programación, cabe preguntarse… ¿lo hace de forma segura? Con Snyk, puedo responder esa pregunta en unos pocos clics.
Antes de revisar algunas implementaciones de PHP Composer en distintas plataformas, quiero señalar algunos puntos.
Como usuario/desarrollador de estas plataformas, mis hallazgos me sorprendieron por varias razones. Esto refuerza la idea de que crear conciencia y fomentar la educación de forma continua es fundamental para desarrollar software de manera segura.
En todos los casos que se muestran a continuación, me comuniqué con cada comunidad para conversar sobre las vulnerabilidades y crear conciencia cuando aún no las conocían (muchas ya tenían soluciones).
Kirby
Para empezar a usar Kirby y Composer, puedes seguir las sencillas instrucciones de configuración en la documentación de Kirby meets Composer:
Composer instala la versión más reciente de Kirby (3.3.5), que en Snyk Vulnerability DB solo tiene una vulnerabilidad de gravedad media y otra de gravedad baja. Sin embargo, la CLI de Snyk detecta un problema en una de las dependencias: PHPMailer, que usa la versión 6.2.0. Esta versión de PHP Mailer tiene una vulnerabilidad de gravedad alta de scripting entre sitios.
Esto se corrigió en PHPMailer 6.4.1 (al momento de escribir este artículo) y puede solucionarse ejecutando composer upgrade para obtener la versión más reciente. Al revisar el historial del módulo, se observa un largo historial de vulnerabilidades. Por eso, se recomienda ampliamente realizar análisis periódicos con Snyk Code para recibir alertas si se descubren nuevas vulnerabilidades.
Joomla
El repositorio de Joomla incluye un archivo de Composer que instala todas las dependencias necesarias para ejecutarlo. Al realizar un análisis con la CLI de Snyk, encontramos 2 problemas y 4 rutas vulnerables.
En particular, volvemos a encontrar PHP Mailer, que instala la versión 5.2.28. Esta versión presenta un problema de validación incorrecta de entradas, y Snyk nos indica que se corrigió en la versión 6.1.6.
Snyk también detectó una vulnerabilidad de intermediario (MITM), que se incorpora a través de `paragoine/random_compat` en la versión 1.4.3 y está asociada con `joomla/session`. Los ataques MitM son muy graves, ya que permiten espiar las comunicaciones electrónicas. Para obtener más información sobre este tipo de vulnerabilidad, consulta nuestro blog sobre ataques de intermediario.
Drupal
Con la práctica guía del repositorio de Drupal, podemos empezar rápidamente a trabajar con la rama de desarrollo 9.x más reciente.
Mientras se ejecuta la instalación, podemos buscar problemas conocidos en Snyk Vulnerability Database, que también muestra las vulnerabilidades del historial de versiones de Drupal que debemos tener en cuenta. Después, con la CLI de Snyk, vemos que la versión 9.x aparece sin vulnerabilidades. Y, para estar aún más seguros, podemos hacer lo mismo con Drupal 8.x y comprobar que también aparece sin vulnerabilidades. ¡Excelente!
Ahora que esas dos versiones están verificadas, revisemos también Drupal 7, ya que todavía se usa bastante. Para hacerlo, clona el repositorio de Drupal 7.x.
Al analizar la versión 7.x, los resultados de la CLI de Snyk son un poco distintos: muestran 9 vulnerabilidades y 18 rutas vulnerables. Hay de todo, desde ataques que explotan la carga de archivos hasta ataques DoS, ejecución remota de código (RCE) y ejecución arbitraria de código (ACE).
A partir de estos hallazgos, recomendaría actualizar como mínimo a la versión 8.x para mantener segura tu implementación de Drupal.
Contribuye y ayuda a las comunidades
Cuando empecé a hacer pruebas en algunas de estas plataformas de uso frecuente, no sabía realmente qué iba a encontrar. Y, como dije antes, los resultados me sorprendieron bastante. Es posible que los desarrolladores, equipos o empresas que usan estas plataformas en producción sin conocer sus riesgos no sepan exactamente qué están incorporando. Espero que este artículo ayude a más equipos a mantenerse seguros.
Pero solo soy un desarrollador y este es apenas un artículo. Para lograr un impacto significativo en la seguridad, los animo a probar los proyectos por su cuenta y contribuir con las correcciones. Son comunidades increíbles, que a menudo cuentan con el trabajo de desarrolladores apasionados que quieren crear herramientas para ayudar a personas de todo el mundo, y necesitan tu apoyo.
Empieza con los desafíos de Capture the Flag
Aprende a resolver desafíos de captura la bandera con nuestro taller virtual introductorio a pedido.


