Bahasa Indonesia

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 working tree 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 instalasi menggunakan marketplace plugin Codex CLI publik, yang mungkin menawarkan versi berbeda dari katalog aplikasi desktop yang di-hosting. Periksa changelog plugin sebelum Anda bergantung pada 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>/ Satu laporan kerentanan terperinci untuk setiap temuan yang dapat dilaporkan, beserta file bukti konsep pendukung jika tersedia.
hardening/ Portofolio penguatan struktural serta proposal atau diagram pendukung ketika pemindaian memiliki temuan yang dapat dilaporkan.
findings.json Temuan dengan pengidentifikasi stabil, tingkat keparahan, tingkat keyakinan, lokasi sumber, dan remediasi. 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-contoh tersebut melewati pull request dari fork. Jalankan pekerjaan berkredensial hanya dari definisi pipeline yang dilindungi dan hanya untuk kontributor yang dipercaya memegang kredensial pemindaian. Arsipkan codex-security-scans untuk menyimpan temuan terstruktur, manifest, artefak cakupan, report.md, serta output findings/ dan hardening/ yang tertaut bersama-sama. Mulailah dengan hasil bersifat saran dan tinjau cakupan serta waktu proses sebelum menjadikan pekerjaan 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.