Kod değişikliklerini güvenlik açısından inceleme
Pull request'leri ve yerel değişiklikleri güvenlik gerilemeleri açısından manuel olarak veya CI/CD içinde inceleyin.
Git tarafından izlenen tek bir değişiklik kümesindeki gerilemeleri bulmak için güvenlik değişikliği incelemesi çalıştırın. Codex, değiştirilen kaynak benzeri her dosyayı ve onu doğrudan destekleyen kodu inceler. İncelemeyi tam bir depo denetimine genişletmez.
Belirli bir değişiklik yerine deponun tamamını taramak istiyorsanız Güvenlik taraması çalıştırma bölümüne bakın.
Manuel inceleme çalıştırma
Masaüstü uygulamasında Security bölümünü açın, Scans öğesini ve ardından + Scan öğesini seçin. Depoyu seçtikten sonra Changes öğesini seçin. Commit edilmemiş değişiklikleri, tek bir commit'i veya bir temel ve uç revizyonu inceleyin. Deep scan, değişiklik taramalarında kullanılamaz.
Bir konuşmada Codex'ten commit edilmemiş değişiklikleri incelemesini de isteyebilirsiniz:
Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.Bir commit veya dal aralığı için gerektiğinde her iki ucu da belirtin:
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.Temel ve uç revizyonları yerel checkout'ta mevcutsa bir pull request'in adını da belirtebilirsiniz.
Kurulumdaki değişikliği doğrulama
- Changes öğesini seçin.
- Checkout yapılmış depoyu, geçerli dalı ve en son commit'i doğrulayın.
- Changes to review altında şunlardan birini seçin:
- Geçerli çalışma ağacı için
Uncommitted changes. - Tek commit'lik inceleme için en son commit.
- Bir dal veya pull request aralığı için temel ve uç revizyon.
- Geçerli çalışma ağacı için
- Özetin incelemek istediğiniz değişikliği açıkladığını doğrulayın.
- Start scan öğesini seçin.
İş akışı başka bir dalı checkout etmez veya seçili çalışma ağacını değiştirmez. İstenen revizyon yerel olarak mevcut değilse incelemeden önce revizyonu getirin ya da yerel olarak mevcut bir temel ve uç sağlayın.
Bulgularla ilgili işlem yapma
Sonuçları inceledikten sonra kabul edilen bir bulguyu düzeltip doğrulayın veya bulguları dışa aktarıp takip edin.
CI/CD içinde incelemeleri otomatikleştirme
Çalıştırıcı Codex CLI'ı etkileşim olmadan çağırabiliyorsa aynı $codex-security:security-diff-scan becerisini CI içinden
çalıştırın. Önce tarama kimlik bilgisini açığa çıkarmadan CLI'ı ve eklentiyi
kurun:
npm install --global @openai/codexCodex Security eklentisini CLI'a kurun:
codex plugin add codex-security@openai-curatedKurulum komutu, barındırılan masaüstü uygulama kataloğundan farklı bir sürüm sunabilen herkese açık Codex CLI eklenti pazarını kullanır. CI içinde belirli bir eklenti sürümüne veya özelliğine bağımlı olmadan önce eklenti değişiklik günlüğünü kontrol edin.
Ardından CI gizli bilgi deponuzdaki bir OpenAI API key'i yalnızca tarama için
CODEX_SECURITY_API_KEY olarak kullanıma açın:
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."Tarama, çıktısını
$TMPDIR/codex-security-scans/<repository>/<scan-id>/ konumuna yazar:
| Dosya | İçerik |
|---|---|
report.md |
Tam tarama dizinine yönelik, okunabilir birincil giriş noktası. |
findings/<slug>/ |
Raporlanabilir her bulgu için, mevcut olduğunda destekleyici kavram kanıtı dosyalarını da içeren ayrıntılı bir güvenlik açığı raporu. |
hardening/ |
Taramanın raporlanabilir bulguları olduğunda yapısal sağlamlaştırma portföyü ve destekleyici öneriler veya diyagramlar. |
findings.json |
Kararlı tanımlayıcıları, önem derecesini, güven düzeyini, kaynak konumlarını ve düzeltmeyi içeren bulgular. Onaylanmış dahili güvenlik iş akışlarına veya sonraki araçlara aktarın. |
scan-manifest.json |
İncelenen hedefi, revizyonları ve yapıt karmalarını içeren mühürlü tarama makbuzu. |
coverage.json |
İncelenen ve ertelenen yüzeyler, hariç tutmalar ve kapsamın eksiksizliği. |
findings.json şeması
tam yapıyı tanımlar. Şema şu alanları içerir:
| Alan | Tür | Açıklama |
|---|---|---|
documentType |
Dize | Belgeyi codex-security.findings olarak tanımlar. |
schemaVersion |
Dize | Bulgular şemasının sürümünü tanımlar. |
scanId |
Dize | Bulguları üreten taramayı tanımlar. |
findings |
Dizi | Sıfır veya daha fazla bulgu nesnesi içerir. |
findings[].findingId |
Dize | Bulgu parmak izinden türetilen kararlı bulgu tanımlayıcısı. |
findings[].occurrenceId |
Dize | Bulguyla belirli bir taramada karşılaşılan bu örneği tanımlar. |
findings[].ruleId |
Dize | Güvenlik açığı ailesini tanımlar. |
findings[].identity |
Nesne | Anlamsal bağlantı noktasını ve isteğe bağlı eş örnek tanımlayıcısını içerir. |
findings[].fingerprints |
Nesne | Parmak izi algoritmasını ve birincil parmak izini içerir. |
findings[].title |
Dize | Kısa bulgu başlığını sağlar. |
findings[].summary |
Dize | Güvenlik açığını ve etkisini özetler. |
findings[].severity |
Nesne | Önem derecesini ve isteğe bağlı puanlama ayrıntılarını içerir. |
findings[].confidence |
Nesne | Güven düzeyini ve gerekçesini içerir. |
findings[].taxonomy |
Nesne | Güvenlik açığı kategorisini ve CWE tanımlayıcılarını içerir. |
findings[].locations |
Dizi | Etkilenen dosyaları, satır numaralarını ve konum rollerini listeler. |
findings[].remediation |
Dize | Önerilen düzeltmeyi açıklar. |
findings[].provenance |
Nesne | Bulguyu oluşturan kaynağı tanımlar. |
Örneğin bu komut, her bulgu için sekmeyle ayrılmış bir satır yazdırır:
jq -r '
.findings[] |
[.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
@tsv
' findings.jsonBu örnekler; Node.js ve npm, Git, Python
3, jq ve sağlayıcının komut satırı araçlarının bulunduğu güvenilir bir Linux çalıştırıcısı varsayar. npm genel paket öneki
yazılabilir olmalıdır.
CI sağlayıcınıza uygun örneği seçin. Tarama sonuçları hassas güvenlik açığı ayrıntıları içerebilir. Yapıtları gizli tutun ve bulguları yalnızca hedef kitleyi, içeriği ve gerekli onayları inceledikten sonra yayımlayı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 Maskelenmiş bir CODEX_SECURITY_API_KEY CI/CD değişkeni oluşturun ve bulguları paylaşmadan
önce tarama yapıtlarını gizli olarak inceleyin.
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()Azure Repos için pipeline'ı pull request'lerde çalıştıracak bir Build validation dal ilkesi yapılandırın.
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
}
}
}
}
} Örnekler, çatallanmış pull request'leri atlar. Kimlik bilgisi kullanan işleri yalnızca
korumalı bir pipeline tanımından ve yalnızca tarama kimlik bilgisine güvenilen
katkıda bulunanlar için çalıştırın. Yapılandırılmış bulguları, manifesti, kapsam yapıtlarını, report.md ile bağlantılı findings/ ve
hardening/ çıktılarını bir arada tutmak için codex-security-scans öğesini arşivleyin. Tavsiye niteliğindeki sonuçlarla başlayın ve işi zorunlu bir kontrol hâline getirmeden önce kapsamı
ve çalışma süresini inceleyin.
API key kullanımı ve korumalı alan denetimleri için Etkileşimsiz
mod bölümüne bakın. Kuruluşunuz Codex
GitHub Action kullanımına izin veriyorsa CLI'ı çalışma zamanında kurabilir; ancak
yine de önce eklentiyi kurmalı ve eylemin codex-home girdisini
aynı CODEX_HOME öğesine yönlendirmelisiniz.