mcpField
B
baseline-security-audit

baseline-security-audit

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

baseline-security-audit について

Baseline Security Audit Skillは、コードベースの一般的な脆弱性や設定上の問題を調べるスキルです。基礎的なセキュリティ監査と修正追跡に使え、19分野の検査、影響度と悪用可能性に基づく評価、確認後のJira課題作成に対応します。

主な機能

  1. 01シークレット、依存関係、サプライチェーンを検査
  2. 02インジェクション、認可、入出力処理を確認
  3. 03ログ、暗号、TLS、セキュリティヘッダーを点検
  4. 04一貫した重大度基準で所見を評価
  5. 05ユーザー確認後にJira課題を作成

活用シーン

  1. 01コードベースの基礎的なセキュリティ監査
  2. 02実行するセキュリティ検査の選択
  3. 03確認済みの所見をJira課題として追跡

インストール

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

$npx skills add https://github.com/enigmatry/agent-skills --skill baseline-security-audit

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

同梱ファイル

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

references/
authentication_security.md
code_minification.md
code_quality.md
cookie_storage_security.md
cryptography_security.md
data_minimization.md
database_field_encryption.md
exception_handling.md
http_verb_whitelisting.md
idor.md
input_validation.md
logging.md
output_encoding.md
packages.md
secrets.md
security_headers.md
sensitive_query_strings.md
sql_injection.md
ssl_tls_configuration.md

詳細

ベースラインセキュリティ監査スキル

概要

このスキルは、一般的なセキュリティ上の脆弱性や設定ミスを分析し、コードベースの包括的なベースラインセキュリティ監査を実施します。ユーザーの確認後、選択された検出結果を追跡および修正するための Jira ストーリーを作成できます。

このスキルの機能

このスキルでは、以下のセキュリティチェックを実行します(各チェックの詳しいガイダンスは references フォルダーにあります)。

  1. シークレットと認証情報 - ハードコードされたシークレット、認証情報、API キーをスキャンし、環境ごとに認証情報が異なることを確認します

  2. パッケージのセキュリティ - 既知の脆弱性がある依存関係、サポートが終了したランタイム、サプライチェーン管理をチェックします

  3. SQL インジェクション - データベースクエリにおける SQL インジェクションの脆弱性を特定します

  4. 例外処理 - 例外の詳細をレスポンスに含めず、ログに記録するためのエラー処理を確認します

  5. ログのセキュリティ - ログの出力先、レベル、監査ログの分離、およびログにシークレットや個人を特定できる情報(PII)が含まれていないことを検証します

  6. 機密情報を含むクエリ文字列 - URL のクエリパラメーターや URL ログに機密データが含まれていないかチェックします

  7. IDOR(安全でない直接オブジェクト参照) - オブジェクトレベルおよび機能レベルの認可チェックを分析します

  8. 出力エンコーディング - XSS を防ぐためのエンコーディングとサニタイズを検証します

  9. 入力検証 - 一括割り当てやパストラバーサルを含め、ユーザー入力がサーバー側で検証されていることを確認します

  10. コードの圧縮 - 本番ビルドでソースマップやデバッグコードが公開されないことを検証します

  11. データ最小化 - API やフロントエンドを通じた不要なデータの露出、および機密データの不要な保存を特定します(GDPR)

  12. Cookie とストレージのセキュリティ - Cookie フラグと、ブラウザーにおける機密データの保存を検証します

  13. 暗号化のセキュリティ - 強力なアルゴリズム、鍵管理、パスワードハッシュ化を確認します

  14. セキュリティヘッダー - レスポンスのセキュリティヘッダー(CSP、HSTS、Permissions-Policy など)と、バージョンが開示されるヘッダーの削除をチェックします

  15. HTTP メソッドの許可リスト - アプリケーションで使用する HTTP メソッドのみが許可されていることを確認します

  16. SSL/TLS の設定 - TLS プロトコル、暗号スイート、証明書、コードレベルの TLS 設定を検証します

  17. データベースフィールドの暗号化 - 機密列が列レベルまたはアプリケーションレベルで暗号化されていることを検証します

  18. コード品質 - ビルド警告、セキュリティアナライザー、SonarQube のセキュリティ評価を確認します

  19. 認証のセキュリティ - Authorization Code + PKCE を使用する OpenID Connect、デフォルトでの認可、Development 環境に限定された Swagger、トークンの有効期間、パスワードポリシーを検証します

各チェックでは、以下を提示します。

  • 検索対象となる具体的なパターン
  • 特定すべき危険な兆候
  • 以下の単一の重大度スケールに基づく検出結果
  • 修正ガイダンス
  • コード例

