Русский

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

Проверяйте запросы на включение изменений и локальные изменения на предмет регрессий безопасности вручную или в 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.

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

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

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

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

Запускайте тот же навык $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, в котором может предлагаться версия, отличная от версии в каталоге размещённого настольного приложения. Ознакомьтесь с журналом изменений плагина, прежде чем полагаться на конкретную версию или функцию плагина в CI.

Затем предоставьте API key OpenAI из хранилища секретов 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."

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

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

Схема findings.json определяет полную структуру. Схема включает следующие поля:

Поле Тип Описание
documentType Строка Идентифицирует документ как codex-security.findings.
schemaVersion Строка Идентифицирует версию схемы обнаруженных проблем.
scanId Строка Идентифицирует сканирование, при котором были обнаружены проблемы.
findings Массив Содержит ноль или более объектов обнаруженных проблем.
findings[].findingId Строка Стабильный идентификатор проблемы, полученный из её цифрового отпечатка.
findings[].occurrenceId Строка Идентифицирует это появление проблемы в конкретном сканировании.
findings[].ruleId Строка Идентифицирует семейство уязвимостей.
findings[].identity Объект Содержит семантическую привязку и необязательный идентификатор связанного экземпляра.
findings[].fingerprints Объект Содержит алгоритм цифрового отпечатка и основной цифровой отпечаток.
findings[].title Строка Содержит краткое название обнаруженной проблемы.
findings[].summary Строка Кратко описывает уязвимость и её последствия.
findings[].severity Объект Содержит уровень критичности и необязательные сведения об оценке.
findings[].confidence Объект Содержит степень уверенности и её обоснование.
findings[].taxonomy Объект Содержит категорию уязвимости и идентификаторы CWE.
findings[].locations Массив Перечисляет затронутые файлы, номера строк и роли расположений.
findings[].remediation Строка Описывает рекомендуемое исправление.
findings[].provenance Объект Идентифицирует источник обнаруженной проблемы.

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

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

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

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