Codeänderungen auf Sicherheitsprobleme prüfen
Prüfen Sie Pull Requests und lokale Änderungen manuell oder in CI/CD auf Sicherheitsregressionen.
Führen Sie eine Sicherheitsprüfung von Änderungen durch, um Regressionen in einem einzelnen Git-basierten Änderungssatz zu finden. Codex prüft jede geänderte quellcodeähnliche Datei und den direkt zugehörigen unterstützenden Code. Die Prüfung wird nicht zu einem vollständigen Repository-Audit ausgeweitet.
Um ein gesamtes Repository statt einer bestimmten Änderung zu scannen, lesen Sie Sicherheitsscan ausführen.
Manuelle Prüfung ausführen
Öffnen Sie in der Desktop-App Security, wählen Sie Scans und dann + Scan aus. Wählen Sie das Repository und anschließend Changes aus. Prüfen Sie nicht committete Änderungen, einen einzelnen Commit oder eine Basis- und Head-Revision. Deep scan ist für einen Änderungsscan nicht verfügbar.
Sie können Codex auch in einer Unterhaltung bitten, nicht committete Änderungen zu prüfen:
Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.Geben Sie bei einem Commit- oder Branch-Bereich bei Bedarf beide Revisionen an:
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.Sie können auch einen Pull Request angeben, wenn dessen Basis- und Head-Revisionen im lokalen Checkout verfügbar sind.
Änderung bei der Einrichtung bestätigen
- Wählen Sie Changes aus.
- Bestätigen Sie das ausgecheckte Repository, den aktuellen Branch und den neuesten Commit.
- Wählen Sie unter Changes to review Folgendes aus:
Uncommitted changesfür den aktuellen Arbeitsbaum.- Den neuesten Commit für die Prüfung eines einzelnen Commits.
- Eine Basis- und Head-Revision für einen Branch- oder Pull-Request-Bereich.
- Vergewissern Sie sich, dass die Zusammenfassung die Änderung beschreibt, die Sie prüfen wollten.
- Wählen Sie Start scan aus.
Codex checkt keinen anderen Branch aus und wechselt nicht den ausgewählten Arbeitsbaum. Wenn eine angeforderte Revision lokal nicht verfügbar ist, rufen Sie sie vor der Prüfung ab oder geben Sie lokal verfügbare Basis- und Head-Revisionen an.
Auf Ergebnisse reagieren
Nachdem Sie die Ergebnisse geprüft haben, beheben und verifizieren Sie einen akzeptierten Befund, oder exportieren und verfolgen Sie Befunde.
Prüfungen in CI/CD automatisieren
Informationen zur eigenständigen CLI finden Sie unter Codex Security in
CI ausführen, einschließlich strukturiertem JSON, einer Schweregradrichtlinie und SARIF-
Upload. Lesen Sie diesen Abschnitt weiter, um den installierten Plugin-Skill
über codex exec aufzurufen.
Führen Sie $codex-security:security-diff-scan in CI aus, wenn der Runner die
Codex CLI ohne Interaktion aufrufen kann. Installieren Sie zunächst die CLI, ohne die Scan-
Zugangsdaten offenzulegen:
npm install --global @openai/codexInstallieren Sie das Codex Security-Plugin in der CLI:
codex plugin add codex-security@openai-curatedDer Installationsbefehl verwendet den öffentlichen Plugin-Marktplatz der Codex CLI. Versionsspezifische Anforderungen finden Sie im Plugin-Änderungsprotokoll .
Stellen Sie als Nächstes einen OpenAI API key aus Ihrem CI-Secretspeicher als
CODEX_SECURITY_API_KEY bereit. Machen Sie die Zugangsdaten nur für den Scan verfügbar:
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."Die beschreibbare Sandbox ermöglicht es dem Scan, temporäre Artefakte zu erstellen. Der Prompt verlangt weiterhin, dass Codex den Quellcode-Checkout unverändert lässt.
Der Scan schreibt seine Ausgabe nach
$TMPDIR/codex-security-scans/<repository>/<scan-id>/:
| Datei | Inhalt |
|---|---|
report.md |
Primärer lesbarer Einstiegspunkt in das vollständige Scanverzeichnis. |
findings/<slug>/ |
Detaillierte Schwachstellenberichte und unterstützende Proof-of-Concept-Dateien, sofern angefordert. |
hardening/ |
Hinweise zur strukturellen Härtung und unterstützende Vorschläge, sofern angefordert. |
findings.json |
Befunde mit stabilen Kennungen, Schweregrad, Konfidenz, Quellcodestellen und Abhilfemaßnahmen. Verwenden Sie diese Felder in Sicherheitsworkflows oder nachgelagerten Tools. |
scan-manifest.json |
Versiegelter Scanbeleg mit dem geprüften Ziel, den Revisionen und den Artefakt-Hashes. |
coverage.json |
Geprüfte und zurückgestellte Bereiche, Ausschlüsse und Vollständigkeit der Abdeckung. |
Felddefinitionen finden Sie im Befundschema. Verwenden Sie findingId zur Identifizierung des Befunds und occurrenceId für sein Vorkommen
in diesem Scan.
Dieser Befehl gibt beispielsweise pro Befund eine tabulatorgetrennte Zeile aus:
jq -r '
.findings[] |
[.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
@tsv
' findings.jsonDiese Beispiele setzen einen vertrauenswürdigen Linux-Runner mit Node.js und npm, Git, Python
3, jq und den Befehlszeilentools des Anbieters voraus. Das globale Paketpräfix von npm
muss beschreibbar sein.
Scanergebnisse können sensible Schwachstellendetails enthalten. Halten Sie Artefakte privat und prüfen Sie Ziel und Inhalt, bevor Sie Befunde veröffentlichen. Wählen Sie das Beispiel für Ihren CI-Anbieter:
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 Erstellen Sie eine maskierte CI/CD-Variable CODEX_SECURITY_API_KEY und prüfen Sie die Scanartefakte
vertraulich, bevor Sie Befunde weitergeben.
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()Konfigurieren Sie für Azure Repos eine Build validation-Branchrichtlinie, damit die Pipeline bei Pull Requests ausgeführt wird.
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
}
}
}
}
} Die Beispiele überspringen Pull Requests aus Forks. Führen Sie Jobs mit Anmeldedaten nur aus einer
geschützten Pipeline-Definition und nur für Mitwirkende aus, denen die Scan-
Anmeldedaten anvertraut werden. Archivieren Sie codex-security-scans, um die strukturierten Befunde,
das Manifest, die Abdeckung und report.md zusammen mit allen angeforderten
Ausgaben unter findings/ oder hardening/ aufzubewahren. Beginnen Sie mit unverbindlichen Ergebnissen und prüfen Sie
Abdeckung und Laufzeit, bevor Sie den Job zu einer erforderlichen Prüfung machen.
Informationen zur Handhabung von API keys und zu Sandbox-Steuerelementen finden Sie unter Nicht interaktiver
Modus. Wenn Ihre Organisation die Codex
GitHub Action zulässt, kann sie die CLI zur Laufzeit installieren. Sie
müssen jedoch weiterhin zuerst das Plugin installieren und die codex-home-Eingabe der Action auf
dasselbe CODEX_HOME verweisen lassen.