Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-40176 — Preuve de concept différentielle pour CVE-2026-40176, démontrant une injection de commande OS dans le pilote Perforce de Composer via une URL de dépôt malveillante, avec des tests A/B automatisés contre les versions affectées et corrigées. | Kitploit
Outils/GitHubGitHub/ikarolaborda/cve-2026-40176
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionCommandement et ContrôleApprentissage et Éducation
GitHubikarolaborda/cve-2026-40176

CVE-2026-40176

Preuve de concept différentielle pour CVE-2026-40176, démontrant une injection de commande OS dans le pilote Perforce de Composer via une URL de dépôt malveillante, avec des tests A/B automatisés contre les versions affectées et corrigées.

Voir le dépôt
13il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-40176 — Injection de commande dans le pilote Perforce de Composer (Preuve de concept)

Une preuve de concept autonome, orientée objet en PHP, qui démontre et vérifie différentiellement une vulnérabilité d'injection de commande dans le pilote de dépôt Perforce de Composer.

Le PoC exécute le même composer.json malveillant avec deux binaires Composer — une version affectée (2.9.5) et une version corrigée (2.9.6) — et prouve le bogue en observant un effet secondaire (un fichier marqueur écrit par une commande shell injectée) qui se déclenche sur la version affectée mais pas sur la version corrigée.

⚠️ Pour la recherche en sécurité autorisée et les tests défensifs uniquement. Voir Utilisation responsable.


Table des matières

  • Résumé
  • La vulnérabilité
  • Comment fonctionne le PoC
  • La charge utile d’injection expliquée
  • Prérequis
  • Configuration
  • Utilisation
  • Sortie attendue
  • Interprétation du résultat
  • Structure du projet
  • Notes de conception
  • Limitations et problèmes connus
  • Utilisation responsable
  • Références

Résumé

CVECVE-2026-40176
ComposantComposer — pilote de dépôt/VCS Perforce (perforce)
ClasseInjection de commande OS via une URL de dépôt contrôlée par l'attaquant
Surface d'attaqueUn composer.json contenant une entrée repositories de type perforce malveillante
Version affectéeComposer 2.9.5
Version corrigéeComposer 2.9.6
DéclencheurRésolution/mise à jour des dépendances (composer update) sur le manifeste malveillant
ImpactExécution de commande arbitraire sur la machine exécutant Composer
Langage du PoCPHP (fichier unique, sans dépendances externes)

La vulnérabilité

Composer peut résoudre des paquets depuis plusieurs systèmes de gestion de versions. Pour Perforce, le dépôt est identifié par une URL p4:// qui encode l'hôte, le port et l'utilisateur/flux. Lorsque le pilote Perforce de Composer construit la ligne de commande p4 sous-jacente, les champs extraits de l'URL contrôlée par l'attaquant ne sont pas suffisamment assainis avant d'être transmis à un shell.

Comme l'auteur du manifeste contrôle totalement l'URL du dépôt, un attaquant qui parvient à faire exécuter composer update/composer install à une victime sur un composer.json malveillant (par exemple, une dépendance empoisonnée, un dépôt hostile, ou un job CI traitant des fichiers de projet non fiables) peut s'échapper de l'invocation prévue de p4 et exécuter des commandes OS arbitraires avec les privilèges du processus Composer.

Cette vulnérabilité appartient à la même famille que les problèmes historiques d'injection d'arguments dans les pilotes VCS de Composer, où les valeurs d'URL/branche/flux sont transmises à des commandes shell sans échappement. Composer 2.9.6 durcit le pilote Perforce afin que la charge utile injectée ne s'exécute plus.

La description faisant autorité du comportement démontré ici est le code source du PoC lui-même (CVE202640176Test.php) ; consultez l'avis officiel et le journal des modifications de Composer pour les détails du correctif en amont.


Comment fonctionne le PoC

