
Сканирует Java-артефакты и исходный код на предмет CVE для Spring/Tomcat, сравнивает оценки CVSS от вендора и NVD, проверяет условия эксплуатации и определяет, существуют ли исправленные версии в Maven Central.
Покрывает 15 официальных бюллетеней безопасности Spring / Tomcat (2026-08-20 семь · 2026-06-08 пять · 2025-09-15 одна · Tomcat 2026-08-25 две).
Из них 8: сканеры, подключённые к NVD, сообщают CRITICAL 9.1~9.8, тогда как официальная оценка вендора — LOW / MEDIUM.
Остальные 7 полностью совпадают в обеих оценках — разница только одна: подал ли сам вендор оценку CVSS для записи CVE.
Этот инструмент отвечает на четыре вопроса:
| CVE | Компонент | Официально у вендора | NVD | Кто выставил оценку в NVD |
|---|
| CVE-2026-59313 | Spring Framework | LOW | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47890 | Spring Framework | LOW | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-59283 | Spring Framework | MEDIUM | 9.1 CRITICAL | CISA-ADP |
| CVE-2026-47891 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47884 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47892 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-65637 | Apache Tomcat | Moderate | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-65905 | Apache Tomcat | Low | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-59270 | Spring Security | CRITICAL | 9.4 CRITICAL | Самооценка вендора ✅ совпадает |
Единственная запись, где обе оценки совпадают, — это именно та, где вендор сам подал CVSS в NVD.
Причина не в том, что кто-то что-то скрывает: когда вендор не подаёт оценку, CISA-ADP автоматически выставляет её по наихудшему сценарию, а большинство SCA-инструментов берут именно значение из NVD.
Это не баг, а две разные методики оценки — но ваш процесс реагирования построен на 9.8.
Проверено на практике (с положительным контролем, перезапускается при каждой генерации таблицы правил):
spring-web 6.2.19 = 200 ← предыдущая версия есть в Central
spring-web 6.2.20 = 404 ← та, на которую велит обновиться вендор, отсутствует
spring-security-core 6.5.11 = 200
spring-security-core 6.5.12 = 404
В таблице исправлений вендора эти версии помечены как Enterprise Support Only — только для клиентов с платной коммерческой поддержкой.
Так что если вы действительно затронуты, ваш выбор: обновление через мажорную версию или покупка коммерческой поддержки.
java -jar spring-cvss-check.jar <jar|war|каталог>... [--src <каталог исходников>]
# Самый частый случай: сканируем артефакты сборки для определения версии, исходники — для условий срабатывания
java -jar spring-cvss-check.jar target/ --src src/main
# Можно и один fat jar / war
java -jar spring-cvss-check.jar app.war
Требуется JDK 17+. Ноль зависимостей в рантайме, без обращения к сети.
Коды выхода:0 версия не затронута · 2 версия затронута, но условия срабатывания не найдены · 3 условия срабатывания также выполнены.
== Найденные версии ==
Spring Framework 6.2.19 .../spring-core-6.2.19.jar
Spring Security 6.5.11 .../spring-security-core-6.5.11.jar
Apache Tomcat 9.0.37 .../tomcat-embed-core-9.0.37.jar
== Версия затронута 8 записями ==
-- CVE-2026-47884 Spring Framework Improper Path Limitation in XsltView
Продукт Spring Framework Затронуто 6.2.0 - 6.2.19
[Разница] Официально **MEDIUM** <-> NVD **CRITICAL 9.8**
Оценку в NVD выставил не вендор, а CISA-ADP.
Условия Только при использовании XsltView, наличии маппинга "/**", идущего через рендеринг представлений, и если имя представления не задано явно
[Найдено] В вашем коде/конфигурации обнаружено:
src/main/java/demo/ReportView.java <- XsltView(строка 2)
[Не обновиться] Вендор велит обновиться до 6.2.20 —— **этой версии нет в Maven Central (404)**, вендор пометил её как Enterprise Support Only
== Итог ==
Ваш сканер может сообщить о 7 из этих 8 записей как о CRITICAL;
а **официальная оценка вендора**: 3 записи LOW / 4 MEDIUM / 1 CRITICAL.
Из этих 8 записей для 6 условия срабатывания в ваших исходниках не найдены, для 2 — найдены.
[!] Для 7 из них исправляющей версии от вендора **в Maven Central вообще не существует**
По таблице выше легко решить, что «NVD всегда выставляет оценки как попало». Это не так. В том же наборе данных есть ещё 7 записей, где оценка вендора и оценка NVD полностью совпадают:
| CVE | Компонент | Официально у вендора | NVD | Кто выставил оценку в NVD |
|---|---|---|---|---|
| CVE-2026-59270 | Spring Security | CRITICAL | 9.4 CRITICAL | Самооценка вендора |
| CVE-2026-41843 | Spring Framework | MEDIUM | 5.9 MEDIUM | Самооценка вендора |
| CVE-2026-41844 | Spring Framework | MEDIUM | 4.2 MEDIUM | Самооценка вендора |
| CVE-2026-41846 | Spring Framework | MEDIUM | 5.9 MEDIUM | Самооценка вендора |
| CVE-2026-41853 | Spring Framework | MEDIUM | 5.3 MEDIUM | Самооценка вендора |
| CVE-2026-41848 | Spring Framework | LOW | 3.7 LOW | Самооценка вендора |
| CVE-2025-41249 | Spring Framework | HIGH | 7.5 HIGH | Самооценка вендора |
Контрпримеров нет ни в одном из направлений — это единственный причинно-следственный вывод, на который осмеливается этот инструмент:
[email protected] (подано самим вендором)CISA-ADP (вендор не подавал, оценку автоматически выставила третья сторона по наихудшему сценарию)Скрипт генерации следит за обоими направлениями двумя отдельными утверждениями (ASSERT4 / ASSERT7); при появлении любого контрпримера отказывается выдавать таблицу.
🔑 Зачем проверять оба направления: утверждение «все совпадающие — самооценка вендора» не исключает, что некоторые расходящиеся тоже самооценка вендора. Если бы такая запись реально появилась, у причинно-следственной связи был бы контрпример, а при проверке лишь одного направления таблица всё равно бы сгенерировалась и осталась полностью «зелёной». Одностороннее утверждение не доказывает причинно-следственную связь.
spring-core-5.3.39.jar затронет 11 записей, и ни одной исправляющей версии от вендора для этих 11 записей
нет в публичном Maven Central (5.3.45 / 5.3.49 / 5.3.50 — все помечены Enterprise Support Only).Таблица правил генерируется скриптом tools/gen_rules.py из четырёх первоисточников, без ручного копирования:
| Источник | Что берём | |
|---|---|---|
| A | spring.io/security/<cve> | Официальная оценка / затронутый диапазон / исправляющая версия (включая пометки OSS ⟷ Enterprise) |
| B | tomcat.apache.org/security-{9,10,11}.html | То же |
| C | NVD REST API | Оценка NVD и источник оценки |
| D | repo1.maven.org(HEAD) | Есть ли вообще в Central версия, на которую велит обновиться вендор |
Повторный запуск — это повторная проверка:
python tools/gen_rules.py
В скрипте шесть утверждений; при провале любого из них таблица не выдаётся, три из них напрямую следят за утверждениями этого инструмента:
ASSERT2 число записей с расхождением вендор⟷NVD — если обнулится, значит, утверждение устарело; немедленная остановкаASSERT3 проверка Central с положительным контролем — если контроль не проходит, вся партия 404 аннулируетсяASSERT4 у совпадающей записи источник оценки обязан быть самооценкой вендора — это единственное доказательство «причины»Apache-2.0