Документация

Исправление пулл-реквестов

Как Coroid превращает уязвимую зависимость в проверенное обновление pull request, за счет чего это происходит, что включает в себя pull request и как исправляются найденные ошибки в коде и секретах.

Найти уязвимость — это самая простая часть. Задача службы безопасности — объединить исправление с развертыванием, поэтому для уязвимых зависимостей Coroid самостоятельно создает обновление pull request, а ваша команда его проверяет и объединяет с основной веткой.

Когда Coroid создает такое обновление

С помощью Исправление уязвимых зависимостей при включенном режиме любая зависимость с уровнем серьезности не ниже фиксированного значения (по умолчанию — высокий) запускает задачу по исправлению в соответствующем проекте:

  • Одна задача и один pull request на каждый пакет, охватывающая все связанные рекомендации по безопасности.
  • Сначала критические находки, затем — высокие.
  • Не более 5 открытых pull request на исправление на проект по умолчанию (максимум — 50). Следующее исправление будет ждать свободного слота.

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

Автоматические обновления сегодня работают для проектов npm. Для других экосистем в описании находки указано «Для этой экосистемы автоматическое исправление пока недоступно», и функция Fix предлагает задачу по митигации.

За счет чего это происходит

Задачи Fix используют модель AI, поэтому расходуют часы работы агентов так же, как и другие задачи. Они выполняются в рамках встроенного мандата Исправления уязвимостей , который есть у каждой организации:

  • Область применения: обновления зависимостей и меры по митигации уязвимостей, ничего больше.
  • Бюджет: только часы работы агентов; по умолчанию — четверть часов агентов в вашем тарифном плане в месяц. Владельцы могут изменить количество часов и то, учитываются ли они еженедельно или ежемесячно, в разделе Безопасность → Настройки → Исправление уязвимых зависимостей.
  • Срок действия проверки не ограничен. Это постоянный параметр по умолчанию, его не нужно продлевать.
  • Приоритет: исправления уязвимостей имеют приоритет перед другими самостоятельно инициированными задачами.

Отключение функции Исправление уязвимых зависимостей в настройках организации приостанавливает действие мандата. Мандат отображается в списке вместе с другими в разделе Quality Control → Mandates.

Если организация с уже подключенными репозиториями подключает сервис Security, ее владельцы получают уведомление в виде значка: «Исправления уязвимостей начнутся через семь дней». Работа Fix стартует через семь дней после отправки уведомления, чтобы владелец мог отключить её до создания первого pull request. Новые организации начинают сразу.

Почему исправление может задерживаться

В разделе исправления находки указано, чего она ждет. Обычные причины:

  • достигнут лимит открытых pull request для проекта;
  • исчерпан бюджет мандата или часы работы агентов по тарифному плану (обнаружение уязвимостей продолжается);
  • работа агентов приостановлена в Mission Control или нет свободных слотов для агентов;
  • не истек семидневный срок уведомления;
  • совместимое исправление еще не выпущено или для данной экосистемы автоматическое исправление недоступно;
  • функция Исправление уязвимых зависимостей отключена.

Как выбирается обновление

Для каждого места установки уязвимого пакета Coroid выбирает наименьшую версию выше установленной, которая устраняет все связанные рекомендации по безопасности, соблюдая заданный диапазон и допустимую основную версию. Откат версии не производится. Для рабочих областей, требующих разных основных версий, создаются отдельные исправленные версии в рамках одного pull request. Транзитивный пакет обновляется вместе с родительским пакетом или через переопределение менеджера пакетов. Любое изменение основной версии или консолидация в одну версию сопровождаются пояснением в pull request. Если одно обновление не может устранить все проблемы, в пулл-реквесте исправляются доступные ошибки, а остальные отмечаются как неисправленные.

Что включает в себя pull request

  • Рекомендации по безопасности, которые устраняются, с указанием их уровня серьезности.
  • Список пакетов до и после изменений, показывающий удаление уязвимой версии.
  • Проверки вашего проекта: если в графике Delivery проекта предусмотрены проверки, которые могут выполняться, они должны дать статус GO AHEAD для внесенных изменений, прежде чем Coroid создаст pull request; в противном случае задача завершится с соответствующей причиной. Если в проекте не настроены проверки, pull request все равно будет создан, и в нем будет указано, что Coroid не выполнял проверки проекта, что ваш собственный CI в репозитории запускается на основе pull request, и где можно настроить проверки в разделе Quality Control.
  • Причины любых изменений основной версии или диапазона.
  • Любые рекомендации по безопасности, которые не удалось устранить, отмечены как неисправленные.

Все заканчивается так: «Люди проверяют и объединяют изменения. Статус развертывания определяется только путем сканирования развернутой версии кода». Результаты анализа фиксируются в коде начиная с следующего полного инвентаря, а для каждой среды — путем сканирования версии кода, которая в ней запущена. См. Результаты анализа и их жизненный цикл.

Результаты анализа кода

При обнаружении результата анализа кода, Исправить создает задачу для исправления в рамках соответствующего проекта. Владельцы и администраторы могут использовать эту функцию для любого открытого результата анализа кода. В задаче от разработчика требуется описать способ исправления, а не детали атаки, в сообщениях коммитов и в pull request, а также добавить тест на регрессию. Она подчиняется тем же правилам, что и другие задачи, и расходует часы работы агентов.

В публичном репозитории или в репозитории, видимость которого Coroid не может подтвердить, исправление результата анализа, который еще не стал публичным, не коммитится туда. Coroid сохраняет подготовленные изменения в приватном режиме, чтобы Владелец или администратор мог их опубликовать. См. Раскрытие информации.

Утечка секретов

Утечку учетных данных устраняют путем их ротации, что Coroid не может сделать за вас. При обнаружении результата анализа утечки секретов создается задача из чек-листа. См. Утечка секретов.