
Статический анализ безопасности npm-пакетов. Обнаруживает обфусцированный код, вредоносные паттерны и известные уязвимости до установки.

Статический анализ безопасности npm-пакетов — обнаруживает обфусцированные жизненные скрипты, известные уязвимости и вредоносные паттерны до их выполнения. Прямая замена для npm install и npm ci.
Ноль зависимостей. Только встроенные модули Node.js. < 100 кБ при передаче.
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
Обнаружение разделено на модульные детекторы — каждый из них отвечает за один сигнал атаки:
| Marshaller | What it detects | Score |
|---|---|---|
eval/dynamic-exec | eval(), new Function(), непрямой eval, vm.*, setTimeout со строкой | 8 |
obfuscator.io | паттерны именования переменных _0x (результат работы obfuscator.io) | 9–80 |
high-entropy-string | длинные строки или цепочки конкатенации с высокой энтропией Шеннона | 6 |
hex-escape-density | плотные escape-последовательности \xNN и \uXXXX | 5–50 |
fromCharCode | String.fromCharCode со множеством аргументов, большие массивы десятичных кодов символов | 7 |
encoded-decode | Base64/hex-декодирование (atob, Buffer.from), опционально в сочетании с eval | 3–8 |
child-process | require('child_process'), exec, spawn, fork, worker_threads | 5 |
hex-array | большое количество шестнадцатеричных литералов 0x | 7–60 |
process-env | доступ к process.env (признак кражи учётных данных) | 3 |
network-call | require('https'), fetch(), dns, net, tls | 4 |
filesystem-manipulation | fs.writeFile, chmod, symlink (персистентность бэкдора) | 3–4 |
runtime-download | загрузка и выполнение внешних рантаймов (Bun, Deno) | 9–50 |
vscode-autorun | задачи VS Code с runOn: folderOpen (автовыполнение) | 30 |
known-vulnerability | известные CVE через Snyk API или OSV.dev | 4–6 (WARN), 80 (вредоносный) |
Оценки масштабируются по серьёзности — большее количество индикаторов обфускации даёт более высокие оценки. Итоговый вердикт основывается на наивысшей индивидуальной оценке среди всех детекторов.
См. CONTRIBUTING.md о том, как писать собственные детекторы.
Каждый сканируемый пакет проверяется по известным базам уязвимостей наряду с анализом кода.
По умолчанию: OSV.dev (дополнительная настройка не требуется)
Работает из коробки — запрашивает бесплатный API OSV.dev для поиска известных уязвимостей и предупреждений о вредоносных пакетах.
Опционально: Snyk API (более полные данные)
# Environment variable
export SNYK_API_TOKEN=your-token-here
# Or via Snyk CLI
snyk auth
Порядок определения токена: SNYK_API_TOKEN → SNYK_TOKEN → ~/.config/configstore/snyk.json
| Severity | Score | Verdict |
|---|---|---|
| Вредоносный пакет | 80 | DANGER |
| 10+ уязвимостей | 6 | WARN |
| 5–9 уязвимостей | 5 | WARN |
| 1–4 уязвимости | 4 | WARN |
Незлонамеренные CVE вызывают предупреждения, но никогда не блокируют установку. Только подтверждённые вредоносные пакеты приводят к DANGER.
| Command | Alias | Description |
|---|---|---|
npa install [package] | npa i | Провести аудит, затем выполнить npm install |
npa ci | — | Провести аудит, затем выполнить npm ci |
npa scan [package] | npa s | Только сканирование, без установки |
npa config get | npa c get | Показать текущую конфигурацию |
npa config set <key> <value> | npa c set | Обновить значение конфигурации |
npa alias --install | — | Установить псевдоним оболочки |
npa alias --uninstall | — | Удалить псевдоним оболочки |
Любая нераспознанная команда передаётся npm (например, npa run test, npa publish).
| Flag | Alias | Works with | Description |
|---|---|---|---|
--review | -r | install, ci | Интерактивный режим — выберите, какие скрипты разрешить |
--json | — | install, ci, scan | Вывод в машиночитаемом JSON |
--no-dev | — | install, ci, scan | Пропустить devDependencies |
--verbose | — | all | Показывать прогресс загрузки и дополнительные детали |
--version | -v | — | Вывести версию и выйти |
--help | -h | — | Вывести справку и выйти |
--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
Конфигурация хранится в ~/.npmauditor.json (глобально) и может быть переопределена для проекта с помощью .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