Результаты обнаружения зависимостей, сообщаемые GitHub могут отличаться от результатов, возвращаемых другими средствами. Для этого есть хорошие причины, и полезно понять, как GitHub определяет зависимости для вашего проекта.
Отсутствующие или необнаруженные зависимости
GitHub создает и отображает данные о зависимостях не так, как многие другие средства. Это означает, что вы почти наверняка увидите отличные от ожидаемых результаты, если ранее использовали другое средство для выявления зависимостей. Рассмотрим следующее:
-
GitHub Advisory Database является одним из источников данных, которые GitHub использует для выявления уязвимых зависимостей и вредоносных программ. Это бесплатная курируемая база данных с рекомендациями по безопасности для популярных экосистем пакетов на платформе GitHub. В нее включается информация, переданная непосредственно в GitHub из GitHub Security Advisories, а также полученная из официальных веб-каналов и источников сообщества. Эти данные проверяются и курируются в GitHub, чтобы исключить передачу разработчикам ложных сведений или информации без конкретных действий. Дополнительные сведения см. в разделе Просмотр рекомендаций по безопасности в базе данных рекомендаций по GitHub.
-
Граф зависимостей анализирует все известные файлы манифеста пакета в репозитории пользователя. Например, при использовании npm он будет анализировать файл package-lock.json. Он создает граф всех зависимостей внутри репозитория и общедоступных зависимых объектов. Это действие выполняется при включении графа зависимостей и при отправке любым пользователем изменений в ветвь по умолчанию, содержащих фиксации с изменениями манифеста в поддерживаемом формате. Дополнительные сведения см. в разделе [AUTOTITLE и Сведения о графе зависимостей](/code-security/supply-chain-security/understanding-your-software-supply-chain/troubleshooting-the-dependency-graph).
-
Dependabot сканирует все отправки в ветвь по умолчанию, которые содержат файл манифеста. При добавлении новой рекомендации выполняется проверка всех существующих репозиториев и создается оповещение для каждого затронутого репозитория. Dependabot alerts агрегируются на уровне репозитория, без создания отдельного оповещения о каждой рекомендации. Дополнительные сведения см. в разделе Сведения об оповещениях Dependabot.
-
Dependabot security updates активируются при получении оповещения о уязвимой зависимости в репозитории. При наличии возможности Dependabot автоматически создает запрос на вытягивание для этого репозитория, чтобы обновить уязвимую зависимость до минимально возможной безопасной версии, в которой устранена обнаруженная уязвимость. Дополнительные сведения см. в разделе [AUTOTITLE и Сведения об обновлениях для системы безопасности Dependabot](/code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-errors).
Dependabot не сканирует репозитории по расписанию, а не когда что-то меняется. Например, проверка активируется при добавлении новой зависимости (GitHub проверяет это при каждой отправке или при добавлении нового рекомендации в базу данных. Дополнительные сведения см. в разделе Сведения об оповещениях Dependabot.
Область покрытия оповещений
Dependabot alerts предоставляют вам рекомендации по обновлению зависимостей, включая транзитивные зависимости, для которых можно определить версию по манифесту или файлу блокировки. Dependabot security updates предлагают только изменение, в котором Dependabot может напрямую исправить зависимость, то есть, когда они:
-
прямые зависимости явным образом определены в файле манифеста или блокировки;
-
Транзитивные зависимости, объявленные в файле блокировки
**Проверьте:** относится ли необнаруженная уязвимость к компоненту, который не указан в манифесте или файле блокировки репозитория?
Неподдерживаемые экосистемы
Dependabot alerts поддерживаются только для определенного набора экосистем, по которым мы можем предоставлять высококачественные данные с конкретными рекомендациями по действиям. Курируемые рекомендации в GitHub Advisory Database, граф зависимостей, обновления безопасности Dependabot, and Dependabot alerts предоставляются для нескольких экосистем, включая Maven для Java, npm и Yarn для JavaScript, NuGet для .NET, pip для Python, RubyGems для Ruby и Composer для PHP. Общие сведения о экосистемах пакетов, которые мы поддерживаем для Dependabot alerts, см. в разделе Поддерживаемые экосистемы пакетов графа зависимостей.
Стоит отметить, что рекомендации по безопасности могут существовать для других экосистем. Сведения в непроверенных рекомендациях по безопасности предоставляются ответственными за конкретные репозитории лицами. Эти данные не курируются GitHub. Дополнительные сведения см. в разделе Просмотр рекомендаций по безопасности в базе данных рекомендаций по GitHub.
**Проверьте:** относится ли необнаруженная уязвимость к неподдерживаемой экосистеме?
Исторические уязвимости
GitHub Advisory Database создана в ноябре 2019 года и изначально была заполнена всей существующей информацией о рекомендациях по рискам безопасности для поддерживаемых экосистем, начиная с 2017 года. В процессе добавления CVE в базу данных мы отдаем приоритет курированию новых CVE и тех CVE, которые влияют на новые версии программного обеспечения.
Есть и некоторая информация о старых уязвимостях, особенно о самых распространенных, но существуют и не включенные в GitHub Advisory Database давно известные уязвимости. Если вы хотите включить в эту базу данных конкретную старую уязвимость, обратитесь к .
**Проверьте**: имеет ли необнаруженная уязвимость дату публикации ранее 2017 года в национальной базе данных уязвимостей?
Область консультативной базы данных
Некоторые сторонние средства используют некурированные данные CVE, которые не проверяются и не фильтруются человеком. Это означает, что CVE могут содержать неверные теги, неправильный уровень серьезности или другие проблемы с качеством, которые повышают частоту, шумность оповещений и снижают их полезность.
Так как Dependabot использует только курированные данные из GitHub Advisory Database, вы будете получать меньше оповещений, но зато все они будут точными и релевантными.
Генерация и агрегация оповещений
Если зависимость имеет несколько уязвимостей, создается одно оповещение для каждой уязвимости на уровне рекомендаций и манифеста.

Ранее Dependabot alerts группировались в единое агрегированное оповещение с информацией о всех уязвимостях для одной зависимости. При переходе по ссылке из старого оповещения Dependabot вы попадете на вкладку Dependabot alerts с фильтром для отображения уязвимостей по конкретному пакету и манифесту.

Количество оповещений Dependabot alerts в GitHub обозначает общее количество оповещений, то есть количество уязвимостей, а не уязвимых зависимостей.
**Проверьте**: если обнаружено несоответствие в итоговых значениях, убедитесь, что вы не сравниваете номера оповещений с номерами зависимостей. Кроме того, убедитесь, что вы просматриваете все оповещения, а не отфильтрованное подмножество оповещений.
Опции игнорирования зависимостей
Вы можете настроить Dependabot для игнорирования определенных зависимостей в файле конфигурации, что заблокирует для них обновления безопасности и версий. Если вы хотите использовать только обновления для системы безопасности, необходимо переопределить поведение по умолчанию с помощью файла конфигурации. Дополнительные сведения см. в разделе Настройка обновлений для системы безопасности Dependabot , чтобы предотвратить активацию обновлений версий. Сведения об игнорировании зависимостей см. в разделе "Игнорируние определенных зависимостей".
Monorepo ограничения для GitHub Actions versions
Если репозиторий содержит несколько GitHub Actions (например, в monorepo), используемый формат тега влияет на то, как Dependabot обнаруживает и обновляет версии действий.
-
`-`- Dependabot может группировать несколько действий в одной записи зависимостей или не обнаруживать новые версии правильно. Это происходит из-за того, что Dependabot использует синтаксический анализ тегов на основе косой черты для различения действий.
-
`/`-
Dependabot правильно обнаруживает и обновляет каждое действие независимо, так как косая черта создает иерархическую структуру тегов, которая соответствует логике синтаксического анализа Dependabot.
**Рекомендация.** Для monorepos с несколькими действиями используйте формат косой `name/version` черты для тегов действий. Это гарантирует, что Dependabot может правильно анализировать иерархию тегов и обновлять действия независимо.
-
-
Пример:
# Recommended: namespaced with slash uses: my-org/monorepo/my-action@my-action/v0.1.0 # Not recommended: dash uses: my-org/monorepo@my-action-v0.1.0
Дополнительные материалы
-
[AUTOTITLE](/code-security/dependabot/dependabot-alerts/about-dependabot-alerts) -
[AUTOTITLE](/code-security/dependabot/dependabot-alerts/viewing-and-updating-dependabot-alerts) -
[AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository) -
[AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/troubleshooting-the-dependency-graph) -
[AUTOTITLE](/code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-errors) -
[AUTOTITLE](/code-security/dependabot/working-with-dependabot/about-dependabot-on-github-actions-runners)