Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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-42089 — Un assistant local d'installation de paquets faisait trop confiance aux noms de paquets fournis par l'appelant. Dans yeoman-environment, des generators manquants pouvaient être installés sans confirmation de l'utilisateur, transformant des métadonnées de projet contrôlées par l'attaquant en une voie d'installation de paquets et d'exécution de code. | Kitploit
Outils/GitHubGitHub/0xmrma/cve-2026-42089
Analyse des VulnérabilitésAnalyse de CodeExploitationSécurité de la Chaîne LogistiqueArticles et RechercheApprentissage et Éducation
GitHub0xmrma/cve-2026-42089

CVE-2026-42089

Voir le dépôt
2il y a 2 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 →

À propos

Un assistant local d'installation de paquets faisait trop confiance aux noms de paquets fournis par l'appelant. Dans yeoman-environment, des generators manquants pouvaient être installés sans confirmation de l'utilisateur, transformant des métadonnées de projet contrôlées par l'attaquant en une voie d'installation de paquets et d'exécution de code.

Partager

CVE-2026-42089

Un assistant d'installation de paquets local faisait trop confiance aux noms de paquets fournis par l'appelant. Dans yeoman-environment, les générateurs manquants pouvaient être installés sans confirmation de l'utilisateur, transformant des métadonnées de projet contrôlées par un attaquant en un vecteur d'installation de paquets et d'exécution de code.

Introduction

J'ai découvert ce problème en examinant generator-jhipster avec une simple question de sécurité en tête :

Des métadonnées de projet contrôlées par un attaquant peuvent-elles amener un outil de développement à récupérer et exécuter du code tiers avant que l'utilisateur ne l'ait explicitement demandé ?

Dans ce cas, la réponse était oui.

Ce qui ressemblait initialement à un problème JHipster s'est avéré avoir une cause racine plus profonde dans yeoman-environment.

Le comportement vulnérable se trouvait dans le flux d'installation locale de générateurs de Yeoman, où les paquets manquants fournis par l'appelant étaient installés automatiquement sans confirmation de l'utilisateur. Dans un consommateur aval qui transmettait des noms de paquets contrôlés par l'attaquant dans ce chemin, cela suffisait à créer une véritable chaîne d'installation de paquets et d'exécution de code.

Ce problème a donné lieu à CVE-2026-42089.

yeoman-environment : yeoman-environment sur GitHub
Paquet : yeoman-environment (npm)
CVE : CVE-2026-42089

Cela affectait yeoman-environment, la couche d'exécution derrière le flux de chargement et d'amorçage des générateurs de Yeoman. Le projet officiel le décrit comme le composant qui gère le cycle de vie et la découverte des générateurs, et au , la page du paquet npm indiquait , ce qui en fait un paquet largement déployé dans l'écosystème des outils JavaScript.

26 juin 2026
1 466 426 téléchargements hebdomadaires
photo0

Chaîne d'attaque

configuration de projet contrôlée par l'attaquant -> noms de paquets de générateurs fournis par l'appelant -> yeoman-environment installe silencieusement les paquets manquants -> l'outil aval charge le code du générateur installé -> installation de paquets et exécution de code pendant l'amorçage de l'interface en ligne de commande


Ce que fait yeoman-environment

yeoman-environment est la couche d'exécution et de chargement des générateurs derrière les outils basés sur Yeoman.

Entre autres choses, il gère :

  • la recherche de générateurs
  • la gestion du dépôt local
  • l'installation de paquets pour les générateurs manquants
  • l'enregistrement et le chargement des générateurs

Cela signifie qu'il se trouve directement sur une frontière de confiance.

La question pertinente n'est pas de savoir si Yeoman est « simplement un outil local ».

La question pertinente est de savoir si une entrée non fiable peut influencer le comportement d'installation de paquets et de chargement de code.

Dans ce cas, c'était possible.


Pourquoi cette surface méritait d'être examinée

Je ne recherchais pas ici des corruption de mémoire ou des bogues de simple plantage.

La cible la plus pertinente était la surface d'extension et de résolution de paquets.

Tout système qui :

  • accepte des noms de paquets d'une autre couche,
  • les installe automatiquement,
  • puis les rend disponibles au chargement

mérite un examen attentif.

C'est particulièrement vrai lorsque le consommateur aval peut dériver ces noms de paquets à partir de données locales au projet.

C'est exactement le genre d'endroit où une configuration ordinaire peut silencieusement devenir une frontière de sécurité.

C'était le bon endroit pour chercher.


La frontière sur laquelle je me suis concentré

J'ai d'abord reproduit le comportement via generator-jhipster.

Le chemin important était :

  • un fichier .yo-rc.json local au projet déclare un paquet de blueprint
  • JHipster lit cette entrée de blueprint pendant l'amorçage de l'interface en ligne de commande
  • les paquets de blueprint manquants sont transmis dans le chemin d'installation de Yeoman
  • Yeoman les installe silencieusement
  • la logique aval importe ensuite les modules de l'interface en ligne de commande du blueprint

Cela signifiait que même une commande anodine telle que :

root@kitploit:~
jhipster --help

