Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/iixoskeletonii/dataprivacy-cve-2025-23211
Análise de VulnerabilidadesExploraçãoTestes de Penetração
GitHubiixoskeletonii/dataprivacy-cve-2025-23211

DataPrivacy-CVE-2025-23211

Prova de conceito para CVE-2025-23211; reproduz a vulnerabilidade relacionada à privacidade de dados para apoiar a validação de segurança autorizada, testes de patch e verificação de mitigação.

Ver Repositório
56há 1 mêsAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2025-23211: Injeção de Template do Lado do Servidor no Tandoor Recipes

CVE CVSS Class Reproducible

Um ambiente autocontido e reproduzível que demonstra o CVE-2025-23211, uma vulnerabilidade de injeção de template do lado do servidor (SSTI) no Tandoor Recipes que leva à execução remota de código. O repositório sobe a versão vulnerável, mostra o exploit, depois sobe a versão corrigida e mostra a mesma entrada sendo rejeitada.

CVECVE-2025-23211
AdvisoryGHSA-r6rj-h75w-vj8v
ClassInjeção de Template do Lado do Servidor (Jinja2), CWE-94 / CWE-1336
CVSS 3.19.9 (Crítico) - AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
AfetadoTandoor Recipes <= 1.5.23
Corrigido em1.5.24

Software afetado

Tandoor Recipes é uma aplicação de código aberto, auto-hospedada, para planejamento de refeições e gerenciamento de receitas. O backend é Django (Python) servido pelo Gunicorn, o frontend é uma aplicação de página única em Vue.js, e os dados são armazenados no PostgreSQL.

O Tandoor permite que os usuários escrevam expressões de template Jinja2 dentro do texto de instruções de uma receita, um recurso destinado a tarefas como escalonamento de quantidades de ingredientes. Essas instruções são renderizadas no servidor.

A vulnerabilidade

O texto das instruções é processado por render_instructions() em cookbook/helper/template_helper.py. Nas versões afetadas, o texto é passado para o Template() padrão do Jinja2 e renderizado sem sandbox:

template = Template(instructions)
instructions = template.render(ingredients=ingredients, scale=scale)

Como o ambiente Jinja2 padrão expõe o grafo de objetos do Python, um usuário autenticado que pode editar uma receita pode injetar uma expressão de template que percorre de uma tupla vazia até subprocess.Popen e executa um comando arbitrário no servidor. O contêiner padrão é executado como root, então o comando é executado como root.

As instruções passam por uma etapa de Markdown antes que o Jinja2 as renderize, e essa etapa remove underscores brutos. O exploit, portanto, codifica os underscores em hexadecimal (\x5f\x5f) e usa o filtro attr() em vez da notação de ponto. Veja payloads.txt.

Estrutura do repositório

compose-vulnerable.yml   Tandoor 1.5.23 (vulnerável) mais PostgreSQL
compose-patched.yml      Tandoor 1.5.24 (corrigido) mais PostgreSQL
payloads.txt             Os dois payloads de prova de conceito e a saída esperada
enumerate-popen.txt      Auxiliar para encontrar o índice de subprocess.Popen em outras imagens

Pré-requisitos

  • Docker com Compose v2

Ambiente usado para reprodução

As evidências neste repositório foram capturadas na configuração abaixo. Qualquer versão recente do Docker com Compose v2 ou posterior reproduz o mesmo resultado.

  • Host: Windows com Docker Desktop (backend WSL2)
  • Docker version 29.3.1, build c2be9cc
  • Docker Compose version v5.1.0

Reproduzindo a vulnerabilidade (1.5.23)

  1. Inicie a stack vulnerável:

    docker compose -f compose-vulnerable.yml up -d
    
  2. Aguarde até que os logs do contêiner web mostrem um worker inicializando, depois abra http://localhost:8080.

  3. Registre a primeira conta. O primeiro usuário se torna o superusuário. Defina um nome de Space quando solicitado.

  4. Crie uma nova receita. No campo Steps > Instructions, cole o Payload 1 de payloads.txt, depois salve.

  5. Abra a receita para visualizá-la. As instruções renderizadas mostram <class 'subprocess.Popen'>, confirmando que a injeção alcança os internos do Python.

  6. Repita com o Payload 2. Visualizar a receita agora executa whoami e exibe root.

  7. Confirme o usuário do processo diretamente:

    docker compose -f compose-vulnerable.yml exec web_recipes whoami
    

Reproduzindo a correção (1.5.24)

  1. Pare a stack vulnerável:

    docker compose -f compose-vulnerable.yml down
    
  2. Inicie a stack corrigida:

    docker compose -f compose-patched.yml up -d
    
  3. Repita os mesmos passos com os mesmos payloads. Em vez de executar, a visualização da receita agora mostra Could not parse template code. Error: Undefined Error.

Para redefinir tudo e começar de um banco de dados vazio, execute docker compose -f compose-vulnerable.yml down -v. A flag -v remove os volumes nomeados, então a próxima execução recria o banco de dados do zero.

A correção explicada

O patch (commit e6087d5) substitui o Template() sem sandbox pelo SandboxedEnvironment do Jinja2:

env = SandboxedEnvironment()
instructions = env.from_string(instructions).render(ingredients=ingredients, scale=scale)

O sandbox sobrescreve a busca de atributos do Jinja2 para proibir o acesso a atributos inseguros como __class__, __base__, __subclasses__ e __getitem__. Sem esses, o payload não tem caminho de um objeto simples até subprocess.Popen, então a expressão falha em vez de executar.

O exploit alcança atributos através do filtro attr() em vez da notação de ponto, então no código corrigido o acesso bloqueado se manifesta como um UndefinedError em vez de um SecurityError; ambos são tratados pela versão com sandbox.

Uso responsável

Este repositório reproduz uma vulnerabilidade divulgada publicamente e já corrigida para fins educacionais. Execute-o apenas contra os contêineres locais fornecidos aqui. Não ataque sistemas que você não possui ou não está autorizado a testar.

Referências

  • https://nvd.nist.gov/vuln/detail/CVE-2025-23211
  • https://github.com/TandoorRecipes/recipes/security/advisories/GHSA-r6rj-h75w-vj8v
  • https://github.com/TandoorRecipes/recipes/commit/e6087d5129cc9d0c24278948872377e66c2a2c20
  • https://jinja.palletsprojects.com/en/stable/sandbox/
Baixar ferramenta