SecurityFlow Кабинет лицензий , откроется в новой вкладке

Документация / Руководство пользователя / Автоматика разбора

Автовалидатор

Обновлено 20 октября 2026

Валидатор разбирает уязвимости по правилам без участия инженера: отклоняет ложные срабатывания, верифицирует подтверждённые классы находок, принимает риск, ставит теги и добавляет в группы. Правила снимают с инженера повторяющийся разбор и сокращают время до верификации.

Где: "Валидатор". Нужны платная лицензия ("Недоступно для бесплатных лицензий" на бесплатной) и право "Правила автоматизации": "Просмотр" - смотреть правила и настройки, "Изменение" - менять.

Как работает

  • Правило - это условия, область действия и действие. Уязвимость, которая подходит под все условия правила и входит в его область, получает действие правила.
  • Валидатор - фоновый цикл: проход по уязвимостям, пауза "Частота запуска (в секундах)", снова проход.
  • При включённом "Валидировать уязвимости на импорте" правила применяются и к уязвимостям каждого импорта сразу после его разбора.
  • Предпросмотр затронутых уязвимостей учитывает только уязвимости в статусе "Не обработано".
  • Правила могут пересекаться. Порядок их применения показан на экране настроек валидатора: "Правила применяются в следующем порядке:".

Что остаётся на уязвимости после правила:

  • статус с отметкой автоматики - фильтры "Подтверждено автоматически", "Отклонено автоматически", "Автоматически подтверждено правилом", "Автоматически отклонено правилом";
  • запись в блоке "Затронуто" карточки: "{действие} с помощью {правило}";
  • теги и группы из правила.

Об окончании работы валидатора сообщают уведомления "Уведомление о завершении валидации" (Уведомления).

Настройки

Поле Что задаёт По умолчанию
"Включить валидатор" Запуск фонового цикла выключено
"Частота запуска (в секундах)" Пауза между проходами, не меньше 40 -
"Валидировать уязвимости на импорте" Применять правила к уязвимостям импорта сразу после разбора включено

При включении интерфейс показывает, сколько активных правил у валидатора: "Валидатор содержит {N} активных правил".

Правило

Поле Что задаёт По умолчанию
"Активно" Правило участвует в проходах выключено
"Изменить статус" Действие: "Отклонить", "Верифицировать", "Нет", "Временно принять риск", "Постоянно принять риск". "Нет" - статус не меняется, только теги и группы "Отклонить"
"Добавить теги к проверенным уязвимостям" Теги, которые получит уязвимость -
"Сгруппировать проверенные уязвимости" Имена групп, в которые попадёт уязвимость (Группы уязвимостей) -
Условия Какие уязвимости отбирает правило -
Область действия Продукты или ассеты, к которым применяется правило -

Условия

Условие - это поле уязвимости, операция и значение. Условия правила объединяются через "И". Для "ИЛИ" создайте несколько правил.

Поле условия Поле в API Операции
"Название" Finding__name "Содержит значение", "Соответствует регулярному выражению"
"Описание" Finding__description то же
"Путь к файлу" Finding__file_path то же
"Уязвимый URL" Finding__vulnerable_url то же
"Зависимость" Finding__dependency то же
"Ветка" Finding__branch то же
"Тег образа" Finding__docker_image_tag то же
"Своё поле" Finding__custom_field то же
Репозиторий, Docker-образ, домен, хост, облачный аккаунт Finding__repository, Finding__docker_image, Finding__domain, Finding__host, Finding__cloud_account то же
"Строка" Finding__line "Равно", только целое число
"Критичность" Finding__severity "Равно": 0 "Инфо", 1 "Низкая", 2 "Средняя", 3 "Высокая", 4 "Критичная"
"Сканер" Scanner__name "Содержит некоторые из сканеров" - список имён
"Тип сканера" Scanner__scanner_type "Содержит некоторые из типов сканеров" - список кодов 0-6
"Тег" Tag__name "Содержит тег" - точное имя тега
"Источник импорта" External_system__dojo_finding_id "Из источника": "Внутренний" - уязвимости Core, "Внешний" - из DefectDojo

Как работают операции:

Операция Как сравнивает
"Содержит значение" Подстрока без учёта регистра
"Соответствует регулярному выражению" Регулярное выражение PostgreSQL, с учётом регистра. Для поиска без учёта регистра добавьте (?i) в начало
"Равно" Точное совпадение числа
"НЕ" Инвертирует условие: отбираются уязвимости, которые под него не подходят

Ограничения:

  • для "Строка" и "Критичность" значение - только целое число, регулярное выражение запрещено;
  • регулярное выражение проверяется в PostgreSQL при сохранении; ошибка - The regular expression you entered does not work with PostgreSQL database.

Примеры условий:

Задача Условия Действие
Отклонять находки в тестах "Путь к файлу" соответствует (^|/)(test|tests|spec)/ "Отклонить", тег test-code
Сразу брать в работу критичные секреты "Тип сканера" - Секреты; "Критичность" равно 4 "Верифицировать"
Собирать уязвимости одной библиотеки в группу "Зависимость" содержит log4j "Нет", группа log4j

Область действия

Область задаёт, к каким продуктам или ассетам применяется правило. Та же область используется в правилах дедупликатора и CVSS, расписаниях, уведомлениях и quality gate.

