Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
tanstack-compromise-checker — Script shell per rilevare gli indicatori di attacco alla supply chain di TanStack npm (CVE-2026-45321 / GHSA-g7cv-rxg3-hmpx) | Kitploit
Strumenti/GitHubGitHub/fabriziosalmi/tanstack-compromise-checker
Gestione degli Indicatori di Compromissione (IOC)Scanner di VulnerabilitàSicurezza dei ContenitoriInformatica ForenseAnalisi MalwareDevSecOpsRilevamento SegretiThreat IntelligenceSicurezza della Supply Chain

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Risposta agli Incidenti
GitHubfabriziosalmi/tanstack-compromise-checker

tanstack-compromise-checker

Script shell per rilevare gli indicatori di attacco alla supply chain di TanStack npm (CVE-2026-45321 / GHSA-g7cv-rxg3-hmpx)

Vedi Repository
2128 giorni faNon ancora revisionato

tanstack-compromise-checker

Rileva indicatori dell'attacco alla supply-chain npm di TanStack su una macchina sviluppatore, un repository o un runner CI. Script Bash, immagine Docker e GitHub Action — stesso motore, tre punti di ingresso.

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

L'11 maggio 2026, gli aggressori hanno pubblicato 84 versioni malevole su 42 pacchetti @tanstack/* tramite avvelenamento della cache di GitHub Actions. Il payload ruba token GitHub, token npm, credenziali AWS/GCP/Azure e installa un demone dead-man's switch che cancella ~/ nel momento in cui il token rubato viene revocato.

Avvio rapido

