TL;DR
np-audit — это zero-dependency инструмент для статического анализа lifecycle-скриптов npm-пакетов перед их выполнением. Он детектит obfuscation, dynamic code execution и другие паттерны атак, не требуя дополнительных зависимостей.
Введение: контекст проблемы
После серии supply-chain атак (event-stream, ua-parser-js и другие) проблема безопасности npm-пакетов стала critical для всех senior-разработчиков. Основной вектор атак — malicious scripts в package.json:
{
"scripts": {
"preinstall": "echo 'malicious payload' | sh"
}
}
Такие скрипты выполняются автоматически при npm install с полным доступом к системе. np-audit решает эту проблему через static analysis без actual execution.
Основные возможности np-audit
Архитектура детекции
np-audit использует 14+ detection modules, работающих на pure Node.js:
// Пример детектора hex-экранирования
function detectHexEscapes(script) {
return /\\x[0-9a-f]{2}/i.test(script);
}
Ключевые фичи:
- Tarball analysis — скачивает и анализирует пакеты без установки
- AST-based inspection — парсит скрипты через acorn для выявления:
// Динамический код eval('malicious' + 'payload'); - Dependency graph traversal — отслеживает require/import цепочки
- CVE scanning — интеграция с OSV.dev API
Практическое применение
Замена стандартного npm install:
npx np-audit install lodash
Interactive mode для manual review:
npx np-audit install --review suspicious-package
Детали реализации
Ядро np-audit построено на Node.js built-in модулях:
const { readFileSync } = require('fs');
const { spawnSync } = require('child_process');
// Анализ package.json без eval
function parsePackage(pkgPath) {
return JSON.parse(readFileSync(pkgPath));
}
Detection patterns
- High-entropy strings — детектит base64/hex encoded payloads
- Obfuscation techniques:
// Детектит цепочки конкатенации 'mal' + 'ware'.split('').reverse().join(''); - Suspicious API calls:
require('child_process').exec('rm -rf /');
Интеграция в CI/CD
Пример конфига для GitHub Actions:
- name: Audit npm packages
run: |
npm install -g np-audit
npa install
Заключение
np-audit предлагает pragmatic solution для mitigation supply-chain risks в npm-экосистеме. Для senior-разработчиков это must-have инструмент в security toolchain, особенно при работе с sensitive projects.
Что можно улучшить:
- Добавить WASM-based sandbox для safe execution в изоляции
- Реализовать плагинную систему для custom detection rules
- Интегрировать с npm/yarn/pnpm hooks
Инструмент активно развивается — welcome contributions и feature requests от комьюнити.
Источник: https://github.com/KoblerS/np-audit