
Analyse statique de sécurité pour les paquets npm. Détecte le code obfusqué, les patterns malveillants et les vulnérabilités connues avant l'installation.

Analyse de sécurité statique pour les paquets npm — détecte les scripts de cycle de vie obfusqués, les vulnérabilités connues et les schémas malveillants avant leur exécution. Remplacement direct de npm install et npm ci.
Zéro dépendance. Uniquement les modules intégrés de Node.js. < 100 kB une fois téléchargé.
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
La détection est répartie en marshallers modulaires — chacun détecte un signal d'attaque unique :
| Marshaller | Ce qu'il détecte | Score |
|---|---|---|
eval/dynamic-exec | eval(), new Function(), eval indirect, vm.*, setTimeout avec une chaîne | 8 |
obfuscator.io | modèles de noms de variables _0x (sortie d'obfuscator.io) | 9–80 |
high-entropy-string | Chaînes longues ou chaînes de concaténation à haute entropie de Shannon | 6 |
hex-escape-density | Séquences d'échappement denses \xNN et \uXXXX | 5–50 |
fromCharCode | String.fromCharCode avec de nombreux arguments, grands tableaux décimaux de codes de caractères | 7 |
encoded-decode | Décodage Base64/hex (atob, Buffer.from) éventuellement combiné avec eval | 3–8 |
child-process | require('child_process'), exec, spawn, fork, worker_threads | 5 |
hex-array | Grand nombre de valeurs littérales hexadécimales 0x | 7–60 |
process-env | accès à process.env (signal d'exfiltration d'identifiants) | 3 |
network-call | require('https'), fetch(), dns, net, tls | 4 |
filesystem-manipulation | fs.writeFile, chmod, symlink (persistance de porte dérobée) | 3–4 |
runtime-download | Télécharge et exécute des runtimes externes (Bun, Deno) | 9–50 |
vscode-autorun | Tâches VS Code avec runOn: folderOpen (exécution automatique) | 30 |
known-vulnerability | CVE connues via l'API Snyk ou OSV.dev | 4–6 (WARN), 80 (malicious) |
Les scores évoluent avec la sévérité — un plus grand nombre d'indicateurs d'obfuscation produit des scores plus élevés. Le verdict final repose sur le score individuel le plus élevé parmi tous les marshallers.
Voir CONTRIBUTING.md pour savoir comment écrire des marshallers personnalisés.
Chaque paquet analysé est vérifié par rapport aux bases de données de vulnérabilités connues en plus de l'analyse du code.
Par défaut : OSV.dev (aucune configuration requise)
Fonctionne immédiatement — interroge l'API gratuite OSV.dev pour les vulnérabilités connues et les avis de paquets malveillants.
Optionnel : API Snyk (données plus riches)
# Environment variable
export SNYK_API_TOKEN=your-token-here
# Or via Snyk CLI
snyk auth
Ordre de résolution du jeton : SNYK_API_TOKEN → SNYK_TOKEN → ~/.config/configstore/snyk.json
| Sévérité | Score | Verdict |
|---|---|---|
| Paquet malveillant | 80 | DANGER |
| 10+ vulnérabilités | 6 | WARN |
| 5–9 vulnérabilités | 5 | WARN |
| 1–4 vulnérabilités | 4 | WARN |
Les CVE non malveillantes produisent des avertissements mais ne bloquent jamais l'installation. Seuls les paquets confirmés malveillants déclenchent DANGER.
| Commande | Alias | Description |
|---|---|---|
npa install [package] | npa i | Audit puis exécution de npm install |
npa ci | — | Audit puis exécution de npm ci |
npa scan [package] | npa s | Analyse uniquement, sans installation |
npa config get | npa c get | Afficher la configuration actuelle |
npa config set <key> <value> | npa c set | Mettre à jour une valeur de configuration |
npa alias --install | — | Installer l'alias shell |
npa alias --uninstall | — | Supprimer l'alias shell |
Toute commande non reconnue est transmise à npm (par ex. npa run test, npa publish).
| Option | Alias | Fonctionne avec | Description |
|---|---|---|---|
--review | -r | install, ci | Mode interactif — choisir quels scripts autoriser |
--json | — | install, ci, scan | Sortie JSON lisible par machine |
--no-dev | — | install, ci, scan | Ignorer les devDependencies |
--verbose | — | toutes | Afficher la progression du téléchargement et des détails supplémentaires |
--version | -v | — | Afficher la version et quitter |
--help | -h | — | Afficher l'aide et quitter |
--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 configuration est stockée dans ~/.npmauditor.json (global) et peut être remplacée par projet avec .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