Severity by source
AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:H
Network-reachable WhatsApp bridge with no auth (AV:N/PR:N/UI:N); AC:H because attacker needs bridge enabled and a viable writable target path; scope changes to host filesystem; C:L since written files may be readable, I:H/A:H from write-anywhere.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
nanobot is a personal AI assistant. In versions 0.1.5.post3 and prior, the WhatsApp bridge in bridge/src/whatsapp.ts constructs a filesystem path using the fileName field from an incoming WhatsApp document message without sanitization. The WhatsApp bridge downloads media attachments and writes them to disk using a filename derived from the sender's message via documentMessage.fileName, which is concatenated with a prefix and its raw value is passed directly to path.join(mediaDir, outFilename). Node.js path.join resolves .. components, allowing an attacker to escape the intended media/ directory by sending a document with a crafted fileName such as ../../../.ssh/authorized_keys. Because the attacker also controls the file content (the downloaded buffer), this is a write-anywhere primitive - both path and content are attacker-controlled. A fix for this issue is planned for version 0.1.5.post4.
AnalysisAI
Arbitrary file write in HKUDS Nanobot's WhatsApp bridge (versions 0.1.5.post3 and prior) allows remote unauthenticated attackers to write attacker-controlled content to arbitrary filesystem locations by sending a WhatsApp document message with a path-traversal sequence in its fileName field. Because both the destination path and the file content are attacker-controlled, exploitation yields a write-anywhere primitive that can be escalated to remote code execution (e.g., by overwriting authorized_keys or shell startup files). No public exploit identified at time of analysis; a fix is planned for version 0.1.5.post4.
Technical ContextAI
Nanobot is a personal AI assistant by HKUDS that exposes a WhatsApp bridge implemented in TypeScript/Node.js (bridge/src/whatsapp.ts). The bridge receives incoming WhatsApp messages, downloads any attached media via the Baileys-style documentMessage handling, and persists the binary buffer to disk. The root cause is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory): the code concatenates a prefix with documentMessage.fileName and feeds the unsanitized string into Node.js's path.join(mediaDir, outFilename). Contrary to a common misconception, path.join does NOT clamp the result inside its first argument - it normalizes '..' segments, so a fileName like '../../../.ssh/authorized_keys' resolves outside mediaDir. The CPE cpe:2.3:a:hkuds:nanobot:*:*:* confirms all versions of the hkuds/nanobot application up to and including 0.1.5.post3 are affected.
RemediationAI
No vendor-released patch identified at time of analysis; the vendor states a fix is planned for version 0.1.5.post4, so upgrade to that release as soon as it ships (track https://github.com/HKUDS/nanobot/security/advisories/GHSA-3f63-vcp3-hvqr). Until the patched release is available, disable the WhatsApp bridge entirely if it is not in active use (eliminates the attack surface but breaks WhatsApp integration), or apply a local patch in bridge/src/whatsapp.ts to sanitize documentMessage.fileName before path construction - strip directory separators and '..' segments, then validate that path.resolve(mediaDir, outFilename) still starts with path.resolve(mediaDir) and reject otherwise (low side effects beyond rejecting unusual filenames). As defense in depth, run the Nanobot process as an unprivileged user with no write access to SSH keys, cron directories, or shell rc files, ideally inside a container with a read-only root filesystem and a dedicated writable media volume.
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
The AES-NI implementation in OpenSSL before 1.0.1t and 1.0.2 before 1.0.2h does not consider memory allocation during a
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-37933