Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-33149-PoC — Preuve de concept d'exploitation pour CVE-2026-33149, une injection d'en-tête Host dans Tandoor Recipes permettant l'empoisonnement de liens d'invitation et l'empoisonnement du cache. Inclut des modules pour l'acceptation d'hôte, la pagination, le schéma et l'empoisonnement des invitations. | Kitploit
Outils/GitHubGitHub/filipegaudard/cve-2026-33149-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebHameçonnageSécurité WebTests d'Intrusion
GitHubfilipegaudard/cve-2026-33149-poc

CVE-2026-33149-PoC

Voir le dépôt
28il y a 6 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

Preuve de concept d'exploitation pour CVE-2026-33149, une injection d'en-tête Host dans Tandoor Recipes permettant l'empoisonnement de liens d'invitation et l'empoisonnement du cache. Inclut des modules pour l'acceptation d'hôte, la pagination, le schéma et l'empoisonnement des invitations.

Partager

CVE-2026-33149 — Injection d'en-tête Host dans Tandoor Recipes

CVE-2026-33149 GHSA CVSS 8.1 CWE-644

Affected Version Responsible Disclosure


Résumé

Tandoor Recipes définit ALLOWED_HOSTS = '*' par défaut dans settings.py, ce qui amène Django à accepter n'importe quelle valeur dans l'en-tête HTTP Host sans validation. L'application utilise request.build_absolute_uri() pour générer des URL absolues dans plusieurs contextes sensibles à la sécurité. Un attaquant capable d'envoyer des requêtes avec un en-tête Host falsifié peut rediriger toutes les URL générées par le serveur vers un domaine contrôlé par l'attaquant.

L'impact le plus critique est l'empoisonnement des liens d'invitation : lorsqu'un administrateur crée une invitation utilisateur, l'e-mail envoyé par le serveur contient un lien pointant vers le domaine de l'attaquant. La victime clique sur un e-mail d'apparence légitime, le jeton d'invitation est exfiltré, et l'attaquant l'utilise pour détourner le processus de provisionnement du compte.

Détails de la vulnérabilité

ChampValeur
ID CVECVE-2026-33149
GHSAGHSA-x636-4jx6-xc4w
CWECWE-644 — Neutralisation incorrecte des en-têtes HTTP pour la syntaxe de script
CVSS v3.18.1 ÉLEVÉE — AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N
Version affectéeTandoor Recipes ≤ 2.5.3
FournisseurTandoorRecipes/recipes

Cartographie MITRE ATT&CK

ID de techniqueNomPertinence
T1557Adversaire au milieuManipulation des URL générées par le serveur pour rediriger le trafic
T1566.002Hameçonnage : Lien d'hameçonnage cibléL'e-mail d'invitation empoisonné contient un lien contrôlé par l'attaquant

Analyse de la cause racine

1. ALLOWED_HOSTS générique

Fichier : recipes/settings.py:118

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

ALLOWED_HOSTS de Django est une mesure de sécurité qui valide l'en-tête Host par rapport à une liste blanche. Le caractère générique '*' désactive entièrement cette validation, permettant n'importe quelle valeur arbitraire.

2. Génération d'URL non sécurisée dans les e-mails d'invitation

Fichier : 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() construit les URL en utilisant request.get_host(), qui renvoie la valeur brute de l'en-tête Host lorsque ALLOWED_HOSTS ne la restreint pas. L'UUID d'invitation — un jeton secret — est intégré dans l'URL qui pointe désormais vers l'attaquant.

3. Surfaces affectées supplémentaires

  • Pagination API — Les classes de pagination DRF utilisent build_absolute_uri() pour les URL next/previous
  • Schéma OpenAPI — Le générateur de schéma l'utilise pour les URL du serveur
  • Empoisonnement du cache — Les déploiements avec des proxys de cache risquent de servir des URL empoisonnées à tous les utilisateurs à partir d'une seule requête

Flux d'attaque

┌──────────┐     ① Requête falsifiée         ┌─────────────────┐
│ Attaquant │ ──────────────────────────────→│  Serveur Tandoor │
│          │   Host: attacker.com           │  ALLOWED_HOSTS=*│
└──────────┘                                └────────┬────────┘
                                                     │
                                          ② build_absolute_uri()
                                             utilise "attacker.com"
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │  Serveur SMTP  │
                                            └────────┬───────┘
                                                     │
                                       ③ E-mail avec lien empoisonné :
                                       http://attacker.com/invite/<uuid>
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │    Victime     │
                                            │  (clique le lien) │
                                            └────────┬───────┘
                                                     │
                                          ④ UUID envoyé à l'attaquant
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │   Attaquant    │
                                            │ utilise l'UUID │
                                            │ sur le vrai    │
                                            │ serveur        │
                                            └────────────────┘

Preuve de concept

Prérequis

  • Python 3.8+
  • Bibliothèque requests
pip install requests

Utilisation

# Exécuter tous les modules de validation avec authentification de base
python3 poc.py --target http://localhost:8085 \
               --basic-auth admin:password \
               --attacker evil.com \
               --module all

# Exécuter tous les modules avec des cookies de session
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module all

# Empoisonnement du lien d'invitation uniquement
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module invite \
               --email [email protected] \
               --group-id 1

Modules

ModuleDescription
host-acceptVérifie que la cible accepte des en-têtes Host arbitraires (ALLOWED_HOSTS = '*')
paginationConfirme que les URL de pagination API reflètent le domaine injecté
schemaConfirme que les URL du serveur de schéma OpenAPI reflètent le domaine injecté
inviteCrée un lien d'invitation empoisonné — le vecteur d'attaque principal
allExécute tous les modules séquentiellement

Vérification manuelle (curl)

1. Acceptation de l'en-tête Host

curl -s -o /dev/null -w "%{http_code}" \
  http://TARGET:8085/api/user/ \
  -H "Host: attacker.com" \
  -u "admin:password"
# Attendu : 200 (vulnérable) | 400 (corrigé)
Télécharger l’outil