Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
jackson-check — jackson-databind: самопроверка по 11 бюллетеням безопасности за 2026 год — сканирует аннотации в исходном коде для снижения шума и показывает, сколько из них вас реально касаются; по пунктам вычисляет пересечение и выдаёт действительно корректную версию (2.18.9/2.21.5/3.1.5, а не самую распространённую в бюллетенях 2.21.4). CVE-2026-54515 / CVE-2026-54512 | Kitploit
Инструменты/GitHubGitHub/xiaoqimikko/jackson-check
Сканеры уязвимостейСтатический анализ кода (SAST)Анализ уязвимостейDevSecOpsБезопасность Цепочки Поставок
GitHubxiaoqimikko/jackson-check

jackson-check

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →

Описание

8 дней назадЕщё не проверено

jackson-databind: самопроверка по 11 бюллетеням безопасности за 2026 год — сканирует аннотации в исходном коде для снижения шума и показывает, сколько из них вас реально касаются; по пунктам вычисляет пересечение и выдаёт действительно корректную версию (2.18.9/2.21.5/3.1.5, а не самую распространённую в бюллетенях 2.21.4). CVE-2026-54515 / CVE-2026-54512

Поделиться

jackson-check

Инструмент самопроверки по 11 бюллетеням безопасности jackson-databind за 2026 год. Один jar без зависимостей, без обращения к сети.

Он отвечает на два вопроса, на которые Dependabot ответить не может:

  1. Скольким из этих 11 записей я реально подвержен? — Сканирует ваш исходный код в поисках условий срабатывания (@JsonView / полиморфные типы / регистронезависимое сопоставление…), снижая шум с «установлена затронутая версия» до «действительно задействована та самая функциональность».
  2. До какой версии мне в итоге обновляться? — Версии исправлений, указанные в 11 бюллетенях, противоречат друг другу; ответ даёт только пересечение по каждой записи.
root@kitploit:~
java -jar jackson-check.jar ./target ./src

🔥 Три проверенных на практике вывода (каждый можно воспроизвести самостоятельно)

1. Обновление до самой частой версии из бюллетеней всё равно оставляет вас уязвимым к трём записям

Из этих 11 записей за 2026 год в 8 указано, что исправленная версия — 2.21.4 / 2.18.8 / 3.1.4. Те, кто обновился по этим рекомендациям, считают, что всё исправлено.

Реальный ответ при пересечении по каждой записи таков:

Планку поднимают именно эти три:

  • CVE-2026-54515 — регистронезависимая десериализация в обход @JsonIgnoreProperties для отдельных свойств

  • CVE-2026-59889 — @JsonView не действует для контейнерного свойства @JsonUnwrapped

  • 🔴 GHSA-mhm7-754m-9p8w — номера CVE нет, в оригинальном тексте бюллетеня сказано:

    исправление так и не было перенесено в 2.21 или 2.18 … Пользователи 2.21.4 и 2.18.8, обновившиеся в соответствии с опубликованными бюллетенями, остаются уязвимыми

    Это пробел в исправлениях: в ветке 3.x исправили, а обратный перенос в ветки 2.18 / 2.21 упустили. Из-за отсутствия номера CVE найти её по номеру CVE невозможно.

Достаточно одного запуска, чтобы увидеть:

root@kitploit:~
# 已经升到 2.21.4 的项目
java -jar jackson-check.jar ./lib ./src
#   Dependabot 会报给你:3 条
#   🔥 注意:如果你照着 advisory 里出现最多的那个修复版升,以下 3 条仍然中

2. Jackson 3 сменил groupId, а в бюллетенях перепутали диапазоны версий между двумя координатами

КоординатаЧто реально публиковалось в Maven Central
com.fasterxml.jackson.core:jackson-databindТолько 2.x
tools.jackson.core:jackson-databindТолько 3.x

А в структурированных полях бюллетеней:

  • на com.fasterxml.jackson.core висит 6 диапазонов 3.x, исправленная версия 3.1.4 → по этой координате HTTP 404
  • на tools.jackson.core висит 1 диапазон 2.x, исправленная версия 2.21.4 → тоже HTTP 404

