Skip to main content

Устранение неполадок обнаружения уязвимых зависимостей

Если сообщаемые GitHub Enterprise Cloud сведения о зависимостях не соответствуют вашим ожиданиям, нужно учитывать несколько факторов, а также проверить различные аспекты.

Результаты обнаружения зависимостей, сообщаемые GitHub Enterprise Cloud, могут отличаться от результатов, возвращаемых другими средствами. Для этого есть веские причины, и полезно понять, как 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/working-with-dependabot/troubleshooting-dependabot-errors)".

    Dependabot не сканирует репозитории по расписанию, а не когда что-то меняется. Например, проверка активируется при добавлении новой зависимости (GitHub проверяет это при каждой отправке или при добавлении нового рекомендации в базу данных. Дополнительные сведения см. в разделе «Сведения об оповещениях Dependabot».

Dependabot alerts относятся только к небезопасным зависимостям в манифестах и файлах блокировки?

Dependabot alerts предоставляют вам рекомендации по обновлению зависимостей, включая транзитивные зависимости, для которых можно определить версию по манифесту или файлу блокировки. Dependabot security updates предлагают только изменение, в котором Dependabot может напрямую исправить зависимость, то есть, когда они:

  • прямые зависимости явным образом определены в файле манифеста или блокировки;
  • Транзитивные зависимости, объявленные в файле блокировки

Проверьте: относится ли необнаруженная уязвимость к компоненту, который не указан в манифесте или файле блокировки репозитория?

Почему я не получаю Dependabot alerts для некоторых экосистем?

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.

Проверьте: относится ли необнаруженная уязвимость к неподдерживаемой экосистеме?

Создает ли Dependabot оповещения об уязвимостях, которые известны уже много лет?

GitHub Advisory Database создана в ноябре 2019 года и изначально была заполнена всей существующей информацией о рекомендациях по рискам безопасности для поддерживаемых экосистем, начиная с 2017 года. В процессе добавления CVE в базу данных мы отдаем приоритет курированию новых CVE и тех CVE, которые влияют на новые версии программного обеспечения.

Есть и некоторая информация о старых уязвимостях, особенно о самых распространенных, но существуют и не включенные в GitHub Advisory Database давно известные уязвимости. Если вы хотите включить в эту базу данных конкретную старую уязвимость, обратитесь к .

Проверьте: имеет ли необнаруженная уязвимость дату публикации ранее 2017 года в национальной базе данных уязвимостей?

Почему GitHub Advisory Database использует только подмножество опубликованных данных об уязвимостях?

Некоторые сторонние средства используют некурированные данные CVE, которые не проверяются и не фильтруются человеком. Это означает, что CVE могут содержать неверные теги, неправильный уровень серьезности или другие проблемы с качеством, которые повышают частоту, шумность оповещений и снижают их полезность.

Так как Dependabot использует только курированные данные из GitHub Advisory Database, вы будете получать меньше оповещений, но зато все они будут точными и релевантными.

Создает ли каждая небезопасная зависимость отдельное оповещение?

Если зависимость имеет несколько уязвимостей, создается одно оповещение для каждой уязвимости на уровне рекомендаций и манифеста.

Снимок экрана: вкладка Dependabot alerts с двумя оповещениями для разных манифестов в одном пакете.

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

Снимок экрана: вкладка Dependabot alerts с отфильтрованными оповещениями, которая открывается при переходе из старого оповещения Dependabot.

Количество оповещений Dependabot alerts в GitHub обозначает общее количество оповещений, то есть количество уязвимостей, а не уязвимых зависимостей.

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

Может ли Dependabot игнорировать определенные зависимости?

Вы можете настроить Dependabot для игнорирования определенных зависимостей в файле конфигурации, что заблокирует для них обновления безопасности и версий. Если вы хотите использовать только обновления для системы безопасности, необходимо переопределить поведение по умолчанию с помощью файла конфигурации. Дополнительные сведения см. в разделе "Настройка обновлений для системы безопасности Dependabot", чтобы предотвратить активацию обновлений версий. Сведения об игнорировании зависимостей см. в разделе "Параметры конфигурации для файла dependabot.yml".

Дополнительные материалы