Examiner les modifications de code sous l’angle de la sécurité

Examinez les pull requests et les modifications locales, manuellement ou dans un processus CI/CD, afin de détecter les régressions de sécurité.

Exécutez un examen de sécurité des modifications pour détecter les régressions dans un ensemble de modifications géré par Git. Codex examine chaque fichier modifié assimilable à du code source ainsi que le code qui le prend directement en charge. Il n’étend pas cet examen à un audit complet du dépôt.

Pour analyser un dépôt entier plutôt qu’une modification précise, consultez Exécuter une analyse de sécurité.

Exécuter un examen manuel

Dans l’application de bureau, ouvrez Security, sélectionnez Scans, puis + Scan. Choisissez le dépôt, puis sélectionnez Changes. Examinez les modifications non validées, un commit unique ou une révision de base et une révision de tête. Deep scan n’est pas disponible pour une analyse des modifications.

Vous pouvez également demander à Codex d’examiner les modifications non validées dans une conversation :

Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.

Pour un commit ou une plage de révisions de branche, précisez les deux révisions si nécessaire :

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.

Vous pouvez également désigner une pull request lorsque ses révisions de base et de tête sont disponibles dans le checkout local.

Confirmer la modification dans la configuration

  1. Sélectionnez Changes.
  2. Confirmez le dépôt extrait, la branche actuelle et le dernier commit.
  3. Sous Changes to review, choisissez :
    • Uncommitted changes pour le worktree actuel.
    • Le dernier commit pour examiner un commit unique.
    • Une révision de base et une révision de tête pour une plage de branches ou de pull requests.
  4. Vérifiez que le résumé décrit la modification que vous souhaitiez examiner.
  5. Sélectionnez Start scan.

Codex ne bascule pas sur une autre branche et ne change pas le worktree sélectionné. Si une révision demandée n’est pas disponible localement, récupérez-la avant la revue ou fournissez une révision de base et une révision de tête disponibles localement.

Traiter les résultats

Après avoir examiné les résultats, corrigez et vérifiez un constat accepté ou exportez et suivez les constats.

Automatiser les examens dans un processus CI/CD

Pour la CLI autonome, consultez Exécuter Codex Security en CI pour obtenir du JSON structuré, définir une politique de gravité et importer des fichiers SARIF. Poursuivez cette section pour invoquer le skill du plugin installé via codex exec.

Exécutez $codex-security:security-diff-scan en CI lorsque l’exécuteur peut invoquer la CLI Codex sans interaction. Commencez par installer la CLI sans exposer les identifiants d’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 place de marché publique des plugins de la CLI Codex. Consultez le journal des modifications du plugin pour connaître les exigences propres à chaque version.

Ensuite, fournissez une API key OpenAI provenant du stockage de secrets de votre CI via CODEX_SECURITY_API_KEY. N’exposez cet identifiant que 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."

Le bac à sable accessible en écriture permet à l’analyse de créer des artefacts temporaires. Le prompt exige toujours que Codex laisse la copie de travail des sources inchangée.

L’analyse écrit sa sortie dans $TMPDIR/codex-security-scans/<repository>/<scan-id>/ :

Fichier Contenu
report.md Point d’entrée principal lisible vers le répertoire d’analyse complet.
findings/<slug>/ Rapports de vulnérabilité détaillés et fichiers de preuve de concept associés, sur demande.
hardening/ Recommandations de renforcement structurel et propositions associées, sur demande.
findings.json Constats avec identifiants stables, gravité, niveau de confiance, emplacements dans le code source et mesures correctives. Utilisez ces champs dans les workflows de sécurité ou les outils en aval.
scan-manifest.json Attestation d’analyse scellée contenant la cible examinée, les révisions et les empreintes des artefacts.
coverage.json Surfaces examinées ou dont l’examen a été reporté, exclusions et exhaustivité de la couverture.

Pour la définition des champs, consultez le schéma des constats. Utilisez findingId pour identifier le constat et occurrenceId pour son occurrence dans cette analyse.

Par exemple, cette commande affiche une ligne séparée par des tabulations pour chaque résultat :

jq -r '
  .findings[] |
  [.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
  @tsv
' findings.json

Ces exemples supposent l’utilisation d’un exécuteur 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. Le préfixe global des paquets npm doit être accessible en écriture.

Les résultats d’analyse peuvent contenir des détails sensibles sur les vulnérabilités. Gardez les artefacts privés et vérifiez la destination et le contenu avant de publier les constats. 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-scans

Les exemples ignorent les pull requests provenant de forks. N’exécutez les tâches nécessitant des identifiants que depuis une définition de pipeline protégée et uniquement pour des contributeurs autorisés à utiliser l’identifiant d’analyse. Archivez codex-security-scans afin de conserver ensemble les résultats structurés, le manifeste, la couverture et report.md, ainsi que tous les livrables findings/ ou hardening/ demandés. Commencez par des résultats consultatifs, puis examinez la couverture et la durée d’exécution avant de faire de la tâche une vérification obligatoire.

Pour la gestion des API keys et les contrôles du bac à sable, consultez le mode non interactif. Si votre organisation autorise la Codex GitHub Action, celle-ci peut installer la CLI lors de l’exécution, mais vous devez tout de même installer d’abord le plugin et faire pointer l’entrée codex-home de l’action vers le même CODEX_HOME.