
Local isolated lab and nuclei template for CVE-2024-12537, an unauthenticated denial-of-service vulnerability in Open WebUI's code formatting endpoint. Validates detection logic against vulnerable and patched versions.
This repository contains a local, isolated reproduction lab and nuclei template candidate for CVE-2024-12537, an unauthenticated denial-of-service vulnerability in Open WebUI's code formatting endpoint.
The lab does not send large denial-of-service payloads. It validates the nuclei detection logic through Open WebUI's unauthenticated /api/version fingerprint endpoint and a minimal {"code":"x"} request to /api/v1/utils/code/format, then compares a vulnerable version with a patched/newer version.
open-webui/open-webuiCVE-2024-12537GHSA-chf7-q7m5-fq92POST /api/v1/utils/code/formatGET /api/versionv0.5.10v0.6.14< 0.5.14 for the unauthenticated threat modelReferences:
docker-compose.yml: starts Open WebUI with a selectable Docker tagverify-cve-2024-12537.sh: waits for readiness, prints /api/version, and runs nuclei when availablenuclei/CVE-2024-12537.yaml: nuclei template candidatecurlnucleiRun this only in a local isolated lab. Do not use these commands against third-party systems. Use only against systems you own or have explicit written authorization to test.
Start Open WebUI v0.5.10:
WEBUI_TAG=v0.5.10 docker compose up -d
Run the verification script:
sh verify-cve-2024-12537.sh
Observed vulnerable-version response:
HTTP/1.1 200 OK
content-type: application/json
{"version":"0.5.10"}
Observed vulnerable-version nuclei output:
[CVE-2024-12537:dsl-1] [http] [high] http://127.0.0.1:3010/api/v1/utils/code/format ["0.5.10"]
Clean up:
docker compose down -v
Start Open WebUI v0.6.14:
WEBUI_TAG=v0.6.14 docker compose up -d
Run the verification script:
sh verify-cve-2024-12537.sh
Observed patched/newer-version response:
HTTP/1.1 200 OK
content-type: application/json
{"version":"0.6.14"}
Observed patched/newer-version nuclei output:
No results found
Clean up:
docker compose down -v
Validate the template:
nuclei -validate -t nuclei/CVE-2024-12537.yaml
Run against the local lab:
nuclei -silent \
-t nuclei/CVE-2024-12537.yaml \
-include-templates nuclei/CVE-2024-12537.yaml \
-u http://127.0.0.1:3010
Expected behavior:
v0.5.10: matchv0.6.14: no match/api/v1/utils/code/format.{"code":"x"}, which returned {"code":"x\n"} on Docker v0.5.10 and {"detail":"Not authenticated"} on Docker v0.6.14.-include-templates because templates tagged dos may be excluded by default.curl: (52) Empty reply from server while the application is still starting. The verification script waits until /api/version responds.docker-compose.yml sets RAG_EMBEDDING_MODEL="" and RAG_EMBEDDING_MODEL_AUTO_UPDATE=False so the lab does not block on embedding model initialization.<= 0.3.32; this lab uses the unauthenticated code-path cutoff < 0.5.14 based on commit tracing. The relevant sequence is d3d161f72 (no authentication, v0.5.0-v0.5.13), 2f75eef49 (adds get_verified_user, v0.5.14+), and 4fe45d443 (hardens to get_admin_user, v0.6.14+).