
Laboratorio aislado local y plantilla de nuclei para CVE-2024-12537, una vulnerabilidad de denegación de servicio no autenticada en el endpoint de formato de código de Open WebUI. Valida la lógica de detección contra versiones vulnerables y parcheadas.
Este repositorio contiene un laboratorio de reproducción local y aislado, así como una plantilla candidata para nuclei para CVE-2024-12537, una vulnerabilidad de denegación de servicio no autenticada en el endpoint de formateo de código de Open WebUI.
El laboratorio no envía cargas útiles grandes de denegación de servicio. Valida la lógica de detección de nuclei a través del endpoint de huella digital no autenticado /api/version de Open WebUI y una solicitud mínima {"code":"x"} a /api/v1/utils/code/format, luego compara una versión vulnerable con una versión parcheada/nueva.
open-webui/open-webuiCVE-2024-12537GHSA-chf7-q7m5-fq92POST /api/v1/utils/code/formatGET /api/versionv0.5.10v0.6.14< 0.5.14 para el modelo de amenaza no autenticadoReferencias:
docker-compose.yml: inicia Open WebUI con una etiqueta Docker seleccionableverify-cve-2024-12537.sh: espera la disponibilidad, imprime /api/version y ejecuta nuclei cuando está disponiblenuclei/CVE-2024-12537.yaml: plantilla candidata para nucleicurlnucleiEjecute esto únicamente en un laboratorio local aislado. No use estos comandos contra sistemas de terceros. Úselos solo contra sistemas que posea o para los que tenga autorización explícita por escrito para realizar pruebas.
Inicie Open WebUI v0.5.10:
WEBUI_TAG=v0.5.10 docker compose up -d
Ejecute el script de verificación:
sh verify-cve-2024-12537.sh
Respuesta observada de la versión vulnerable:
HTTP/1.1 200 OK
content-type: application/json
{"version":"0.5.10"}
Salida observada de nuclei para la versión vulnerable:
[CVE-2024-12537:dsl-1] [http] [high] http://127.0.0.1:3010/api/v1/utils/code/format ["0.5.10"]
Limpiar:
docker compose down -v
Inicie Open WebUI v0.6.14:
WEBUI_TAG=v0.6.14 docker compose up -d
Ejecute el script de verificación:
sh verify-cve-2024-12537.sh
Respuesta observada de la versión parcheada/nueva:
HTTP/1.1 200 OK
content-type: application/json
{"version":"0.6.14"}
Salida observada de nuclei para la versión parcheada/nueva:
No results found
Limpiar:
docker compose down -v
Valide la plantilla:
nuclei -validate -t nuclei/CVE-2024-12537.yaml
Ejecútelo contra el laboratorio local:
nuclei -silent \
-t nuclei/CVE-2024-12537.yaml \
-include-templates nuclei/CVE-2024-12537.yaml \
-u http://127.0.0.1:3010
Comportamiento esperado:
v0.5.10: coincidenciav0.6.14: sin coincidencia/api/v1/utils/code/format.{"code":"x"}, que devolvió {"code":"x\n"} en Docker v0.5.10 y {"detail":"Not authenticated"} en Docker v0.6.14.-include-templates porque las plantillas etiquetadas como dos pueden estar excluidas por defecto.curl: (52) Empty reply from server mientras la aplicación aún se está iniciando. El script de verificación espera hasta que /api/version responda.docker-compose.yml define RAG_EMBEDDING_MODEL="" y RAG_EMBEDDING_MODEL_AUTO_UPDATE=False para que el laboratorio no se bloquee en la inicialización del modelo de embedding.<= 0.3.32; este laboratorio utiliza el corte de la ruta de código no autenticada < 0.5.14 basado en el seguimiento de commits. La secuencia relevante es d3d161f72 (sin autenticación, v0.5.0-v0.5.13), 2f75eef49 (agrega get_verified_user, v0.5.14+) y 4fe45d443 (refuerza a get_admin_user, v0.6.14+).