Se identifico una vulnerabilidad en Composer que compromete el repositorio PHP de Packagist
Hace pocos dias se dio a conocer la noticia de que se ha identificado una vulnerabilidad crÃtica en el administrador de dependencias de Composer (CVE-2021-29472) que permite ejecutar comandos arbitrarios en el sistema al procesar un paquete con un valor de URL especialmente formado que determina la dirección para descargar el código fuente.
El problema se manifiesta en los componentes GitDriver, SvnDriver y HgDriver utilizados con los sistemas de control de fuente Git, Subversion y Mercurial. La vulnerabilidad se corrigió en las versiones Composer 1.10.22 y 2.0.13.
En particular, el repositorio de paquetes Packagist predeterminado de Composer, que contiene 306.000 paquetes de desarrollador PHP y ofrece más de 1.400 millones de descargas mensuales, se ve particularmente afectado.
En el ecosistema PHP, Composer es la principal herramienta para administrar e instalar dependencias de software. Los equipos de desarrollo de todo el mundo lo utilizan para facilitar el proceso de actualización y garantizar que las aplicaciones funcionen sin esfuerzo en todos los entornos y versiones.
El experimento mostró que si habÃa información sobre el problema, los atacantes podÃan tomar el control de la infraestructura de Packagist e interceptar las credenciales de los mantenedores o redirigir la descarga de paquetes a un servidor de terceros, organizando la entrega de variantes de paquetes con cambios maliciosos a sustituir una puerta trasera durante la instalación de dependencias.
El peligro para los usuarios finales está limitado por el hecho de que el contenido de composer.json suele estar definido por el usuario y los enlaces a la fuente se pasan al acceder a repositorios de terceros, que suelen ser fiables. El golpe principal recayó sobre el repositorio Packagist.org y el servicio Private Packagist, que llaman a Composer con la transferencia de datos recibidos de los usuarios. Los atacantes podrÃan ejecutar su código en servidores Packagist colocando un paquete especialmente diseñado.
El equipo de Packagist resolvió la vulnerabilidad dentro de las 12 horas posteriores a la notificación de la vulnerabilidad. Los investigadores notificaron en forma privada a los desarrolladores de Packagist el 22 de abril y el problema se solucionó el mismo dÃa. Una actualización pública de Composer con una solución para la vulnerabilidad se publicó el 27 de abril y los detalles se revelaron el 28 de abril. Una auditorÃa de los registros en los servidores de Packagist no reveló ninguna actividad sospechosa asociada con la vulnerabilidad.
Los errores de inyección de argumentos son una clase de errores realmente interesante que a menudo se pasan por alto durante las revisiones de código y se pasan por alto por completo en las interacciones de caja negra
El problema se debe a un error en el código de validación de URL en el archivo raÃz composer.json y en los enlaces de descarga de origen. El error ha estado presente en el código desde noviembre de 2011. Packagist usa capas especiales para administrar las descargas de código sin estar vinculado a un sistema de control de fuente especÃfico, que se ejecuta llamando a «fromShellCommandline» con argumentos de lÃnea de comando.
El meollo del problema es que el método ProcessExecutor permitió especificar cualquier parámetro de llamada adicional en la URL. Tal escape faltaba en los controladores GitDriver.php, SvnDriver.php y HgDriver.php. El ataque GitDriver.php se vio obstaculizado por el hecho de que el comando «git ls-remote» no admitÃa la especificación de argumentos adicionales después de la ruta.
Un ataque a HgDriver.php resultó posible pasando el parámetro «–config» a la utilidad «hq», que permite organizar la ejecución de cualquier comando manipulando la configuración «alias.identify».
Al enviar un paquete de prueba con una URL similar a Packagist, los investigadores se aseguraron de que después de ser publicado, su servidor recibiera una solicitud HTTP de uno de los servidores de Packagist en AWS que contenÃa una lista de los archivos en el directorio actual.
Cabe señalar que los mantenedores no identificaron ningún signo de explotación previa de esta vulnerabilidad en la instancia pública del packagist.
Finalmente si estás interesado en conocer más al respecto, puedes consultar los detalles en el siguiente enlace.