Le PoC est une classe unique, CVE202640176Test, qui réalise une expérience A/B (différentielle) contrôlée :

  1. Vérification préalable — interroge --version sur les deux binaires Composer, affecté (2.9.5) et corrigé (2.9.6), et abandonne prématurément si l'un d'eux ne peut pas être invoqué.
  2. Exécution affectée (2.9.5)
    • Crée un répertoire temporaire isolé sous le chemin temporaire système.
    • Écrit un composer.json dont la section repositories contient une entrée perforce avec une URL p4:// malveillante portant une charge utile shell injectée.
    • Exécute composer update dans ce répertoire.
    • Valide le résultat.
  3. Exécution corrigée (2.9.6) — répète exactement les mêmes étapes avec le binaire corrigé.
  4. Restauration — un bloc finally restaure toujours le composer.json original dans le répertoire du projet.
  5. Verdict — affiche PASS uniquement lorsque l'exécution affectée montre l'effet secondaire et que l'exécution corrigée ne le montre pas.

Validation (ce qui compte comme "exploité")

Pour chaque exécution, validateRun() vérifie trois choses :

VérificationCe qu'elle prouve
Le fichier marqueur existe et contient l'ID de l'exécutionLa charge utile injectée touch/echo a réellement été exécutée — l'injection de commande a réussi.
La sortie de Composer mentionne p4Le chemin de code du pilote Perforce a été atteint (la charge utile a été traitée par le bon composant, pas par une étape non liée).
La version de Composer analysée correspond à l'attenduLe bon binaire (2.9.5 ou 2.9.6) est celui qui a été exécuté.

Une exécution est "OK" uniquement si les trois conditions sont remplies. Le test global réussit lorsque l'exécution affectée est OK et que l'exécution corrigée ne l'est pas — la signature précise d'une véritable vulnérabilité qui a ensuite été corrigée.


La charge utile d’injection (expliquée)

L'URL de dépôt malveillante est construite dans writeComposerJson() :

p4://127.0.0.1:1666:attacker_user;touch <marqueur> && echo '<runId>' > <marqueur>:client_test

En détail :

  • p4://127.0.0.1:1666:attacker_user — une URL Perforce d'apparence bien formée (hôte, port 1666, utilisateur).
  • ;touch <marqueur> && echo '<runId>' > <marqueur> — les commandes shell injectées. Le ; initial termine la commande p4 prévue ; touch crée le fichier marqueur, et echo '<runId>' > <marqueur> écrit l'ID d'exécution unique dedans afin que le PoC puisse confirmer que la charge utile (et non un processus non lié) a produit le fichier.
  • :client_test — texte de fin pour que le reste du parsing de l'URL reste plausible.

Sur le pilote affecté, les métacaractères shell sont honorés et le fichier marqueur est créé. Sur le pilote corrigé, la valeur est correctement échappée/encadrée, donc la même chaîne est traitée comme des données inertes et aucun marqueur n'apparaît.

Remarque : le PoC utilise un ID d'exécution unique horodaté et écrit son marqueur dans un répertoire temporaire isolé, de sorte que la charge utile est bénigne et auto-nettoyante plutôt que destructive.


Prérequis

  • PHP 7.4+ (développé/testé avec PHP 8.x CLI). Le PoC lui-même n'utilise que des fonctions de base — aucun paquet Composer nécessaire pour exécuter le harnais.
  • Deux binaires Composer disponibles sous forme de PHAR :
    • Composer 2.9.5 (affecté)
    • Composer 2.9.6 (corrigé)
  • Un environnement shell de type POSIX (exec() exécute cd … && php …). Conçu pour Linux/macOS.
  • Un composer.json de base dans le répertoire du projet (il est lu au démarrage, copié dans chaque exécution temporaire et restauré ensuite).

Vous n'avez généralement pas besoin d'un serveur Perforce en activité : la vulnérabilité réside dans la façon dont Composer construit la ligne de commande p4, et la charge utile injectée s'exécute avant/autour de toute connexion p4 réelle. Composer peut journaliser une erreur de connexion Perforce — c'est attendu et cela n'affecte pas la preuve par fichier marqueur.


Configuration

  1. Clonez / placez le PoC dans un répertoire de travail.

  2. Fournissez un composer.json dans le même répertoire que le PoC. Un minimal suffit :

Télécharger l’outil