Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-33149-PoC — Prueba de concepto de exploit para CVE-2026-33149, una inyección de cabecera Host en Tandoor Recipes que permite el envenenamiento de enlaces de invitación y el envenenamiento de caché. Incluye módulos para la aceptación de host, paginación, esquema y envenenamiento de invitaciones. | Kitploit
Herramientas/GitHubGitHub/filipegaudard/cve-2026-33149-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPhishingSeguridad WebPruebas de Penetración
GitHubfilipegaudard/cve-2026-33149-poc

CVE-2026-33149-PoC

Ver Repositorio
28hace 6 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →

Acerca de

Prueba de concepto de exploit para CVE-2026-33149, una inyección de cabecera Host en Tandoor Recipes que permite el envenenamiento de enlaces de invitación y el envenenamiento de caché. Incluye módulos para la aceptación de host, paginación, esquema y envenenamiento de invitaciones.

Compartir

CVE-2026-33149 — Inyección de Host Header en Tandoor Recipes

CVE-2026-33149 GHSA CVSS 8.1 CWE-644

Affected Version Responsible Disclosure


Resumen

Tandoor Recipes establece ALLOWED_HOSTS = '*' por defecto en settings.py, lo que hace que Django acepte cualquier valor en el encabezado HTTP Host sin validación. La aplicación utiliza request.build_absolute_uri() para generar URLs absolutas en múltiples contextos sensibles a la seguridad. Un atacante que pueda enviar solicitudes con un encabezado Host manipulado puede redirigir todas las URLs generadas por el servidor a un dominio controlado por el atacante.

El impacto más crítico es el envenenamiento de enlaces de invitación: cuando un administrador crea una invitación de usuario, el correo electrónico enviado por el servidor contiene un enlace que apunta al dominio del atacante. La víctima hace clic en un correo de apariencia legítima, el token de invitación es exfiltrado y el atacante lo utiliza para secuestrar el flujo de aprovisionamiento de cuentas.

Detalles de la Vulnerabilidad

CampoValor
ID CVECVE-2026-33149
GHSAGHSA-x636-4jx6-xc4w
CWECWE-644 — Neutralización Incorrecta de Encabezados HTTP para Sintaxis de Scripting
CVSS v3.18.1 ALTO — AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N
Versión AfectadaTandoor Recipes ≤ 2.5.3
ProveedorTandoorRecipes/recipes

Mapeo MITRE ATT&CK

ID de TécnicaNombreRelevancia
T1557Adversario en el MedioManipulación de URLs generadas por el servidor para redirigir tráfico
T1566.002Phishing: Enlace de SpearphishingEl correo de invitación envenenado contiene un enlace controlado por el atacante

Análisis de Causa Raíz

1. ALLOWED_HOSTS con Comodín

Archivo: recipes/settings.py:118

ALLOWED_HOSTS = extract_comma_list('ALLOWED_HOSTS', '*')  # default: wildcard

ALLOWED_HOSTS de Django es una medida de seguridad que valida el encabezado Host contra una lista blanca. El comodín '*' desactiva esta validación por completo, permitiendo cualquier valor arbitrario.

2. Generación de URLs Insegura en Correos de Invitación

Archivo: cookbook/serializer.py:1852-1853

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() construye URLs utilizando request.get_host(), que devuelve el valor bruto del encabezado Host cuando ALLOWED_HOSTS no lo restringe. El UUID de invitación — un token secreto — está incrustado en la URL que ahora apunta al atacante.

3. Superficies Afectadas Adicionales

  • Paginación de API — Las clases de paginación de DRF utilizan build_absolute_uri() para las URLs next/previous
  • Esquema OpenAPI — El generador de esquemas lo utiliza para las URLs del servidor
  • Envenenamiento de Caché — Los despliegues con proxies de caché corren el riesgo de servir URLs envenenadas a todos los usuarios a partir de una sola solicitud

Flujo del Ataque

┌──────────┐     ① Solicitud Manipulada    ┌─────────────────┐
│ Atacante │ ──────────────────────────────→│ Servidor Tandoor│
│          │   Host: attacker.com           │  ALLOWED_HOSTS=*│
└──────────┘                                └────────┬────────┘
                                                     │
                                          ② build_absolute_uri()
                                             usa "attacker.com"
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │ Servidor SMTP  │
                                            └────────┬───────┘
                                                     │
                                       ③ Correo con enlace envenenado:
                                       http://attacker.com/invite/<uuid>
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │    Víctima     │
                                            │ (hace clic)    │
                                            └────────┬───────┘
                                                     │
                                          ④ UUID enviado al atacante
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │   Atacante     │
                                            │ usa el UUID en │
                                            │ servidor real  │
                                            └────────────────┘

Prueba de Concepto

Requisitos

  • Python 3.8+
  • Biblioteca requests
pip install requests

Uso

# Ejecutar todos los módulos de validación con autenticación básica
python3 poc.py --target http://localhost:8085 \
               --basic-auth admin:password \
               --attacker evil.com \
               --module all

# Ejecutar todos los módulos con cookies de sesión
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module all

# Solo envenenamiento de enlace de invitación
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óduloDescripción
host-acceptVerifica que el objetivo acepta encabezados Host arbitrarios (ALLOWED_HOSTS = '*')
paginationConfirma que las URLs de paginación de la API reflejan el dominio inyectado
schemaConfirma que las URLs del servidor del esquema OpenAPI reflejan el dominio inyectado
inviteCrea un enlace de invitación envenenado — el vector de ataque principal
allEjecuta todos los módulos secuencialmente

Verificación Manual (curl)

1. Aceptación del Encabezado Host

curl -s -o /dev/null -w "%{http_code}" \
  http://TARGET:8085/api/user/ \
  -H "Host: attacker.com" \
  -u "admin:password"
# Esperado: 200 (vulnerable) | 400 (parcheado)

2. Reflexión de URL de Paginación

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", ...}
Descargar herramienta