El gestor de dependencias que se pasó de la raya: cómo Composer casi abrió las puertas a los hackers

El gestor de dependencias que se pasó de la raya: cómo Composer casi abrió las puertas a los hackers

El golpe llegó desde el flanco que siempre se creyó inexpugnable.

image

Los desarrolladores de Composer publicaron una actualización que corrige dos vulnerabilidades que podrían permitir la ejecución de comandos arbitrarios en la máquina del usuario. El problema es notable porque el riesgo afectaba no solo a quienes usan Perforce, sino también a instalaciones habituales de Composer en las que Perforce ni siquiera se utilizaba.

Composer es un gestor de dependencias para PHP que ayuda a incluir bibliotecas de terceros, actualizar paquetes y ensamblar el proyecto con las versiones necesarias de los componentes. La herramienta se utiliza ampliamente tanto en aplicaciones web pequeñas como en servicios de gran escala, por lo que cualquier problema en Composer rápidamente trasciende una sola ecosistema y afecta a numerosos desarrolladores y empresas.

En las versiones de Composer 2.9.6 y 2.2.27 LTS se corrigieron las fallas identificadas como CVE-2026-40261 y CVE-2026-40176. El anuncio lo hizo Nils Adermann. Según los desarrolladores, no detectaron indicios de explotación de ambas vulnerabilidades antes de la publicación del aviso.

Ambas fallas estaban en el controlador Perforce VCS y estaban relacionadas con el manejo incorrecto de valores al construir comandos de shell. CVE-2026-40176 afectaba al método generateP4Command(). A través de parámetros de conexión manipulados, como el puerto, el usuario o el cliente, un atacante podía incrustar sus propios comandos en un composer.json malicioso. La vulnerabilidad se activaba incluso en sistemas sin Perforce instalado. El informe lo presentó saku0512.

La segunda, CVE-2026-40261, afectaba al método syncCodeBase(). Se podía inyectar código malicioso mediante un enlace preparado a las fuentes o source reference que incluyera caracteres especiales de la shell. En ese caso, el ataque era posible a través de los metadatos del paquete que distribuye un repositorio de Composer. Para la explotación bastaba instalar o actualizar una dependencia desde una fuente no confiable en el modo prefer-source, que se aplica por defecto a las versiones de desarrollo (dev). El informe lo presentó Koda Reef.

Los desarrolladores aclararon que el primer fallo no permitía atacar a través del composer.json de las dependencias y requería ejecutar comandos en un directorio con un composer.json raíz no confiable o mediante un archivo de configuración de Composer. La segunda vulnerabilidad parecía más peligrosa, ya que podía activarse a través de un repositorio de paquetes malicioso o comprometido.

La verificación de Packagist.org y Private Packagist no detectó paquetes con signos de intentos de explotación. Además, la publicación de metadatos de Perforce en Packagist.org se desactivó el 10 de abril de 2026. En Private Packagist el controlador Perforce también se desactivó en la misma fecha. A los clientes de Private Packagist Self-Hosted se les prometió una versión separada con instrucciones para comprobar los metadatos locales.

Los desarrolladores recomiendan actualizar Composer lo antes posible. Como medida temporal para protegerse de CVE-2026-40261 se puede evitar la instalación de dependencias desde el origen y usar solo repositorios de confianza. Para reducir el riesgo de CVE-2026-40176, el equipo recomienda revisar cuidadosamente el composer.json antes de ejecutar comandos de Composer en proyectos de terceros.