js-security-audit について
js-security-auditは、JavaScriptとTypeScriptプロジェクトの設定、依存関係、CI/CD、Dependabot、インシデント対応準備を監査するスキルです。ファイル位置と修正案を添えて、優先度別に問題を報告します。
主な機能
- 015領域のセキュリティ監査
- 02ロックファイルからnpm、yarn、pnpmを判別
- 03ファイル位置付きの優先度別指摘
- 04指摘ごとの修正コード例
- 05重要度別の合否レポート
活用シーン
- 01新しいJavaScript/TypeScriptリポジトリの強化
- 02プルリクエストの依存関係変更の確認
- 03CIセキュリティチェックの設定
- 04本番デプロイ前の準備状況の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ c0x12c/ ai-toolkit --skill js-security-auditインストール後、Claude Code で/js-security-auditを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
audit-checklist.mdeslint-security.mdincident-playbook.mdpackage-manager.md詳細
JS セキュリティ監査
JS/TS プロジェクト(npm、yarn、pnpm)で5つの領域のセキュリティ監査を実施します。各領域について、ファイルと行番号を参照する合格/不合格レポートを生成します。
使用するタイミング
- 新しいリポジトリのセキュリティ強化 —
.npmrc、ロックファイル、2FA、バージョンの厳密な固定を確認します - 依存関係を追加またはアップグレードする PR のレビュー
- CI セキュリティゲートの設定(
npm ci --ignore-scripts、lockfile-lint、監査ゲート) - サプライチェーン攻撃に関するニュースの後(Axios March 2026、Shai-Hulud など)
- 本番環境へのデプロイ前の定期的なセキュリティレビュー
プロセス
MUST/SHOULD/SHOULDN'T の全リストについては、
audit-checklist.mdを参照してください。 SAST ESLint テンプレートとルール表については、eslint-security.mdを参照してください。 侵害された依存関係への対応手順(5ステップ)については、incident-playbook.mdを参照してください。 npm/yarn/pnpm のコマンド対応表とツールについては、package-manager.mdを参照してください。
まず、存在するロックファイルを確認してパッケージマネージャーを特定します。package-lock.json(npm)、yarn.lock(yarn)、pnpm-lock.yaml(pnpm)のいずれかを確認してください。package-manager.md に記載された対応するコマンドを使用します。
1. プロジェクトのセットアップ
.npmrc、ロックファイルの有無、バージョンの固定、.gitignore、スコープ付きパッケージを確認します。
2. 依存関係の衛生状態
監査を実行し、ロックファイルの差分から予期しないパッケージを検出し、latest タグや不要な依存関係がないか確認します。
3. CI/CD パイプライン
npm install よりも npm ci を使用していること、選択的な再ビルド許可リストを設定した --ignore-scripts、監査ゲート、lockfile-lint、SHA で固定されたアクション、SBOM、ESLint セキュリティ設定を確認します。
4. Dependabot
.github/dependabot.yml、アラートの通知先、重大または高リスクの問題に対する P1 SLA、グループ化設定を確認します。
5. インシデント対応の準備
チームに文書化されたプレイブック、IOC の監視、認証情報のローテーション手順書があることを確認します。
対話スタイル
- ロックファイルからパッケージマネージャーを特定し、npm と決めつけません
- 警告より先に重大な問題(侵害されたパッケージ、監査ゲートの欠如、リポジトリ内のシークレット)を指摘します
- すべての指摘にファイルパスまたは設定キーを記載します
- すべての指摘に修正用スニペットを付け、「修正してください」だけで済ませません
- MUST(マージをブロック)、SHOULD(次のスプリントで対応)、SHOULDN'T(アンチパターン)を区別します
ルール
- 重大 — リポジトリ内のシークレット、ロックファイルの欠如、本番依存関係の
latestタグ、CI でのnpm auditゲートの欠如、公開者の2FA未設定 - 警告 —
.npmrcの強化設定の欠如、Dependabot 設定の欠如、SBOM 生成の欠如、ESLint セキュリティ設定の欠如 - 情報 — インストール前の
npqによる審査がない、Socket.dev/Snyk との連携がない
注意点
- AI が幻覚でパッケージ名を生成します。 Claude(およびほかの LLM)は、npm に存在しないパッケージを提案することがあります。攻撃者がこうした名前を登録し、マルウェアを仕込む場合があります。特にチャットで提案されたあまり知られていない名前は、インストールする前に必ず
npmjs.comでパッケージを確認してください。 - CI では
npm installとnpm ciの違いが重要です。npm installはロックファイルとpackage.jsonが一致しない場合、ロックファイルを書き換えて、新しいバージョンをひそかに取得します。一方、npm ciはビルドを失敗させます。CI ではciを使用してください。 --ignore-scriptsは正規のパッケージもブロックします。esbuild、sharp、prisma、bcryptは、バイナリのダウンロードやクライアントの生成に postinstall スクリプトが必要です。--ignore-scriptsを使用した後、npm rebuild <allowlist>を実行してください。また、許可リストに各パッケージを含める理由を記録してください。- GitHub Actions はタグではなく SHA で固定してください。
actions/checkout@v4はタグを参照するため、悪意のあるコードを指すように変更される可能性があります(実際に起きています)。タグを示すコメントを添えて、40 文字の完全な SHA を使用してください。 - ロックファイルの差分は、サプライチェーンの異常を示す兆候です。 タイポの修正に 200 個の推移的依存関係を追加する PR や、既存パッケージの解決先 URL を
registry.npmjs.org以外に変更する PR は危険信号です。マージする前に調査してください。 min-release-ageは npm v11 以降が対象です。 古い npm では SHOULD として言及しますが、監査を失敗させないでください。- 認証コードでの Math.random() の使用は、警告ではなく重大な問題です。
Math.random()で生成された確認コード、セッショントークン、パスワードリセットトークンは予測可能です。crypto.randomInt()を必ず使用してください。Notion のガイドラインでは、c0x12c のコードベースで実際に見つかった問題として取り上げています。 - 「ノイズを減らす」ために Dependabot を無効にすることは認められません。 対処法は、マイナー/パッチ更新をグループ化することであり、アラートを黙らせることではありません。
推奨する権限許可リスト
このスキルでは npm audit などを実行するために Bash が必要です。監査のたびに確認を求められないようにするには、これらを ~/.claude/settings.json(またはプロジェクトの .claude/settings.json)に追加してください。
{
"permissions": {
"allow": [
"Bash(npm audit:*)",
"Bash(npm outdated:*)",
"Bash(npm explain:*)",
"Bash(npm list:*)",
"Bash(npm view:*)",
"Bash(yarn npm audit:*)",
"Bash(yarn outdated:*)",
"Bash(yarn why:*)",
"Bash(pnpm audit:*)",
"Bash(pnpm outdated:*)",
"Bash(pnpm why:*)",
"Bash(npx lockfile-lint:*)",
"Bash(npx npq:*)"
]
}
}
これにより、監査コマンドは確認なしで実行され、それ以外の操作(書き込みや削除など)は確認が必要なままになります。
出力
監査レポートが生成されます。
## JS Security Audit: {repo}
### Overall: Pass | Fail
| Area | Status | Critical | Warnings | Info |
|--------------------|----------|----------|----------|------|
| Project Setup | Pass | 0 | 1 | 0 |
| Dependency Hygiene | Fail | 1 | 0 | 0 |
| CI/CD Pipeline | Pass | 0 | 2 | 1 |
| Dependabot | Warning | 0 | 1 | 0 |
| Incident Response | Info | 0 | 0 | 1 |
### Critical Findings
- **[Dependency Hygiene]** `lodash` pinned to `latest` in package.json:24
- Fix: Replace with exact version `"lodash": "4.17.21"`
- Reason: `latest` resolves at install time, defeating lockfile guarantees
### Warnings
- **[Project Setup]** `.npmrc` missing `ignore-scripts=true`
- File: `.npmrc:1`
- Fix: Add `ignore-scripts=true` and use `npm rebuild` for allowlisted packages
### Remediation Priority
1. Fix critical findings before merging
2. Address warnings in next sprint
3. Info items as time permits