
UI-TARS-desktop MCP Server: Critical Unauthenticated RCE
CVE-2026-81735 is a CVSS 10 unauthenticated RCE in the mcp-http-server package used by UI-TARS-desktop. The Streamable HTTP/SSE transport defaulted to binding on '::' with no authentication middleware applied by the @agent-infra/mcp-server-commands and @agent-infra/mcp-server-filesystem entry points, so any network client could invoke the exposed run_command tool (which pipes input straight into child_process.exec) for arbitrary command execution, or use the filesystem tool for unauthenticated arbitrary file read/write. The fix, landed in commit c2ad42e3eb9b27830db41a3e6f51ca7179d9b168, changes the default listen address to 127.0.0.1 without bumping the package version, so affected instances can't be identified by version number alone.
What it is
CVE-2026-81735 (published 2026-08-27) is a CVSSv3 10.0 unauthenticated RCE in the mcp-http-server package shipped with UI-TARS-desktop. The existing summary covers the mechanism; the page adds the pieces needed to actually check and remediate an instance: the affected package version, the vulnerable function name, and the two mitigation paths short of upgrading.
Preconditions / Affected
- Package version 1.2.4 is where this lives — and the fix landed without a version bump, so
1.2.4exists in both vulnerable and patched forms. Version number alone tells you nothing; you must check whether the build includes commitc2ad42e3eb9b27830db41a3e6f51ca7179d9b168. - Vulnerable code is in
startServer.ts, specificallystartSseAndStreamableHttpMcpServer. When no host is passed it defaults to'::', binding every interface. - The
@agent-infra/mcp-server-commandsand@agent-infra/mcp-server-filesystementry points call that function with only host and port and no auth middleware (middleware is applied only when explicitly supplied). - Exposure requires network reachability to the listening port; a firewall or explicit host binding removes it.
What to do
Three options, in order of preference:
- Update to a build containing commit
c2ad42e3eb9b27830db41a3e6f51ca7179d9b168(default listen address changed to127.0.0.1). Do not trust the1.2.4version string as proof either way. - If you can't update, explicitly pass the host to
startSseAndStreamableHttpMcpServer— set it to127.0.0.1or a specific internal IP so the transport stops binding'::'. - Add network-level access controls on the service port as defense-in-depth.
Caveats
No public PoC exists as of the page's writing. The page does not specify the exact injection point for the command string in run_command, only that it flows into promisify(child_process.exec), so standard shell-injection technique is inferred rather than demonstrated. The workaround in option 2 addresses exposure (binding scope), not the underlying lack of authentication — an attacker with access to the bound interface still faces no credential check.
CVEs named here
- CVE-2026-81735
Technologies named here
- Model Context Protocol
- Node.js
- UI-TARS-desktop
Related in AppSec
Flowise MCP Security Bypass Enables RCE
Inside an Oracle Database SQL Injection Attack | Huntress
OASIS