重大度の尺度

すべてのリファレンスファイルで、調査結果を以下の尺度で評価します。評価は影響度と悪用可能性に基づいて行い、入力を提供した人物や影響を受ける環境によって決めてはいけません。管理者が提供した入力であっても、重大度を中以上とし、テナント間またはユーザー間に及ぶ影響は、少なくとも高とします。

重大度定義典型的な例
致命的認証されていない入力または低権限の入力から現在悪用可能であり、深刻な影響があるソース、設定、ログ内のシークレットまたは認証情報。ユーザー入力から到達可能なインジェクション。認証のバイパス。CVSS 9.0+。CVV または PAN が平文で保存されている。シークレットを保護する暗号が破損している、または独自実装である
高認証済み入力で悪用可能、機密データを露出する、または中核となる制御が欠如しているエンドポイントの認可が欠如している。HTTP レスポンスにスタックトレースまたは例外の詳細が含まれる。TLS 1.0/1.1 が有効。HSTS が設定されていない。認証されていない CBC データがクライアントに渡される。CVSS 7.0–8.9。PII または特別なカテゴリのデータがペイロードとしてログに記録される。ランタイムがサポート終了後も使用されている
中多層防御の欠落、または悪用に別の脆弱性を必要とする設定ミスセキュリティヘッダーが欠如している。セキュリティアナライザーが有効になっていない。SonarQube の未レビューのセキュリティ問題。CVSS 4.0–6.9。本番環境での詳細なログ記録。証明書の自動更新がない
低衛生面または情報提供に関するもので、それ単独では現実的な悪用経路がないSameSite が明示されていない。HSTS の preload がない。環境間で共有される公開識別子。耐量子計算機暗号への対応準備。ドキュメントの不備。CVSS 4.0 未満

SECURE / PARTIALLY SECURE / INSECURE、IMPLEMENTED / PARTIAL / NOT、EXCESSIVE / MODERATE / MINIMAL などのステータス表記は重大度ではありません。リファレンスファイルで評価に使用されている場合でも、報告するすべての調査結果には、上記4段階の重大度のいずれかを付与します。

すべての調査結果に次の情報を記載してください: 重大度 · チェック番号と名称 · 場所(ファイル:行、ヘッダー、またはライブ URL) · 発見した内容 · 修正方法 · OWASP Top 10:2025 カテゴリー(以下のマッピングに基づく)。

標準への対応付け

各検出事項に、そのチェックの OWASP Top 10:2025 カテゴリーと ASVS 5.0 の章をタグ付けします。

#チェックOWASP Top 10:2025ASVS 5.0
1シークレットと認証情報A02 Security MisconfigurationV13 Configuration
2パッケージセキュリティA03 Software Supply Chain FailuresV15 Secure Coding and Architecture
3SQL インジェクションA05 InjectionV1 Encoding and Sanitization
4例外処理A10 Mishandling of Exceptional ConditionsV16 Security Logging and Error Handling
5ロギングセキュリティA09 Security Logging and Alerting FailuresV16 Security Logging and Error Handling, V14 Data Protection
6機密性の高いクエリ文字列A04 Cryptographic Failures (data exposure)V14 Data Protection
7IDOR(安全でない直接オブジェクト参照)A01 Broken Access ControlV8 Authorization
8出力エンコーディングA05 InjectionV1 Encoding and Sanitization, V3 Web Frontend Security
9入力検証A05 Injection, A06 Insecure DesignV2 Validation and Business Logic
10コードの最小化A02 Security MisconfigurationV13 Configuration, V3 Web Frontend Security
11データの最小化A04 Cryptographic Failures, A06 Insecure DesignV14 Data Protection
12Cookie とストレージのセキュリティA02 Security Misconfiguration, A07 Authentication FailuresV7 Session Management, V3 Web Frontend Security
13暗号化セキュリティA04 Cryptographic FailuresV11 Cryptography
14セキュリティヘッダーA02 Security MisconfigurationV3 Web Frontend Security, V13 Configuration
15HTTP メソッドのホワイトリスト化A02 Security MisconfigurationV4 API and Web Service, V13 Configuration
16SSL/TLS の設定A04 Cryptographic Failures, A02 Security MisconfigurationV12 Secure Communication
17データベースフィールドの暗号化A04 Cryptographic FailuresV14 Data Protection, V11 Cryptography
18コード品質A03 Software Supply Chain Failures, A06 Insecure DesignV15 Secure Coding and Architecture
19認証セキュリティA07 Authentication Failures, A01 Broken Access ControlV6 Authentication, V8 Authorization, V10 OAuth and OIDC

