LA VULNERABILIDAD DE PACKAGIST PODRÍA AFECTAR A MILLONES DE APLICACIONES PHP DE CÓDIGO ABIERTO Y DE PAGO

La compañía de seguridad de código SonarSource publicó hoy detalles sobre una vulnerabilidad grave que afecta a Packagist, que podría haber sido objeto de abuso para montar ataques a la cadena de suministro dirigidos a la comunidad de PHP.

Packagist es el repositorio predeterminado para Composer, el administrador de dependencias de PHP, que agrega paquetes PHP públicos que se pueden instalar con Composer. Cada mes, Composer se usa para descargar más de 2 mil millones de paquetes.

Según los investigadores de seguridad de Sonar, la vulnerabilidad recientemente identificada podría haberse utilizado para secuestrar más de 100 millones de solicitudes para distribuir dependencias maliciosas , lo que podría comprometer millones de servidores.

“Dado que Composer es el administrador de paquetes estándar para PHP, la mayoría de los proyectos PHP comerciales y de código abierto se habrían visto afectados”, dice Sonar.

Rastreada como CVE-2022-24828, la vulnerabilidad se describe como una de inyección de comandos que podría permitir que un atacante controle la entrada que se interpreta como parámetros para los comandos ejecutados por Composer.

“El método Composer VcsDriver::getFileContent() con argumentos $file o $identifier controlados por el usuario es susceptible a una vulnerabilidad de inyección de argumentos. Se puede aprovechar para obtener la ejecución arbitraria de comandos si se utilizan los controladores Mercurial o Git”, explican los mantenedores de Composer .

La vulnerabilidad era similar a CVE-2021-29472, una vulnerabilidad de inyección de comandos identificado el año pasado, que afectaba la implementación de las subclases del controlador del sistema de control de versiones (VcsDriver), que Composer invoca como comandos externos.

Debido a esta vulnerabilidad, un usuario que controle un repositorio de Git o Mercurial podría apuntar a Packagist.org y Private Packagist al inyectar parámetros en el argumento $file (lo que afecta al controlador Mercurial) o el argumento $identifier (con impacto en los controladores Git y Mercurial) .

“Composer en sí mismo puede ser atacado a través de nombres de sucursales por cualquier persona que controle un repositorio de Git o Mercurial, que se enumera explícitamente por URL en el composer.json de un proyecto”, señalan los mantenedores de Composer.

Según Sonar, un atacante que busca explotar la vulnerabilidad necesitaría crear un proyecto en un repositorio remoto de Mercurial, agregar un manifiesto a  composer.json  y crear una entrada ‘readme’ maliciosa, crear una carga útil .sh para realizar una acción deseada, y luego importe el paquete a Packagist.

“El siguiente paso sería modificar la definición de un paquete para apuntar a un destino no deseado y comprometer la aplicación en la que se utilizan”, explica Sonar.

La vulnerabilidad se informó a los mantenedores de Packagist el 7 de abril y se lanzó un parche al día siguiente. La vulnerabilidad se solucionó con el lanzamiento de las versiones 2.3.5, 2.2.12 y 1.10.26 de Composer, y no se encontraron pruebas de explotación en estado salvaje.