Scegli il punto di ingresso che corrisponde alla tua situazione.

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 — funziona su qualsiasi sistema operativo che esegue Docker (incl. 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'immagine è multi-architettura (linux/amd64, linux/arm64) e include una provenienza di build firmata tramite GitHub OIDC. Verifica prima di eseguire:

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

GitHub Action — blocca le dipendenze compromesse in 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 flusso di lavoro completo e rinforzato si trova in .github/workflows/tanstack-check.yml ed è lo stesso flusso di lavoro che questo repository esegue su se stesso.

Cosa controlla lo script

Con --online, lo script recupera anche l'avviso GHSA in fase di esecuzione, in modo che la copertura di rilevamento segua lo stato live dell'avviso anziché un elenco di versioni hard-coded.

Famiglia interessata: @tanstack/router, @tanstack/react-router, @tanstack/history, @tanstack/start, @tanstack/eslint-plugin-router e pacchetti correlati.

Famiglie pulite (non interessate): @tanstack/react-query, @tanstack/react-table, @tanstack/react-virtual, @tanstack/form, @tanstack/store.

Utilizzo

root@kitploit:~
# Quick check (current user's home)
bash check.sh

# Online mode: query the GHSA advisory and npm registry publish-time
bash check.sh --online

# Scan a specific directory
bash check.sh --scan-dir /path/to/your/repos

# JSON output for CI/SIEM integration
bash check.sh --json > findings.json

# Suggest pin commands for affected repos (dry-run)
bash check.sh --scan-dir /path/to/repos --fix

# Provide an extended known-bad list
bash check.sh --bad-versions-file ./extra-bad-versions.txt

Tutte le opzioni

Codici di uscita

CodiceSignificato
0Pulito — nessun indicatore nell'ambito scansionato
1Solo avvisi — revisione consigliata
2Fallimenti — indicatori di compromesso presenti
3Errore dello strumento/di utilizzo

Postura di sicurezza

Questo repository si difende dalla stessa classe di attacchi che rileva. Nello specifico:

  • Ogni uses: di GitHub Action è bloccato su un commit SHA di 40 caratteri, non su un tag fluttuante.
  • L'immagine Docker di base è bloccata su un digest manifesto multi-architettura immutabile.
  • Ogni flusso di lavoro dichiara permissions: {} al livello superiore; i job concedono solo ciò di cui hanno bisogno.
  • actions/checkout viene invocato con persist-credentials: false in modo che nessun remote git autenticato rimanga in $GITHUB_WORKSPACE.
  • step-security/harden-runner è il primo passo di ogni flusso di lavoro e monitora il traffico in uscita dal runner.
  • OpenSSF Scorecard viene eseguito settimanalmente e ad ogni push su main; i risultati vengono caricati come SARIF.
  • Ogni release pubblica un attestato di provenienza di build SLSA per l'immagine Docker. Chiunque può verificarlo offline con gh attestation.
  • Ogni release fornisce un check.sh.sha256 che copre tutti gli artefatti installabili.

La policy completa è in SECURITY.md.

Non eseguire curl | bash per nessuno strumento di sicurezza, incluso questo. Scarica sempre, verifica il checksum, ispeziona, poi esegui.

Output di esempio

root@kitploit:~
━━  1 / 8  DEAD-MAN'S SWITCH ARTEFACTS
  ✔  No dead-man's switch artefacts found

━━  2 / 8  PERSISTENCE VECTORS
  ✔  No persistence vectors detected

━━  3 / 8  TOKEN / CREDENTIAL EXPOSURE
  ✔  No credential exposure detected

━━  4 / 8  NETWORK INDICATORS
  ✔  No node TCP connections currently established (or none observable)

━━  5 / 8  REPO SCAN — package.json + lockfiles
  ℹ  Found 12 package.json + 8 lockfile(s)
  ✔  No compromised family declared in any package.json
  ✔  No compromised pins found in any lockfile

━━  6 / 8  INSTALLED node_modules — direct version check
  ✔  No compromised packages in installed node_modules

━━  7 / 8  GITHUB ACTIONS HARDENING HINTS
  ✔  No risky GitHub Actions patterns detected (in scanned scope)

━━  8 / 8  MINI SHAI-HULUD PAYLOAD + AUXILIARY IOCs
  ✔  No Mini Shai-Hulud payload / auxiliary IOCs detected

━━  SUMMARY
  Passed: 8    Warnings: 0    Failed: 0
  Scope : /Users/alice/dev
  ✔  No indicators of compromise within scope: /Users/alice/dev
  Note: a clean result for /Users/alice/dev does not certify the rest of the system.

Se sei compromesso

NON revocare il token GitHub prima di fermare il demone — il dead-man's switch eseguirà rm -rf ~/ nel momento in cui il token viene revocato.

  1. Ferma prima il demone:
    • macOS 14+: launchctl bootout gui/$UID ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
    • macOS legacy: launchctl unload ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
    • Linux: systemctl --user stop gh-token-monitor && systemctl --user disable gh-token-monitor
  2. Rimuovi lo script: rm -f ~/.local/bin/gh-token-monitor.sh
  3. Poi revoca e ruota: token GitHub, token npm, credenziali AWS/GCP/Azure, chiavi SSH, agente SSH.
  4. Esamina il log di controllo di GitHub: https://github.com/settings/security-log
  5. Ispeziona ~/.aws/credentials, ~/.kube/config, ~/.config/gh/hosts.yml, ~/.npmrc.

Dipendenze

Lo script bash necessita di:

  • bash 4+
  • jq (consigliato) — analisi di package-lock.json
  • python3 (fallback opzionale) — usato quando jq è assente
  • curl — richiesto per --online
  • lsof o ss (opzionale) — euristica IOC di rete

L'immagine Docker include tutto quanto sopra. Usala su sistemi dove non puoi o non vuoi installare questi strumenti.

Contribuire

Issue e pull request sono benvenuti. Nota che questo repository utilizza CODEOWNERS: tutte le PR richiedono una revisione da parte di un manutentore.

Riferimenti

  • TanStack official postmortem
  • GitHub Advisory GHSA-g7cv-rxg3-hmpx
  • Snyk analysis
  • Wiz Blog — Mini Shai-Hulud
  • StepSecurity writeup
  • Orca Security — 160+ packages

Licenza

MIT.

Scarica lo strumento
#CheckDescrizione
1Dead-man's switch~/.local/bin/gh-token-monitor.sh, LaunchAgents + LaunchDaemons (macOS), unità systemd utente + sistema (Linux), processi in esecuzione
2Persistenzafile rc della shell, crontab utente/sistema, /etc/cron.*, avvio automatico XDG, git globale core.hooksPath
3Credenzialivariabili d'ambiente sensibili, ~/.npmrc, ~/.yarnrc.yml, ~/.aws/credentials, ~/.config/gh/hosts.yml, ~/.netrc, ~/.docker/config.json, ~/.kube/config, enumerazione di file .env*
4IOC di reteprocessi node in esecuzione con connessioni TCP in uscita stabilite (euristica, revisione manuale)
5Scansione repositorydipendenze dichiarate in package.json + versioni bloccate nei file di blocco (package-lock.json, yarn.lock, pnpm-lock.yaml)
6Installatonode_modules/@tanstack/*/package.json controllato rispetto all'elenco di versioni note come malevole, poi rispetto al registry npm time[<versione>] quando --online
7Suggerimenti Actions.github/workflows/* scansionato per pull_request_target, --ignore-scripts mancante, utilizzo di actions/cache
8IOC Mini Shai-Huludfile payload in node_modules (router_init.js, tanstack_runner.js), @tanstack/setup come optionalDependency, manomissione configurazione strumenti AI, domini C2 nel codice sorgente, pattern di commit author e branch degli aggressori, token npm marcati con riscatto, pacchetti secondari propagati da worm, più euristiche di livello informativo per forme di payload sconosciute
FlagDescrizione
--scan-dir DIRDirectory principale da scansionare (default: $HOME). Rifiuta di scansionare directory di sistema come /, /etc, /usr.
--onlineInterroga l'avviso GHSA e time[<versione>] del registry npm per confermare il compromesso. Disattivato per impostazione predefinita — adesione esplicita.
--ghsa GHSA-IDSostituisci l'ID dell'avviso utilizzato in --online (default GHSA-g7cv-rxg3-hmpx).
--attack-window-start ISO, --attack-window-end ISOSostituisci la finestra di tempo di pubblicazione utilizzata in --online.
--fixStampa i comandi di pin raccomandati per i repository interessati (dry-run per impostazione predefinita).
--applyCon --fix: adesione esplicita all'esecuzione. Attualmente rifiuta ancora update cieco; è richiesto il pin manuale.
--yes, -ySalta il prompt di conferma per --apply.
--jsonEmette i risultati come JSON su stdout (implica --quiet).
--bad-versions-file FAggiunge voci (pkg@versione, una per riga) all'elenco di versioni note come malevole.
--no-colorDisabilita i colori ANSI.
--quiet, -qSopprime l'output per controllo, stampa solo il riepilogo.
-h, --helpMostra l'aiuto.