出典:https://owasp.org/Top10/2025/ , https://github.com/OWASP/ASVS/tree/v5.0.0

使用方法

セキュリティ監査を依頼して、このスキルを呼び出します。

  • 「ベースラインのセキュリティ監査を実施してください」
  • 「コードベースにセキュリティ上の問題がないか確認してください」
  • 「このプロジェクトのセキュリティチェックを実行してください」

実行フロー

ステップ 0 — 実行するチェックを選択する(最初に一度だけ質問)

ほかの作業を始める前に、実行可能なチェックの一覧をすべて提示し、どれを実行するかユーザーに尋ねます。

"実行するセキュリティチェックを選択してください。

#チェック
1シークレットと認証情報
2パッケージセキュリティ
3SQL インジェクション
4例外処理
5ログのセキュリティ
6機密情報を含むクエリ文字列
7IDOR(安全でない直接オブジェクト参照)
8出力エンコーディング
9入力検証
10コードの最小化
11データの最小化
12Cookie とストレージのセキュリティ
13暗号化のセキュリティ
14セキュリティヘッダー
15HTTP メソッドのホワイトリスト化
16SSL/TLS の設定
17データベースフィールドの暗号化
18コード品質
19認証のセキュリティ

すべてのチェックを実行するには all と返信するか、特定のチェックだけを実行するには番号をカンマ区切りで指定してください(例:1, 3, 5)。"

選択されたチェック番号を SELECTED_CHECKS として保存します。選択されたチェックのみを実行し、報告し、Jira ストーリーを作成します。 監査中に再度質問してはいけません。

SELECTED_CHECKS に 14(セキュリティヘッダー) または 16(SSL/TLS の設定) が含まれている場合、あるいは all が選択された場合は、チェックの選択直後に本番 URL をユーザーに尋ねます。

"チェック 14 および/または 16 には、稼働中の URL が必要です。本番 URL を教えてください。(空欄の場合は、稼働環境の検査を省略して静的解析に切り替えます)"

回答を PRODUCTION_URL として保存します。ユーザーが空欄のままにした場合は、PRODUCTION_URL を空に設定し、両方のチェックで静的解析を実施します。 監査中にこの URL を再度尋ねてはいけません。

ステップ 0b — ホスティングモデルを特定する(チェック実行前に一度だけ)

チェック 10、12、14、15、16 はアプリケーションの実行場所によって異なります。web.config が有効なのは IIS および Windows 上の Azure App Service のみだからです。チェックを実行する前に、リポジトリの証拠から HOSTING_MODEL を特定します。証拠が矛盾している場合、または存在しない場合に限り、ユーザーに一度だけ尋ねます。

HOSTING_MODEL証拠チェックへの影響
iis<aspNetCore> または <system.webServer> を含む web.config、linuxFxVersion のない Bicep Microsoft.Web/sites、IIS または Windows App Service にデプロイするパイプラインweb.config の各セクション(customHeaders、requestFiltering、removeServerHeader、httpErrors)が適用されます
linuxDockerfile、Bicep の linuxFxVersion、kind: 'app,linux'、AKS または Container Apps のマニフェスト、Kestrel が直接公開されているweb.config は無視されます。同等の設定はミドルウェア(UseHsts、セキュリティヘッダーミドルウェア、メソッドフィルタリング)およびコンテナーまたはプラットフォームの設定で行います。不足している web.config のエントリを報告してはいけません
edge(いずれかと組み合わせる修飾子)Bicep Microsoft.Cdn/profiles(Front Door)、Microsoft.Network/applicationGateways、またはアプリケーションの前段にあるリバースプロキシヘッダー、TLS ポリシー、メソッドフィルタリングはエッジで設定または削除される場合があります。PRODUCTION_URL が利用可能な場合、稼働環境のレスポンスを正とし、UseForwardedHeaders を設定する必要があります

結果を HOSTING_MODEL として保存し、再度尋ねてはいけません。

Jira 連携

ステップ 1 — Jira プロジェクトコードを取得する(最初に一度だけ質問)

選択されたチェックを確認した後、ユーザーに一度だけ、次のとおり尋ねます。

"セキュリティストーリーを作成する Jira プロジェクトコードを教えてください。(例:SEC、PROJ)"

回答を JIRA_PROJECT_CODE として保存し、その後のすべてのストーリー作成呼び出しで再利用します。 監査中に再度尋ねてはいけません。

