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.
Wenn Sie statt einer bestimmten Änderung ein vollständiges Repository prüfen möchten, lesen Sie Sicherheitsprüfung 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 für einen Commit- oder Branch-Bereich bei Bedarf beide Endpunkte 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.
Der Workflow checkt keinen anderen Branch aus und ändert den ausgewählten Arbeitsbaum nicht. Wenn eine angeforderte Revision lokal nicht verfügbar ist, rufen Sie sie vor der Prüfung ab oder geben Sie eine lokal verfügbare Basis- und Head-Revision an.
Auf Ergebnisse reagieren
Nachdem Sie die Ergebnisse geprüft haben, können Sie einen akzeptierten Befund beheben und verifizieren oder Befunde exportieren und nachverfolgen.
Prüfungen in CI/CD automatisieren
Führen Sie denselben $codex-security:security-diff-scan-Skill in CI aus, wenn der Runner
die Codex CLI ohne Interaktion aufrufen kann. Installieren Sie zunächst die CLI und das Plugin,
ohne die Anmeldedaten für den Scan 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, der eine andere Version als der Katalog der gehosteten Desktop-App anbieten kann. Prüfen Sie das Plugin-Änderungsprotokoll, bevor Sie sich in CI auf eine bestimmte Plugin-Version oder Funktion verlassen.
Stellen Sie anschließend einen OpenAI API key aus dem Secret-Speicher Ihrer CI ausschließlich
für den Scan als CODEX_SECURITY_API_KEY bereit:
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."Der Scan schreibt seine Ausgabe nach
$TMPDIR/codex-security-scans/<repository>/<scan-id>/:
| Datei | Inhalt |
|---|---|
report.md |
Primärer, gut lesbarer Einstiegspunkt für das vollständige Scanverzeichnis. |
findings/<slug>/ |
Ein ausführlicher Schwachstellenbericht pro berichtspflichtigem Befund, einschließlich unterstützender Proof-of-Concept-Dateien, sofern verfügbar. |
hardening/ |
Portfolio zur strukturellen Absicherung sowie unterstützende Vorschläge oder Diagramme, wenn der Scan berichtspflichtige Befunde enthält. |
findings.json |
Befunde mit stabilen Kennungen, Schweregrad, Konfidenz, Quellpositionen und Abhilfemaßnahmen. Dient als Eingabe für genehmigte interne Sicherheitsworkflows oder nachgelagerte 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. |
Das findings.json-Schema
definiert die vollständige Struktur. Das Schema enthält folgende Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
documentType |
Zeichenfolge | Identifiziert das Dokument als codex-security.findings. |
schemaVersion |
Zeichenfolge | Identifiziert die Version des Befundschemas. |
scanId |
Zeichenfolge | Identifiziert den Scan, der die Befunde erzeugt hat. |
findings |
Array | Enthält null oder mehr Befundobjekte. |
findings[].findingId |
Zeichenfolge | Stabile Befundkennung, die aus dem Fingerabdruck des Befunds abgeleitet wird. |
findings[].occurrenceId |
Zeichenfolge | Identifiziert dieses Auftreten des Befunds in einem bestimmten Scan. |
findings[].ruleId |
Zeichenfolge | Identifiziert die Schwachstellenfamilie. |
findings[].identity |
Objekt | Enthält den semantischen Anker und eine optionale Kennung der Geschwisterinstanz. |
findings[].fingerprints |
Objekt | Enthält den Fingerabdruckalgorithmus und den primären Fingerabdruck. |
findings[].title |
Zeichenfolge | Gibt den kurzen Titel des Befunds an. |
findings[].summary |
Zeichenfolge | Fasst die Schwachstelle und ihre Auswirkungen zusammen. |
findings[].severity |
Objekt | Enthält den Schweregrad und optionale Bewertungsdetails. |
findings[].confidence |
Objekt | Enthält die Konfidenzstufe und die Begründung. |
findings[].taxonomy |
Objekt | Enthält die Schwachstellenkategorie und CWE-Kennungen. |
findings[].locations |
Array | Führt betroffene Dateien, Zeilennummern und Positionsrollen auf. |
findings[].remediation |
Zeichenfolge | Beschreibt die empfohlene Behebung. |
findings[].provenance |
Objekt | Identifiziert die Quelle des Befunds. |
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.
Wählen Sie das Beispiel für Ihren CI-Anbieter aus. Scanergebnisse können vertrauliche Details zu Schwachstellen enthalten. Halten Sie Artefakte privat und veröffentlichen Sie Befunde erst, nachdem Sie Zielgruppe, Inhalt und erforderliche Genehmigungen geprüft haben.
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 über eine
geschützte Pipelinedefinition und nur für Mitwirkende aus, denen Sie die Anmeldedaten für den Scan
anvertrauen. Archivieren Sie codex-security-scans, um die strukturierten Befunde,
das Manifest, die Abdeckungsartefakte, report.md und die damit verknüpften Ausgaben findings/ und
hardening/ zusammenzuhalten. 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.