IPBUF安全漏洞报告
English
CVE-2026-33149 CVSS 8.1 高危

CVE-2026-33149 Tandoor Recipes Host Header注入漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-33149
漏洞类型
主机头注入
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
Tandoor Recipes

相关标签

Host Header InjectionTandoor RecipesDjangoLink PoisoningCVE-2026-33149

漏洞概述

Tandoor Recipes是一个用于管理食谱、膳食计划和购物清单的应用程序。在2.5.3及之前的版本中,该应用默认将Django的ALLOWED_HOSTS设置为'*',导致系统接受任意HTTP Host头而未进行验证。由于应用使用request.build_absolute_uri()在多个上下文中生成绝对URL(如邀请邮件、API分页和OpenAPI schema),攻击者可以通过发送精心构造的Host头请求来操纵所有服务器生成的URL。最严重的影响是邀请链接投毒:当管理员创建邀请并发送邮件时,链接会指向攻击者的服务器而非真实应用。受害者点击链接后,邀请令牌将发送给攻击者,攻击者随后可利用该令牌在真实应用上注册。

技术细节

该漏洞的核心原理在于Django配置不当。Tandoor Recipes未在配置文件中严格限制ALLOWED_HOSTS,使用了通配符'*',这使得Django框架信任任何传入的Host头。应用程序在生成邀请链接等关键功能时,依赖request.build_absolute_uri()方法。此方法根据当前请求的元数据构建URL,直接使用了攻击者可控的Host头值。利用该漏洞需要攻击者具备一定的权限(PR:H),通常需要已注册用户或能够向系统发送请求。攻击流程如下:首先,攻击者向Tandoor Recipes的接口发送HTTP请求,并将Host头修改为恶意域名(如attacker.com)。随后,当系统管理员创建新用户邀请时,后端生成邮件内容,其中的邀请链接域名被替换为attacker.com。受害者收到邮件并点击链接,浏览器向attacker.com发送带有有效令牌的请求。攻击者截获令牌后,即可通过向真实服务器提交该令牌来完成账户注册,从而获取对系统的访问权限。

攻击链分析

STEP 1
reconnaissance
攻击者识别出目标运行的是Tandoor Recipes 2.5.3或更早版本,并确认其具备发送HTTP请求的权限(需高权限或注册用户)。
STEP 2
Injection
攻击者向应用发送特制的HTTP请求,在请求头中将Host字段修改为攻击者控制的服务器域名(如evil.com)。
STEP 3
Poisoning
系统管理员使用应用功能创建新用户邀请。应用后端调用request.build_absolute_uri()生成邮件链接,由于使用了被污染的Host头,生成的链接指向evil.com。
STEP 4
Delivery
应用将包含恶意链接的邀请邮件发送给受害者。邮件看起来来自官方,但URL指向攻击者的服务器。
STEP 5
Exploitation
受害者点击邮件中的链接。带有有效令牌的请求被发送到攻击者的服务器。攻击者截获令牌并在真实的Tandoor Recipes实例上使用它完成账户注册,从而接管账户。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://localhost:8000/invite/create/" # Example endpoint malicious_host = "attacker-controlled.com" # Headers demonstrating the Host Header Injection headers = { "Host": malicious_host, "User-Agent": "CVE-2026-33149-POC", "Content-Type": "application/json" } try: # Sending a request that triggers the URL generation logic # This assumes the attacker can trigger an action that leads to an invite generation response = requests.post(target_url, headers=headers) if response.status_code == 200: print(f"[+] Successfully sent request with Host: {malicious_host}") print("[+] If an admin sends an invite now, the email link will contain the malicious host.") else: print("[-] Request failed or endpoint not accessible") except Exception as e: print(f"[!] Error occurred: {e}")

影响范围

Tandoor Recipes <= 2.5.3

防御指南

临时缓解措施
由于目前尚无已知补丁,建议立即修改配置文件,将ALLOWED_HOSTS设置为具体的允许域名列表,切勿使用'*'。同时,配置Web服务器防火墙或反向代理规则,拦截包含非法Host头的请求。建议暂时禁用邮件邀请功能,直到配置修复完成。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表