Инструмент, который слепо копирует advisory, заставит вас устанавливать несуществующий артефакт. Этот инструмент при генерации таблицы решений фактически проверяет доступность отдельными HEAD-запросами; всё недоступное помечается в отчёте и не выводится как рекомендация по обновлению.

artifactId и имена jar-файлов у обеих координат идентичны, различить их можно только внутри META-INF — поэтому этот инструмент судит по координате, а не по имени файла.

3. Снижение шума: большинство из 11 записей срабатывают только в коде, где используется соответствующая функциональность

Один и тот же 2.18.5 — а результаты для двух проектов совершенно разные:

root@kitploit:~
一份用了多态类型 + @JsonView 的代码   → Dependabot 报 7 条,真中 6 条
一份只 new 了个 ObjectMapper 的代码   → Dependabot 报 7 条,真中 0 条

🔴 Чего этот инструмент доказать не может

Нужно чётко сказать про обе стороны: говорить только об одной — значит вводить в заблуждение.

① «Условия срабатывания не найдены» не равно «безопасно». Три ситуации превращают это в ложное спокойствие:

  1. Сторонние библиотеки, от которых вы зависите, используют эти аннотации в собственном коде — их исходники мы просканировать не можем;
  2. аннотации могут добавляться в рантайме, например через mixin (ObjectMapper.addMixIn), и в исходниках этого слова вообще нет;
  3. возможно, вы вообще не передали каталог с исходниками.

② «Все условия срабатывания выполнены» тоже не означает, что уязвимость подтверждена. Маркеры агрегируются по всей кодовой базе целиком, а не по одному классу или одному полю. Например, для какой-то записи требуется, чтобы @JsonView и @JsonUnwrapped стояли на одном и том же свойстве, а мы видим лишь, что оба слова встречаются в вашем коде.

Этот инструмент выполняет только текстовое сопоставление, а не AST-разбор. Это осознанный компромисс: ключевой путь должен быть читаемым и проверяемым человеком — ошибку в решении, основанном на непонятном AST, никто не заметит.

Определение версии (шаг 1) — жёсткое; определение условий срабатывания (шаг 2) служит только для расстановки приоритетов, а не для снятия риска.

Что касается «слепой зоны» Dependabot: в этой партии из 11 записей её нет ни одной. На странице бюллетеней официального репозитория — 11 записей, обратная проверка по двум координатам даёт в сумме 11, разница равна 0. Это вывод, сделанный после проверки двух источников, а не значение по умолчанию из одного источника (ASSERT2 в tools/gen_rules.py при каждом перезапуске проверяет это заново). Поэтому в этой партии предупреждения Dependabot о версиях точны; ценность данного инструмента — в снижении шума и вычислении пересечений, а не в закрытии пропусков.


Использование

root@kitploit:~
java -jar jackson-check.jar <路径...> [选项]

  <路径>        jar / war / 目录。目录会同时找构建产物(定版本)和 .java 源码(定触发条件)
  --src <路径>  额外指定源码目录
  --no-src      不扫源码(只按版本判,粒度等同 Dependabot)
  --all         把未命中的条目也列出来
  -v, --version 版本号
  -h, --help    帮助

Коды выхода: 0 = версия не затронута · 2 = версия затронута, но в исходниках условия срабатывания не найдены (или исходники не сканировались) · 3 = условия срабатывания также выполнены. Можно использовать в CI.

Распознаваемые форматы: обычный jar, fat jar Spring Boot (BOOT-INF/lib/), классический WAR (WEB-INF/lib/), jackson, зашэденный в jar-хост (координаты зависимостей не видны, но META-INF/maven на месте).

root@kitploit:~
# Maven 项目
mvn package && java -jar jackson-check.jar target src

# 只有一个成品 jar
java -jar jackson-check.jar app.jar

# Gradle 项目
java -jar jackson-check.jar build/libs src/main/java

Требуется Java 17+. В рантайме ноль зависимостей — в частности, сам jackson не нужен.


