FilipeGaudard/CVE-2026-35045-PoC
GitHub: FilipeGaudard/CVE-2026-35045-PoC
针对Tandoor Recipes应用CVE-2026-35045对象级授权绕过漏洞的概念验证工具,利用DRF批量端点权限检查缺陷实现越权操作。
Stars: 1 | Forks: 1
# CVE-2026-35045 — Tandoor Recipes 中的对象级授权失效
False
```
## 影响
| 影响领域 | 描述 | 严重程度 |
|---|---|---|
| **强制配方公开** | 将 `private` 设置为 `false` 会使任何配方对所有 Space 成员可见 | **高** |
| **未经授权的自我授权** | 通过 `shared_add` 添加自己的用户 ID 可授予对任何配方的持久读/写访问权限 | **高** |
| **访问权限撤销** | 使用 `shared_remove` 或 `shared_set` 从配方的共享列表中移除合法用户 | **高** |
| **元数据篡改** | 修改其他用户拥有的配方上的 `working_time`、`waiting_time` 和 `keywords` | **中** |
## 补救措施
### 即时修复
通过 `created_by=request.user` 过滤查询集,以将批量操作限制为拥有的配方:
```
@decorators.action(detail=False, methods=['PUT'], serializer_class=RecipeBatchUpdateSerializer)
def batch_update(self, request):
serializer = self.serializer_class(data=request.data, partial=True)
if serializer.is_valid():
recipes = Recipe.objects.filter(
id__in=serializer.validated_data['recipes'],
space=self.request.space,
created_by=self.request.user, # ← Fix: restrict to owned recipes
)
```
### 深度防御
如果 Space 管理员需要批量更新任何配方的能力,请添加基于角色的条件判断:
```
if is_space_owner(request.user, request.space):
recipes = Recipe.objects.filter(
id__in=serializer.validated_data['recipes'],
space=self.request.space,
)
else:
recipes = Recipe.objects.filter(
id__in=serializer.validated_data['recipes'],
space=self.request.space,
created_by=self.request.user,
)
```
### DRF 通用指南
任何操作单个对象的 `detail=False` 动作**必须手动执行对象级授权**。DRF 的 `has_object_permission()` 永远不会为列表动作调用 —— 此责任完全在于开发人员。
## 参考
- [GHSA-v8x3-w674-55p5](https://github.com/TandoorRecipes/recipes/security/advisories/GHSA-v8x3-w674-55p5)
- [CVE-2026-35045](https://www.cve.org/CVERecord?id=CVE-2026-35045)
- [CWE-639: Authorization Bypass Through User-Controlled Key](https://cwe.mitre.org/data/definitions/639.html)
- [DRF — Custom Actions & Permission Checks](https://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing)
- [OWASP API Security Top 10 — API1:2023 Broken Object Level Authorization](https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/)
- [MITRE ATT&CK T1078 — Valid Accounts](https://attack.mitre.org/techniques/T1078/)
- [MITRE ATT&CK T1565.001 — Stored Data Manipulation](https://attack.mitre.org/techniques/T1565/001/)
## 免责声明
此概念验证仅供**授权安全测试和教育目的**使用。未经授权访问计算机系统是非法的。作者不对本工具的滥用承担任何责任。
## 作者
**Filipe Gaudard** — 进攻安全研究员 | eWPT | eWPTx
- GitHub: [@FilipeGaudard](https://github.com/FilipeGaudard)
- LinkedIn: [Filipe Gaudard](https://www.linkedin.com/in/filipegaudard/)
标签:API 安全, BOLA, Broken Object-Level Authorization, CSV导出, CVE-2026-35045, CWE-639, Django REST Framework, GHSA-v8x3-w674-55p5, IDOR, PyPI 组件, Python脚本, Tandoor Recipes, 协议分析, 批量更新接口, 授权绕过, 权限提升, 越权漏洞, 逆向工具, 食谱管理