
Laboratório local isolado e template nuclei para CVE-2024-12537, uma vulnerabilidade de negação de serviço não autenticada no endpoint de formatação de código do Open WebUI. Valida a lógica de detecção contra versões vulneráveis e corrigidas.
Este repositório contém um laboratório de reprodução local e isolado e um candidato a template nuclei para CVE-2024-12537, uma vulnerabilidade de negação de serviço não autenticada no endpoint de formatação de código do Open WebUI.
O laboratório não envia cargas úteis grandes de negação de serviço. Ele valida a lógica de detecção do nuclei por meio do endpoint de fingerprint não autenticado /api/version do Open WebUI e de uma requisição mínima {"code":"x"} para /api/v1/utils/code/format, e então compara uma versão vulnerável com uma versão corrigida/mais nova.
open-webui/open-webuiCVE-2024-12537GHSA-chf7-q7m5-fq92POST /api/v1/utils/code/formatGET /api/versionv0.5.10v0.6.14< 0.5.14 para o modelo de ameaça não autenticadoReferências:
docker-compose.yml: inicia o Open WebUI com uma tag Docker selecionávelverify-cve-2024-12537.sh: aguarda a prontidão, exibe /api/version e executa o nuclei quando disponívelnuclei/CVE-2024-12537.yaml: candidato a template nucleicurlnucleiExecute isto apenas em um laboratório local isolado. Não use estes comandos contra sistemas de terceiros. Use apenas contra sistemas seus ou com autorização escrita explícita para testar.
Inicie o Open WebUI v0.5.10:
WEBUI_TAG=v0.5.10 docker compose up -d
Execute o script de verificação:
sh verify-cve-2024-12537.sh
Resposta observada para a versão vulnerável:
HTTP/1.1 200 OK
content-type: application/json
{"version":"0.5.10"}
Saída observada do nuclei para a versão vulnerável:
[CVE-2024-12537:dsl-1] [http] [high] http://127.0.0.1:3010/api/v1/utils/code/format ["0.5.10"]
Limpar:
docker compose down -v
Inicie o Open WebUI v0.6.14:
WEBUI_TAG=v0.6.14 docker compose up -d
Execute o script de verificação:
sh verify-cve-2024-12537.sh
Resposta observada para a versão corrigida/mais nova:
HTTP/1.1 200 OK
content-type: application/json
{"version":"0.6.14"}
Saída observada do nuclei para a versão corrigida/mais nova:
No results found
Limpar:
docker compose down -v
Valide o template:
nuclei -validate -t nuclei/CVE-2024-12537.yaml
Execute contra o laboratório local:
nuclei -silent \
-t nuclei/CVE-2024-12537.yaml \
-include-templates nuclei/CVE-2024-12537.yaml \
-u http://127.0.0.1:3010
Comportamento esperado:
v0.5.10: correspondênciav0.6.14: sem correspondência/api/v1/utils/code/format.{"code":"x"}, que retornou {"code":"x\n"} no Docker v0.5.10 e {"detail":"Not authenticated"} no Docker v0.6.14.-include-templates porque templates marcados com dos podem ser excluídos por padrão.curl: (52) Empty reply from server enquanto o aplicativo ainda está iniciando. O script de verificação espera até que /api/version responda.docker-compose.yml define RAG_EMBEDDING_MODEL="" e RAG_EMBEDDING_MODEL_AUTO_UPDATE=False para que o laboratório não fique bloqueado na inicialização do modelo de embedding.<= 0.3.32; este laboratório usa o ponto de corte de caminho de código não autenticado < 0.5.14 com base no rastreamento de commits. A sequência relevante é d3d161f72 (sem autenticação, v0.5.0-v0.5.13), 2f75eef49 (adiciona get_verified_user, v0.5.14+) e 4fe45d443 (endurece para get_admin_user, v0.6.14+).