security-review について
security-review はコードレビュー向けのセキュリティ審査スキルです。認証、API、認証情報などの変更を対象に、OWASP Top 10 のチェックリスト、手順、重要度分類を提供します。
主な機能
- 01セキュリティ対象ファイルの変更検出
- 02OWASP Top 10 に基づく確認
- 03依存関係の脆弱性監査
- 04重要度別の指摘記録
- 05レビュー成果物への結果記載
活用シーン
- 01認証やセッションの変更審査
- 02API、ルート、アクセス制御の確認
- 03入力処理やデータベースコードの評価
- 04認証情報やシークレットの変更審査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ troykelly/ codex-skills --skill security-reviewインストール後、Claude Code で/security-reviewを入力して読み込まれたか確認します。
詳細
セキュリティレビュー
概要
認証、認可、ユーザー入力、API、データベース、または認証情報を扱うコードを対象とする、専用のセキュリティレビューです。
基本原則: セキュリティ上の問題には、一般的なコードレビューを超える専門的な注意が必要です。
実施条件: 変更がセキュリティ上重要なパスに影響する場合、このレビューは必須です。
開始時に宣言: 「このコードのセキュリティレビューを実施します。」
必須となる場合
次のファイルのいずれかが変更された場合、このスキルは必須です。
| パターン | 例 |
|---|---|
**/auth/** | src/auth/login.ts, lib/auth/session.js |
**/security/** | src/security/encryption.ts |
**/middleware/** | src/middleware/authenticate.ts |
**/api/** | src/api/endpoints.ts |
**/*password* | utils/passwordHash.ts |
**/*token* | services/tokenService.ts |
**/*secret* | config/secrets.ts |
**/*credential* | lib/credentials.js |
**/*session* | middleware/session.ts |
**/routes/** | src/routes/protected.ts |
**/*.sql | migrations/001_users.sql |
次のコマンドで確認します。
git diff --name-only HEAD~1 | grep -E '(auth|security|middleware|api|password|token|secret|credential|session|routes|\.sql)'
OWASP Top 10 チェックリスト
各カテゴリに照らしてレビューします。
1. インジェクション(A03:2021)
| 確認項目 | 検証内容 |
|---|---|
| SQL インジェクション | すべてのクエリでパラメーター化されたステートメントを使用している |
| コマンドインジェクション | シェルコマンドにユーザー入力を使用していない、または適切にエスケープしている |
| LDAP インジェクション | LDAP クエリで適切にエスケープしている |
| XPath インジェクション | XPath クエリでパラメーター化された方法を使用している |
| テンプレートインジェクション | テンプレートエンジンが安全に設定されている |
// VULNERABLE
db.query(`SELECT * FROM users WHERE id = '${userId}'`);
// SECURE
db.query('SELECT * FROM users WHERE id = ?', [userId]);
2. 認証の不備(A07:2021)
| 確認項目 | 検証内容 |
|---|---|
| パスワードの保存 | パスワードを bcrypt/argon2 でハッシュ化している(MD5/SHA1 は使用しない) |
| セッション管理 | Secure、HttpOnly、SameSite 属性を持つ Cookie を使用している |
| トークンの処理 | JWT に署名し、検証しており、有効期間が短い |
| ブルートフォース攻撃対策 | 認証エンドポイントにレート制限を設けている |
| 認証情報の漏えい | ログ、エラー、レスポンスに認証情報を含めていない |
3. 機微データの露出(A02:2021)
| 確認項目 | 検証内容 |
|---|---|
| 転送中のデータ | HTTPS を強制し、TLS 1.2 以降を使用している |
| 保存データ | 機微データを暗号化している |
| コード内のシークレット | API キー、パスワード、トークンをハードコードしていない |
| エラーメッセージ | エラーレスポンスに機微な情報を含めていない |
| ログ記録 | 機微データをログに記録していない |
# Check for hardcoded secrets
grep -rE '(password|secret|api_key|token)\s*[:=]\s*["\047][^"\047]+["\047]' src/
4. XML 外部実体(A05:2021)
| 確認項目 | 検証内容 |
|---|---|
| XML の解析 | 外部実体を無効にしている |
| DTD 処理 | 不要な場合、DTD 処理を無効にしている |
5. アクセス制御の不備(A01:2021)
| 確認項目 | 検証内容 |
|---|---|
| 認可チェック | すべてのエンドポイントで権限を確認している |
| 直接オブジェクト参照 | オブジェクトへのアクセスをユーザーに照らして検証している |
| 権限昇格 | 自分の権限を昇格できない |
| CORS | 許可するオリジンを適切に制限している |
| メソッドの制限 | 許可された HTTP メソッドのみを受け付けている |
6. セキュリティ設定の不備(A05:2021)
| 確認項目 | 検証内容 |
|---|---|
| デフォルトの認証情報 | デフォルトのパスワードを使用していない |
| エラー処理 | スタックトレースをユーザーに公開していない |
| セキュリティヘッダー | CSP、X-Frame-Options などを設定している |
| デバッグモード | 本番環境で無効にしている |
| 不要な機能 | 使用していないエンドポイントや機能を削除している |
7. クロスサイトスクリプティング(A03:2021)
| 確認項目 | 検証内容 |
|---|---|
| 出力エンコーディング | ユーザー入力を表示前にエンコードしている |
| DOM XSS | ユーザー入力に innerHTML を使用していない |
| テンプレートの安全性 | テンプレートエンジンが自動エスケープする |
| CSP | コンテンツセキュリティポリシーを設定している |
// VULNERABLE
element.innerHTML = userInput;
// SECURE
element.textContent = userInput;
// OR
element.innerHTML = DOMPurify.sanitize(userInput);
8. 安全でないデシリアライゼーション(A08:2021)
| 確認項目 | 検証内容 |
|---|---|
| オブジェクトのデシリアライゼーション | 信頼できないデータをデシリアライズしていない |
| JSON の解析 | 安全な方法で JSON.parse を使用している |
| 型の検証 | デシリアライズしたオブジェクトを検証している |
9. 既知の脆弱性があるコンポーネントの使用(A06:2021)
| 確認項目 | 検証内容 |
|---|---|
| 依存関係の監査 | pnpm audit / pip audit で問題がない |
| 古いパッケージ | 重大なレベルで古い依存関係がない |
| CVE の確認 | 依存関係に既知の CVE がない |
# Run dependency audit
pnpm audit --prod
# or
pip-audit
10. ログ記録と監視の不足(A09:2021)
| 確認項目 | 検証内容 |
|---|---|
| 認証イベント | ログインの成功/失敗が記録されている |
| アクセス制御 | 権限拒否が記録されている |
| 入力検証 | 検証の失敗が記録されている |
| 機密性の高い操作 | 管理者の操作が記録されている |
| ログの完全性 | ログが改ざんから保護されている |
レビュープロセス
ステップ 1:セキュリティ上重要な変更を特定する
# List changed files matching security patterns
git diff --name-only HEAD~1 | grep -E '(auth|security|middleware|api|password|token|secret|session)'
ステップ 2:各ファイルをレビューする
セキュリティ上重要なファイルごとに、次の手順を実施します。
- ファイル全体を読む(差分だけではなく)
- OWASP の 10 カテゴリすべてに照らして確認する
- 重大度を添えて、見つかった問題を記録する
ステップ 3:依存関係を確認する
# Audit dependencies
pnpm audit --prod
# Check for outdated
pnpm outdated
ステップ 4:確認結果を記録する
重大度レベルを使用します。
| 重大度 | 説明 | 対応 |
|---|---|---|
| CRITICAL | 悪用可能な脆弱性、データ漏えいのリスク | マージ前に必ず修正 |
| HIGH | 重大なセキュリティ上の弱点 | マージ前に必ず修正 |
| MEDIUM | 多層防御上の問題 | マージ前に修正することを推奨 |
| LOW | 軽微な改善 | 将来の課題で対応してもよい |
ステップ 5:レビュー成果物にセキュリティセクションを追加する
メインのレビュー成果物に追加します。
### Security Review
**Security-Sensitive:** YES
**Reviewed By:** [WORKER_ID or codex-subagent security-reviewer]
**OWASP Categories Checked:** 10/10
#### Security Findings
| # | OWASP Category | Severity | Finding | Status |
|---|----------------|----------|---------|--------|
| 1 | A03 Injection | CRITICAL | SQL injection in findUser() | FIXED |
| 2 | A02 Sensitive Data | HIGH | API key in config.ts | DEFERRED #456 |
| 3 | A01 Access Control | MEDIUM | Missing auth on /admin | FIXED |
#### Dependency Audit
pnpm audit: 0 vulnerabilities
**Security Review Status:** [PASS|ISSUES_FIXED|ISSUES_DEFERRED]
セキュリティレビュー成果物(単独)
セキュリティレビューの範囲が広い場合は、別のコメントとして投稿します。
## Security Review
| Property | Value |
|----------|-------|
| Issue | #123 |
| Reviewer | `security-reviewer` subagent (codex-subagent) |
| Reviewed | 2025-12-29T10:30:00Z |
### Files Reviewed
- src/auth/login.ts
- src/middleware/authenticate.ts
- src/api/users.ts
### OWASP Checklist Results
| # | Category | Status | Notes |
|---|----------|--------|-------|
| A01 | Broken Access Control | PASS | Auth middleware on all protected routes |
| A02 | Cryptographic Failures | PASS | bcrypt for passwords, TLS enforced |
| A03 | Injection | FIXED | Parameterized SQL queries now |
| A04 | Insecure Design | PASS | - |
| A05 | Security Misconfiguration | PASS | - |
| A06 | Vulnerable Components | PASS | pnpm audit clean |
| A07 | Auth Failures | PASS | Rate limiting, secure sessions |
| A08 | Data Integrity Failures | PASS | - |
| A09 | Logging Failures | NOTE | Consider adding auth failure logging |
| A10 | SSRF | N/A | No server-side requests |
### Dependency Audit
found 0 vulnerabilities
**Security Review Status:** PASS
チェックリスト
セキュリティレビューを完了する前に、次の項目を確認します。
- 変更されたセキュリティ上重要なファイルをすべてレビューした
- OWASP の 10 カテゴリすべてを確認した
- 依存関係の監査を実施した
- CRITICAL/HIGH の問題をすべて修正した
- 対応を延期した問題に追跡用の課題がある
- レビュー成果物にセキュリティセクションを追加した
- メインの成果物で Security-Sensitive を YES に設定した
統合
このスキルは、次の場合に起動します。
- セキュリティ上重要なファイルのパターンに変更があった場合
- 明示的に呼び出された場合
codex-subagent security-reviewer
このスキルは、次の機能と連携します。
comprehensive-review- セキュリティは評価基準 #4 ですreview-gate- 機密性の高い変更に対するセキュリティレビューを検証します
このスキルは、次の機能によって適用されます。
.codex/rules/security-sensitive.mdの条件付きルール- PR ゲートの自動化(セキュリティ上重要な変更にレビューがない場合、PR をブロックします)
コメント
Markdown 対応