日本語

コードの変更にセキュリティ上の問題がないかレビューする

Pull request とローカルの変更にセキュリティ上のリグレッションがないか、手動または CI/CD でレビューします。

セキュリティ変更レビューを実行し、Git で管理された一つの変更セットに含まれるリグレッションを検出します。 Codex は、変更されたソースコードに類する各ファイルと、それを直接支えるコードをレビューします。レビューの範囲をリポジトリ全体の監査にまで拡張することはありません。

特定の変更ではなくリポジトリ全体をスキャンする場合は、セキュリティスキャンを実行するを参照してください。

手動レビューを実行する

デスクトップアプリで Security を開き、Scans+ Scan の順に選択します。リポジトリを選択してから、Changes を選択します。未 commit の変更、一つの commit、またはベースとヘッドのリビジョンをレビューします。変更スキャンでは Deep scan を使用できません。

会話で、未 commit の変更をレビューするよう Codex に依頼することもできます。

Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.

commit または branch の範囲を対象にする場合は、必要に応じて両端を指定します。

Use $codex-security:security-diff-scan to review the changes from origin/main to HEAD for security regressions. Focus on authentication, authorization, input handling, filesystem access, network requests, and secrets.

ベースとヘッドのリビジョンをローカルの checkout で利用できる場合は、Pull request を指定することもできます。

セットアップで変更内容を確認する

  1. Changes を選択します。
  2. checkout 済みのリポジトリ、現在の branch、最新の commit を確認します。
  3. Changes to review で、次のいずれかを選択します。
    • 現在の作業ツリーには Uncommitted changes
    • 単一 commit のレビューには最新の commit。
    • branch または Pull request の範囲には、ベースとヘッドのリビジョン。
  4. 概要に、レビューしようとしている変更が記載されていることを確認します。
  5. Start scan を選択します。

このワークフローでは、別の branch を checkout したり、選択した作業ツリーを変更したりしません。要求したリビジョンがローカルで利用できない場合は、レビューの前に取得するか、ローカルで利用できるベースとヘッドを指定してください。

検出結果に対応する

結果をレビューした後、受け入れた検出結果を修正して検証するか、検出結果をエクスポートして追跡するに進みます。

CI/CD でレビューを自動化する

runner が対話なしで Codex CLI を呼び出せる場合は、CI から同じ $codex-security:security-diff-scan skill を実行します。まず、スキャン用の認証情報を公開せずに CLI とプラグインをインストールします。

npm install --global @openai/codex

Codex Security プラグインを CLI にインストールします。

codex plugin add codex-security@openai-curated

インストールコマンドは公開 Codex CLI プラグインマーケットプレイスを使用するため、ホストされたデスクトップアプリのカタログとは異なるバージョンが提供される場合があります。CI で特定のプラグインバージョンや機能に依存する前に、プラグインの変更履歴を確認してください。

次に、CI のシークレットストアにある OpenAI API key を、スキャン時に限り CODEX_SECURITY_API_KEY として公開します。

CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
  --sandbox workspace-write \
  "Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."

スキャンの出力は $TMPDIR/codex-security-scans/<repository>/<scan-id>/ に書き込まれます。

ファイル 内容
report.md 完全なスキャンディレクトリを確認するための主要な読み取り用エントリポイント。
findings/<slug>/ 報告対象の検出結果ごとに一つ作成される詳細な脆弱性レポート。利用可能な場合は、補助的な概念実証ファイルも含まれます。
hardening/ スキャンに報告対象の検出結果がある場合の、構造的な堅牢化ポートフォリオと補助的な提案または図。
findings.json 安定した識別子、重大度、信頼度、ソース上の位置、修正方法を含む検出結果。承認済みの社内セキュリティワークフローまたは後続ツールに渡します。
scan-manifest.json レビュー対象、リビジョン、成果物のハッシュを含む、封印されたスキャン記録。
coverage.json レビュー済みおよび保留中の対象領域、除外項目、カバレッジの完全性。