Таблица решений генерируется, а не пишется вручную

tools/gen_rules.py генерирует CveTable.java из двух первоисточников:

  • Источник A /repos/FasterXML/jackson-databind/security-advisories — полный набор записей, опубликованных мейнтейнерами, + оригинальный текст описаний
  • Источник B /advisories?ecosystem=maven&affects=<坐标> — индекс координат, который фактически использует Dependabot (по одному запросу на каждый groupId)

11 бюллетеней разворачиваются в 37 правил «advisory × координата × диапазон версий» с 13 утверждениями: если любое из них не выполняется, работа прекращается и файл не записывается — защита от ситуации «при ошибке парсинга создаётся пустая таблица, а тесты всё равно зелёные»:

root@kitploit:~
python tools/gen_rules.py      # 需要已登录的 gh CLI

56 модульных тестов + 7 сквозных сценариев на реальных артефактах (настоящие jar: 2.13.0 / 2.18.5 / 2.21.2 / 2.21.4 / 2.21.5 / 3.1.2 / 3.1.5).


Охваченные записи


Лицензия

Apache-2.0

Скачать инструмент
Ветка поддержкиСамая частая в бюллетеняхРеально достаточная версия
2.18.x2.18.82.18.9
2.21.x2.21.42.21.5
2.22.x—2.22.1
3.1.x3.1.43.1.5
3.2.x—3.2.1
Условие срабатыванияСвязанные записи
@JsonViewCVE-2026-54517 / 54518 / 59889 / GHSA-mhm7
@JsonTypeInfo / activateDefaultTyping / PolymorphicTypeValidatorCVE-2026-54512 / 54513
@JsonIgnoreProperties + ACCEPT_CASE_INSENSITIVE_PROPERTIESCVE-2026-54515
@JsonIgnore + переименование через @JsonPropertyCVE-2026-54516
Java Record + PropertyNamingStrategy + @JsonIgnoreCVE-2026-59888
Поле InetSocketAddressCVE-2026-54514
readTree() + JsonNode.toString()CVE-2026-50193
УтверждениеЧто проверяется
ASSERT2⭐ Сравнение «слепых зон» двух источников: разница должна быть равна 0 или объяснена по каждой записи
ASSERT6Должны быть покрыты оба groupId
ASSERT7Для каждой исправленной версии выполняется HEAD-запрос для проверки доступности в Maven Central
ASSERT8Двусторонний «призрак»: получение maven-metadata.xml доказывает, что целой мажорной ветки по этой координате не существует
ASSERT9Пересечение по каждой ветке, и оно должно быть строго выше минимальной исправленной версии в той же ветке
ASSERT11Якорная строка каждого условия срабатывания должна посимвольно встречаться в оригинальном тексте официального описания
ASSERT12У каждой записи должен быть балл CVSS (объединение двух источников)
НомерУровеньТема
CVE-2026-54512high 8.1Обход generic-параметра PolymorphicTypeValidator
CVE-2026-54513high 8.1Обход allowlist для подтипов-массивов через allowIfSubTypeIsArray()
CVE-2026-50193medium 7.5Переполнение стека при глубокой вложенности JsonNode.toString()
CVE-2026-54514medium 5.3Десериализация InetSocketAddress инициирует DNS-запрос (SSRF)
CVE-2026-54515medium 5.3Регистронезависимое восстановление перекрывает @JsonIgnoreProperties
CVE-2026-54516medium 5.3Переименованный сеттер @JsonIgnore по-прежнему допускает запись через приватное поле
CVE-2026-54517medium 5.3@JsonView не действует для свойства creator без сеттера
CVE-2026-54518medium 6.5@JsonView не действует для unwrapped-параметра creator
CVE-2026-59888medium 6.5@JsonIgnore на Record-свойстве обходится стратегией именования
CVE-2026-59889medium 6.5@JsonView не действует для контейнерного свойства @JsonUnwrapped
GHSA-mhm7-754m-9p8wmedium 6.5Без номера CVE · пробел в исправлении @JsonView + As.EXTERNAL_PROPERTY