보안을 위한 코드 변경 사항 검토

풀 리퀘스트와 로컬 변경 사항에서 보안 회귀가 발생했는지 수동으로 또는 CI/CD에서 검토합니다.

보안 변경 검토를 실행하여 Git으로 관리되는 하나의 변경 세트에서 회귀를 찾습니다. Codex는 변경된 소스형 파일과 이를 직접 지원하는 코드를 각각 검토합니다. 검토 범위를 전체 리포지토리 감사로 확장하지는 않습니다.

특정 변경 사항 대신 전체 리포지토리를 스캔하려면 보안 스캔 실행을 참조하세요.

수동 검토 실행

데스크톱 앱에서 Security 를 열고 Scans 를 선택한 다음 + Scan 을 선택합니다. 리포지토리를 선택한 다음 Changes 를 선택합니다. 커밋되지 않은 변경 사항, 단일 커밋 또는 기준 리비전과 헤드 리비전을 검토합니다. 변경 사항 스캔에서는 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

CLI에 Codex Security 플러그인을 설치합니다.

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

예시에서는 포크된 pull request를 건너뜁니다. 자격 증명이 필요한 작업은 보호된 파이프라인 정의에서만 실행하고, 스캔 자격 증명을 신뢰할 수 있는 기여자에 대해서만 실행하세요. 구조화된 발견 사항, 매니페스트, 검사 범위 및 report.md를 요청된 findings/ 또는 hardening/ 출력과 함께 보관하려면 codex-security-scans를 아카이브하세요. 먼저 권고 결과로 시작하고, 이 작업을 필수 검사로 지정하기 전에 검사 범위와 런타임을 검토하세요.

API key 처리와 샌드박스 제어에 관한 내용은 비대화형 모드를 참조하세요. 조직에서 Codex GitHub Action 사용을 허용하는 경우 런타임에 CLI를 설치할 수 있지만, 여전히 플러그인을 먼저 설치하고 Action의 codex-home 입력이 동일한 CODEX_HOME을 가리키도록 해야 합니다.