Сканирование зависимостей (SCA) — Примеры

Пример 1 — рекомендация, которая на два уровня ниже

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

manifest.json    только прямые зависимости
  form library     ^4.2.0
  router           ^1.1.0
lockfile         разрешённое дерево, включая транзитивные пакеты
  parsing library  1.4.2   (подтянута библиотекой форм)

Решение

Сканирование: лок-файл на каждом пул-реквесте и снова ночью
Находка (иллюстративные числа; подставьте запись своего сканирования)
  package     parsing library (транзитивная, отсутствует в манифесте)
  installed   1.4.2
  severity    high
  fixed in    1.5.0
  source      запись рекомендации вашего сканера; ссылка сюда не вставляется

Сканирование разрешённого лок-файла сообщает версию, которая действительно будет развёрнута, включая транзитивные пакеты, где сидит большинство рекомендаций. Ночное пересканирование важно, потому что рекомендацию могут опубликовать после того, как ваша зависимость была закреплена. Обычная ошибка — просканировать манифест и заключить, что проект чист: он перечисляет то, что вы запросили, а не сорок пакетов, которые вы получили.

Пример 2 — Сортировка по достижимости, а не по количеству

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

8 находок, отсортированных только по серьёзности:
  high    парсер загруженных файлов, в пути запроса API
  high    генератор кода времени сборки, только для разработки
  medium  читатель размеров изображений, возможность не используется продуктом
  medium  шаблонизатор, достижим из сохранённого пользовательского содержимого
  ... ещё четыре

Решение

Находка (иллюстративно)                        Достижимо?  Путь к исправлению
парсер загруженных файлов, путь API            да          патч за 7 дней
шаблонизатор, сохранённое содержимое           да          патч за 7 дней
читатель размеров изображений, неиспользуемый  нет         заметка, вернуться при обновлении
генератор кода времени сборки, только dev      нет         патч при следующем обновлении

Каждая строка получает суждение о достижимости, исправленную версию где она существует, и владельца, что превращает количество в очередь. Где исправленной версии нет, записывайте компенсирующий контроль и дату возврата к вопросу. Обычная ошибка — принимать серьёзность за риск: рекомендация высокой серьёзности в пути кода, который никто не вызывает, менее срочна, чем средняя, достижимая атакующим, и ни один сканер не различит это за вас.