Проверка изменений кода на наличие уязвимостей

Проверяйте запросы на включение изменений и локальные изменения на предмет регрессий безопасности вручную или в CI/CD.

Запустите проверку безопасности изменений, чтобы найти регрессии в одном наборе изменений под управлением Git. Codex проверяет каждый изменённый файл с исходным кодом или аналогичным содержимым, а также непосредственно связанный с ним вспомогательный код. При этом проверка не расширяется до полного аудита репозитория.

Чтобы просканировать весь репозиторий вместо конкретного изменения, см. раздел Запуск сканирования безопасности.

Запуск проверки вручную

В настольном приложении откройте раздел Security, выберите Scans, а затем — + Scan. Выберите репозиторий, затем выберите Changes. Проверьте незакоммиченные изменения, один коммит либо базовую и конечную ревизии. Deep scan недоступно для сканирования изменений.

Вы также можете попросить Codex проверить незакоммиченные изменения в беседе:

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

Для коммита или диапазона между ветками при необходимости укажите обе ревизии:

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.

Вы также можете указать запрос на включение изменений, если его базовая и конечная ревизии доступны в локальной рабочей копии.

Подтверждение изменения при настройке

  1. Выберите Changes.
  2. Подтвердите извлечённый репозиторий, текущую ветку и последний коммит.
  3. В разделе Changes to review выберите:
    • Uncommitted changes для текущего рабочего дерева.
    • Последний коммит для проверки одного коммита.
    • Базовую и конечную ревизии для диапазона ветки или запроса на включение изменений.
  4. Убедитесь, что сводка описывает изменение, которое вы намеревались проверить.
  5. Выберите Start scan.

Codex не переключается на другую ветку и не меняет выбранное рабочее дерево. Если запрошенная ревизия недоступна локально, загрузите её перед проверкой или укажите доступные локально базовую и конечную ревизии.

Работа с обнаруженными проблемами

После изучения результатов исправьте и проверьте принятую проблему или экспортируйте и отслеживайте выявленные проблемы.

Автоматизация проверок в CI/CD

Сведения об автономном CLI см. в разделе Запуск Codex Security в CI: там описаны структурированный JSON, политика уровней серьёзности и загрузка SARIF. Продолжайте читать этот раздел, чтобы вызвать установленный навык плагина через codex exec.

Запускайте $codex-security:security-diff-scan в CI, если исполнитель может вызывать Codex CLI без интерактивного взаимодействия. Сначала установите CLI, не предоставляя ему учётные данные для сканирования:

npm install --global @openai/codex

Установите плагин Codex Security в CLI:

codex plugin add codex-security@openai-curated

Команда установки использует общедоступный каталог плагинов Codex CLI. Требования для конкретных версий см. в журнале изменений плагина.

Затем передайте OpenAI API key из хранилища секретов CI в переменной CODEX_SECURITY_API_KEY. Предоставляйте доступ к этим учётным данным только на время сканирования:

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."

Песочница с разрешением записи позволяет сканированию создавать временные артефакты. При этом запрос по-прежнему требует от Codex не изменять рабочую копию исходного кода.

Результаты сканирования записываются в $TMPDIR/codex-security-scans/<repository>/<scan-id>/:

Файл Содержимое
report.md Основная точка входа для чтения результатов из полного каталога сканирования.
findings/<slug>/ Подробные отчёты об уязвимостях и вспомогательные файлы демонстрации эксплуатации, если они запрошены.
hardening/ Рекомендации по структурному усилению защиты и сопутствующие предложения, если они запрошены.
findings.json Выявленные проблемы со стабильными идентификаторами, уровнем серьёзности, степенью уверенности, расположением в исходном коде и мерами устранения. Используйте эти поля в процессах обеспечения безопасности или последующих инструментах.
scan-manifest.json Заверенная запись сканирования с проверенной целью, ревизиями и хешами артефактов.
coverage.json Проверенные и отложенные области, исключения и полнота охвата.

Определения полей см. в схеме выявленных проблем. Используйте findingId для идентификации проблемы, а occurrenceId — для её конкретного проявления в этом сканировании.

Например, эта команда выводит по одной строке с разделителями-табуляциями для каждой обнаруженной проблемы:

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

В этих примерах предполагается использование доверенной среды выполнения Linux с Node.js и npm, Git, Python 3, jq и инструментами командной строки поставщика. Глобальный префикс пакетов npm должен быть доступен для записи.

Результаты сканирования могут содержать конфиденциальные сведения об уязвимостях. Храните артефакты в закрытом доступе и проверяйте место назначения и содержимое перед публикацией выявленных проблем. Выберите пример для вашего провайдера 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

В примерах пропускаются pull request из форков. Запускайте задания с учётными данными только из защищённого определения конвейера и только для участников, которым доверены учётные данные сканирования. Архивируйте codex-security-scans, чтобы хранить вместе структурированные сведения о проблемах, манифест, данные об охвате и report.md, а также все запрошенные результаты findings/ или hardening/. Начните с рекомендательных результатов и проверьте охват и время выполнения, прежде чем делать задание обязательной проверкой.

Сведения об обращении с API key и средствах управления песочницей см. в разделе Неинтерактивный режим. Если ваша организация разрешает использовать Codex GitHub Action, он может устанавливать CLI во время выполнения, однако вам по-прежнему необходимо сначала установить плагин и направить входные данные codex-home действия на тот же CODEX_HOME.