findings.json のスキーマでは、完全な構造が定義されています。このスキーマには、次のフィールドが含まれます。

フィールド 説明
documentType String ドキュメントを codex-security.findings として識別します。
schemaVersion String 検出結果スキーマのバージョンを識別します。
scanId String 検出結果を生成したスキャンを識別します。
findings Array 0 個以上の検出結果オブジェクトを格納します。
findings[].findingId String 検出結果のフィンガープリントから導出された、安定した検出結果識別子。
findings[].occurrenceId String 特定のスキャンにおける、この検出結果の出現を識別します。
findings[].ruleId String 脆弱性ファミリーを識別します。
findings[].identity Object セマンティックアンカーと、任意の兄弟インスタンス識別子を格納します。
findings[].fingerprints Object フィンガープリントのアルゴリズムと主要フィンガープリントを格納します。
findings[].title String 検出結果の短いタイトルを示します。
findings[].summary String 脆弱性とその影響を要約します。
findings[].severity Object 重大度レベルと、任意のスコアリング詳細を格納します。
findings[].confidence Object 信頼度レベルと、その根拠を格納します。
findings[].taxonomy Object 脆弱性カテゴリと CWE 識別子を格納します。
findings[].locations Array 影響を受けるファイル、行番号、位置の役割を列挙します。
findings[].remediation String 推奨される修正方法を説明します。
findings[].provenance Object 検出結果の出所を識別します。

たとえば、次のコマンドは検出結果ごとにタブ区切りの行を一つ出力します。

jq -r '
  .findings[] |
  [.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
  @tsv
' findings.json

これらの例では、Node.js と npm、Git、Python 3、jq、プロバイダーのコマンドラインツールが用意された、信頼できる Linux runner を想定しています。npm のグローバルパッケージプレフィックスには書き込み権限が必要です。

利用している CI プロバイダーに対応する例を選択してください。スキャン結果には、機密性の高い脆弱性の詳細が含まれる場合があります。成果物は非公開に保ち、対象者、内容、必要な承認を確認した後にのみ検出結果を公開してください。

name: Codex Security review

on:
  pull_request:

jobs:
  security-review:
    if: github.event.pull_request.head.repo.full_name == github.repository
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v5
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          fetch-depth: 0
          persist-credentials: false

      - name: Install Codex Security
        env:
          CODEX_HOME: ${{ runner.temp }}/codex-home
        run: |
          npm install --global @openai/codex
          codex plugin add codex-security@openai-curated

      - name: Review code changes
        env:
          CODEX_SECURITY_API_KEY: ${{ secrets.CODEX_SECURITY_API_KEY }}
          CODEX_HOME: ${{ runner.temp }}/codex-home
          TMPDIR: ${{ runner.temp }}/codex-security
          BASE_SHA: ${{ github.event.pull_request.base.sha }}
          HEAD_REVISION: ${{ github.event.pull_request.head.sha }}
        run: |
          BASE_REVISION="$(git merge-base "$BASE_SHA" "$HEAD_REVISION")"
          CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
            --sandbox workspace-write \
            "Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."

      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: codex-security-review
          path: ${{ runner.temp }}/codex-security/codex-security-scans

これらの例では、fork された Pull request をスキップします。認証情報を使用するジョブは、保護されたパイプライン定義から、スキャン用認証情報を任せられるコントリビューターに対してのみ実行してください。構造化された検出結果、 manifest、カバレッジ成果物、report.md、およびリンク先の findings/hardening/ の出力をまとめて保持するには、codex-security-scans をアーカイブします。まずは助言として結果を扱い、カバレッジと実行時間を確認してから、ジョブを必須チェックにしてください。

API key の取り扱いとサンドボックス制御については、非対話モードを参照してください。組織で Codex GitHub Actionの使用が許可されている場合は、実行時に CLI をインストールできますが、それでも先にプラグインをインストールし、Action の codex-home 入力を同じ CODEX_HOME に設定する必要があります。