Rà soát thay đổi mã nguồn về bảo mật

Rà soát các pull request và thay đổi cục bộ để phát hiện lỗi bảo mật tái phát theo cách thủ công hoặc trong CI/CD.

Chạy quy trình rà soát thay đổi bảo mật để tìm lỗi tái phát trong một tập hợp thay đổi được Git quản lý. Codex rà soát từng tệp tương tự mã nguồn đã thay đổi và mã hỗ trợ trực tiếp cho tệp đó. Quy trình này không mở rộng thành một cuộc kiểm tra toàn bộ kho lưu trữ.

Để quét toàn bộ kho lưu trữ thay vì một thay đổi cụ thể, hãy xem Chạy một lượt quét bảo mật.

Chạy rà soát thủ công

Trong ứng dụng máy tính, mở Security, chọn Scans, rồi chọn + Scan. Chọn kho lưu trữ, sau đó chọn Changes. Rà soát các thay đổi chưa commit, một commit duy nhất hoặc một bản sửa đổi cơ sở và bản sửa đổi đầu. Deep scan không khả dụng cho quy trình quét thay đổi.

Bạn cũng có thể yêu cầu Codex rà soát các thay đổi chưa commit trong một cuộc trò chuyện:

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

Với một commit hoặc phạm vi nhánh, hãy chỉ định cả hai phiên bản khi cần:

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.

Bạn cũng có thể nêu tên một pull request khi các bản sửa đổi cơ sở và đầu của nó có sẵn trong bản checkout cục bộ.

Xác nhận thay đổi trong bước thiết lập

  1. Chọn Changes.
  2. Xác nhận kho lưu trữ đã checkout, nhánh hiện tại và commit mới nhất.
  3. Trong Changes to review, chọn:
    • Uncommitted changes cho cây làm việc hiện tại.
    • Commit mới nhất để rà soát một commit duy nhất.
    • Một bản sửa đổi cơ sở và bản sửa đổi đầu cho phạm vi nhánh hoặc pull request.
  4. Xác nhận rằng phần tóm tắt mô tả đúng thay đổi bạn định rà soát.
  5. Chọn Start scan.

Codex không checkout nhánh khác hoặc chuyển cây làm việc đã chọn. Nếu một phiên bản được yêu cầu chưa có sẵn cục bộ, hãy fetch phiên bản đó trước khi rà soát hoặc cung cấp phiên bản cơ sở và phiên bản đầu cuối có sẵn cục bộ.

Xử lý các phát hiện

Sau khi rà soát kết quả, hãy khắc phục và xác minh một phát hiện đã được chấp nhận hoặc xuất và theo dõi các phát hiện.

Tự động hóa rà soát trong CI/CD

Với CLI độc lập, hãy xem Chạy Codex Security trong CI để biết về JSON có cấu trúc, chính sách mức độ nghiêm trọng và việc tải lên SARIF. Tiếp tục phần này để gọi kỹ năng plugin đã cài đặt thông qua codex exec.

Chạy $codex-security:security-diff-scan trong CI khi runner có thể gọi Codex CLI mà không cần tương tác. Trước tiên, cài đặt CLI mà không để lộ thông tin xác thực dùng cho lượt quét:

npm install --global @openai/codex

Cài đặt plugin Codex Security trong CLI:

codex plugin add codex-security@openai-curated

Lệnh cài đặt sử dụng kho plugin công khai của Codex CLI. Xem nhật ký thay đổi plugin để biết các yêu cầu cụ thể cho từng phiên bản.

Tiếp theo, cung cấp một API key OpenAI từ kho bí mật CI dưới tên CODEX_SECURITY_API_KEY. Chỉ cung cấp thông tin xác thực cho lượt quét:

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."

Môi trường cô lập có quyền ghi cho phép lượt quét tạo các tệp tạm thời. Lời nhắc vẫn yêu cầu Codex giữ nguyên bản checkout mã nguồn.

Quy trình quét ghi đầu ra vào $TMPDIR/codex-security-scans/<repository>/<scan-id>/:

Tệp Nội dung
report.md Điểm bắt đầu chính để đọc và truy cập toàn bộ thư mục quét.
findings/<slug>/ Các báo cáo lỗ hổng chi tiết và tệp chứng minh khái niệm hỗ trợ, khi được yêu cầu.
hardening/ Hướng dẫn gia cố cấu trúc và các đề xuất hỗ trợ, khi được yêu cầu.
findings.json Các phát hiện kèm mã định danh ổn định, mức độ nghiêm trọng, độ tin cậy, vị trí mã nguồn và biện pháp khắc phục. Dùng các trường này trong quy trình bảo mật hoặc công cụ hạ nguồn.
scan-manifest.json Biên nhận quét đã niêm phong, chứa mục tiêu đã rà soát, các phiên bản và mã băm của các tệp kết quả.
coverage.json Các bề mặt đã rà soát và được hoãn xem xét, các mục loại trừ và mức độ đầy đủ của phạm vi bao phủ.

Để biết định nghĩa các trường, hãy xem lược đồ phát hiện. Dùng findingId để xác định phát hiện và occurrenceId cho lần xuất hiện của phát hiện đó trong lượt quét này.

Ví dụ, lệnh này in một hàng được phân tách bằng tab cho mỗi phát hiện:

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

Các ví dụ này giả định một runner Linux đáng tin cậy có Node.js và npm, Git, Python 3, jq và các công cụ dòng lệnh của nhà cung cấp. Tiền tố gói toàn cục npm phải có quyền ghi.

Kết quả quét có thể chứa thông tin lỗ hổng nhạy cảm. Giữ các tệp kết quả ở chế độ riêng tư, đồng thời rà soát đích đến và nội dung trước khi công bố các phát hiện. Chọn ví dụ dành cho nhà cung cấp CI của bạn:

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

Các ví dụ bỏ qua pull request từ fork. Chỉ chạy các tác vụ có thông tin xác thực từ một định nghĩa pipeline được bảo vệ và chỉ dành cho những người đóng góp được tin cậy để sử dụng thông tin xác thực quét. Lưu trữ codex-security-scans để giữ các phát hiện có cấu trúc, manifest, phạm vi bao phủ và report.md cùng nhau, kèm theo mọi đầu ra findings/ hoặc hardening/ đã yêu cầu. Hãy bắt đầu với kết quả mang tính tư vấn và xem xét phạm vi bao phủ cũng như thời gian chạy trước khi biến tác vụ thành một bước kiểm tra bắt buộc.

Để biết cách xử lý API key và kiểm soát môi trường cô lập, hãy xem Chế độ không tương tác. Nếu tổ chức của bạn cho phép Codex GitHub Action, công cụ này có thể cài đặt CLI khi chạy, nhưng bạn vẫn phải cài đặt plugin trước và trỏ đầu vào codex-home của action tới chính CODEX_HOME đó.