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.
Untuk memindai seluruh repositori, 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 commit atau rentang cabang, tentukan kedua revisi 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
- Pilih Changes.
- Konfirmasikan repositori yang sedang di-checkout, cabang saat ini, dan commit terbaru.
- Di bagian Changes to review, pilih:
Uncommitted changesuntuk worktree saat ini.- Commit terbaru untuk peninjauan satu commit.
- Revisi dasar dan revisi kepala untuk rentang cabang atau pull request.
- Konfirmasikan bahwa ringkasan menjelaskan perubahan yang ingin Anda tinjau.
- Pilih Start scan.
Codex tidak melakukan checkout cabang lain atau mengganti worktree yang dipilih. Jika revisi yang diminta tidak tersedia secara lokal, ambil revisi tersebut sebelum peninjauan atau berikan revisi dasar dan revisi ujung yang tersedia secara lokal.
Tindak lanjuti temuan
Setelah meninjau hasilnya, perbaiki dan verifikasi temuan yang Anda terima atau ekspor dan lacak temuan.
Otomatiskan peninjauan dalam CI/CD
Untuk CLI mandiri, lihat Jalankan Codex Security di
CI untuk JSON terstruktur, kebijakan tingkat keparahan, dan unggahan
SARIF. Lanjutkan bagian ini untuk memanggil skill plugin yang terinstal
melalui codex exec.
Jalankan $codex-security:security-diff-scan di CI saat runner dapat memanggil
Codex CLI tanpa interaksi. Pertama, instal CLI tanpa mengekspos kredensial
pemindaian:
npm install --global @openai/codexInstal plugin Codex Security di CLI:
codex plugin add codex-security@openai-curatedPerintah instalasi menggunakan marketplace plugin publik Codex CLI. Lihat catatan perubahan plugin untuk persyaratan khusus versi.
Selanjutnya, sediakan API key OpenAI dari penyimpanan rahasia CI Anda sebagai
CODEX_SECURITY_API_KEY. Ekspos kredensial 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."Sandbox yang dapat ditulisi memungkinkan pemindaian membuat artefak sementara. Prompt tetap mengharuskan Codex membiarkan checkout kode sumber tanpa perubahan.
Pemindaian menulis outputnya ke
$TMPDIR/codex-security-scans/<repository>/<scan-id>/:
| File | Isi |
|---|---|
report.md |
Titik masuk utama yang dapat dibaca untuk direktori pemindaian lengkap. |
findings/<slug>/ |
Laporan kerentanan terperinci dan file bukti konsep pendukung, jika diminta. |
hardening/ |
Panduan penguatan struktural dan usulan pendukung, jika diminta. |
findings.json |
Temuan dengan pengenal stabil, tingkat keparahan, tingkat keyakinan, lokasi kode sumber, dan remediasi. Gunakan bidang ini dalam alur kerja keamanan atau alat hilir. |
scan-manifest.json |
Tanda terima pemindaian tersegel dengan target yang ditinjau, revisi, dan hash artefak. |
coverage.json |
Area yang ditinjau dan ditangguhkan, pengecualian, serta kelengkapan cakupan. |
Untuk definisi bidang, lihat skema temuan. Gunakan findingId untuk mengidentifikasi temuan dan occurrenceId untuk kemunculannya
dalam pemindaian ini.
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.jsonContoh-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.
Hasil pemindaian dapat mencakup detail kerentanan yang sensitif. Jaga kerahasiaan artefak, serta tinjau tujuan dan kontennya sebelum memublikasikan temuan. Pilih contoh untuk penyedia CI Anda:
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 Buat variabel CI/CD CODEX_SECURITY_API_KEY yang disamarkan dan tinjau artefak
pemindaian secara privat sebelum membagikan temuan.
codex-security-review:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_SOURCE_PROJECT_ID == $CI_PROJECT_ID'
variables:
GIT_DEPTH: "0"
script:
- |
codex_security_api_key="$CODEX_SECURITY_API_KEY"
unset CODEX_SECURITY_API_KEY
export CODEX_HOME="/tmp/codex-home-$CI_JOB_ID"
export TMPDIR="/tmp/codex-security-$CI_JOB_ID"
export BASE_REVISION="$CI_MERGE_REQUEST_DIFF_BASE_SHA"
export HEAD_REVISION="${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA:-$CI_COMMIT_SHA}"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
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."
after_script:
- |
unset CODEX_SECURITY_API_KEY
scan_root="/tmp/codex-security-$CI_JOB_ID/codex-security-scans"
if [ -d "$scan_root" ]; then
tar -czf codex-security-artifacts.tar.gz -C "$scan_root" .
fi
artifacts:
when: always
paths:
- codex-security-artifacts.tar.gz trigger: none
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
fetchDepth: 0
- bash: |
set -euo pipefail
export CODEX_HOME="$AGENT_TEMPDIRECTORY/codex-home"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
displayName: Install Codex Security
- bash: |
set -euo pipefail
export CODEX_HOME="$AGENT_TEMPDIRECTORY/codex-home"
export TMPDIR="$AGENT_TEMPDIRECTORY/codex-security"
export HEAD_REVISION="$SYSTEM_PULLREQUEST_SOURCECOMMITID"
export BASE_REVISION="$(git merge-base HEAD^1 "$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."
displayName: Review code changes
condition: and(succeeded(), ne(variables['System.PullRequest.IsFork'], 'True'))
env:
CODEX_SECURITY_API_KEY: $(CODEX_SECURITY_API_KEY)
- publish: $(Agent.TempDirectory)/codex-security/codex-security-scans
artifact: codex-security-review
condition: always()Untuk Azure Repos, konfigurasikan kebijakan cabang Build validation untuk menjalankan pipeline pada pull request.
pipeline {
agent { label 'linux' }
stages {
stage('Codex Security review') {
when {
allOf {
changeRequest()
expression { !env.CHANGE_FORK?.trim() }
}
}
steps {
sh '''#!/usr/bin/env bash
set -euo pipefail
export CODEX_HOME="/tmp/codex-home-$BUILD_TAG"
export TMPDIR="/tmp/codex-security-$BUILD_TAG"
mkdir -p "$TMPDIR"
git fetch --no-tags origin "$CHANGE_TARGET"
target="$(git rev-parse FETCH_HEAD)"
git fetch --no-tags origin "$CHANGE_BRANCH"
git rev-parse FETCH_HEAD > "$TMPDIR/head"
git merge-base "$target" "$(cat "$TMPDIR/head")" > "$TMPDIR/base"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
'''
withCredentials([string(credentialsId: 'codex-security-api-key', variable: 'CODEX_SECURITY_API_KEY')]) {
sh '''#!/usr/bin/env bash
set +x
set -euo pipefail
export CODEX_HOME="/tmp/codex-home-$BUILD_TAG"
export TMPDIR="/tmp/codex-security-$BUILD_TAG"
export HEAD_REVISION="$(cat "$TMPDIR/head")"
export BASE_REVISION="$(cat "$TMPDIR/base")"
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."
'''
}
}
post {
always {
sh '''#!/usr/bin/env bash
set -euo pipefail
scan_root="/tmp/codex-security-$BUILD_TAG/codex-security-scans"
if [ -d "$scan_root" ]; then
tar -czf codex-security-artifacts.tar.gz -C "$scan_root" .
fi
'''
archiveArtifacts artifacts: 'codex-security-artifacts.tar.gz', allowEmptyArchive: true
}
}
}
}
} 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.