[DevOps, Информационная безопасность, Разработка веб-сайтов, Разработка мобильных приложений] DevSecOps: принципы работы и сравнение SCA. Часть первая
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Значимость анализа сторонних компонентов ПО (англ. Software Composition Analysis — SCA) в процессе разработки растет по мере выхода ежегодных отчетов об уязвимостях open source библиотек, которые публикуются компаниями Synopsys, Sonatype, Snyk, White Source. Согласно отчету The State of Open Source Security Vulnerabilities 2020 число выявленных уязвимостей в open source в 2019 выросло почти в 1.5 раза в сравнении с предыдущим годом, в то время как компоненты с открытым кодом используются от 60% до 80% проектов. Если обратиться к независимому мнению, то процессы SCA являются отдельной практикой OWASP SAMM и BSIMM в качестве показателя зрелости, а в первой половине 2020 года OWASP выпустила новый стандарт OWASP Software Component Verification Standard (SCVS), предоставляющий лучшие практики по проверке сторонних компонент в цепочке поставок ПО.
Один из самых показательных кейсов произошел с компанией Equifax в мае 2017 года. Неизвестные злоумышленники завладели информацией о 143 млн. американцев, включая полные имена, адреса, номера социального страхования и водительских удостоверений. В 209 000 случаях в документах также фигурировала информация о банковских картах пострадавших. Данная утечка произошла в следствие эксплуатации критической уязвимости в Apache Struts 2 (CVE-2017-5638), в то время как исправление было выпущено еще в марте 2017 года. У компании было два месяца на установку обновления, однако этим никто не озаботился.
В данной статье будет обсуждаться вопрос выбора инструмента для проведения SCA с точки зрения качества результатов анализа. Также будет приведено функциональное сравнение инструментов. Процесс встраивания в CI/CD и возможности по интеграции оставим на последующие публикации. Широкий список инструментов был представлен OWASP на своем сайте, но в рамках текущего обзора мы коснемся только самого популярного open source инструмента Dependency Check, чуть менее известной open source платформы Dependency Track и Enterprise-решения Sonatype Nexus IQ. Также разберемся, как работают эти решения и сравним полученные результаты на предмет ложных срабатываний.
Принцип работы
Dependency Check — это утилита (CLI, maven, jenkins модуль, ant), которая анализирует файлы проекта, собирает фрагменты информации о зависимостях (package name, groupid, specification title, version…), строит строку CPE — (Common Platform Enumeration), Package URL (PURL) и выявляет для CPE/PURL уязвимости из баз данных (NVD, Sonatype OSS Index, NPM Audit API…), после чего строит единоразовый отчет в формате HTML, JSON, XML…
Рассмотрим, как выглядит CPE:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- Part: Указание о том, что компонент относится к приложению (a), операционной системе (o), железу (h) (Обязательный пункт)
- Vendor: Название производителя продукта (Обязательный пункт)
- Product: Название продукта (Обязательный пункт)
- Version: Версия компоненты (Устаревший пункт)
- Update: Обновление пакета
- Edition: Наследуемая версия (Устаревший пункт)
- Language: Язык, определяемый в RFC-5646
- SW Edition: Версия ПО
- Target SW: Программная среда, в которой работает продукт
- Target HW: Аппаратная среда, в которой работает продукт
- Other: Информация о поставщике или продукте
Пример CPE выглядит следующим образом:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Строка означает, что CPE версии 2.3 описывает компонент приложения от производителя pivotal_software с названием spring_framework версии 3.0.0. Если мы откроем уязвимость CVE-2014-0225 в NVD, то можем увидеть упоминание этой CPE. Первая проблема, на которую сразу стоит обратить внимание — CVE в NVD, согласно CPE, сообщает о наличии проблемы во фреймворке, а не в конкретной компоненте. То есть, если разработчики плотно завязаны на фреймворк, а выявленная уязвимость не касается тех модулей, которые используют разработчики, специалисту по безопасности так или иначе придется разбирать данную CVE и задумываться об обновлении.
URL-адрес также используется инструментами SCA. Формат URL-адреса пакета следующий:
scheme:type/namespace/name@version?qualifiers#subpath
- Sсheme: Всегда будет 'pkg', указывающий, что это URL-адрес пакета (Обязательный пункт)
- Type: «Тип» пакета или «протокол» пакета, например maven, npm, nuget, gem, pypi и т.д. (Обязательный пункт)
- Namespace: Некоторый префикс имени, такой как идентификатор группы Maven, владелец образа Docker, пользователь или организация GitHub. Необязательный и зависит от типа.
- Name: Имя пакета (Обязательный пункт)
- Version: Версия пакета
- Qualifiers: Дополнительные квалификационные данные для пакета, такие как ОС, архитектура, дистрибутив и т. Д. Необязательный и зависящий от типа пункт.
- Subpath: Дополнительный путь в пакете относительно корня пакета
Например:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/io@1.3.4
pkg:pypi/django-package@1.11.1.dev1
Dependency Track — on-premise веб-платформа, которая принимает готовые Bill of Materials (BOM) сформированные CycloneDX и SPDX, то есть готовые спецификации об имеющихся зависимостях. Это XML-файл с описанием зависимостей — name, hashes, package url, publisher, license. Далее Dependency Track разбирает BOM, смотрит имеющиеся к выявленным зависимостям CVE из базы данных уязвимостей (NVD, Sonatype OSS Index …), после чего строит графики, вычисляет метрики, регулярно обновляя данные о статусе уязвимости компонент.
Пример того, как может выглядеть BOM в формате XML:
<?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
<components>
<component type="library">
<publisher>Apache</publisher>
<group>org.apache.tomcat</group>
<name>tomcat-catalina</name>
<version>9.0.14</version>
<hashes>
<hash alg="MD5">3942447fac867ae5cdb3229b658f4d48</hash>
<hash alg="SHA-1">e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a</hash>
<hash alg="SHA-256">f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b</hash>
<hash alg="SHA-512">e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282</hash>
</hashes>
<licenses>
<license>
<id>Apache-2.0</id>
</license>
</licenses>
<purl>pkg:maven/org.apache.tomcat/tomcat-catalina@9.0.14</purl>
</component>
<!-- More components here -->
</components>
</bom>
BOM может использоваться не только в качестве входных параметров для Dependency Track, но и для инвентаризации компонентов ПО в цепочке поставок, например, для предоставления заказчику ПО. В 2014 году на рассмотрение в США был даже предложен закон «Cyber Supply Chain Management and Transparency Act of 2014», который гласил, что при закупке ПО любое гос. учреждение должно запрашивать BOM для предотвращения использования уязвимых компонент, однако в силу акт так и не вступил.
Возвращаясь к SCA, у Dependency Track есть готовые интеграции с Notification Platforms вроде Slack, системами управления уязвимостями вроде Kenna Security. Стоит также сказать, что Dependency Track ко всему прочему выявляет устаревшие версии пакетов и предоставляет информацию о лицензиях (за счет поддержки SPDX).
Если говорить именно о качестве SCA, то здесь есть принципиальная разница.
Dependency Track не принимает проект в качестве входных данных, а принимает именно BOM. Это означает, что если мы захотим проверить проект, то сначала нам нужно сгенерировать bom.xml, например, с помощью CycloneDX. Таким образом, Dependency Track напрямую зависит от CycloneDX. В то же время, это дает возможность кастомизации. Так команда OZON написала модуль CycloneDX для сборки BOM-файлов для проектов на Golang с целью дальнейшего сканирования через Dependency Track.
Nexus IQ — коммерческое решение SCA от компании Sonatype, которое является частью экосистемы Sonatype, куда также входит Nexus Repository Manager. Nexus IQ может принимать в качестве входных данных как war архивы (для java проектов) через веб-интерфейс или API, так и BOM, если ваша организация не успела перестроиться с CycloneDX на новое решение. В отличие от open source решений, IQ обращается не только к CP/PURL к выявленной компоненте и соответствующей уязвимости в базе данных, но и учитывает собственные исследования, например, название уязвимой функции или класса. Механизмы IQ будут рассмотрены позднее при разборе результатов.
Подведем некоторые итоге по функциональным особенностям, а также рассмотрим поддерживаемые языки для анализа:
Язык
Nexus IQ
Dependency Check
Dependency Track
Java
+
+
+
C/C++
+
+
-
C#
+
+
-
.Net
+
+
+
Erlang
-
-
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Python
+
+
+
Ruby
+
+
+
Perl
-
-
-
Scala
+
+
+
Objective C
+
+
-
Swift
+
+
-
R
+
-
-
Go
+
+
+
Функциональные возможности
Функциональные возможности
Nexus IQ
Dependency Check
Dependency Track
Возможность обеспечивать проверку компонент, используемых в исходном коде на лицензионную чистоту
+
-
+
Возможность сканирования и анализа на наличие уязвимостей и лицензионной чистоты для образов Docker
+ Интеграция с Clair
-
-
Возможность настройки политики безопасности для использования библиотек с открытым исходным кодом
+
-
-
Возможность сканирования репозиториев с открытым исходным кодом на наличие уязвимых компонентов
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Наличие специализированной исследовательской группы
+
-
-
Работа в закрытом контуре
+
+
+
Использование сторонних баз данных
+ Закрытая БД Sonatype
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, поддержка собственной БД уязвимостей
Возможность фильтровать компоненты с открытым исходным кодом при попытке загрузки в контур разработки согласно сконфигурированным политикам
+
-
-
Рекомендации по исправлению уязвимостей, наличие ссылок на исправление
+
+- (зависит от описания в публичных базах)
+- (зависит от описания в публичных базах)
Ранжирование обнаруженных уязвимостей по степени критичности
+
+
+
Ролевая модель доступа
+
-
+
Поддержка интерфейса командной строки CLI
+
+
+- (только для CycloneDX)
Выборка / сортировка уязвимостей по определяемым критериям
+
-
+
Dashboard по состоянию приложений
+
-
+
Генерация отчётов в PDF-формате
+
-
-
Генерация отчётов в формате JSON\CSV
+
+
-
Поддержка русского языка
-
-
-
Интеграционные возможности
Интеграция
Nexus IQ
Dependency Check
Dependency Track
Интеграция с LDAP/Active Directory
+
-
+
Интеграция с системой непрерывной интеграции (continous integration) Bamboo
+
-
-
Интеграция с системой непрерывной интеграции (continous integration) TeamCity
+
-
-
Интеграция с системой непрерывной интеграции (continous integration) GitLab
+
+- (в виде плагина для GitLab)
+
Интеграция с системой непрерывной интеграции (continous integration) Jenkins
+
+
+
Наличие плагинов к IDE
+ IntelliJ, Eclipse, Visual Studio
-
-
Поддержка кастомизированной интеграции через web-services (API) инструмента
+
-
+
Dependency Check
Первый запуск
Запустим Dependency Check к умышленно уязвимому приложению DVJA.
Для этого воспользуемся Dependency Check Maven Plugin:
mvn org.owasp:dependency-check-maven:check
В результате в директории target появится dependency-check-report.html.
Откроем файл. После сводной информации об общем количестве уязвимостей можем увидеть информацию об уязвимостях с высоким уровнем Severity и Confidence с указанием на пакет, CPE, число CVE.
Следом идет более подробная информация, в частности то, на основе чего было принято решение (evidence), то есть некий BOM.
Далее идет CPE, PURL и описание CVE. Рекомендации об исправлении кстати не прилагаются в силу отсутствия их в базе NVD.
Для систематичного просмотра результатов сканирования можно настроить Nginx с минимальными настройками, либо отправлять полученные дефекты в систему управления дефектами, которые поддерживают конекторы к Dependency Check. Например, Defect Dojo.
Dependency Track
Установка
Dependency Track, в свою очередь, является веб-платформой с отображающими графиками, поэтому острый вопрос о хранении дефектов в стороннем решении здесь не стоит.
Для установки есть следующие поддерживаемые сценарии: Docker, WAR, Executable WAR.
Первый запуск
Переходим по URL запущенного сервиса. Входим через admin/admin, меняем логин и пароль, после чего попадаем на Dashboard. Следующее, что мы сделаем — создадим проект для тестового приложения на Java в Home/Projects → Create Project . В качестве примера возьмем DVJA.
Так как Dependency Track может принимать в качестве входных данных только BOM, этот BOM необходимо получить. Воспользуемся CycloneDX Maven Plugin:
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Получаем bom.xml и загружаем файл в созданном проекте DVJA → Dependeencies → Upload BOM.
Зайдем в Administration → Analyzers. Понимаем, что у нас включен только Internal Analyzer, включающий NVD. Подключим также Sonatype OSS Index.
Таким образом, получим следующую картину для нашего проекта:
Также в списке можно найти одну уязвимость, применимую к Sonatype OSS:
Основное разочарование было в том, что Dependency Track больше не принимает xml-отчеты Dependency Check. Последние поддерживаемые версии интеграции с Dependency Check были 1.0.0 — 4.0.2, в то время как я тестировал 5.3.2.
Вот видео (и вот), когда это было еще возможно.
Nexus IQ
Первый запуск
Установка Nexus IQ происходит из архивов по документации, но мы для этих целей собрали себе образ Docker.
После входа в консоль необходимо создать Организацию и Приложение.
Как можно видеть, настройка в случае с IQ происходит несколько сложнее, ибо нам также необходимо создать политики, применимые для разных “стейджей” (dev, build, stage, release). Это необходимо, чтобы блокировать уязвимые компоненты по мере продвижения по пайплайну ближе к проду, либо блокировать как только они попадают в Nexus Repo при скачивании разработчиками.
Чтобы ощутить разницу open source и enterprise, выполним такое же сканирование через Nexus IQ аналогично через Maven plugin, предварительно создав тестовое приложение в интерфейсе NexusIQ dvja-test-and-compare:
mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl=<NEXUSIQIP> -Dclm.username=<USERNAME> -Dclm.password=<PASSWORD>
Переходим по URL к сгенерированному отчету в веб-интерфейсе IQ:
Здесь можно увидеть все нарушения политики с указанием разного уровня значимости (от Info до Security Critical). Буква D рядом с компонентой означает, что компонента Direct Dependency, а буква T рядом с компонентом означает, что компонента Transitive Dependency, то есть является транзитивной.
Кстати, отчет State of Open Source Security Report 2020 от Snyk сообщает, что более 70% уязвимостей open source обнаруженных в Node.js, Java и Ruby находятся в транзитивных зависимостях.
Если открыть одно из нарушений политики Nexus IQ, мы можем увидеть описание компоненты, а также Version Graph, который показывает местоположение текущей версии на временном графе, а также в какой момент уязвимость перестает быть уязвимой. Высота свечей на графе показывает популярность использования этой компоненты.
Если перейти в раздел уязвимостей и раскрыть CVE, то можно прочитать описание к этой уязвимости, рекомендации по устранению, а также причину, по которой данная компонента попала под нарушение, то есть наличие класса DiskFileitem.class.
Подведем итоги только касающиеся сторонних компонентов Java, убрав компоненты js. В скобках укажем число тех уязвимостей, которые были найдены за пределами NVD.
Итого Nexus IQ:
- Dependencies Scanned: 62
- Vulnerable Dependencies: 16
- Vulnerabilities Found: 42 (8 sonatype db)
Итого Dependency Check:
- Dependencies Scanned: 47
- Vulnerable Dependencies: 13
- Vulnerabilities Found: 91 (14 sonatype oss)
Итого Dependency Track:
- Dependencies Scanned: 59
- Vulnerable Dependencies: 10
- Vulnerabilities Found: 51 (1 sonatype oss)
Следующим шагов проанализируем полученные результаты и разберемся, что из этих уязвимостей является реальным дефектом, а что ложным срабатыванием.
Дисклеймер
Данное ревью не является неоспоримой истиной. Перед автором не стояло цели выделить отдельный инструмент на фоне других. Смысл ревью был показать механизмы работы инструментов SCA и способы проверки их результатов.
Сравнение результатов
Условия:
Ложным срабатыванием по отношению к уязвимостям сторонних компонентов является:
- Несоответствие CVE к выявленной компоненте
- Например, если уязвимость выявлена во фреймворке struts2, а инструмент указывает на компоненту фреймворка struts-tiles, к которой эта уязвимость не относится, то это false positive
- Несоответствие CVE к выявленной версии компоненты
- Например, уязвимость привязана к версии python > 3.5 и инструмент отмечает уязвимой версию 2.7 — это false positive, так как на самом деле уязвимость относится только к ветке продукта 3.x
- Дублирование CVE
- Например, если SCA указал на CVE, позволяющую реализовать RCE, после чего SCA указывает для этой же компоненты CVE, применимую к продуктам Cisco, подверженным этой RCE. В таком случае будет false positive.
- Например, CVE была найдена в компоненте spring-web, после чего SCA указывает на эту же CVE в других компонентах фреймворка Spring Framework, в то время как CVE к другим компонентам отношения не имеет. В таком случае будет false positive.
Объектом исследования выбран Open Source проект DVJA. В исследовании участвовали только java компоненты (без js).
Сводные результаты
Перейдем сразу в результатом ручного ревью выявленных уязвимостей. С полным отчетом для каждой CVE можно познакомиться в Приложении.
Сводные результаты по всем уязвимостям:
Параметр
Nexus IQ
Dependency Check
Dependency Track
Всего выявлено уязвимостей
42
91
51
Неверно выявлено уязвимостей (false positive)
2(4.76%)
62(68,13%)
29(56.86%)
Не обнаружено релевантных уязвимостей (false negative)
10
20
27
Сводные результаты по компонентам:
Параметр
Nexus IQ
Dependency Check
Dependency Track
Всего выявлено компонентов
62
47
59
Всего уязвимых компонентов
16
13
10
Неверно выявлены уязвимые компоненты (false positive)
1
5
0
Неверно выявлены уязвимые компоненты (false positive)
0
6
6
Построим визуальные графики, чтобы оценить соотношение false positive и false negative к общему числу уязвимостей. По горизонтали отмечены компоненты, а по вертикали выявленные в них уязвимости.
Для сравнения, аналогичное исследование было проведено командой Sonatype по тестированию проекта из 1531 компоненты с помощью OWASP Dependency Check. Как мы можем увидеть, соотношение шума к корректным срабатываниям соезмиримо с нашими результатами.
Источник: www.sonatype.com/why-precision-matters-ebook
Рассмотрим некоторые CVE из результатов нашего сканирования, чтобы понять причину таких результатов.
Подробнее
№1
Разберем сначала некоторые интересные моменты Sonatype Nexus IQ.
Nexus IQ указывает на проблему с десереализацией с возможностью выполнить RCE в Spring Framework несколько раз. CVE-2016-1000027 в spring-web:3.0.5 в первый раз, и CVE-2011-2894 в spring-context:3.0.5 и spring-core:3.0.5. Поначалу кажется, что происходит дублирование уязвимости по нескольким CVE. Ибо, если посмотреть CVE-2016-1000027 и CVE-2011-2894 в базе NVD, то кажется, что все очевидно
Компонент
Уязвимость
spring-web:3.0.5
CVE-2016-1000027
spring-context:3.0.5
CVE-2011-2894
spring-core:3.0.5
CVE-2011-2894
Описание CVE-2011-2894 из NVD:
Описание CVE-2016-1000027 из NVD:
CVE-2011-2894 сама по себе довольно известная. В отчете White Source за 2011 год эта CVE была признана одной из самых часто встречающихся. Описания для CVE-2016-100027 в принципе немного в NVD, да и применима она, вроде бы, только для Spring Framework 4.1.4. Взглянем на reference и тут становится все более или менее понятно. Из статьи Tenable мы понимаем, что помимо уязвимости в RemoteInvocationSerializingExporter в CVE-2011-2894, уязвимость наблюдается в HttpInvokerServiceExporter. Об этом нам и говорит Nexus IQ:
Тем не менее ничего подобного нет в NVD, из-за чего Dependency Check и Dependency Track получают по false negative.
Также из описания CVE-2011-2894 можно понять, что уязвимость действительно присутствует и в spring-context:3.0.5 и в spring-core:3.0.5. Подтверждение этому можно найти в статье от того, кто эту уязвимость нашел.
№2
Компонент
Уязвимость
Результат
struts2-core:2.3.30
CVE-2016-4003
FALSE
Если мы изучим уязвимость CVE-2016-4003, то поймем, что ее исправили еще в версии 2.3.28, тем не менее Nexus IQ нам о ней сообщает. В описании к уязвимости есть примечание:
То есть уязвимость существует только в связке с устаревшей версией JRE, о чем нас решили предупредить. Тем не менее, считаем это False Positive, хоть и не самым страшным.
№ 3
Компонент
Уязвимость
Результат
xwork-core:2.3.30
CVE-2017-9804
TRUE
xwork-core:2.3.30
CVE-2017-7672
FALSE
Если мы посмотрим описание к CVE-2017-9804 и CVE-2017-7672, то поймем, что проблема в URLValidator class, причем CVE-2017-9804 вытекает из CVE-2017-7672. Наличие второй уязвимости не несет никакой полезной нагрузки кроме того, что ее severity вырос до High, поэтому можно считать это лишним шумом.
В целом других false positive для Nexus IQ найдено не было.
№4
Есть несколько моментов, которые выделяют IQ на фоне других решений.
Компонент
Уязвимость
Результат
spring-web:3.0.5
CVE-2020-5398
TRUE
CVE в NVD сообщает, что она применима только для версий 5.2.x до 5.2.3, 5.1.x до 5.1.13, и версий 5.0.x до 5.0.16, тем не менее, если мы посмотрим описание CVE в Nexus IQ, то увидим следующее:
Advisory Deviation Notice: The Sonatype security research team discovered that this vulnerability was introduced in version 3.0.2.RELEASE and not 5.0.x as stated in the advisory.
После этого следует PoC к этой уязвимости, который сообщает, что она присутствует в версии 3.0.5.
False negative отправляется к Dependency Check и Dependency Track.
№5
Посмотрим на false positive для Dependency Check и Dependency Track.
Dependency Check отдельно выделяется тем, что отражает те CVE, которые относятся ко всему фреймворку в NVD, в те компоненты, к которым эти CVE не применимы. Это касается CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, которые Dependency Check “прикрутил” к struts-taglib:1.3.8 и struts-tiles-1.3.8. Эти компоненты не имеют ничего общего с тем, что описано в CVE — обработка запросов, валидация страниц и так далее. Это обусловлено тем, что общее между этими CVE и компонентами — только фреймворк, из-за чего Dependency Check и посчитал это уязвимостью.
Такая же ситуация с spring-tx:3.0.5, и похожая ситуация с struts-core:1.3.8. Для struts-core Dependency Check и Dependency Track нашли очень много уязвимостей, которые на самом деле применимы к struts2-core, который по сути является отдельным фреймворком. В данном случае Nexus IQ правильно понял картину и в тех CVE, которые выдал, указал, что struts-core пришел end of life и необходимо перейти к struts2-core.
№6
В некоторых ситуациях трактовать явную ошибку Dependency Check и Dependency Track несправедливо. В частности CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, которые Dependency Check и Dependency Track отнесли к spring-core:3.0.5 на самом деле относятся к spring-web:3.0.5. При этом часть из этих CVE были найдены и Nexus IQ, тем не менее IQ их корректно определил к другой компоненте. От того, что эти уязвимости не были найдены в spring-core, нельзя утверждать, что их нет во фреймворке в принципе и open source инструменты справедливо указали на эти уязвимости (просто немного промахнулись).
Выводы
Как мы можем видеть, определение достоверности выявленных уязвимостей ручным ревью не дает однозначных результатов, из-за чего возникают спорные моменты. Результаты таковы, что решение Nexus IQ обладает наименьшим показателем ложных срабатываний и наибольшей точностью.
В первую очередь, это связано с тем, что команда Sonatype расширило описание для каждой уязвимости CVE из NVD в своих базах, указав с точностью до класса или функции уязвимости для той или иной версии компоненты, проведя дополнительные исследования (например, проверив уязвимости на более старых версий ПО).
Немаловажное влияние на результаты играют и те уязвимости, которые не попали в NVD, но тем не менее присутствуют в базе Sonatype с пометкой SONATYPE. Согласно отчету The State of Open Source Security Vulnerabilities 2020 о 45% обнаруженных уязвимостей с открытым исходным кодом не сообщается в NVD. Согласно базе данных WhiteSource, только 29% всех уязвимостей с открытым исходным кодом, зарегистрированных за пределами NVD, в конечном итоге публикуются в ней, поэтому так важно искать уязвимости также в других источниках.
Как итог Dependency Check выдает большое количество шума, упуская часть уязвимых компонент. Dependency Track выдает меньший шум и выявляет большое число компонент, что визуально не режет глаза в веб-интерфейсе.
Тем не менее, практика показывает, что именно open source должен становится первым шагов на пути к зрелому DevSecOps. Первое, над чем стоит задуматься для встраивания SCA в разработку, — это процессы, а именно размышления совместно с руководством и смежными департаментами над тем, как должны выглядеть идеальные процессы у себя в организации. Возможно, окажется так, что для вашей организации на первых порах Dependency Check или Dependency Track закроют все стоящие перед бизнесом потребности, а Enterprise-решения будут являться логическим продолжением в силу роста сложности разрабатываемых приложений.
Приложение А. Результаты применительно к компонентам
SPL
Условные обозначения:
- High — уязвимости высокого и критичного уровня в компоненте
- Medium — Уязвимости среднего уровня критичности в компоненте
- TRUE — Верно определенная уязвимость (True positive issue)
- FALSE — Ложное срабатывание (False positive issue)
Компонент
Nexus IQ
Dependency Check
Dependency Track
Результат
dom4j: 1.6.1
High
High
High
TRUE
log4j-core: 2.3
High
High
High
TRUE
log4j: 1.2.14
High
High
-
TRUE
commons-collections:3.1
High
High
High
TRUE
commons-fileupload:1.3.2
High
High
High
TRUE
commons-beanutils:1.7.0
High
High
High
TRUE
commons-codec:1:10
Medium
-
-
TRUE
mysql-connector-java:5.1.42
High
High
High
TRUE
spring-expression:3.0.5
High
компонент не найден
TRUE
spring-web:3.0.5
High
компонент не найден
High
TRUE
spring-context:3.0.5
Medium
компонент не найден
-
TRUE
spring-core:3.0.5
Medium
High
High
TRUE
struts2-config-browser-plugin:2.3.30
Medium
-
-
TRUE
spring-tx:3.0.5
-
High
-
FALSE
struts-core:1.3.8
High
High
High
TRUE
xwork-core: 2.3.30
High
-
-
TRUE
struts2-core: 2.3.30
High
High
High
TRUE
struts-taglib:1.3.8
-
High
-
FALSE
struts-tiles-1.3.8
-
High
-
FALSE
Приложение Б. Результаты применительно к уязвимостям
SPL
Условные обозначения:
- High — уязвимости высокого и критичного уровня в компоненте
- Medium — Уязвимости среднего уровня критичности в компоненте
- TRUE — Верно определенная уязвимость (True positive issue)
- FALSE — Ложное срабатывание (False positive issue)
Компонент
Nexus IQ
Dependency Check
Dependency Track
Severity
Результат
Комментарий
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
High
TRUE
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
High
TRUE
log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
High
TRUE
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Low
TRUE
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
High
TRUE
-
CVE-2020-9488
-
Low
TRUE
SONATYPE-2010-0053
-
-
High
TRUE
commons-collections:3.1
-
CVE-2015-6420
CVE-2015-6420
High
FALSE
Дублирует RCE(OSSINDEX)
-
CVE-2017-15708
CVE-2017-15708
High
FALSE
Дублирует RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
High
TRUE
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
High
TRUE
SONATYPE-2014-0173
-
-
Medium
TRUE
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
High
TRUE
-
CVE-2019-10086
CVE-2019-10086
High
FALSE
Уязвимость применима только для версий 1.9.2+
commons-codec:1:10
SONATYPE-2012-0050
-
-
Medium
TRUE
mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
High
TRUE
CVE-2019-2692
CVE-2019-2692
-
Medium
TRUE
-
CVE-2020-2875
-
Medium
FALSE
Та же самая уязвимость как и CVE-2019-2692, но c припиской «attacks may significantly impact additional products»
-
CVE-2017-15945
-
High
FALSE
Не относится к mysql-connector-java
-
CVE-2020-2933
-
Low
FALSE
Дубликат к CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
-
Medium
TRUE
spring-expression:3.0.5
CVE-2018-1270
компонент не найден
-
High
TRUE
CVE-2018-1257
-
-
Medium
TRUE
spring-web:3.0.5
CVE-2016-1000027
компонент не найден
-
High
TRUE
CVE-2014-0225
-
CVE-2014-0225
High
TRUE
CVE-2011-2730
-
-
High
TRUE
-
-
CVE-2013-4152
Medium
TRUE
CVE-2018-1272
-
-
High
TRUE
CVE-2020-5398
-
-
High
TRUE
Показательный пример в пользу IQ: «The Sonatype security research team discovered that this vulnerability was introduced in version 3.0.2.RELEASE and not 5.0.x as stated in the advisory.»
CVE-2013-6429
-
-
Medium
TRUE
CVE-2014-0054
-
CVE-2014-0054
Medium
TRUE
CVE-2013-6430
-
-
Medium
TRUE
spring-context:3.0.5
CVE-2011-2894
компонент не найден
-
Medium
TRUE
spring-core:3.0.5
-
CVE-2011-2730
CVE-2011-2730
High
TRUE
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
TRUE
-
-
CVE-2013-4152
Medium
FALSE
Дубликат этой же уязвимости в spring-web
-
CVE-2013-4152
-
Medium
FALSE
Уязвимость относится к компоненте spring-web
-
CVE-2013-6429
CVE-2013-6429
Medium
FALSE
Уязвимость относится к компоненте spring-web
-
CVE-2013-6430
-
Medium
FALSE
Уязвимость относится к компоненте spring-web
-
CVE-2013-7315
CVE-2013-7315
Medium
FALSE
SPLIT из CVE-2013-4152. + Уязвимость относится к компоненте spring-web
-
CVE-2014-0054
CVE-2014-0054
Medium
FALSE
Уязвимость относится к компоненте spring-web
-
CVE-2014-0225
-
High
FALSE
Уязвимость относится к компоненте spring-web
-
-
CVE-2014-0225
High
FALSE
Дубликат этой же уязвимости в spring-web
-
CVE-2014-1904
CVE-2014-1904
Medium
FALSE
Уязвимость относится к компоненте spring-web-mvc
-
CVE-2014-3625
CVE-2014-3625
Medium
FALSE
Уязвимость относится к компоненте spring-web-mvc
-
CVE-2016-9878
CVE-2016-9878
High
FALSE
Уязвимость относится к компоненте spring-web-mvc
-
CVE-2018-1270
CVE-2018-1270
High
FALSE
Для spring-expression / spring-messages
-
CVE-2018-1271
CVE-2018-1271
Medium
FALSE
Уязвимость относится к компоненте spring-web-mvc
-
CVE-2018-1272
CVE-2018-1272
High
TRUE
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
TRUE
SONATYPE-2015-0327
-
-
Low
TRUE
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
Medium
TRUE
spring-tx:3.0.5
-
CVE-2011-2730
-
High
FALSE
Уязвимость не относится к spring-tx
-
CVE-2011-2894
-
High
FALSE
Уязвимость не относится к spring-tx
-
CVE-2013-4152
-
Medium
FALSE
Уязвимость не относится к spring-tx
-
CVE-2013-6429
-
Medium
FALSE
Уязвимость не относится к spring-tx
-
CVE-2013-6430
-
Medium
FALSE
Уязвимость не относится к spring-tx
-
CVE-2013-7315
-
Medium
FALSE
Уязвимость не относится к spring-tx
-
CVE-2014-0054
-
Medium
FALSE
Уязвимость не относится к spring-tx
-
CVE-2014-0225
-
High
FALSE
Уязвимость не относится к spring-tx
-
CVE-2014-1904
-
Medium
FALSE
Уязвимость не относится к spring-tx
-
CVE-2014-3625
-
Medium
FALSE
Уязвимость не относится к spring-tx
-
CVE-2016-9878
-
High
FALSE
Уязвимость не относится к spring-tx
-
CVE-2018-1270
-
High
FALSE
Уязвимость не относится к spring-tx
-
CVE-2018-1271
-
Medium
FALSE
Уязвимость не относится к spring-tx
-
CVE-2018-1272
-
Medium
FALSE
Уязвимость не относится к spring-tx
struts-core:1.3.8
-
CVE-2011-5057 (OSSINDEX)
Medium
FASLE
Уязвимость к Struts 2
-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
High
FALSE
Уязвимость к Struts 2
-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSE
Уязвимость к Struts 2
-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
High
FALSE
Уязвимость к Struts 2
CVE-2016-1182
3VE-2016-1182
-
High
TRUE
-
-
CVE-2011-5057
Medium
FALSE
Уязвимость к Struts 2
-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
High
FALSE
Уязвимость к Struts 2
-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSE
Уязвимость к Struts 2
CVE-2015-0899
CVE-2015-0899
-
High
TRUE
-
CVE-2012-0394
CVE-2012-0394
Medium
FALSE
Уязвимость к Struts 2
-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
High
FALSE
Уязвимость к Struts 2
-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
High
FALSE
Уязвимость к Struts 2
-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
High
FASLE
Уязвимость к Struts 2
-
CVE-2013-2115
CVE-2013-2115
High
FASLE
Уязвимость к Struts 2
-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
High
FASLE
Уязвимость к Struts 2
-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
High
FASLE
Уязвимость к Struts 2
CVE-2014-0114
CVE-2014-0114
-
High
TRUE
-
CVE-2015-2992
CVE-2015-2992
Medium
FALSE
Уязвимость к Struts 2
-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
High
FALSE
Уязвимость к Struts 2
CVE-2016-1181
CVE-2016-1181
-
High
TRUE
-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
High
FALSE
Уязвимость к Struts 2
xwork-core:2.3.30
CVE-2017-9804
-
-
High
TRUE
SONATYPE-2017-0173
-
-
High
TRUE
CVE-2017-7672
-
-
High
FALSE
Дубль к CVE-2017-9804
SONATYPE-2016-0127
-
-
High
TRUE
struts2-core:2.3.30
-
CVE-2016-6795
CVE-2016-6795
High
TRUE
-
CVE-2017-9787
CVE-2017-9787
High
TRUE
-
CVE-2017-9791
CVE-2017-9791
High
TRUE
-
CVE-2017-9793
-
High
FALSE
Дубликат к CVE-2018-1327
-
CVE-2017-9804
-
High
TRUE
-
CVE-2017-9805
CVE-2017-9805
High
TRUE
CVE-2016-4003
-
-
Medium
FALSE
Применимо к Apache Struts 2.x до 2.3.28, а это версия 2.3.30. Тем не менее, исходя из описания, CVE действует при любых версиях Struts 2, если используется JRE 1.7 и меньше. Видимо нас тут решили перестраховать, но больше похоже на FALSE
-
CVE-2018-1327
CVE-2018-1327
High
TRUE
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
High
TRUE
Та самая уязвимость, которой воспользовались злоумышленники в Equifax в 2017 году
CVE-2017-12611
CVE-2017-12611
-
High
TRUE
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
High
TRUE
struts-taglib:1.3.8
-
CVE-2012-0394
-
Medium
FALSE
Для struts2-core
-
CVE-2013-2115
-
High
FALSE
Для struts2-core
-
CVE-2014-0114
-
High
FALSE
Для commons-beanutils
-
CVE-2015-0899
-
High
FALSE
Не относится к taglib
-
CVE-2015-2992
-
Medium
FALSE
Относится к struts2-core
-
CVE-2016-1181
-
High
FALSE
Не относится к taglib
-
CVE-2016-1182
-
High
FALSE
Не относится к taglib
struts-tiles-1.3.8
-
CVE-2012-0394
-
Medium
FALSE
Для struts2-core
-
CVE-2013-2115
-
High
FALSE
Для struts2-core
-
CVE-2014-0114
-
High
FALSE
Под commons-beanutils
-
CVE-2015-0899
-
High
FALSE
Не относится к tiles
-
CVE-2015-2992
-
Medium
FALSE
Для struts2-core
-
CVE-2016-1181
-
High
FALSE
Не относится к taglib
-
CVE-2016-1182
-
High
FALSE
Не относится к taglib
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка мобильных приложений, Разработка под Android, Gradle] Конфигурация многомодульных проектов
- [Информационная безопасность, Проектирование и рефакторинг, Развитие стартапа, Законодательство в IT] Privacy Accelerator: приглашаем на прокачку проекты в сфере прайваси и доступа к информации
- [Git, Разработка игр, GitHub] Как однажды была чуть не сорвана разработка Gardenscapes
- [Системное администрирование, Серверное администрирование, DevOps] Ceph: Первый практический курс на русском языке
- [Информационная безопасность, Системное администрирование, Сетевые технологии] 5. Check Point SandBlast Agent Management Platform. Logs, Reports & Forensics. Threat Hunting
- [Информационная безопасность, IT-инфраструктура, Сетевые технологии, Сетевое оборудование] Туннель под безопасностью и брокеры сетевых пакетов
- [Информационная безопасность, Конференции] 7 интересных хаков с Black Hat / DEF CON 2020 (перевод)
- [Разработка веб-сайтов, Разработка мобильных приложений, Разработка под Android, Карьера в IT-индустрии, Разработка под Windows] Нужен ли еще один сервис (opensource)? (в конце опрос)
- [Информационная безопасность, Хранение данных] Баг в Google Drive позволяет подменять обычные файлы вредоносными
- [Разработка веб-сайтов, JavaScript, Программирование, ReactJS] Изучаем хук useRef в React.js (перевод)
Теги для поиска: #_devops, #_informatsionnaja_bezopasnost (Информационная безопасность), #_razrabotka_vebsajtov (Разработка веб-сайтов), #_razrabotka_mobilnyh_prilozhenij (Разработка мобильных приложений), #_devsecops, #_sca, #_dependency_check, #_dependency_track, #_nexus_iq, #_devops, #_informatsionnaja_bezopasnost (
Информационная безопасность
), #_razrabotka_vebsajtov (
Разработка веб-сайтов
), #_razrabotka_mobilnyh_prilozhenij (
Разработка мобильных приложений
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:11
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Значимость анализа сторонних компонентов ПО (англ. Software Composition Analysis — SCA) в процессе разработки растет по мере выхода ежегодных отчетов об уязвимостях open source библиотек, которые публикуются компаниями Synopsys, Sonatype, Snyk, White Source. Согласно отчету The State of Open Source Security Vulnerabilities 2020 число выявленных уязвимостей в open source в 2019 выросло почти в 1.5 раза в сравнении с предыдущим годом, в то время как компоненты с открытым кодом используются от 60% до 80% проектов. Если обратиться к независимому мнению, то процессы SCA являются отдельной практикой OWASP SAMM и BSIMM в качестве показателя зрелости, а в первой половине 2020 года OWASP выпустила новый стандарт OWASP Software Component Verification Standard (SCVS), предоставляющий лучшие практики по проверке сторонних компонент в цепочке поставок ПО. Один из самых показательных кейсов произошел с компанией Equifax в мае 2017 года. Неизвестные злоумышленники завладели информацией о 143 млн. американцев, включая полные имена, адреса, номера социального страхования и водительских удостоверений. В 209 000 случаях в документах также фигурировала информация о банковских картах пострадавших. Данная утечка произошла в следствие эксплуатации критической уязвимости в Apache Struts 2 (CVE-2017-5638), в то время как исправление было выпущено еще в марте 2017 года. У компании было два месяца на установку обновления, однако этим никто не озаботился. В данной статье будет обсуждаться вопрос выбора инструмента для проведения SCA с точки зрения качества результатов анализа. Также будет приведено функциональное сравнение инструментов. Процесс встраивания в CI/CD и возможности по интеграции оставим на последующие публикации. Широкий список инструментов был представлен OWASP на своем сайте, но в рамках текущего обзора мы коснемся только самого популярного open source инструмента Dependency Check, чуть менее известной open source платформы Dependency Track и Enterprise-решения Sonatype Nexus IQ. Также разберемся, как работают эти решения и сравним полученные результаты на предмет ложных срабатываний. Принцип работы Dependency Check — это утилита (CLI, maven, jenkins модуль, ant), которая анализирует файлы проекта, собирает фрагменты информации о зависимостях (package name, groupid, specification title, version…), строит строку CPE — (Common Platform Enumeration), Package URL (PURL) и выявляет для CPE/PURL уязвимости из баз данных (NVD, Sonatype OSS Index, NPM Audit API…), после чего строит единоразовый отчет в формате HTML, JSON, XML… Рассмотрим, как выглядит CPE: cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
Пример CPE выглядит следующим образом: cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Строка означает, что CPE версии 2.3 описывает компонент приложения от производителя pivotal_software с названием spring_framework версии 3.0.0. Если мы откроем уязвимость CVE-2014-0225 в NVD, то можем увидеть упоминание этой CPE. Первая проблема, на которую сразу стоит обратить внимание — CVE в NVD, согласно CPE, сообщает о наличии проблемы во фреймворке, а не в конкретной компоненте. То есть, если разработчики плотно завязаны на фреймворк, а выявленная уязвимость не касается тех модулей, которые используют разработчики, специалисту по безопасности так или иначе придется разбирать данную CVE и задумываться об обновлении. URL-адрес также используется инструментами SCA. Формат URL-адреса пакета следующий: scheme:type/namespace/name@version?qualifiers#subpath
Например: pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/io@1.3.4 pkg:pypi/django-package@1.11.1.dev1 Dependency Track — on-premise веб-платформа, которая принимает готовые Bill of Materials (BOM) сформированные CycloneDX и SPDX, то есть готовые спецификации об имеющихся зависимостях. Это XML-файл с описанием зависимостей — name, hashes, package url, publisher, license. Далее Dependency Track разбирает BOM, смотрит имеющиеся к выявленным зависимостям CVE из базы данных уязвимостей (NVD, Sonatype OSS Index …), после чего строит графики, вычисляет метрики, регулярно обновляя данные о статусе уязвимости компонент. Пример того, как может выглядеть BOM в формате XML: <?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1"> <components> <component type="library"> <publisher>Apache</publisher> <group>org.apache.tomcat</group> <name>tomcat-catalina</name> <version>9.0.14</version> <hashes> <hash alg="MD5">3942447fac867ae5cdb3229b658f4d48</hash> <hash alg="SHA-1">e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a</hash> <hash alg="SHA-256">f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b</hash> <hash alg="SHA-512">e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282</hash> </hashes> <licenses> <license> <id>Apache-2.0</id> </license> </licenses> <purl>pkg:maven/org.apache.tomcat/tomcat-catalina@9.0.14</purl> </component> <!-- More components here --> </components> </bom> BOM может использоваться не только в качестве входных параметров для Dependency Track, но и для инвентаризации компонентов ПО в цепочке поставок, например, для предоставления заказчику ПО. В 2014 году на рассмотрение в США был даже предложен закон «Cyber Supply Chain Management and Transparency Act of 2014», который гласил, что при закупке ПО любое гос. учреждение должно запрашивать BOM для предотвращения использования уязвимых компонент, однако в силу акт так и не вступил. Возвращаясь к SCA, у Dependency Track есть готовые интеграции с Notification Platforms вроде Slack, системами управления уязвимостями вроде Kenna Security. Стоит также сказать, что Dependency Track ко всему прочему выявляет устаревшие версии пакетов и предоставляет информацию о лицензиях (за счет поддержки SPDX). Если говорить именно о качестве SCA, то здесь есть принципиальная разница. Dependency Track не принимает проект в качестве входных данных, а принимает именно BOM. Это означает, что если мы захотим проверить проект, то сначала нам нужно сгенерировать bom.xml, например, с помощью CycloneDX. Таким образом, Dependency Track напрямую зависит от CycloneDX. В то же время, это дает возможность кастомизации. Так команда OZON написала модуль CycloneDX для сборки BOM-файлов для проектов на Golang с целью дальнейшего сканирования через Dependency Track. Nexus IQ — коммерческое решение SCA от компании Sonatype, которое является частью экосистемы Sonatype, куда также входит Nexus Repository Manager. Nexus IQ может принимать в качестве входных данных как war архивы (для java проектов) через веб-интерфейс или API, так и BOM, если ваша организация не успела перестроиться с CycloneDX на новое решение. В отличие от open source решений, IQ обращается не только к CP/PURL к выявленной компоненте и соответствующей уязвимости в базе данных, но и учитывает собственные исследования, например, название уязвимой функции или класса. Механизмы IQ будут рассмотрены позднее при разборе результатов. Подведем некоторые итоге по функциональным особенностям, а также рассмотрим поддерживаемые языки для анализа: Язык Nexus IQ Dependency Check Dependency Track Java + + + C/C++ + + - C# + + - .Net + + + Erlang - - + JavaScript (NodeJS) + + + PHP + + + Python + + + Ruby + + + Perl - - - Scala + + + Objective C + + - Swift + + - R + - - Go + + + Функциональные возможности Функциональные возможности Nexus IQ Dependency Check Dependency Track Возможность обеспечивать проверку компонент, используемых в исходном коде на лицензионную чистоту + - + Возможность сканирования и анализа на наличие уязвимостей и лицензионной чистоты для образов Docker + Интеграция с Clair - - Возможность настройки политики безопасности для использования библиотек с открытым исходным кодом + - - Возможность сканирования репозиториев с открытым исходным кодом на наличие уязвимых компонентов + RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS - + Hex, RubyGems, Maven, NPM, Nuget, Pypi Наличие специализированной исследовательской группы + - - Работа в закрытом контуре + + + Использование сторонних баз данных + Закрытая БД Sonatype + Sonatype OSS, NPM Public Advisors + Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, поддержка собственной БД уязвимостей Возможность фильтровать компоненты с открытым исходным кодом при попытке загрузки в контур разработки согласно сконфигурированным политикам + - - Рекомендации по исправлению уязвимостей, наличие ссылок на исправление + +- (зависит от описания в публичных базах) +- (зависит от описания в публичных базах) Ранжирование обнаруженных уязвимостей по степени критичности + + + Ролевая модель доступа + - + Поддержка интерфейса командной строки CLI + + +- (только для CycloneDX) Выборка / сортировка уязвимостей по определяемым критериям + - + Dashboard по состоянию приложений + - + Генерация отчётов в PDF-формате + - - Генерация отчётов в формате JSON\CSV + + - Поддержка русского языка - - - Интеграционные возможности Интеграция Nexus IQ Dependency Check Dependency Track Интеграция с LDAP/Active Directory + - + Интеграция с системой непрерывной интеграции (continous integration) Bamboo + - - Интеграция с системой непрерывной интеграции (continous integration) TeamCity + - - Интеграция с системой непрерывной интеграции (continous integration) GitLab + +- (в виде плагина для GitLab) + Интеграция с системой непрерывной интеграции (continous integration) Jenkins + + + Наличие плагинов к IDE + IntelliJ, Eclipse, Visual Studio - - Поддержка кастомизированной интеграции через web-services (API) инструмента + - + Dependency Check Первый запуск Запустим Dependency Check к умышленно уязвимому приложению DVJA. Для этого воспользуемся Dependency Check Maven Plugin: mvn org.owasp:dependency-check-maven:check
В результате в директории target появится dependency-check-report.html. Откроем файл. После сводной информации об общем количестве уязвимостей можем увидеть информацию об уязвимостях с высоким уровнем Severity и Confidence с указанием на пакет, CPE, число CVE. Следом идет более подробная информация, в частности то, на основе чего было принято решение (evidence), то есть некий BOM. Далее идет CPE, PURL и описание CVE. Рекомендации об исправлении кстати не прилагаются в силу отсутствия их в базе NVD. Для систематичного просмотра результатов сканирования можно настроить Nginx с минимальными настройками, либо отправлять полученные дефекты в систему управления дефектами, которые поддерживают конекторы к Dependency Check. Например, Defect Dojo. Dependency Track Установка Dependency Track, в свою очередь, является веб-платформой с отображающими графиками, поэтому острый вопрос о хранении дефектов в стороннем решении здесь не стоит. Для установки есть следующие поддерживаемые сценарии: Docker, WAR, Executable WAR. Первый запуск Переходим по URL запущенного сервиса. Входим через admin/admin, меняем логин и пароль, после чего попадаем на Dashboard. Следующее, что мы сделаем — создадим проект для тестового приложения на Java в Home/Projects → Create Project . В качестве примера возьмем DVJA. Так как Dependency Track может принимать в качестве входных данных только BOM, этот BOM необходимо получить. Воспользуемся CycloneDX Maven Plugin: mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Получаем bom.xml и загружаем файл в созданном проекте DVJA → Dependeencies → Upload BOM. Зайдем в Administration → Analyzers. Понимаем, что у нас включен только Internal Analyzer, включающий NVD. Подключим также Sonatype OSS Index. Таким образом, получим следующую картину для нашего проекта: Также в списке можно найти одну уязвимость, применимую к Sonatype OSS: Основное разочарование было в том, что Dependency Track больше не принимает xml-отчеты Dependency Check. Последние поддерживаемые версии интеграции с Dependency Check были 1.0.0 — 4.0.2, в то время как я тестировал 5.3.2. Вот видео (и вот), когда это было еще возможно. Nexus IQ Первый запуск Установка Nexus IQ происходит из архивов по документации, но мы для этих целей собрали себе образ Docker. После входа в консоль необходимо создать Организацию и Приложение. Как можно видеть, настройка в случае с IQ происходит несколько сложнее, ибо нам также необходимо создать политики, применимые для разных “стейджей” (dev, build, stage, release). Это необходимо, чтобы блокировать уязвимые компоненты по мере продвижения по пайплайну ближе к проду, либо блокировать как только они попадают в Nexus Repo при скачивании разработчиками. Чтобы ощутить разницу open source и enterprise, выполним такое же сканирование через Nexus IQ аналогично через Maven plugin, предварительно создав тестовое приложение в интерфейсе NexusIQ dvja-test-and-compare: mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl=<NEXUSIQIP> -Dclm.username=<USERNAME> -Dclm.password=<PASSWORD>
Переходим по URL к сгенерированному отчету в веб-интерфейсе IQ: Здесь можно увидеть все нарушения политики с указанием разного уровня значимости (от Info до Security Critical). Буква D рядом с компонентой означает, что компонента Direct Dependency, а буква T рядом с компонентом означает, что компонента Transitive Dependency, то есть является транзитивной. Кстати, отчет State of Open Source Security Report 2020 от Snyk сообщает, что более 70% уязвимостей open source обнаруженных в Node.js, Java и Ruby находятся в транзитивных зависимостях. Если открыть одно из нарушений политики Nexus IQ, мы можем увидеть описание компоненты, а также Version Graph, который показывает местоположение текущей версии на временном графе, а также в какой момент уязвимость перестает быть уязвимой. Высота свечей на графе показывает популярность использования этой компоненты. Если перейти в раздел уязвимостей и раскрыть CVE, то можно прочитать описание к этой уязвимости, рекомендации по устранению, а также причину, по которой данная компонента попала под нарушение, то есть наличие класса DiskFileitem.class. Подведем итоги только касающиеся сторонних компонентов Java, убрав компоненты js. В скобках укажем число тех уязвимостей, которые были найдены за пределами NVD. Итого Nexus IQ:
Итого Dependency Check:
Итого Dependency Track:
Следующим шагов проанализируем полученные результаты и разберемся, что из этих уязвимостей является реальным дефектом, а что ложным срабатыванием. Дисклеймер Данное ревью не является неоспоримой истиной. Перед автором не стояло цели выделить отдельный инструмент на фоне других. Смысл ревью был показать механизмы работы инструментов SCA и способы проверки их результатов. Сравнение результатов Условия: Ложным срабатыванием по отношению к уязвимостям сторонних компонентов является:
Объектом исследования выбран Open Source проект DVJA. В исследовании участвовали только java компоненты (без js). Сводные результаты Перейдем сразу в результатом ручного ревью выявленных уязвимостей. С полным отчетом для каждой CVE можно познакомиться в Приложении. Сводные результаты по всем уязвимостям: Параметр Nexus IQ Dependency Check Dependency Track Всего выявлено уязвимостей 42 91 51 Неверно выявлено уязвимостей (false positive) 2(4.76%) 62(68,13%) 29(56.86%) Не обнаружено релевантных уязвимостей (false negative) 10 20 27 Сводные результаты по компонентам: Параметр Nexus IQ Dependency Check Dependency Track Всего выявлено компонентов 62 47 59 Всего уязвимых компонентов 16 13 10 Неверно выявлены уязвимые компоненты (false positive) 1 5 0 Неверно выявлены уязвимые компоненты (false positive) 0 6 6 Построим визуальные графики, чтобы оценить соотношение false positive и false negative к общему числу уязвимостей. По горизонтали отмечены компоненты, а по вертикали выявленные в них уязвимости. Для сравнения, аналогичное исследование было проведено командой Sonatype по тестированию проекта из 1531 компоненты с помощью OWASP Dependency Check. Как мы можем увидеть, соотношение шума к корректным срабатываниям соезмиримо с нашими результатами. Источник: www.sonatype.com/why-precision-matters-ebook Рассмотрим некоторые CVE из результатов нашего сканирования, чтобы понять причину таких результатов. Подробнее №1 Разберем сначала некоторые интересные моменты Sonatype Nexus IQ. Nexus IQ указывает на проблему с десереализацией с возможностью выполнить RCE в Spring Framework несколько раз. CVE-2016-1000027 в spring-web:3.0.5 в первый раз, и CVE-2011-2894 в spring-context:3.0.5 и spring-core:3.0.5. Поначалу кажется, что происходит дублирование уязвимости по нескольким CVE. Ибо, если посмотреть CVE-2016-1000027 и CVE-2011-2894 в базе NVD, то кажется, что все очевидно Компонент Уязвимость spring-web:3.0.5 CVE-2016-1000027 spring-context:3.0.5 CVE-2011-2894 spring-core:3.0.5 CVE-2011-2894 Описание CVE-2011-2894 из NVD: Описание CVE-2016-1000027 из NVD: CVE-2011-2894 сама по себе довольно известная. В отчете White Source за 2011 год эта CVE была признана одной из самых часто встречающихся. Описания для CVE-2016-100027 в принципе немного в NVD, да и применима она, вроде бы, только для Spring Framework 4.1.4. Взглянем на reference и тут становится все более или менее понятно. Из статьи Tenable мы понимаем, что помимо уязвимости в RemoteInvocationSerializingExporter в CVE-2011-2894, уязвимость наблюдается в HttpInvokerServiceExporter. Об этом нам и говорит Nexus IQ: Тем не менее ничего подобного нет в NVD, из-за чего Dependency Check и Dependency Track получают по false negative. Также из описания CVE-2011-2894 можно понять, что уязвимость действительно присутствует и в spring-context:3.0.5 и в spring-core:3.0.5. Подтверждение этому можно найти в статье от того, кто эту уязвимость нашел. №2 Компонент Уязвимость Результат struts2-core:2.3.30 CVE-2016-4003 FALSE Если мы изучим уязвимость CVE-2016-4003, то поймем, что ее исправили еще в версии 2.3.28, тем не менее Nexus IQ нам о ней сообщает. В описании к уязвимости есть примечание: То есть уязвимость существует только в связке с устаревшей версией JRE, о чем нас решили предупредить. Тем не менее, считаем это False Positive, хоть и не самым страшным. № 3 Компонент Уязвимость Результат xwork-core:2.3.30 CVE-2017-9804 TRUE xwork-core:2.3.30 CVE-2017-7672 FALSE Если мы посмотрим описание к CVE-2017-9804 и CVE-2017-7672, то поймем, что проблема в URLValidator class, причем CVE-2017-9804 вытекает из CVE-2017-7672. Наличие второй уязвимости не несет никакой полезной нагрузки кроме того, что ее severity вырос до High, поэтому можно считать это лишним шумом. В целом других false positive для Nexus IQ найдено не было. №4 Есть несколько моментов, которые выделяют IQ на фоне других решений. Компонент Уязвимость Результат spring-web:3.0.5 CVE-2020-5398 TRUE CVE в NVD сообщает, что она применима только для версий 5.2.x до 5.2.3, 5.1.x до 5.1.13, и версий 5.0.x до 5.0.16, тем не менее, если мы посмотрим описание CVE в Nexus IQ, то увидим следующее: Advisory Deviation Notice: The Sonatype security research team discovered that this vulnerability was introduced in version 3.0.2.RELEASE and not 5.0.x as stated in the advisory. После этого следует PoC к этой уязвимости, который сообщает, что она присутствует в версии 3.0.5. False negative отправляется к Dependency Check и Dependency Track. №5 Посмотрим на false positive для Dependency Check и Dependency Track. Dependency Check отдельно выделяется тем, что отражает те CVE, которые относятся ко всему фреймворку в NVD, в те компоненты, к которым эти CVE не применимы. Это касается CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, которые Dependency Check “прикрутил” к struts-taglib:1.3.8 и struts-tiles-1.3.8. Эти компоненты не имеют ничего общего с тем, что описано в CVE — обработка запросов, валидация страниц и так далее. Это обусловлено тем, что общее между этими CVE и компонентами — только фреймворк, из-за чего Dependency Check и посчитал это уязвимостью. Такая же ситуация с spring-tx:3.0.5, и похожая ситуация с struts-core:1.3.8. Для struts-core Dependency Check и Dependency Track нашли очень много уязвимостей, которые на самом деле применимы к struts2-core, который по сути является отдельным фреймворком. В данном случае Nexus IQ правильно понял картину и в тех CVE, которые выдал, указал, что struts-core пришел end of life и необходимо перейти к struts2-core. №6 В некоторых ситуациях трактовать явную ошибку Dependency Check и Dependency Track несправедливо. В частности CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, которые Dependency Check и Dependency Track отнесли к spring-core:3.0.5 на самом деле относятся к spring-web:3.0.5. При этом часть из этих CVE были найдены и Nexus IQ, тем не менее IQ их корректно определил к другой компоненте. От того, что эти уязвимости не были найдены в spring-core, нельзя утверждать, что их нет во фреймворке в принципе и open source инструменты справедливо указали на эти уязвимости (просто немного промахнулись). Выводы Как мы можем видеть, определение достоверности выявленных уязвимостей ручным ревью не дает однозначных результатов, из-за чего возникают спорные моменты. Результаты таковы, что решение Nexus IQ обладает наименьшим показателем ложных срабатываний и наибольшей точностью. В первую очередь, это связано с тем, что команда Sonatype расширило описание для каждой уязвимости CVE из NVD в своих базах, указав с точностью до класса или функции уязвимости для той или иной версии компоненты, проведя дополнительные исследования (например, проверив уязвимости на более старых версий ПО). Немаловажное влияние на результаты играют и те уязвимости, которые не попали в NVD, но тем не менее присутствуют в базе Sonatype с пометкой SONATYPE. Согласно отчету The State of Open Source Security Vulnerabilities 2020 о 45% обнаруженных уязвимостей с открытым исходным кодом не сообщается в NVD. Согласно базе данных WhiteSource, только 29% всех уязвимостей с открытым исходным кодом, зарегистрированных за пределами NVD, в конечном итоге публикуются в ней, поэтому так важно искать уязвимости также в других источниках. Как итог Dependency Check выдает большое количество шума, упуская часть уязвимых компонент. Dependency Track выдает меньший шум и выявляет большое число компонент, что визуально не режет глаза в веб-интерфейсе. Тем не менее, практика показывает, что именно open source должен становится первым шагов на пути к зрелому DevSecOps. Первое, над чем стоит задуматься для встраивания SCA в разработку, — это процессы, а именно размышления совместно с руководством и смежными департаментами над тем, как должны выглядеть идеальные процессы у себя в организации. Возможно, окажется так, что для вашей организации на первых порах Dependency Check или Dependency Track закроют все стоящие перед бизнесом потребности, а Enterprise-решения будут являться логическим продолжением в силу роста сложности разрабатываемых приложений. Приложение А. Результаты применительно к компонентамSPLУсловные обозначения:
Компонент Nexus IQ Dependency Check Dependency Track Результат dom4j: 1.6.1 High High High TRUE log4j-core: 2.3 High High High TRUE log4j: 1.2.14 High High - TRUE commons-collections:3.1 High High High TRUE commons-fileupload:1.3.2 High High High TRUE commons-beanutils:1.7.0 High High High TRUE commons-codec:1:10 Medium - - TRUE mysql-connector-java:5.1.42 High High High TRUE spring-expression:3.0.5 High компонент не найден TRUE spring-web:3.0.5 High компонент не найден High TRUE spring-context:3.0.5 Medium компонент не найден - TRUE spring-core:3.0.5 Medium High High TRUE struts2-config-browser-plugin:2.3.30 Medium - - TRUE spring-tx:3.0.5 - High - FALSE struts-core:1.3.8 High High High TRUE xwork-core: 2.3.30 High - - TRUE struts2-core: 2.3.30 High High High TRUE struts-taglib:1.3.8 - High - FALSE struts-tiles-1.3.8 - High - FALSE Приложение Б. Результаты применительно к уязвимостямSPLУсловные обозначения:
Компонент Nexus IQ Dependency Check Dependency Track Severity Результат Комментарий dom4j: 1.6.1 CVE-2018-1000632 CVE-2018-1000632 CVE-2018-1000632 High TRUE CVE-2020-10683 CVE-2020-10683 CVE-2020-10683 High TRUE log4j-core: 2.3 CVE-2017-5645 CVE-2017-5645 CVE-2017-5645 High TRUE CVE-2020-9488 CVE-2020-9488 CVE-2020-9488 Low TRUE log4j: 1.2.14 CVE-2019-17571 CVE-2019-17571 - High TRUE - CVE-2020-9488 - Low TRUE SONATYPE-2010-0053 - - High TRUE commons-collections:3.1 - CVE-2015-6420 CVE-2015-6420 High FALSE Дублирует RCE(OSSINDEX) - CVE-2017-15708 CVE-2017-15708 High FALSE Дублирует RCE(OSSINDEX) SONATYPE-2015-0002 RCE (OSSINDEX) RCE(OSSINDEX) High TRUE commons-fileupload:1.3.2 CVE-2016-1000031 CVE-2016-1000031 CVE-2016-1000031 High TRUE SONATYPE-2014-0173 - - Medium TRUE commons-beanutils:1.7.0 CVE-2014-0114 CVE-2014-0114 CVE-2014-0114 High TRUE - CVE-2019-10086 CVE-2019-10086 High FALSE Уязвимость применима только для версий 1.9.2+ commons-codec:1:10 SONATYPE-2012-0050 - - Medium TRUE mysql-connector-java:5.1.42 CVE-2018-3258 CVE-2018-3258 CVE-2018-3258 High TRUE CVE-2019-2692 CVE-2019-2692 - Medium TRUE - CVE-2020-2875 - Medium FALSE Та же самая уязвимость как и CVE-2019-2692, но c припиской «attacks may significantly impact additional products» - CVE-2017-15945 - High FALSE Не относится к mysql-connector-java - CVE-2020-2933 - Low FALSE Дубликат к CVE-2020-2934 CVE-2020-2934 CVE-2020-2934 - Medium TRUE spring-expression:3.0.5 CVE-2018-1270 компонент не найден - High TRUE CVE-2018-1257 - - Medium TRUE spring-web:3.0.5 CVE-2016-1000027 компонент не найден - High TRUE CVE-2014-0225 - CVE-2014-0225 High TRUE CVE-2011-2730 - - High TRUE - - CVE-2013-4152 Medium TRUE CVE-2018-1272 - - High TRUE CVE-2020-5398 - - High TRUE Показательный пример в пользу IQ: «The Sonatype security research team discovered that this vulnerability was introduced in version 3.0.2.RELEASE and not 5.0.x as stated in the advisory.» CVE-2013-6429 - - Medium TRUE CVE-2014-0054 - CVE-2014-0054 Medium TRUE CVE-2013-6430 - - Medium TRUE spring-context:3.0.5 CVE-2011-2894 компонент не найден - Medium TRUE spring-core:3.0.5 - CVE-2011-2730 CVE-2011-2730 High TRUE CVE-2011-2894 CVE-2011-2894 CVE-2011-2894 Medium TRUE - - CVE-2013-4152 Medium FALSE Дубликат этой же уязвимости в spring-web - CVE-2013-4152 - Medium FALSE Уязвимость относится к компоненте spring-web - CVE-2013-6429 CVE-2013-6429 Medium FALSE Уязвимость относится к компоненте spring-web - CVE-2013-6430 - Medium FALSE Уязвимость относится к компоненте spring-web - CVE-2013-7315 CVE-2013-7315 Medium FALSE SPLIT из CVE-2013-4152. + Уязвимость относится к компоненте spring-web - CVE-2014-0054 CVE-2014-0054 Medium FALSE Уязвимость относится к компоненте spring-web - CVE-2014-0225 - High FALSE Уязвимость относится к компоненте spring-web - - CVE-2014-0225 High FALSE Дубликат этой же уязвимости в spring-web - CVE-2014-1904 CVE-2014-1904 Medium FALSE Уязвимость относится к компоненте spring-web-mvc - CVE-2014-3625 CVE-2014-3625 Medium FALSE Уязвимость относится к компоненте spring-web-mvc - CVE-2016-9878 CVE-2016-9878 High FALSE Уязвимость относится к компоненте spring-web-mvc - CVE-2018-1270 CVE-2018-1270 High FALSE Для spring-expression / spring-messages - CVE-2018-1271 CVE-2018-1271 Medium FALSE Уязвимость относится к компоненте spring-web-mvc - CVE-2018-1272 CVE-2018-1272 High TRUE CVE-2014-3578 CVE-2014-3578 (OSSINDEX) CVE-2014-3578 Medium TRUE SONATYPE-2015-0327 - - Low TRUE struts2-config-browser-plugin:2.3.30 SONATYPE-2016-0104 - - Medium TRUE spring-tx:3.0.5 - CVE-2011-2730 - High FALSE Уязвимость не относится к spring-tx - CVE-2011-2894 - High FALSE Уязвимость не относится к spring-tx - CVE-2013-4152 - Medium FALSE Уязвимость не относится к spring-tx - CVE-2013-6429 - Medium FALSE Уязвимость не относится к spring-tx - CVE-2013-6430 - Medium FALSE Уязвимость не относится к spring-tx - CVE-2013-7315 - Medium FALSE Уязвимость не относится к spring-tx - CVE-2014-0054 - Medium FALSE Уязвимость не относится к spring-tx - CVE-2014-0225 - High FALSE Уязвимость не относится к spring-tx - CVE-2014-1904 - Medium FALSE Уязвимость не относится к spring-tx - CVE-2014-3625 - Medium FALSE Уязвимость не относится к spring-tx - CVE-2016-9878 - High FALSE Уязвимость не относится к spring-tx - CVE-2018-1270 - High FALSE Уязвимость не относится к spring-tx - CVE-2018-1271 - Medium FALSE Уязвимость не относится к spring-tx - CVE-2018-1272 - Medium FALSE Уязвимость не относится к spring-tx struts-core:1.3.8 - CVE-2011-5057 (OSSINDEX) Medium FASLE Уязвимость к Struts 2 - CVE-2012-0391 (OSSINDEX) CVE-2012-0391 High FALSE Уязвимость к Struts 2 - CVE-2014-0094 (OSSINDEX) CVE-2014-0094 Medium FALSE Уязвимость к Struts 2 - CVE-2014-0113 (OSSINDEX) CVE-2014-0113 High FALSE Уязвимость к Struts 2 CVE-2016-1182 3VE-2016-1182 - High TRUE - - CVE-2011-5057 Medium FALSE Уязвимость к Struts 2 - CVE-2012-0392 (OSSINDEX) CVE-2012-0392 High FALSE Уязвимость к Struts 2 - CVE-2012-0393 (OSSINDEX) CVE-2012-0393 Medium FALSE Уязвимость к Struts 2 CVE-2015-0899 CVE-2015-0899 - High TRUE - CVE-2012-0394 CVE-2012-0394 Medium FALSE Уязвимость к Struts 2 - CVE-2012-0838 (OSSINDEX) CVE-2012-0838 High FALSE Уязвимость к Struts 2 - CVE-2013-1965 (OSSINDEX) CVE-2013-1965 High FALSE Уязвимость к Struts 2 - CVE-2013-1966 (OSSINDEX) CVE-2013-1966 High FASLE Уязвимость к Struts 2 - CVE-2013-2115 CVE-2013-2115 High FASLE Уязвимость к Struts 2 - CVE-2013-2134 (OSSINDEX) CVE-2013-2134 High FASLE Уязвимость к Struts 2 - CVE-2013-2135 (OSSINDEX) CVE-2013-2135 High FASLE Уязвимость к Struts 2 CVE-2014-0114 CVE-2014-0114 - High TRUE - CVE-2015-2992 CVE-2015-2992 Medium FALSE Уязвимость к Struts 2 - CVE-2016-0785 (OSSINDEX) CVE-2016-0785 High FALSE Уязвимость к Struts 2 CVE-2016-1181 CVE-2016-1181 - High TRUE - CVE-2016-4003 (OSSINDEX) CVE-2016-4003 High FALSE Уязвимость к Struts 2 xwork-core:2.3.30 CVE-2017-9804 - - High TRUE SONATYPE-2017-0173 - - High TRUE CVE-2017-7672 - - High FALSE Дубль к CVE-2017-9804 SONATYPE-2016-0127 - - High TRUE struts2-core:2.3.30 - CVE-2016-6795 CVE-2016-6795 High TRUE - CVE-2017-9787 CVE-2017-9787 High TRUE - CVE-2017-9791 CVE-2017-9791 High TRUE - CVE-2017-9793 - High FALSE Дубликат к CVE-2018-1327 - CVE-2017-9804 - High TRUE - CVE-2017-9805 CVE-2017-9805 High TRUE CVE-2016-4003 - - Medium FALSE Применимо к Apache Struts 2.x до 2.3.28, а это версия 2.3.30. Тем не менее, исходя из описания, CVE действует при любых версиях Struts 2, если используется JRE 1.7 и меньше. Видимо нас тут решили перестраховать, но больше похоже на FALSE - CVE-2018-1327 CVE-2018-1327 High TRUE CVE-2017-5638 CVE-2017-5638 CVE-2017-5638 High TRUE Та самая уязвимость, которой воспользовались злоумышленники в Equifax в 2017 году CVE-2017-12611 CVE-2017-12611 - High TRUE CVE-2018-11776 CVE-2018-11776 CVE-2018-11776 High TRUE struts-taglib:1.3.8 - CVE-2012-0394 - Medium FALSE Для struts2-core - CVE-2013-2115 - High FALSE Для struts2-core - CVE-2014-0114 - High FALSE Для commons-beanutils - CVE-2015-0899 - High FALSE Не относится к taglib - CVE-2015-2992 - Medium FALSE Относится к struts2-core - CVE-2016-1181 - High FALSE Не относится к taglib - CVE-2016-1182 - High FALSE Не относится к taglib struts-tiles-1.3.8 - CVE-2012-0394 - Medium FALSE Для struts2-core - CVE-2013-2115 - High FALSE Для struts2-core - CVE-2014-0114 - High FALSE Под commons-beanutils - CVE-2015-0899 - High FALSE Не относится к tiles - CVE-2015-2992 - Medium FALSE Для struts2-core - CVE-2016-1181 - High FALSE Не относится к taglib - CVE-2016-1182 - High FALSE Не относится к taglib =========== Источник: habr.com =========== Похожие новости:
Информационная безопасность ), #_razrabotka_vebsajtov ( Разработка веб-сайтов ), #_razrabotka_mobilnyh_prilozhenij ( Разработка мобильных приложений ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:11
Часовой пояс: UTC + 5