p align="justify"> Значимість аналізу сторонніх компонентів ПЗ (англ. Software Composition Analysis - SCA) в процесі розробки зростає в міру виходу щорічних звітів про вразливості open source бібліотек, які публікуються компаніями Synopsys, Sonatype, Snyk, White Source. Відповідно до звіту
Один із найбільш показових кейсів
У цій статті буде обговорено питання вибору інструменту для проведення SCA з точки зору якості результатів аналізу. Також буде наведено функціональне порівняння інструментів. Процес вбудовування в CI/CD та можливості з інтеграції залишимо на наступні публікації. Широкий список інструментів було представлено OWASP
Принцип роботи
Розглянемо, як виглядає CPE:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- частина: Вказівка про те, що компонент відноситься до додатку (a), операційної системи (o), заліза (h) (Обов'язковий пункт)
- Виробник: Назва виробника продукту (Обов'язковий пункт)
- продукт: Назва продукту (Обов'язковий пункт)
- Версія: Версія компоненти (Застарілий пункт)
- Оновлення: Оновлення пакету
- видання: Спадкована версія (Застарілий пункт)
- Мова: Мова, що визначається RFC-5646
- SW Edition: Версія програмного забезпечення
- Target SW: Програмне середовище, в якому працює продукт
- Target HW: Апаратне середовище, в якому працює продукт
- Інший: Інформація про постачальника або продукт
Приклад CPE виглядає так:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Рядок означає, що CPE версії 2.3 описує компонент програми від виробника pivotal_software
з назвою spring_framework
Версія 3.0.0. Якщо ми відкриємо вразливість
URL-адреса також використовується інструментами SCA. Формат URL-адреси пакета наступний:
scheme:type/namespace/name@version?qualifiers#subpath
- Sсheme: Завжди буде 'pkg', що вказує на те, що це URL-адреса пакета (Обов'язковий пункт)
- Тип: "Тип" пакета або "протокол" пакета, наприклад maven, npm, nuget, gem, pypi і т.д. (Обов'язковий пункт)
- Простір імен: Деякий префікс імені, такий як ідентифікатор Maven, власник образу Docker, користувач або організація GitHub. Необов'язковий та залежить від типу.
- ім'я: Ім'я пакета (Обов'язковий пункт)
- Версія: Версія пакету
- Кваліфікатори: Додаткові кваліфікаційні дані пакета, такі як ОС, архітектура, дистрибутив тощо. буд. Необов'язковий і залежить від типу пункт.
- Subpath: Додатковий шлях у пакеті щодо кореня пакету
Наприклад:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]
Приклад того, як може виглядати 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/[email protected]</purl>
</component>
<!-- More components here -->
</components>
</bom>
BOM може використовуватися не тільки як вхідні параметри для Dependency Track, але і для інвентаризації компонентів ПЗ у ланцюжку поставок, наприклад, для надання замовнику ПЗ. У 2014 році на розгляд у США було навіть запропоновано закон
Повертаючись до SCA, Dependency Track має готові інтеграції з Notification Platforms на кшталт Slack, системами управління вразливістю на кшталт Kenna Security. Варто також сказати, що Dependency Track також виявляє застарілі версії пакетів і надає інформацію про ліцензії (за рахунок підтримки SPDX).
Якщо говорити саме про якість SCA, тут є принципова різниця.
Dependency Track не приймає проект як вхідні дані, а приймає саме BOM. Це означає, що якщо ми захочемо перевірити проект, спочатку нам потрібно згенерувати bom.xml, наприклад, за допомогою CycloneDX. Таким чином, Dependency Track залежить від CycloneDX. У той же час це дає можливість кастомізації. Так команда OZON написала
Підіб'ємо деякі підсумки за функціональними особливостями, а також розглянемо підтримувані мови для аналізу:
Мова
Nexus IQ
Перевірка залежностей
Dependency Track
Java
+
+
+
C / C ++
+
+
-
C#
+
+
-
.Net
+
+
+
Ерланг
-
-
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Python
+
+
+
рубін
+
+
+
Perl
-
-
-
масштаб
+
+
+
Завдання C
+
+
-
Швидко
+
+
-
R
+
-
-
Go
+
+
+
Функціональні можливості
Функціональні можливості
Nexus IQ
Перевірка залежностей
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-форматі
+
-
-
Генерація звітів у форматі JSONCSV
+
+
-
Підтримка російської мови
-
-
-
Інтеграційні можливості
Інтеграція
Nexus IQ
Перевірка залежностей
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 до спеціально вразливого додатку
Для цього скористаємося
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 необхідно отримати. Скористаємося
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 походить з архівів по
Після входу в консоль необхідно створити Організацію та Додаток.
Як можна бачити, налаштування у випадку з IQ відбувається дещо складніше, бо нам також необхідно створити політики, які застосовуються для різних “стейджів” (dev, build, stage, release). Це необхідно, щоб блокувати вразливі компоненти в міру просування пайплайном ближче до проду, або блокувати як тільки вони потрапляють в Nexus Repo при завантаженні розробниками.
Щоб відчути різницю open source та enterprise, виконаємо таке ж сканування через Nexus IQ аналогічно через 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, тобто є транзитивною.
До речі, звіт
Якщо відкрити одне з порушень політики 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 Track
Усього виявлено вразливостей
42
91
51
Невірно виявлено уразливостей (false positive)
2 (4.76%)
62 (68,13%)
29 (56.86%)
Не виявлено релевантних уразливостей (false negative)
10
20
27
Зведені результати за компонентами:
Параметр
Nexus IQ
Перевірка залежностей
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. Як ми можемо побачити, співвідношення шуму до коректних спрацьовувань співвідносне з нашими результатами.
Джерело:
Розглянемо деякі 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 сама собою досить відома. У звіті 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
ПОМИЛКОВИЙ
Якщо ми вивчимо вразливість CVE-2016-4003, зрозуміємо, що її виправили ще у версії 2.3.28, проте Nexus IQ нам про неї повідомляє. В описі вразливості є примітка:
Тобто вразливість існує тільки у зв'язці із застарілою версією JRE, про що нас вирішили попередити. Тим не менш, вважаємо це False Positive, хоч і не найстрашнішим.
№ 3
Компонент
уразливість
Результат
xwork-core:2.3.30
CVE-2017-9804
ІСТИНА
xwork-core:2.3.30
CVE-2017-7672
ПОМИЛКОВИЙ
Якщо ми подивимося опис до 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
ІСТИНА
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: У програмі Sonatype Security Research team визнається, що ця vulnerability була встановлена в версії 3.0.2.
Після цього слід 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 до 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 віднесли до 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. Відповідно до звіту
Як результат Dependency Check видає велику кількість шуму, упускаючи частину вразливих компонентів. Dependency Track видає менший шум і виявляє велику кількість компонентів, що візуально не ріже очі у веб-інтерфейсі.
Тим не менш, практика показує, що саме Open Source має стати першим кроком на шляху до зрілого DevSecOps. Перше, над чим варто задуматися для вбудовування SCA у розробку, — це процеси, а саме роздуми спільно з керівництвом та суміжними департаментами над тим, як мають виглядати ідеальні процеси у себе в організації. Можливо, виявиться так, що для вашої організації спочатку Dependency Check або Dependency Track закриють всі потреби, що стоять перед бізнесом, а Enterprise-рішення будуть логічним продовженням в силу зростання складності розроблюваних додатків.
Додаток А. Результати стосовно компонентів
Умовні позначення:
- High - вразливість високого та критичного рівня в компоненті
- Medium - Вразливість середнього рівня критичності в компоненті
- TRUE - Правильно визначена вразливість (True positive issue)
- FALSE - Хибне спрацьовування (False positive issue)
Компонент
Nexus IQ
Перевірка залежностей
Dependency Track
Результат
dom4j: 1.6.1
Високий
Високий
Високий
ІСТИНА
log4j-core: 2.3
Високий
Високий
Високий
ІСТИНА
log4j: 1.2.14
Високий
Високий
-
ІСТИНА
commons-collections:3.1
Високий
Високий
Високий
ІСТИНА
commons-fileupload:1.3.2
Високий
Високий
Високий
ІСТИНА
commons-beanutils:1.7.0
Високий
Високий
Високий
ІСТИНА
commons-codec:1:10
Medium
-
-
ІСТИНА
mysql-connector-java:5.1.42
Високий
Високий
Високий
ІСТИНА
spring-expression:3.0.5
Високий
компонент не знайдено
ІСТИНА
spring-web:3.0.5
Високий
компонент не знайдено
Високий
ІСТИНА
spring-context:3.0.5
Medium
компонент не знайдено
-
ІСТИНА
spring-core:3.0.5
Medium
Високий
Високий
ІСТИНА
struts2-config-browser-plugin:2.3.30
Medium
-
-
ІСТИНА
spring-tx:3.0.5
-
Високий
-
ПОМИЛКОВИЙ
struts-core:1.3.8
Високий
Високий
Високий
ІСТИНА
xwork-core: 2.3.30
Високий
-
-
ІСТИНА
struts2-core: 2.3.30
Високий
Високий
Високий
ІСТИНА
struts-taglib:1.3.8
-
Високий
-
ПОМИЛКОВИЙ
struts-tiles-1.3.8
-
Високий
-
ПОМИЛКОВИЙ
Додаток Б. Результати стосовно вразливостей
Умовні позначення:
- High - вразливість високого та критичного рівня в компоненті
- Medium - Вразливість середнього рівня критичності в компоненті
- TRUE - Правильно визначена вразливість (True positive issue)
- FALSE - Хибне спрацьовування (False positive issue)
Компонент
Nexus IQ
Перевірка залежностей
Dependency Track
Строгість
Результат
Коментар
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Високий
ІСТИНА
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Високий
ІСТИНА
log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Високий
ІСТИНА
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
низький
ІСТИНА
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
Високий
ІСТИНА
-
CVE-2020-9488
-
низький
ІСТИНА
SONATYPE-2010-0053
-
-
Високий
ІСТИНА
commons-collections:3.1
-
CVE-2015-6420
CVE-2015-6420
Високий
ПОМИЛКОВИЙ
Дублює RCE(OSSINDEX)
-
CVE-2017-15708
CVE-2017-15708
Високий
ПОМИЛКОВИЙ
Дублює RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
Високий
ІСТИНА
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Високий
ІСТИНА
SONATYPE-2014-0173
-
-
Medium
ІСТИНА
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Високий
ІСТИНА
-
CVE-2019-10086
CVE-2019-10086
Високий
ПОМИЛКОВИЙ
Вразливість застосовується лише для версій 1.9.2+
commons-codec:1:10
SONATYPE-2012-0050
-
-
Medium
ІСТИНА
mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
Високий
ІСТИНА
CVE-2019-2692
CVE-2019-2692
-
Medium
ІСТИНА
-
CVE-2020-2875
-
Medium
ПОМИЛКОВИЙ
Та сама вразливість як і CVE-2019-2692, але з припискою «attacks may significantly impact additional products»
-
CVE-2017-15945
-
Високий
ПОМИЛКОВИЙ
Не відноситься до mysql-connector-java
-
CVE-2020-2933
-
низький
ПОМИЛКОВИЙ
Публікат до CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
-
Medium
ІСТИНА
spring-expression:3.0.5
CVE-2018-1270
компонент не знайдено
-
Високий
ІСТИНА
CVE-2018-1257
-
-
Medium
ІСТИНА
spring-web:3.0.5
CVE-2016-1000027
компонент не знайдено
-
Високий
ІСТИНА
CVE-2014-0225
-
CVE-2014-0225
Високий
ІСТИНА
CVE-2011-2730
-
-
Високий
ІСТИНА
-
-
CVE-2013-4152
Medium
ІСТИНА
CVE-2018-1272
-
-
Високий
ІСТИНА
CVE-2020-5398
-
-
Високий
ІСТИНА
Показовий приклад на користь IQ: "The Sonatype security research team discovered that this vulnerability was introduced in version 3.0.2.RELEASE and no 5.0.x as stated in the advisory."
CVE-2013-6429
-
-
Medium
ІСТИНА
CVE-2014-0054
-
CVE-2014-0054
Medium
ІСТИНА
CVE-2013-6430
-
-
Medium
ІСТИНА
spring-context:3.0.5
CVE-2011-2894
компонент не знайдено
-
Medium
ІСТИНА
spring-core:3.0.5
-
CVE-2011-2730
CVE-2011-2730
Високий
ІСТИНА
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
ІСТИНА
-
-
CVE-2013-4152
Medium
ПОМИЛКОВИЙ
Дублікат цієї ж уразливості у spring-web
-
CVE-2013-4152
-
Medium
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web
-
CVE-2013-6429
CVE-2013-6429
Medium
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web
-
CVE-2013-6430
-
Medium
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web
-
CVE-2013-7315
CVE-2013-7315
Medium
ПОМИЛКОВИЙ
SPLIT із CVE-2013-4152. + Вразливість відноситься до компоненту spring-web
-
CVE-2014-0054
CVE-2014-0054
Medium
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web
-
CVE-2014-0225
-
Високий
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web
-
-
CVE-2014-0225
Високий
ПОМИЛКОВИЙ
Дублікат цієї ж уразливості у spring-web
-
CVE-2014-1904
CVE-2014-1904
Medium
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web-mvc
-
CVE-2014-3625
CVE-2014-3625
Medium
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web-mvc
-
CVE-2016-9878
CVE-2016-9878
Високий
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web-mvc
-
CVE-2018-1270
CVE-2018-1270
Високий
ПОМИЛКОВИЙ
Для spring-expression / spring-messages
-
CVE-2018-1271
CVE-2018-1271
Medium
ПОМИЛКОВИЙ
Вразливість відноситься до компоненту spring-web-mvc
-
CVE-2018-1272
CVE-2018-1272
Високий
ІСТИНА
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
ІСТИНА
SONATYPE-2015-0327
-
-
низький
ІСТИНА
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
Medium
ІСТИНА
spring-tx:3.0.5
-
CVE-2011-2730
-
Високий
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2011-2894
-
Високий
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2013-4152
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2013-6429
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2013-6430
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2013-7315
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2014-0054
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2014-0225
-
Високий
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2014-1904
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2014-3625
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2016-9878
-
Високий
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2018-1270
-
Високий
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2018-1271
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
-
CVE-2018-1272
-
Medium
ПОМИЛКОВИЙ
Вразливість не відноситься до spring-tx
struts-core:1.3.8
-
CVE-2011-5057 (OSSINDEX)
Medium
FASLE
Вразливість до Struts 2
-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Високий
ПОМИЛКОВИЙ
Вразливість до Struts 2
-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
ПОМИЛКОВИЙ
Вразливість до Struts 2
-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Високий
ПОМИЛКОВИЙ
Вразливість до Struts 2
CVE-2016-1182
3VE-2016-1182
-
Високий
ІСТИНА
-
-
CVE-2011-5057
Medium
ПОМИЛКОВИЙ
Вразливість до Struts 2
-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Високий
ПОМИЛКОВИЙ
Вразливість до Struts 2
-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
ПОМИЛКОВИЙ
Вразливість до Struts 2
CVE-2015-0899
CVE-2015-0899
-
Високий
ІСТИНА
-
CVE-2012-0394
CVE-2012-0394
Medium
ПОМИЛКОВИЙ
Вразливість до Struts 2
-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Високий
ПОМИЛКОВИЙ
Вразливість до Struts 2
-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Високий
ПОМИЛКОВИЙ
Вразливість до Struts 2
-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Високий
FASLE
Вразливість до Struts 2
-
CVE-2013-2115
CVE-2013-2115
Високий
FASLE
Вразливість до Struts 2
-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Високий
FASLE
Вразливість до Struts 2
-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Високий
FASLE
Вразливість до Struts 2
CVE-2014-0114
CVE-2014-0114
-
Високий
ІСТИНА
-
CVE-2015-2992
CVE-2015-2992
Medium
ПОМИЛКОВИЙ
Вразливість до Struts 2
-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Високий
ПОМИЛКОВИЙ
Вразливість до Struts 2
CVE-2016-1181
CVE-2016-1181
-
Високий
ІСТИНА
-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Високий
ПОМИЛКОВИЙ
Вразливість до Struts 2
xwork-core:2.3.30
CVE-2017-9804
-
-
Високий
ІСТИНА
SONATYPE-2017-0173
-
-
Високий
ІСТИНА
CVE-2017-7672
-
-
Високий
ПОМИЛКОВИЙ
Дубль до CVE-2017-9804
SONATYPE-2016-0127
-
-
Високий
ІСТИНА
struts2-core:2.3.30
-
CVE-2016-6795
CVE-2016-6795
Високий
ІСТИНА
-
CVE-2017-9787
CVE-2017-9787
Високий
ІСТИНА
-
CVE-2017-9791
CVE-2017-9791
Високий
ІСТИНА
-
CVE-2017-9793
-
Високий
ПОМИЛКОВИЙ
Публікат до CVE-2018-1327
-
CVE-2017-9804
-
Високий
ІСТИНА
-
CVE-2017-9805
CVE-2017-9805
Високий
ІСТИНА
CVE-2016-4003
-
-
Medium
ПОМИЛКОВИЙ
Застосовується до Apache Struts 2.x до 2.3.28, а це версія 2.3.30. Тим не менш, виходячи з опису, CVE діє за будь-яких версій Struts 2, якщо використовується JRE 1.7 і менше. Мабуть, нас тут вирішили перестрахувати, але більше схоже на FALSE.
-
CVE-2018-1327
CVE-2018-1327
Високий
ІСТИНА
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Високий
ІСТИНА
Та сама вразливість, якою скористалися зловмисники в Equifax у 2017 році
CVE-2017-12611
CVE-2017-12611
-
Високий
ІСТИНА
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Високий
ІСТИНА
struts-taglib:1.3.8
-
CVE-2012-0394
-
Medium
ПОМИЛКОВИЙ
Для struts2-core
-
CVE-2013-2115
-
Високий
ПОМИЛКОВИЙ
Для struts2-core
-
CVE-2014-0114
-
Високий
ПОМИЛКОВИЙ
Для commons-beanutils
-
CVE-2015-0899
-
Високий
ПОМИЛКОВИЙ
Не відноситься до taglib
-
CVE-2015-2992
-
Medium
ПОМИЛКОВИЙ
Належить до struts2-core
-
CVE-2016-1181
-
Високий
ПОМИЛКОВИЙ
Не відноситься до taglib
-
CVE-2016-1182
-
Високий
ПОМИЛКОВИЙ
Не відноситься до taglib
struts-tiles-1.3.8
-
CVE-2012-0394
-
Medium
ПОМИЛКОВИЙ
Для struts2-core
-
CVE-2013-2115
-
Високий
ПОМИЛКОВИЙ
Для struts2-core
-
CVE-2014-0114
-
Високий
ПОМИЛКОВИЙ
Під commons-beanutils
-
CVE-2015-0899
-
Високий
ПОМИЛКОВИЙ
Не відноситься до tiles
-
CVE-2015-2992
-
Medium
ПОМИЛКОВИЙ
Для struts2-core
-
CVE-2016-1181
-
Високий
ПОМИЛКОВИЙ
Не відноситься до taglib
-
CVE-2016-1182
-
Високий
ПОМИЛКОВИЙ
Не відноситься до taglib
Джерело: habr.com