
Preuve de concept pour CVE-2026-84361, démontrant une injection de commande dans le pilote Perforce de Composer via un P4PORT malveillant, avec vérification basée sur Docker et recommandations d'atténuation.
Avec Docker Compose, vous pouvez valider dans un environnement isolé contenant Composer 2.10.2 affecté et le client Perforce p4. Le conteneur d'exécution est en réseau désactivé, en lecture seule, avec toutes les capabilities supprimées, et seuls les tmpfs /tmp et /work sont inscriptibles.
# Construire l'image (p4 est récupéré depuis la distribution officielle et vérifié par SHA-256)
docker compose build
# Valider directement le comportement rsh: de p4 (par défaut)
docker compose run --rm poc
# Valider via Composer vulnérable
docker compose run --rm poc /usr/local/bin/run-composer-poc.sh
La dernière commande exécute composer update --prefer-source dans un espace de travail temporaire du conteneur. Comme une commande marqueur non serveur Perforce est utilisée, Composer lui-même peut échouer, mais si le marqueur est créé, s'affiche et le processus se termine normalement.
[+] VULNERABLEIl s'agit d'un PoC de validation locale pour CVE-2026-84361, présente dans le pilote VCS Perforce de Composer. Lorsque le source.type d'un paquet est perforce, le Composer affecté transmet le source.url contrôlé par l'attaquant comme P4PORT du client p4.
p4 traite les P4PORT rsh: / jsh: comme des commandes locales et non comme des destinations réseau. Par conséquent, l'installation depuis la source de métadonnées de paquets non fiables ou d'un composer.lock exécute des commandes avec les privilèges de l'utilisateur exécutant Composer ou du compte CI.
La charge utile de ce PoC crée simplement un fichier marqueur vide dans une zone temporaire.
Découvreur : saku0512 (GitHub)
À utiliser uniquement à des fins éducatives et pour des validations de sécurité dans des environnements explicitement autorisés. Ne l'exécutez pas sur les systèmes ou environnements CI d'autrui sans autorisation.
>= 1.0, < 2.2.30 et >= 2.3.0, < 2.10.3Pour que l'exploitation réussisse, toutes les conditions suivantes sont requises : p4 doit être dans le PATH, l'attaquant doit pouvoir contrôler les métadonnées de source Perforce, et le paquet cible doit être installé depuis la source. Packagist.org n'autorise pas les métadonnées de source Perforce, donc une utilisation exclusivement via Packagist n'est pas affectée.
p4php -v
p4 -V
Par défaut, p4 n'est pas lancé ; seuls le P4PORT dangereux et la commande prévue sont affichés.
php poc.php
--execute transmet le P4PORT rsh: à p4. La charge utile crée uniquement un marqueur unique sous sys_get_temp_dir() et effectue le nettoyage par défaut.
php poc.php --execute
Si [+] VULNERABLE s'affiche, cela confirme qu'une commande locale a été exécutée via P4PORT. Ajoutez --keep-marker pour conserver le marqueur.
Le composer.json fourni est un exemple minimal de dépôt de paquets inline distribué par un attaquant. Exécutez ce qui suit avec un Composer non corrigé et p4 dans un environnement isolé.
composer update --prefer-source
La version corrigée rejette source.url comme port Perforce invalide avant de lancer p4.
Mettez à jour Composer vers 2.2.30 ou 2.10.3 ou une version ultérieure. Utilisez uniquement des dépôts et fichiers de verrouillage fiables, et retirez p4 du PATH dans les environnements qui n'utilisent pas Perforce.