mcpField
J
js-security-audit

js-security-audit

github.com/c0x12cセキュリティ109113 回インストール19 週間前に更新
リポジトリ

js-security-audit について

js-security-auditは、JavaScriptとTypeScriptプロジェクトの設定、依存関係、CI/CD、Dependabot、インシデント対応準備を監査するスキルです。ファイル位置と修正案を添えて、優先度別に問題を報告します。

主な機能

  1. 015領域のセキュリティ監査
  2. 02ロックファイルからnpm、yarn、pnpmを判別
  3. 03ファイル位置付きの優先度別指摘
  4. 04指摘ごとの修正コード例
  5. 05重要度別の合否レポート

活用シーン

  1. 01新しいJavaScript/TypeScriptリポジトリの強化
  2. 02プルリクエストの依存関係変更の確認
  3. 03CIセキュリティチェックの設定
  4. 04本番デプロイ前の準備状況の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/c0x12c/ai-toolkit --skill js-security-audit

インストール後、Claude Code で/js-security-auditを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

audit-checklist.md
eslint-security.md
incident-playbook.md
package-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

コメント