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
tanstack-compromise-checker — Script shell pour détecter les indicateurs d'attaque de la chaîne d'approvisionnement npm TanStack (CVE-2026-45321 / GHSA-g7cv-rxg3-hmpx) | Kitploit
Outils/GitHubGitHub/fabriziosalmi/tanstack-compromise-checker
Gestion des Indicateurs de Compromission (IOC)Scanners de VulnérabilitésSécurité des ConteneursAnalyse ForensiqueAnalyse de MalwareDevSecOpsDétection de SecretsRenseignement sur les MenacesSécurité de la Chaîne Logistique

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 →
Réponse aux Incidents
GitHubfabriziosalmi/tanstack-compromise-checker

tanstack-compromise-checker

Script shell pour détecter les indicateurs d'attaque de la chaîne d'approvisionnement npm TanStack (CVE-2026-45321 / GHSA-g7cv-rxg3-hmpx)

Voir le dépôt
215il y a 4 joursPas encore vérifié
Partager

tanstack-compromise-checker

Détectez les indicateurs de l'attaque sur la chaîne d'approvisionnement npm de TanStack sur une machine de développeur, un dépôt ou un runner CI. Script Bash, image Docker et action GitHub — même moteur, trois points d'entrée.

CVE-2026-45321 / GHSA-g7cv-rxg3-hmpx

