Français

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.

Si vous souhaitez analyser un dépôt complet 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 branches, indiquez les deux extrémités 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.

Le workflow n’extrait pas une autre branche et ne modifie pas le worktree sélectionné. Si une révision demandée n’est pas disponible localement, récupérez-la avant l’examen ou fournissez une base et une tête disponibles localement.

Traiter les résultats

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

Automatiser les examens dans un processus CI/CD

Exécutez la même compétence $codex-security:security-diff-scan depuis le processus CI lorsque l’exécuteur peut invoquer la CLI Codex sans interaction. Commencez par installer la CLI et le plugin sans exposer l’identifiant 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, qui peut proposer une version différente de celle du catalogue hébergé de l’application de bureau. Consultez le journal des modifications du plugin avant de dépendre d’une version ou d’une fonctionnalité précise du plugin dans le processus CI.

Exposez ensuite une OpenAI API key provenant du magasin de secrets de votre processus CI en tant que CODEX_SECURITY_API_KEY, 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’analyse écrit sa sortie dans $TMPDIR/codex-security-scans/<repository>/<scan-id>/ :

Fichier Contenu
report.md Point d’entrée principal et lisible vers le répertoire complet de l’analyse.
findings/<slug>/ Un rapport de vulnérabilité détaillé par résultat à signaler, accompagné de fichiers de preuve de concept lorsqu’ils sont disponibles.
hardening/ Portefeuille de durcissement structurel et propositions ou diagrammes associés lorsque l’analyse contient des résultats à signaler.
findings.json Résultats avec des identifiants stables, leur gravité, leur niveau de confiance, les emplacements sources et les mesures correctives. Alimentez les workflows de sécurité internes approuvés ou les outils en aval.
scan-manifest.json Reçu d’analyse scellé contenant la cible examinée, les révisions et les empreintes des artefacts.
coverage.json Surfaces examinées et différées, exclusions et exhaustivité de la couverture.

Le schéma findings.json définit la structure complète. Le schéma comprend les champs suivants :

Champ Type Description
documentType Chaîne Identifie le document comme codex-security.findings.
schemaVersion Chaîne Identifie la version du schéma des résultats.
scanId Chaîne Identifie l’analyse ayant produit les résultats.
findings Tableau Contient zéro ou plusieurs objets de résultat.
findings[].findingId Chaîne Identifiant stable du résultat dérivé de son empreinte.
findings[].occurrenceId Chaîne Identifie cette occurrence du résultat dans une analyse précise.
findings[].ruleId Chaîne Identifie la famille de vulnérabilités.
findings[].identity Objet Contient l’ancre sémantique et un identifiant facultatif d’instance apparentée.
findings[].fingerprints Objet Contient l’algorithme d’empreinte et l’empreinte principale.
findings[].title Chaîne Fournit le titre court du résultat.
findings[].summary Chaîne Résume la vulnérabilité et son impact.
findings[].severity Objet Contient le niveau de gravité et des détails facultatifs sur son évaluation.
findings[].confidence Objet Contient le niveau de confiance et sa justification.
findings[].taxonomy Objet Contient la catégorie de vulnérabilité et les identifiants CWE.
findings[].locations Tableau Répertorie les fichiers concernés, les numéros de ligne et les rôles des emplacements.
findings[].remediation Chaîne Décrit le correctif recommandé.
findings[].provenance Objet Identifie la source du résultat.

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.

Choisissez l’exemple correspondant à votre fournisseur CI. Les résultats d’analyse peuvent contenir des détails sensibles sur des vulnérabilités. Conservez les artefacts dans un espace privé et ne publiez les résultats qu’après avoir vérifié le public visé, le contenu et les approbations requises.

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 les contributeurs autorisés à accéder à l’identifiant d’analyse. Archivez codex-security-scans pour conserver ensemble les résultats structurés, le manifeste, les artefacts de couverture, report.md ainsi que ses sorties liées findings/ et hardening/. Commencez par des résultats consultatifs, puis examinez la couverture et le temps d’exécution avant de faire de la tâche une vérification obligatoire.

Pour la gestion des API key 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.