pouvait atteindre l'installation de paquets avant la fin de la commande demandée.

C'est une véritable défaillance de la frontière de confiance.

Le déclencheur aval a aidé à l'exposer, mais le comportement par défaut dangereux se trouvait dans Yeoman.


Cause racine

Le bogue était simple.

Dans yeoman-environment, la méthode vulnérable était :

root@kitploit:~
async installLocalGenerators(packages) {
    const entries = Object.entries(packages);
    const specs = entries.map(([packageName, version]) => `${packageName}${version ? `@${version}` : ''}`);
    const installResult = await this.repository.install(specs);
    const failToInstall = installResult.find(result => !result.path);
    if (failToInstall) {
        throw new Error(`Fail to install ${failToInstall.pkgid}`);
    }
    await this.lookup({ packagePaths: installResult.map(result => result.path) });
    return true;
}

Cette méthode installait directement les noms de paquets fournis par l'appelant via :

root@kitploit:~
this.repository.install(specs)

sans demander d'abord confirmation à l'utilisateur.

C'est la vulnérabilité principale.

Pourquoi c'est exploitable

Parce que les noms de paquets n'ont pas besoin de provenir d'une source fiable.

Si un consommateur aval les dérive à partir de métadonnées de projet contrôlées par l'attaquant, alors la chaîne d'exploitation est simple :

  • l'attaquant contrôle indirectement les noms de paquets
  • l'outil aval les transmet à Yeoman
  • Yeoman les installe silencieusement
  • le code aval continue avec le paquet nouvellement installé disponible pour le chargement

Ce n'est pas seulement « l'installation de paquet a eu lieu ».

C'est une entrée non fiable qui franchit un puits d'installation de paquets sans frontière de consentement explicite.


Ce qui en fait un problème de sécurité, pas seulement un comportement d'outil

La distinction importante est l'installation silencieuse à partir d'une entrée non fiable.

Il y a une vraie différence entre :

  • un utilisateur décidant explicitement d'installer un paquet, et
  • un framework installant silencieusement un paquet parce que des données locales au projet ont amené un appelant à le demander

Cette distinction compte encore plus lorsque le paquet devient chargeable immédiatement après.

Le problème n'était pas que des générateurs tiers existent.

Le problème était que Yeoman traitait les noms de paquets fournis par l'appelant comme installables par défaut, sans confirmation de l'utilisateur.

Cela rend les hypothèses de confiance aval dangereuses matériellement pires.

C'est exactement pourquoi le correctif a ajouté une porte de confirmation.


Preuve de concept (PoC)

J'ai utilisé deux niveaux de preuve car ils démontraient à la fois la cause racine et l'impact réel aval.

PoC 1 : déclencheur aval standard

La première preuve utilisait generator-jhipster non modifié.

J'ai créé un projet avec un fichier .yo-rc.json racine qui référençait un paquet de blueprint non encore installé, puis j'ai exécuté :

root@kitploit:~
jhipster --help

Cela a amené JHipster à transmettre le blueprint manquant dans le flux d'installation locale de générateurs de Yeoman avant la fin de l'aide.

Le résultat important était :

  • une commande anodine atteignait la résolution de paquets et le comportement d'installation
  • les métadonnées locales au projet suffisaient à déclencher le chemin d'installation

Cela a clairement établi la condition de déclenchement réelle.

PoC 2 : chemin d'exécution de paquets contrôlé

La deuxième preuve utilisait un registre local contrôlé et un paquet conçu pour démontrer en toute sécurité les effets secondaires au moment de l'importation.

C'était important car je voulais montrer l'histoire plus forte :

  • les métadonnées locales au projet influencent la sélection du paquet
  • Yeoman installe le paquet silencieusement
  • la logique aval charge les modules de l'interface en ligne de commande du blueprint installé
  • l'exécution de code devient accessible pendant l'amorçage

C'était la chaîne de preuve la plus solide car elle faisait passer le problème de :

« tentative d'installation inattendue »

à :

« l'installation plus le chemin de chargement de code aval est effectivement accessible »

C'est le point où la défaillance de la frontière de confiance devient beaucoup plus difficile à écarter.


Pourquoi les PoC ont été choisis de cette façon

La première PoC prouve le comportement d'installation silencieuse.

La deuxième PoC prouve pourquoi ce comportement est important.

Cette séparation était importante.

Un rapport qui s'arrête à :

« un paquet peut être installé »

est plus faible qu'un rapport qui montre :

  • l'entrée contrôlée par l'attaquant atteint le chemin d'installation
  • l'installation a lieu sans confirmation
  • la logique aval rend l'exécution de code accessible

C'est l'histoire complète.


Plage affectée

Lors du traitement de l'avis et de l'examen local, le comportement a été retracé jusqu'à l'introduction de installLocalGenerators() dans :

root@kitploit:~
yeoman-environment 2.9.0

La plage affectée était donc :

root@kitploit:~
>= 2.9.0 et < 6.0.1

La version corrigée était :

root@kitploit:~
6.0.1

Analyse du correctif

Le correctif était correct et minimal.