ステップ 2 — Jira の優先度マッピング

すべての検出事項には、重大度スケールのセクションにある 4 段階の重大度のいずれかがすでに設定されています。以下のとおり、Jira の優先度にマッピングします(優先度名は対象の Jira プロジェクトのスキームと照合してください。スキームによっては Normal ではなく Medium が使用されます)。

重大度Jira の優先度
CriticalHighest
HighHigh
MediumNormal
LowLow
ステップ 3 — すべての検出事項を提示し、Jira に送信する項目を尋ねる

選択されたすべてのチェックが完了したら、すべての検出事項をまとめた番号付きの表を出力します。各チェックは異なるトピックを対象としているため、設定は必ず 1 つのチェックのみに報告します。同じファイルと行が 2 回挙がった場合は、そのトピックを対象とするチェックの検出事項を残し、もう一方を削除します。

#チェック検出事項場所重大度OWASP 2025
11 Secrets and Credentialsハードコードされた API キーsrc/Api/appsettings.json:14CriticalA02
2...............

次に、ユーザーに一度だけ尋ねます。

「Jira ストーリーとして作成する検出事項を選んでください。 すべての検出事項のストーリーを作成するには all、番号をカンマ区切りで指定するには(例:1, 3, 5)、Jira への作成をスキップするには none と返信してください。」

回答を受け取る前に Jira ストーリーを作成してはいけません。

ステップ 4 — 選択した各検出項目について Jira ストーリーを作成する

パッケージセキュリティ — 特別な統合ルール: パッケージごとに 1 件のストーリーを作成する代わりに、npm の検出項目をすべて 1 件のストーリーに、NuGet の検出項目をすべて 1 件のストーリーに統合します(このチェックで作成するストーリーは最大 2 件です)。統合したストーリーの説明に、影響を受けるすべてのパッケージ、現在のバージョン、推奨バージョン、CVE、リスクレベルを記載します。統合したストーリーには、個々の検出項目のうち最も高い優先度を適用します。パッケージエコシステムに検出項目がない場合は、そのストーリーを作成しません。

最初のストーリーを作成する前に、getAccessibleAtlassianResources を 1 回呼び出し、返された cloud id を CLOUD_ID として保存します。以下のすべての Jira 呼び出しでこの値が必要です。

ユーザーが選択した検出項目ごとに、createJiraIssue ツールを使って次のフィールドを指定し、Jira ストーリーを 1 件作成します。

フィールド値
cloudIdCLOUD_ID
projectKeyJIRA_PROJECT_CODE(上で取得済み)
issueTypeNameStory
summary[Security Audit] <Check Name>: <short finding title>
description検出箇所(ファイルと行番号)、問題の説明、修正手順、および OWASP Top 10:2025: <category> の行(Markdown)
additional_fields{"labels": ["BaselineSecurity"], "priority": {"name": "<mapped priority>"}} — ラベルと優先度はこのオブジェクトでのみ指定できます

summary の例: [Security Audit] Secrets Management: Hardcoded API key in appsettings.json

createJiraIssue の呼び出しが成功するたびに:

  1. 作成されたストーリーキーを監査結果にインラインで表示します。例:(→ 作成済み PROJ-42)
  2. createIssueLink を呼び出して、新しいストーリーをこのプロジェクトの ETL プロジェクトストーリーに関連付けます:
    • cloudId:CLOUD_ID
    • type:"Relates"
    • inwardIssue:新しく作成したストーリーキー(例:YES-42)
    • outwardIssue:ETL プロジェクトストーリーキー(例:ETL-2879)

最初のリンクを作成する前に、searchJiraIssuesUsingJql(cloudId = CLOUD_ID)を使って ETL ストーリーを 1 回検索します。たとえば、project = ETL AND summary ~ "<current project name>" AND summary ~ "Baseline security" のように検索します。一致する課題が複数ある場合、または見つからない場合は、候補を表示してユーザーにキーを尋ねます。キーを ETL_STORY_KEY として保存し、再検索しないでください。

⚠️ これには customfield_10014(Epic Link)を 使用しないでください。このフィールドで指定できるのは Epic のみです。 ETL ストーリーは Epic ではなく Story です。代わりに createIssueLink を使用してください。

ステップ 5 — 最終サマリーテーブル

選択したストーリーをすべて作成した後、統合テーブルを出力します:

Story KeyCheckSummaryPriority
PROJ-42Secrets Managementappsettings.json 内のハードコードされた API キーHigh
............

ユーザーが none と返信した場合は、ストーリーを作成せず、このテーブルも省略してください。

コメント