Codex Security — CLI и TypeScript SDK от OpenAI для поиска, проверки и исправления уязвимостей в коде
📂 Исходный код на GitHubCLI и TypeScript SDK от OpenAI для определения политики безопасности и поиска, валидации и исправления уязвимостей в коде. Включает генерацию SECURITY.md, Docker Compose для массовых сканирований, findings-сервис с дедупликацией по эмбеддингам и классификацию серьёзности по собственному рубрикатору.
OpenAI выпустила Codex Security — npm-пакет @openai/codex-security, который объединяет CLI и TypeScript SDK для определения политики безопасности и автоматического поиска, валидации и исправления уязвимостей в коде. Если Codex CLI — это агент для написания кода, то codex-security — его «оборонительная» половина: инструмент, который смотрит на код глазами атакующего и доводит находки до исправлений. Проект выложен под лицензией Apache-2.0 и уже собрал более 10 тысяч звёзд на GitHub.
Быстрый старт
Понадобятся Node.js 22.13.0 или новее и Python 3.10+:
npm install @openai/codex-security
codex-security login
codex-security scan /path/to/directory
Для CI-сред логин не нужен — достаточно переменной окружения OPENAI_API_KEY.
Одна деталь, которую стоит знать сразу: часть кибербезопасностных запросов и «защищённых находок» требует одобрения через программу Trusted Access for Cyber (заявка подаётся на chatgpt.com/cyber). Полная документация живёт на learn.chatgpt.com/docs/security/cli.
Генерация SECURITY.md
Интересная идея — начать не со сканирования, а с политики. Команда codex-security policy создаёт черновик файла SECURITY.md с руководством для будущих сканирований: репозиторий целиком или конкретный компонент.
codex-security policy .
codex-security policy . --path services/api --knowledge-base architecture.md
Черновик сохраняется вне чекаута — команда его не устанавливает и сканирование не запускает. Смысл в том, что сопутствующие документы (архитектура, threat model, результаты ревью) остаются за пределами репозитория и могут содержать чувствительные детали. Прежде чем копировать политику в репозиторий, нужно просмотреть предложенный diff.
TypeScript SDK
Вся функциональность доступна и как библиотека:
import { CodexSecurity } from "@openai/codex-security";
const security = new CodexSecurity();
const result = await security.run("/path/to/directory");
await security.run("/path/to/directory", {
mode: "deep",
workers: 2,
subagents: 0,
stopAfterNoNew: 3,
maxDiscoveryRuns: 10,
maxTimeHours: 1.5,
});
console.log(result.reportPath);
await security.close();
Набор опций показывает, что под капотом — агентный процесс, а не одноразовый статический анализатор: mode: "deep", пул воркеров, количество подагентов, лимиты на число проходов поиска и общее время сканирования, а также stopAfterNoNew — остановка после нескольких проходов без новых находок. Результат — путь к отчёту.
Массовые сканирования в Docker
Для прогона по многим репозиториям в репозитории есть готовая конфигурация Docker Compose: один и тот же образ сканера ghcr.io/openai/codex-security работает и для контейнеризованных массовых сканирований, и для отдельных этапов CLI с долговременным состоянием и доступом к отдельно развёрнутому findings-сервису (пример workflow runner в docker/README.md).
Findings-сервис (preview)
Центральное место в архитектуре — сервис хранения находок. Его можно запустить без Docker командой codex-security serve.
Что он делает:
- хранит находки и эмбеддинги в SQLite, выдаёт находки постранично;
- отдаёт read-only дашборд на
/dashboard, который обновляется каждые пять секунд и показывает сохранённые находки и группы дубликатов; - находит потенциальные дубликаты по схожести эмбеддингов — внутри одного репозитория или в явном all-repository scope.
Публикация результатов сканирования в сервис:
codex-security publish scan --to custom --findings-url http://localhost:3000
Дедупликация — не просто сравнение хэшей: SDK и команда codex-security dedupe забирают кандидатов, запускают независимые Codex-ревью локально и сохраняют подтверждённые группы дубликатов. Флаг --all-repositories расширяет поиск дубликатов на все репозитории.
Классификация серьёзности по своему рубрикатору
Перед тем как заводить тикеты, находки можно переоценить по собственному регламенту:
codex-security classify-severity --scan SCAN_ID --rubric /path/to/policy.md
Классификация чекпоинтит каждую находку в SQLite и при повторных запусках переиспользует готовые оценки; --reprocess заставляет пересчитать всё заново. Важная деталь: классификация не трогает оригинальную серьёзность из скана — она существует параллельно. Та же операция доступна из SDK.
Сторонние провайдеры инференса
Сканер не привязан жёстко к OpenAI API — провайдер и модель выбираются флагами:
export AWS_BEARER_TOKEN_BEDROCK="<your-bedrock-api-key>"
export AWS_REGION="us-east-2"
codex-security scan . --provider amazon-bedrock --model openai.gpt-5.6-luna
export OPENROUTER_API_KEY="<your-openrouter-api-key>"
codex-security scan . --provider openrouter --model anthropic/claude-sonnet-4.5
export FIREWORKS_API_KEY="<your-fireworks-api-key>"
codex-security scan . --provider fireworks --model accounts/fireworks/models/qwen3-235b-a22b
Поддерживаются Amazon Bedrock, OpenRouter и Fireworks — это позволяет прогонять сканирование на моделях, которые уже разрешены в вашей организации, или искать более дешёвую конфигурацию для регулярных прогонов.
Как это вписывается в DevSecOps
Codex Security закрывает полный цикл: политика (policy), поиск (scan), дедупликация (dedupe), приоритизация (classify-severity), публикация (publish) и сервис с дашбордом для команды. Сочетание агентного поиска с проверкой находок независимыми ревью и собственной шкалой серьёзности — это попытка решить главную проблему классических SAST-сканеров: поток ложных срабатываний, который никто не разбирает.
Проект распространяется как npm-пакет @openai/codex-security, исходники — на GitHub, дополнительная информация — на developers.openai.com/codex/security.
Источник: https://github.com/openai/codex-security