Lancez une revue de sécurité pour détecter les régressions dans un ensemble précis de modifications d’un dépôt Git. Codex examine chaque fichier modifié contenant du code source ou du contenu similaire, ainsi que le code dont ce fichier dépend directement. La revue ne s’étend pas à l’ensemble du dépôt.
Pour analyser un dépôt entier plutôt qu’une modification précise, consultez Lancer une analyse de sécurité.
Lancer une revue manuelle
Dans l’application de bureau ChatGPT, ouvrez Sécurité, sélectionnez Analyses, puis + Analyse. Choisissez le dépôt, puis sélectionnez Modifications. Vous pouvez examiner les modifications non commitées, un seul commit ou les différences entre une révision de base et une révision de tête. L’option Analyse approfondie n’est pas disponible pour l’analyse des modifications.
Vous pouvez aussi demander à Codex d’examiner les modifications non commitées dans une conversation :
Utilisez $codex-security:security-diff-scan pour vérifier si mes modifications non commitées actuelles introduisent des régressions de sécurité.
Pour examiner une plage de commits ou comparer des branches, précisez les deux révisions si nécessaire :
Utilisez $codex-security:security-diff-scan pour vérifier si les modifications entre origin/main et HEAD introduisent des régressions de sécurité. Examinez en priorité l’authentification, les autorisations, le traitement des entrées, l’accès au système de fichiers, les requêtes réseau et les secrets.
Vous pouvez aussi indiquer une pull request si ses révisions de base et de tête sont disponibles dans votre copie locale du dépôt.
Confirmer les modifications lors de la configuration
- Sélectionnez Modifications.
- Vérifiez le dépôt ouvert, la branche actuelle et le dernier commit.
- Sous Modifications à examiner, choisissez :
Uncommitted changespour examiner les modifications de l’arbre de travail actuel.- Le dernier commit pour limiter la revue à ce commit.
- Une révision de base et une révision de tête pour examiner les modifications d’une branche ou d’une pull request.
- Vérifiez que le résumé décrit bien les modifications que vous souhaitez examiner.
- Sélectionnez Lancer l’analyse.
Codex ne bascule pas vers une autre branche et conserve l’arbre de travail sélectionné. Si une révision demandée n’est pas disponible localement, récupérez-la avant la revue ou indiquez une révision de base et une révision de tête toutes deux disponibles localement.
Traiter les problèmes détectés
Après avoir examiné les résultats, corrigez un problème retenu et vérifiez la correction ou exportez les problèmes détectés et suivez leur résolution.
Automatiser les revues en CI/CD
Si vous utilisez la CLI autonome, consultez Exécuter Codex Security en CI pour obtenir des résultats JSON structurés, définir une politique selon le niveau de gravité et téléverser les résultats au format SARIF. Suivez les instructions ci-dessous pour appeler le skill du plugin installé avec codex exec.
Exécutez $codex-security:security-diff-scan en CI si le runner peut lancer la CLI Codex sans interaction. Commencez par installer la CLI sans exposer la clé utilisée pour l’analyse :
npm install --global @openai/codex
Installez le plugin Codex Security dans la CLI :
codex plugin add codex-security@openai-curated
La commande d’installation utilise la Marketplace publique de plugins de la CLI Codex. Consultez le journal des modifications du plugin pour connaître les prérequis propres à chaque version.
Fournissez ensuite une clé API OpenAI provenant du gestionnaire de secrets de votre CI dans la variable CODEX_SECURITY_API_KEY. Rendez cette clé accessible uniquement pendant l’analyse :
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."
L’accès en écriture au bac à sable permet à l’analyse de créer des artefacts temporaires. Le prompt demande néanmoins à Codex de laisser intacte la copie locale du code source.
L’analyse écrit ses résultats dans $TMPDIR/codex-security-scans/<repository>/<scan-id>/ :
| Fichier | Contenu |
|---|---|
report.md |
Rapport principal à consulter pour s’orienter dans le répertoire complet de l’analyse. |
findings/<slug>/ |
Sur demande, rapports détaillés sur les vulnérabilités et fichiers de preuve de concept à l’appui. |
hardening/ |
Sur demande, recommandations pour renforcer la sécurité de la structure du code et propositions pour les mettre en œuvre. |
findings.json |
Problèmes détectés, avec leurs identifiants stables, leur gravité, le niveau de confiance, les emplacements dans le code source et les mesures correctives. Utilisez ces champs dans vos workflows de sécurité ou dans les outils qui traitent les résultats. |
scan-manifest.json |
Reçu d’analyse scellé indiquant la cible examinée, les révisions et les empreintes de hachage des artefacts. |
coverage.json |
Parties examinées, parties dont l’examen a été reporté, exclusions et degré de couverture de l’analyse. |
Pour connaître la définition des champs, consultez le schéma des problèmes détectés. Utilisez findingId pour identifier le problème et occurrenceId pour identifier son occurrence dans cette analyse.
Par exemple, cette commande affiche une ligne par problème, avec des champs séparés par des tabulations :
jq -r '
.findings[] |
[.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
@tsv
' findings.json
Ces exemples supposent que vous utilisez un runner Linux de confiance doté de Node.js et de npm, de Git, de Python 3, de jq et des outils en ligne de commande du fournisseur de CI. Le runner doit pouvoir écrire dans le répertoire d’installation global des paquets npm.
Les résultats de l’analyse peuvent contenir des informations sensibles sur les vulnérabilités. Gardez les artefacts privés et vérifiez la destination et le contenu avant de publier les problèmes détectés. Choisissez l’exemple correspondant à votre fournisseur de CI :
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-scansCréez une variable CI/CD masquée nommée CODEX_SECURITY_API_KEY et examinez les artefacts de l’analyse en privé avant de partager les problèmes détectés.
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.gztrigger: 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()Pour Azure Repos, configurez une stratégie de branche Validation de build pour exécuter le pipeline sur les pull requests.
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
}
}
}
}
}Ces exemples ignorent les pull requests provenant de forks. Exécutez les tâches qui utilisent la clé d’analyse uniquement à partir d’une définition de pipeline protégée et uniquement pour les contributeurs auxquels vous pouvez confier cette clé. Archivez codex-security-scans pour conserver ensemble les résultats structurés, le manifeste, les données de couverture et report.md, ainsi que les fichiers de findings/ ou de hardening/ si vous les avez demandés. Dans un premier temps, utilisez les résultats à titre indicatif. Examinez la couverture et la durée d’exécution avant de rendre ce contrôle obligatoire.
Pour la gestion des clés API et les contrôles du bac à sable, consultez Mode non interactif. Si votre organisation autorise la GitHub Action de Codex, celle-ci peut installer la CLI au moment de l’exécution. Vous devez toutefois installer le plugin au préalable et faire pointer le paramètre codex-home de l’action vers le même CODEX_HOME.