Le 11 mai 2026, des attaquants ont publié 84 versions malveillantes dans 42 paquets @tanstack/* via un empoisonnement du cache des actions GitHub. La charge utile vole les jetons GitHub, les jetons npm, les identifiants AWS/GCP/Azure, et installe un démon de commutateur à action différée (dead-man's switch) qui efface ~/ dès que le jeton volé est révoqué.

Démarrage rapide

Choisissez le point d'entrée qui correspond à votre environnement.

macOS / Linux / WSL2 / Git Bash

root@kitploit:~
TAG=v1.0.0
curl -fsSLO https://github.com/fabriziosalmi/tanstack-compromise-checker/releases/download/$TAG/check.sh
curl -fsSLO https://github.com/fabriziosalmi/tanstack-compromise-checker/releases/download/$TAG/check.sh.sha256
sha256sum -c check.sh.sha256
bash check.sh --online

Docker — fonctionne sur tous les OS supportant Docker (y compris Windows)

root@kitploit:~
docker run --rm -v "$PWD":/scan \
  ghcr.io/fabriziosalmi/tanstack-compromise-checker:v1.0.0 \
  /scan true fail tanstack-findings.json '' GHSA-g7cv-rxg3-hmpx

L'image est multi-architecture (linux/amd64, linux/arm64) et est livrée avec une provenance de construction signée via GitHub OIDC. Vérifiez avant d'exécuter :

root@kitploit:~
gh attestation verify \
  oci://ghcr.io/fabriziosalmi/tanstack-compromise-checker:v1.0.0 \
  --repo fabriziosalmi/tanstack-compromise-checker

GitHub Action — bloquer les dépendances compromises en CI

root@kitploit:~
permissions: {}

jobs:
  check:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6
        with:
          persist-credentials: false
      - uses: fabriziosalmi/tanstack-compromise-checker@v1
        with:
          scan-dir: .
          online: 'true'
          fail-on: fail

Un workflow complet durci se trouve dans .github/workflows/tanstack-check.yml et c'est le même workflow que ce dépôt utilise contre lui-même.

Ce que le script vérifie

#VérificationDescription
1Commutateur à action différée~/.local/bin/gh-token-monitor.sh, LaunchAgents + LaunchDaemons (macOS), unités systemd utilisateur + système (Linux), processus en cours d'exécution
2Persistancefichiers rc du shell, crontab utilisateur/système, /etc/cron.*, démarrage automatique XDG, core.hooksPath git global
3Identifiantsvariables d'environnement sensibles, ~/.npmrc, ~/.yarnrc.yml, ~/.aws/credentials, ~/.config/gh/hosts.yml, ~/.netrc, ~/.docker/config.json, ~/.kube/config, énumération des fichiers .env*
4IOC réseauprocessus node en cours d'exécution avec des connexions TCP sortantes établies (heuristique, vérification manuelle)
5Analyse du dépôtdépendances déclarées dans package.json + versions épinglées dans le fichier de verrouillage (package-lock.json, yarn.lock, pnpm-lock.yaml)
6Installénode_modules/@tanstack/*/package.json vérifié par rapport à la liste des versions malveillantes connues, puis par rapport au registre npm time[<version>] avec --online
7Indices Actions.github/workflows/* scanné pour pull_request_target, --ignore-scripts manquant, utilisation de actions/cache
8IOC Mini Shai-Huludfichiers de charge utile dans node_modules (router_init.js, tanstack_runner.js), dépendance optionnelle @tanstack/setup, falsification de configuration d'outil IA, domaines C2 dans le code source, auteur de commit malveillant + motifs de branche, jetons npm marqués pour rançon, paquets secondaires propagés par ver, plus heuristiques de niveau information pour les formes de charge utile inconnues

Avec --online, le script récupère également l'avis GHSA au moment de l'exécution afin que la couverture de détection suive l'état en direct de l'avis au lieu d'une liste codée en dur de versions.

Famille affectée : @tanstack/router, @tanstack/react-router, @tanstack/history, @tanstack/start, @tanstack/eslint-plugin-router et paquets associés.

Familles propres (non affectées) : @tanstack/react-query, @tanstack/react-table, @tanstack/react-virtual, @tanstack/form, @tanstack/store.

Utilisation

root@kitploit:~
# Vérification rapide (répertoire personnel de l'utilisateur actuel)
bash check.sh

# Mode en ligne : interroger l'avis GHSA et l'heure de publication du registre npm
bash check.sh --online

# Scanner un répertoire spécifique
bash check.sh --scan-dir /chemin/vers/vos/depots

# Sortie JSON pour intégration CI/SIEM
bash check.sh --json > findings.json

# Suggérer des commandes d'épinglage pour les dépôts affectés (essai à blanc)
bash check.sh --scan-dir /chemin/vers/depots --fix

# Fournir une liste étendue de versions malveillantes connues
bash check.sh --bad-versions-file ./extra-bad-versions.txt

Toutes les options

OptionDescription
--scan-dir REPERTOIRERépertoire racine à scanner (par défaut : $HOME). Refuse de scanner les répertoires système comme /, /etc, /usr.
--onlineInterroger l'avis GHSA et le time[<version>] du registre npm pour confirmer la compromission. Désactivé par défaut — activable.
--ghsa ID-GHSASurcharger l'identifiant d'avis utilisé avec --online (par défaut GHSA-g7cv-rxg3-hmpx).
--attack-window-start ISO, --attack-window-end ISOSurcharger la fenêtre de publication utilisée avec --online.
--fixAfficher les commandes d'épinglage recommandées pour les dépôts affectés (essai à blanc par défaut).
--applyAvec --fix : activer l'exécution. Actuellement, refuse encore les update aveugles ; l'épinglage manuel est requis.
--yes, -yIgnorer l'invite de confirmation pour --apply.
--jsonÉmettre les résultats au format JSON sur stdout (implique --quiet).
--bad-versions-file FICHIERAjouter des entrées (paquet@version, une par ligne) à la liste des versions malveillantes connues.
--no-colorDésactiver les couleurs ANSI.
--quiet, -qSupprimer la sortie par vérification, n'afficher que le résumé.
-h, --helpAfficher l'aide.

Codes de sortie

CodeSignification
0Propre — aucun indicateur dans le périmètre scanné
1Avertissements uniquement — révision recommandée
2Échecs — indicateurs de compromission présents
3Erreur d'outil/d'utilisation

Posture de sécurité

Ce dépôt se défend contre la même classe d'attaque qu'il détecte. Concrètement :

  • Chaque uses: d'action GitHub est épinglé à un SHA de commit de 40 caractères, pas à un tag flottant.
  • L'image de base Docker est épinglée à un digest de manifeste multi-architecture immuable.
  • Chaque workflow déclare permissions: {} au niveau supérieur ; les jobs n'accordent que ce dont ils ont besoin.
  • actions/checkout est invoquée avec persist-credentials: false afin qu'aucun dépôt git authentifié ne soit laissé dans $GITHUB_WORKSPACE.
  • step-security/harden-runner est la première étape de chaque workflow et surveille le trafic sortant du runner.
  • OpenSSF Scorecard s'exécute chaque semaine et à chaque push sur main ; les résultats sont téléchargés au format SARIF.
  • Chaque version publie une attestation de provenance de construction SLSA pour l'image Docker. N'importe qui peut la vérifier hors ligne avec gh attestation.
  • Chaque version inclut un check.sh.sha256 couvrant tous les artefacts installables.

La politique complète se trouve dans SECURITY.md.

Ne pipez pas curl | bash pour un outil de sécurité, y compris celui-ci. Téléchargez toujours, vérifiez la somme de contrôle, inspectez, puis exécutez.

Exemple de sortie

root@kitploit:~
━━  1 / 8  ARTÉFACTS DU COMMUTATEUR À ACTION DIFFÉRÉE
  ✔  Aucun artéfact de commutateur à action différée trouvé

━━  2 / 8  VECTEURS DE PERSISTANCE
  ✔  Aucun vecteur de persistance détecté

━━  3 / 8  EXPOSITION DE JETONS / IDENTIFIANTS
  ✔  Aucune exposition d'identifiant détectée

━━  4 / 8  INDICATEURS RÉSEAU
  ✔  Aucune connexion TCP node actuellement établie (ou observable)

━━  5 / 8  ANALYSE DU DÉPÔT — package.json + verrous
  ℹ  12 fichiers package.json + 8 fichier(s) de verrou trouvés
  ✔  Aucune famille compromise déclarée dans les package.json
  ✔  Aucun épinglage compromis trouvé dans les fichiers de verrou

━━  6 / 8  node_modules INSTALLÉS — vérification directe des versions
  ✔  Aucun paquet compromis dans les node_modules installés

━━  7 / 8  INDICES DE DURCISSEMENT DES ACTIONS GITHUB
  ✔  Aucun motif risqué d'actions GitHub détecté (dans le périmètre scanné)

━━  8 / 8  CHARGE UTILE MINI SHAI-HULUD + IOC AUXILIAIRES
  ✔  Aucune charge utile / IOC auxiliaire Mini Shai-Hulud détecté

━━  RÉSUMÉ
  Réussis : 8    Avertissements : 0    Échecs : 0
  Périmètre : /Users/alice/dev
  ✔  Aucun indicateur de compromission dans le périmètre : /Users/alice/dev
  Remarque : un résultat propre pour /Users/alice/dev ne certifie pas le reste du système.

Si vous êtes compromis

NE révoquez PAS votre jeton GitHub avant d'arrêter le démon — le commutateur à action différée exécutera rm -rf ~/ dès que le jeton sera révoqué.

  1. Arrêtez d'abord le démon :
    • macOS 14+ : launchctl bootout gui/$UID ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
    • macOS hérité : launchctl unload ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
    • Linux : systemctl --user stop gh-token-monitor && systemctl --user disable gh-token-monitor
  2. Supprimez le script : rm -f ~/.local/bin/gh-token-monitor.sh
  3. Ensuite, révoquez et renouvelez : jeton GitHub, jeton npm, identifiants AWS/GCP/Azure, clés SSH, agent SSH.
  4. Consultez le journal d'audit GitHub : https://github.com/settings/security-log
  5. Inspectez ~/.aws/credentials, ~/.kube/config, ~/.config/gh/hosts.yml, ~/.npmrc.

Dépendances

Le script Bash nécessite :

  • bash 4+
  • jq (recommandé) — analyse de package-lock.json
  • python3 (solution de secours optionnelle) — utilisé en l'absence de jq
  • curl — requis pour --online
  • lsof ou ss (optionnel) — heuristique IOC réseau

L'image Docker intègre tous les éléments ci-dessus. Utilisez-la sur les systèmes où vous ne pouvez pas ou ne voulez pas installer ces outils.

Contribuer

Les demandes d'ajout et les pull requests sont les bienvenues. Notez que ce dépôt utilise CODEOWNERS : toutes les PR nécessitent une revue par un mainteneur.

Références

  • Post-mortem officiel de TanStack
  • Avis GitHub GHSA-g7cv-rxg3-hmpx
  • Analyse de Snyk
  • Blog Wiz — Mini Shai-Hulud
  • Article de StepSecurity
  • Orca Security — 160+ paquets

Licence

MIT.

Télécharger l’outil