Bahasa Indonesia

Tinjau perubahan kode untuk keamanan

Tinjau perubahan kode untuk keamanan

Tinjau pull request dan perubahan lokal untuk menemukan regresi keamanan secara manual atau dalam CI/CD.

Jalankan peninjauan perubahan keamanan untuk menemukan regresi dalam satu set perubahan yang didukung Git. Codex meninjau setiap file mirip sumber yang berubah beserta kode pendukung langsungnya. Peninjauan ini tidak diperluas menjadi audit repositori penuh.

Jika Anda ingin memindai repositori penuh alih-alih perubahan tertentu, lihat Jalankan pemindaian keamanan.

Jalankan peninjauan manual

Di aplikasi desktop, buka Security, pilih Scans, lalu pilih + Scan. Pilih repositori, lalu pilih Changes. Tinjau perubahan yang belum di-commit, satu commit, atau revisi dasar dan revisi kepala. Deep scan tidak tersedia untuk pemindaian perubahan.

Anda juga dapat meminta Codex meninjau perubahan yang belum di-commit dalam percakapan:

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

Untuk rentang commit atau cabang, tentukan kedua ujungnya bila diperlukan:

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.

Anda juga dapat menyebutkan pull request jika revisi dasar dan revisi kepalanya tersedia dalam checkout lokal.

Konfirmasikan perubahan dalam penyiapan

  1. Pilih Changes.
  2. Konfirmasikan repositori yang sedang di-checkout, cabang saat ini, dan commit terbaru.
  3. Di bagian Changes to review, pilih:
    • Uncommitted changes untuk worktree saat ini.
    • Commit terbaru untuk peninjauan satu commit.
    • Revisi dasar dan revisi kepala untuk rentang cabang atau pull request.
  4. Konfirmasikan bahwa ringkasan menjelaskan perubahan yang ingin Anda tinjau.
  5. Pilih Start scan.

Alur kerja ini tidak melakukan checkout cabang lain atau mengubah working tree yang dipilih. Jika revisi yang diminta tidak tersedia secara lokal, ambil revisi tersebut sebelum peninjauan atau berikan revisi dasar dan revisi kepala yang tersedia secara lokal.

Tindak lanjuti temuan

Setelah meninjau hasilnya, perbaiki dan verifikasi temuan yang diterima atau ekspor dan lacak temuan.

Otomatiskan peninjauan dalam CI/CD

Jalankan skill $codex-security:security-diff-scan yang sama dari CI ketika runner dapat memanggil Codex CLI tanpa interaksi. Pertama, instal CLI dan plugin tanpa mengekspos kredensial pemindaian:

npm install --global @openai/codex

Instal plugin Codex Security di CLI:

codex plugin add codex-security@openai-curated

Perintah penginstalan menggunakan marketplace plugin publik Codex CLI. Periksa log perubahan plugin sebelum Anda mengandalkan versi atau fitur plugin tertentu dalam CI.

Kemudian, ekspos OpenAI API key dari penyimpanan rahasia CI Anda sebagai CODEX_SECURITY_API_KEY hanya untuk pemindaian:

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

Pemindaian menulis outputnya ke $TMPDIR/codex-security-scans/<repository>/<scan-id>/:

File Isi
report.md Titik masuk utama yang mudah dibaca ke direktori pemindaian lengkap.
findings/<slug>/ Laporan kerentanan terperinci dan file proof-of-concept pendukung, jika diminta.
hardening/ Panduan penguatan struktural dan proposal pendukung, jika diminta.
findings.json Temuan dengan pengidentifikasi stabil, tingkat keparahan, tingkat keyakinan, lokasi sumber, dan perbaikan. Masukkan ke alur kerja keamanan internal yang disetujui atau alat hilir.
scan-manifest.json Tanda terima pemindaian tersegel yang memuat target dan revisi yang ditinjau serta hash artefak.
coverage.json Area yang ditinjau dan ditangguhkan, pengecualian, serta kelengkapan cakupan.

Skema findings.json menentukan struktur lengkapnya. Skema tersebut mencakup kolom berikut:

Kolom Jenis Deskripsi
documentType String Mengidentifikasi dokumen sebagai codex-security.findings.
schemaVersion String Mengidentifikasi versi skema temuan.
scanId String Mengidentifikasi pemindaian yang menghasilkan temuan.
findings Array Berisi nol atau beberapa objek temuan.
findings[].findingId String Pengidentifikasi temuan stabil yang berasal dari sidik jari temuan.
findings[].occurrenceId String Mengidentifikasi kemunculan temuan ini dalam pemindaian tertentu.
findings[].ruleId String Mengidentifikasi keluarga kerentanan.
findings[].identity Object Berisi jangkar semantik dan pengidentifikasi instans saudara yang bersifat opsional.
findings[].fingerprints Object Berisi algoritma sidik jari dan sidik jari utama.
findings[].title String Memberikan judul singkat temuan.
findings[].summary String Merangkum kerentanan dan dampaknya.
findings[].severity Object Berisi tingkat keparahan dan detail penilaian opsional.
findings[].confidence Object Berisi tingkat keyakinan dan alasannya.
findings[].taxonomy Object Berisi kategori kerentanan dan pengidentifikasi CWE.
findings[].locations Array Mencantumkan file yang terdampak, nomor baris, dan peran lokasi.
findings[].remediation String Menjelaskan perbaikan yang direkomendasikan.
findings[].provenance Object Mengidentifikasi sumber temuan.

Sebagai contoh, perintah ini mencetak satu baris yang dipisahkan tab untuk setiap temuan:

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

Contoh-contoh ini mengasumsikan runner Linux tepercaya dengan Node.js dan npm, Git, Python 3, jq, serta alat baris perintah penyedia. Prefiks paket global npm harus dapat ditulisi.

Pilih contoh untuk penyedia CI Anda. Hasil pemindaian dapat mencakup detail kerentanan yang sensitif. Jaga agar artefak tetap privat, dan publikasikan temuan hanya setelah meninjau audiens, konten, dan persetujuan yang diperlukan.

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

Contoh tersebut melewati pull request hasil fork. Jalankan tugas yang menggunakan kredensial hanya dari definisi pipeline yang dilindungi dan hanya untuk kontributor yang dipercaya untuk menggunakan kredensial pemindaian. Arsipkan codex-security-scans untuk menyimpan temuan terstruktur, manifest, cakupan, dan report.md bersama-sama, beserta setiap keluaran findings/ atau hardening/ yang diminta. Mulailah dengan hasil yang bersifat saran dan tinjau cakupan serta waktu proses sebelum menjadikan tugas tersebut sebagai pemeriksaan wajib.

Untuk penanganan API key dan kontrol sandbox, lihat Mode noninteraktif. Jika organisasi Anda mengizinkan Codex GitHub Action, tindakan tersebut dapat menginstal CLI saat runtime, tetapi Anda tetap harus menginstal plugin terlebih dahulu dan mengarahkan input codex-home tindakan tersebut ke CODEX_HOME yang sama.