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

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

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

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

手動レビューを実行する

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

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

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

コミットやブランチ間の範囲については、必要に応じて両方のリビジョンを指定してください。

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.

ベースとヘッドのリビジョンをローカルのチェックアウト で利用できる場合は、プルリクエストを指定することもできます。

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

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

Codex は別のブランチをチェックアウトしたり、選択した作業ツリーを切り替えたりしません。指定したリビジョンがローカルにない場合は、レビュー前にフェッチするか、ローカルで利用できるベースとヘッドを指定してください。

検出結果に対応する

結果をレビューしたら、受け入れた検出事項を修正して検証するか、検出事項をエクスポートして追跡してください。

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

スタンドアロンの CLI で構造化 JSON、重大度ポリシー、SARIF のアップロードを使用するには、CI での Codex Security の実行を参照してください。インストール済みのプラグインスキルを呼び出すには、このセクションを読み進め、 codex exec を使用してください。

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

npm install --global @openai/codex

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

codex plugin add codex-security@openai-curated

インストールコマンドは、公開の Codex CLI プラグインマーケットプレイスを使用します。バージョンごとの要件は、プラグインの変更履歴を参照してください。

次に、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."

書き込み可能なサンドボックスにより、スキャンは一時的な成果物を作成できます。プロンプトでは引き続き、ソースのチェックアウトを変更しないよう Codex に指示しています。

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

ファイル 内容
report.md スキャンディレクトリ全体を確認するための、人が読める主要な入口です。
findings/<slug>/ リクエストに応じて作成される、詳細な脆弱性レポートと、それを裏付ける概念実証ファイルです。
hardening/ リクエストに応じて作成される、構造的な強化ガイダンスと関連する提案です。
findings.json 安定した識別子、重大度、確信度、ソース内の位置、修正方法を含む検出事項です。これらのフィールドは、セキュリティワークフローや後続のツールで使用できます。
scan-manifest.json レビュー対象、リビジョン、成果物のハッシュを記録した、封印済みのスキャン受領記録です。
coverage.json レビュー済みおよび確認を見送った対象領域、除外項目、カバレッジの完全性です。

フィールドの定義は、検出事項のスキーマを参照してください。検出事項の識別には findingId を、このスキャンでの出現の識別には occurrenceId を使用します。

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

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 ランナー を想定しています。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

これらの例では、フォークされたプルリクエスト を除外しています。認証情報を使用するジョブは、保護されたパイプライン定義からのみ、かつスキャン用認証情報を任せられる コントリビューターに対してのみ実行してください。構造化された検出結果、 マニフェスト、カバレッジ、report.md をまとめて保持するには、codex-security-scans をアーカイブし、リクエストした findings/ または hardening/ の出力も一緒に保存してください。まずは参考情報として結果を扱い、ジョブを必須チェックにする前に カバレッジと実行時間を確認してください。

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