Dans la version 6.0.1, installLocalGenerators() a été modifié pour ajouter une étape de confirmation avant l'installation, sauf si l'installation forcée est explicitement demandée.

La forme corrigée ressemblait à ceci :

root@kitploit:~
async installLocalGenerators(packages, forceInstall = false) {

puis :

root@kitploit:~
const { aproveInstall } = await this.adapter.prompt({
    message: `Les paquets suivants doivent être installés dans le dépôt local : ${specs.join(', ')}. Voulez-vous continuer ?`,
    type: 'confirm',
    name: 'aproveInstall',
    default: false,
});

Si l'utilisateur refuse, l'installation est abandonnée.

C'est le bon correctif car il rétablit la frontière de confiance manquante :

  • les noms de paquets fournis par l'appelant ne sont plus installés silencieusement par défaut
  • une approbation explicite de l'utilisateur est requise
  • les outils aval ne peuvent plus compter sur une confiance implicite accidentelle

Ce correctif a été intégré dans :

root@kitploit:~
78d2af7

via :

root@kitploit:~
PR #753

C'est exactement le genre de remédiation que l'on souhaite pour un problème de sécurité comme celui-ci :

  • petit
  • direct
  • facile à raisonner
  • lié au puits vulnérable lui-même

Gravité et classification

Ce problème a été pris raisonnablement au sérieux car l'impact est plus que cosmétique ou surprenant.

Le comportement vulnérable peut entraîner :

  • l'installation d'un paquet choisi par l'attaquant
  • un accès réseau à l'infrastructure de paquets à partir de chemins de commandes anodins
  • l'accessibilité du chargement de code aval
  • la compromission de l'environnement de développement chez les consommateurs affectés

Le vecteur CVSS associé au problème était :

root@kitploit:~
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Cela a du sens pour l'histoire d'exploitation aval :

  • contexte d'exécution local
  • faible complexité
  • aucun privilège préalable requis
  • interaction utilisateur requise
  • impact fort sur la confidentialité, l'intégrité et la disponibilité une fois le chemin d'exécution du paquet atteint

Divulgation

Ce problème a commencé comme un rapport privé contre generator-jhipster, car c'était le chemin de déclenchement réel que j'avais initialement validé.

Lors du triage, les mainteneurs de JHipster ont souligné que le comportement d'auto-installation se trouvait dans yeoman-environment et ont référencé le correctif amont.

Cela a conduit au pivot correct :

  • réduire la cause racine à Yeoman
  • traiter JHipster comme un consommateur aval affecté
  • signaler le problème amont en privé

Les mainteneurs de Yeoman ont examiné le problème, confirmé la plage affectée et l'ont suivi via un avis privé.

Le rapport a ensuite été attribué :

CVE-2026-42089

Cet avis documentait également le chemin de déclenchement aval réel via generator-jhipster.

C'était un bon exemple de pourquoi la divulgation coordonnée nécessite parfois une étape supplémentaire :

  • d'abord identifier le déclencheur pratique
  • puis identifier la véritable frontière de propriété

Ici, la reproduction aval était utile, mais le paquet amont était le bon endroit pour le CVE.


Ce que ce bogue enseigne réellement

La leçon clé ici est simple :

l'installation de paquets est une frontière de sécurité, même dans les outils de développement locaux

Beaucoup de gens minimisent instinctivement ce genre de problèmes parce qu'ils se produisent dans des outils en ligne de commande.

C'est une erreur.

La vraie question n'est pas de savoir si l'outil est local.

La vraie question est :

Une entrée non fiable peut-elle amener l'outil à récupérer et à faire confiance à du code sans une décision explicite de l'utilisateur ?

Dans ce cas, oui.

C'est la véritable leçon à retenir.

Ce problème renforce également quelque chose d'important dans la bonne recherche de vulnérabilités :

  • le premier produit sur lequel vous reproduisez n'est pas toujours le véritable propriétaire de la cause racine
  • les PoC avals sont souvent ce qui rend le risque évident
  • les erreurs de frontière de confiance amont sont l'endroit où le correctif réel doit être appliqué

C'était exactement la forme de ce CVE.


Points clés

  • les assistants d'installation de paquets sont des frontières de sécurité
  • les noms de paquets fournis par l'appelant ne doivent pas être installés silencieusement par défaut
  • les métadonnées de projet locales peuvent devenir dangereuses lorsqu'elles influencent le chargement d'extensions
  • la reproduction aval dans generator-jhipster a clairement exposé le problème
  • la cause racine appartenait toujours à yeoman-environment
  • l'ajout d'une porte de confirmation explicite était le correctif approprié

Derniers mots

Cette vulnérabilité ne concernait pas une charge utile flashy.

Elle concernait le fait de poser la bonne question sur la frontière de confiance.

Un outil aval a permis à des données locales au projet d'influencer la sélection de paquets. Yeoman a installé le paquet manquant sans confirmation. Le reste de la chaîne de chargement de code a fait le reste.

C'est pourquoi cela est devenu CVE-2026-42089.

Corrigé dans yeoman-environment 6.0.1.

Télécharger l’outil