Поле Что задаёт
"Тип области видимости" "Продукты" или "Ассеты"
"Глобально" Все текущие и будущие продукты или ассеты. Включать и выключать может только роль с "Может управлять всеми продуктами"
"Применить к {продуктам или ассетам} с тегами" Только в глобальной области: сужает её до продуктов или ассетов с одним из тегов
Выбранные продукты Для области "Продукты" без "Глобально": хотя бы один продукт
Выбранные ассеты или "Типы ассетов" Для области "Ассеты" без "Глобально": конкретные ассеты либо продукты плюс типы ассетов

Как область отбирает уязвимости:

  • "Продукты" - все уязвимости выбранных продуктов;
  • "Ассеты" - уязвимости, у которых поле ассета равно значению выбранного ассета в том же продукте.

Если область правила шире ваших прав, правило открывается только для чтения: "Редактирование правила недоступно".

Предпросмотр

Форма правила показывает "Уязвимости, которые будут затронуты ({N})". Если правило составлено с ошибкой - "недопустимое правило". При включении правила интерфейс напоминает: "Правило затрагивает {N}".

Сообщение "Запрос затронутых уязвимостей выполняется слишком долго" значит, что правило будет тяжёлым и в работе. Сузьте условия или область.

Через API:

Запрос Что возвращает
GET /api/v1/findings/?autovalidator_rule_id=<id> Уязвимости под сохранённое правило
GET /api/v1/findings/?autovalidator_rule=<JSON правила> Уязвимости под черновик правила
GET /api/v1/findings/?affected_by__content_type__model=autovalidatorrule&affected_by__object_id=<id> Уязвимости, которые правило уже обработало

В одном запросе - один параметр правила, иначе 400 Select only one automation rule.

Создание правила

  1. Откройте "Валидатор" и нажмите "Создать правило". Можно начать из карточки уязвимости кнопкой "Создать правило валидатора".
  2. Выберите действие в "Изменить статус", при необходимости заполните теги и группы.
  3. Добавьте условия.
  4. Задайте область действия.
  5. Проверьте предпросмотр: число и состав уязвимостей.
  6. Включите "Активно" и сохраните.
  7. Если валидатор выключен, включите его в настройках ("Включить валидатор").

Проверка: через один цикл откройте в меню правила "Затронутые уязвимости" или "Просмотр уязвимостей, обработанных правилом".

Список правил

Колонки: "Действие", "Теги", "Группы", "Активно", "Охват". Поиск - по значениям условий. Фильтры - по активности, действию, полю условия, тегам.

Выделенные правила можно включить, выключить или удалить. Меню правила: просмотр, изменение, "Затронутые уязвимости", удаление.

Экспорт и импорт правил

Правила валидатора, дедупликатора и CVSS переносятся между установками JSON-файлом: отладьте правила на тестовом стенде и загрузите в рабочий.

Экспорт:

curl -sS "https://core.example.ru/api/v1/auto-validator/rules/export/?is_active=true" \
  -H "Authorization: Token <токен>" -o validator-rules.json

Экспорт учитывает фильтры списка и не содержит номеров правил.

Импорт в интерфейсе:

  1. "Валидатор" → "Импорт правил".
  2. В поле "Файл" загрузите JSON. Пустой файл - "В файле не найдено правил".
  3. Проверьте область правил в "Разрешить для продуктов:".
  4. Нажмите "Сохранить {N} правил".

Импорт доступен только роли с "Может управлять всеми продуктами": иначе "Вам необходим доступ ко всем продуктам, чтобы импортировать правила", в API - 403. Правило без selection_scope становится глобальным для продуктов. Файл загружается целиком: при ошибке в одном правиле не сохраняется ни одно.

Формат файла:

[
  {
    "action_choices": 0,
    "is_active": true,
    "tags": ["test-code"],
    "groups": [],
    "instructions": [
      {"field": "Finding__file_path", "value": "(^|/)(test|tests|spec)/", "negate": false, "regex": true}
    ],
    "issues_auto_create_on_verify": null,
    "selection_scope": {
      "target": 0,
      "is_global": true,
      "products": [],
      "assets": [],
      "asset_types": [],
      "filter_tags": []
    }
  }
]
Поле Значение
action_choices 0 "Отклонить", 1 "Верифицировать", 2 "Нет", 3 "Временно принять риск", 4 "Постоянно принять риск"
instructions[].field Поле условия из таблицы Условия
instructions[].value Строка. Для "Сканер" и "Тип сканера" - JSON-массив строкой, например "[\"Gitleaks Scan\"]", "[1]"
instructions[].negate, regex "НЕ" и регулярное выражение
selection_scope.target 0 "Продукты", 1 "Ассеты"
selection_scope.products, assets Номера продуктов и ассетов
selection_scope.asset_types Типы ассетов: 0 репозиторий, 1 образ, 2 домен, 3 хост, 4 облачный аккаунт

Служебные поля id и targets_count, которые есть в выгрузке внутри selection_scope, при импорте игнорируются.

Номера продуктов и ассетов

Область с выбранными продуктами или ассетами хранит их номера. На другой установке номера другие: перед импортом замените их или используйте глобальную область с тегами.

API

Метод и путь Назначение
GET, POST /api/v1/settings/auto-validator/ Настройки: is_active, launch_frequency, validation_on_import
GET, POST /api/v1/auto-validator/rules/ Правила
PATCH, DELETE /api/v1/auto-validator/rules/{id}/ Изменение и удаление правила
POST /api/v1/auto-validator/rules/bulk/activate/, /bulk/deactivate/, /bulk/delete/ Массовые действия по фильтру ?id__in=1,2. Всегда передавайте фильтр: без него действие применяется ко всем правилам, которые вы можете менять
GET /api/v1/auto-validator/rules/export/ Выгрузка правил
POST /api/v1/auto-validator/rules/import/ Загрузка правил