
Analisi statica della sicurezza per pacchetti npm. Rileva codice offuscato, pattern dannosi e vulnerabilità note prima dell'installazione.

Analisi di sicurezza statica per pacchetti npm — rileva script di lifecycle offuscati, vulnerabilità note e pattern dannosi prima che vengano eseguiti. Sostituto diretto di npm install e npm ci.
Zero dipendenze. Solo componenti integrati di Node.js. < 100 kB una volta scaricato.
npx np-audit scan express
npm install -g np-audit
npa scan # scan all deps
npa install # audit then install
alias npm='npa' # use as drop-in replacement
Il rilevamento è suddiviso in marshaller modulari — ognuno rileva un singolo segnale di attacco:
| Marshaller | Cosa rileva | Punteggio |
|---|---|---|
eval/dynamic-exec | eval(), new Function(), eval indiretto, vm.*, setTimeout con stringa | 8 |
obfuscator.io | Pattern di denominazione delle variabili _0x (output di obfuscator.io) | 9–80 |
high-entropy-string | Stringhe lunghe o catene di concatenazione con alta entropia di Shannon | 6 |
hex-escape-density | Sequenze di escape dense \xNN e \uXXXX | 5–50 |
fromCharCode | String.fromCharCode con molti argomenti, grandi array decimali di codici carattere | 7 |
encoded-decode | Decodifica Base64/hex (atob, Buffer.from) opzionalmente combinata con eval | 3–8 |
child-process | require('child_process'), exec, spawn, fork, worker_threads | 5 |
hex-array | Grandi quantità di valori letterali hex 0x | 7–60 |
process-env | Accesso a process.env (segnale di esfiltrazione di credenziali) | 3 |
network-call | require('https'), fetch(), dns, net, tls | 4 |
filesystem-manipulation | fs.writeFile, chmod, symlink (persistenza di backdoor) | 3–4 |
runtime-download | Scarica ed esegue runtime esterni (Bun, Deno) | 9–50 |
vscode-autorun | Task di VS Code con runOn: folderOpen (auto-esecuzione) | 30 |
known-vulnerability | CVE note tramite API Snyk o OSV.dev | 4–6 (WARN), 80 (dannoso) |
I punteggi scalano in base alla gravità — un numero maggiore di indicatori di offuscamento produce punteggi più alti. Il verdetto finale si basa sul punteggio individuale più alto tra tutti i marshaller.
Vedi CONTRIBUTING.md per informazioni su come scrivere marshaller personalizzati.
Ogni pacchetto scansionato viene verificato rispetto ai database di vulnerabilità note insieme all'analisi del codice.
Predefinito: OSV.dev (nessuna configurazione richiesta)
Funziona immediatamente — interroga la API gratuita OSV.dev per vulnerabilità note e advisory di pacchetti dannosi.
Opzionale: API Snyk (dati più ricchi)
# Environment variable
export SNYK_API_TOKEN=your-token-here
# Or via Snyk CLI
snyk auth
Ordine di risoluzione del token: SNYK_API_TOKEN → SNYK_TOKEN → ~/.config/configstore/snyk.json
| Gravità | Punteggio | Verdetto |
|---|---|---|
| Pacchetto dannoso | 80 | DANGER |
| 10+ vulnerabilità | 6 | WARN |
| 5–9 vulnerabilità | 5 | WARN |
| 1–4 vulnerabilità | 4 | WARN |
Le CVE non dannose producono avvisi ma non bloccano mai l'installazione. Solo i pacchetti confermati come dannosi attivano DANGER.
| Comando | Alias | Descrizione |
|---|---|---|
npa install [package] | npa i | Esegui l'audit e poi npm install |
npa ci | — | Esegui l'audit e poi npm ci |
npa scan [package] | npa s | Solo scansione, nessuna installazione |
npa config get | npa c get | Mostra la configurazione corrente |
npa config set <key> <value> | npa c set | Aggiorna un valore di configurazione |
npa alias --install | — | Installa alias di shell |
npa alias --uninstall | — | Rimuovi alias di shell |
Qualsiasi comando non riconosciuto viene inoltrato a npm (ad es. npa run test, npa publish).
| Flag | Alias | Compatibile con | Descrizione |
|---|---|---|---|
--review | -r | install, ci | Modalità interattiva — scegli quali script consentire |
--json | — | install, ci, scan | Output JSON leggibile dalla macchina |
--no-dev | — | install, ci, scan | Ignora le devDependencies |
--verbose | — | all | Mostra lo stato di avanzamento del download e dettagli aggiuntivi |
--version | -v | — | Mostra la versione ed esce |
--help | -h | — | Mostra l'aiuto ed esce |
--reviewnpa install --review
npa --review mode
Use ↑/↓ to navigate, SPACE to toggle, ENTER to confirm, q to quit
Found 3 package(s) with install scripts:
[✓ allow] [email protected] postinstall: post-install.js OK
▶ [✗ deny ] [email protected] postinstall: install.js DANGER (score: 9)
[✓ allow] @scope/[email protected] postinstall: install.js WARN (score: 5)
2 allowed 1 denied
La configurazione è memorizzata in ~/.npmauditor.json (globale) e può essere sovrascritta per progetto con .npmauditor.json.
npa config get # Show current config
npa config set blockScore 6 # Block at score 6+
npa config set skipPackages '["esbuild"]' # Trust specific packages
npa config set skipScopes '["@types"]' # Trust entire scopes