Home/ Blog/ Security news/ Article
Blog · Security news

Ruflo's unauthenticated AI agent bridge runs code (CVE-2026-59726); patching won't evict the poisoned memory

Ruflo exposed an unauthenticated MCP bridge to 233 tools, so one request gets full remote code execution (CVE-2026-59726).

Open network gateway leaking a corrupted shard into a glowing AI memory core

AI agent platforms keep making the same mistake: they ship the control bridge that drives the agents bound to every network interface, with no authentication, as a shipping default. Ruflo is the largest instance of that pattern so far. Noma Security disclosed CVE-2026-59726, a maximum-severity flaw (CVSS 10.0) that let anyone on the network run shell commands on a Ruflo host with one unauthenticated request. The remote code execution is bad. The reason to pay attention is what an attacker leaves behind: instructions written into the platform's own memory that keep steering the AI after you have closed the hole.

What was exposed

Ruflo is an open-source agent orchestration platform, reported by The Hacker News to have started life as Claude Flow. It has more than 66,000 GitHub stars, sits second on the MCPMarket listing, and by Noma's count has roughly ten million downloads. Its Docker packaging ran an Express-based Model Context Protocol (MCP) bridge, the layer that lets a model call tools, on port 3001. Per the researchers, the default docker-compose.yml bound that bridge to 0.0.0.0, every interface on the box, with no authentication in front of it. A MongoDB instance on port 27017 was reachable the same way, unauthenticated.

Behind the bridge sat 233 registered tools covering shell execution, database access, agent control, and the memory store. One of them was ruflo__terminal_execute. A bridge that hands 233 tools to any caller with no token or address check is not a developer convenience. It is an unauthenticated remote shell wearing a JSON-RPC coat. A single POST returned command output from inside the container, and Noma noted the call walked straight past the tool's own AUTOPILOT_BLOCKED_PATTERNS blocklist. Every version before 3.16.3 is affected. Maintainer Reuven Cohen shipped the fix within a day of the June 30 disclosure; the patch binds the bridge to the loopback interface, puts terminal execution behind server-side controls, and enables authentication on the database. At the time of writing there is no public report of exploitation in the wild, and the researchers did not publish internet-exposure counts.

The part that breaks incident response

Standard practice after a critical remote code execution flaw is well worn: contain, patch, rebuild from a clean image, rotate anything the attacker could read, move on. That playbook assumes the damage lived in the binary or in a network foothold, and a clean redeploy erases both.

Why a standard RCE cleanup leaves RufRoot's persistence intact. Source: Noma Security advisory for CVE-2026-59726.

RufRoot does not fit that assumption. Among the 233 tools was ruflo__agentdb__pattern-store, which writes into the platform's persistent learning memory. Noma's example is precise: an attacker stores a fake SOC2 "compliance policy" that tells the agent to embed an attacker-controlled URL in every deployment script it later generates. That instruction lives in the MongoDB-backed memory, not in the code. Rebuild the container from a patched image and the memory comes back with it. As the advisory puts it, a patched redeploy alone does not undo the poisoning, and future conversations produce attacker-influenced output with no visible tell. You have replaced the lock and kept the intruder inside.

We have written this vulnerability class before under other names. Amazon's coding assistant shipped an MCP configuration an attacker could reach. Docker's own agent tooling let a rigged container image break out to the host. A Grafana MCP server leaked tokens through the same tool layer, and Cursor's editor escaped its sandbox into code execution. The specifics differ; the shape does not. The tool bridge that gives a model real power gets exposed further than its authors pictured, because "bind to 0.0.0.0 so it works in the demo" is the default nobody revisits before shipping. As agent frameworks race for adoption, the network posture of the tool layer keeps losing to convenience.

How you would know

The cheap moment to catch this is at the network edge, before the write. A bridge that should answer only on loopback answering on 0.0.0.0, or an unexpected inbound request to port 3001 from off the host, is the signal that costs least to detect. If you run agent infrastructure, inventory what binds to public interfaces rather than trusting the compose file. A managed detection layer that flags a newly exposed listening service and unexpected shell execution catches the intrusion at that stage, which is the affordable place to catch it.

After the write it gets harder. You cannot file-scan your way to a poisoned memory, because nothing on disk looks wrong. The reliable check is to diff the pattern store against a known-good baseline and treat the agent's memory as attacker-reachable state, not as trusted application data. That is a category most teams have not added to their response plans yet.

Treat the agent's memory as reachable state

If you run Ruflo, upgrade to 3.16.3 now. If ports 3001 or 27017 were ever reachable beyond the host, assume compromise instead of hoping: close them, rotate every LLM provider key the process could read, and inspect the AgentDB pattern store for entries an attacker planted, because the clean redeploy that fixes the code will not remove them. The wider lesson outlives this CVE. The moment an AI agent gets persistent memory and real tools, that memory becomes state an attacker wants to write to, and your response plan has to cover data integrity, not just the patch.

Incident response stepTypical CVSS 10 RCERufRoot (CVE-2026-59726)
Close the network exposureEnds attacker accessNecessary, not sufficient
Rebuild from a clean, patched imageRestores a trusted systemRestores the poisoned memory with it
Rotate exposed credentialsCuts off reuseRequired: LLM API keys were readable
Audit the application data storeRarely part of the drillMandatory: the pattern store can carry injected instructions
Topics

Frequently asked questions

What is CVE-2026-59726 (RufRoot)?

CVE-2026-59726, named RufRoot, is a maximum-severity flaw (CVSS 10.0) in Ruflo, an open-source AI agent orchestration platform. Its Model Context Protocol bridge was exposed to the network with no authentication, so a single unauthenticated request could run shell commands on the host.

Which Ruflo versions are affected and how do I fix it?

Every Ruflo version before 3.16.3 is affected. Upgrade to 3.16.3, which binds the bridge to the loopback interface, gates terminal execution behind server-side controls, and enables database authentication. Also close ports 3001 and 27017 if they were reachable beyond the host.

Why does patching Ruflo not fully remove the attacker?

The flaw let attackers write instructions into the agent's persistent memory store, which is held in MongoDB, not in the code. A clean, patched redeploy restores that poisoned memory along with everything else, so the agent keeps producing attacker-influenced output until the pattern store is audited and cleaned.

Was CVE-2026-59726 exploited in the wild?

At the time of writing there is no public report of exploitation in the wild. Noma Security disclosed the flaw responsibly on June 30, 2026, and the maintainer released a fix within about a day. Treat any instance that was network-reachable as potentially compromised regardless.

How do I check whether my Ruflo instance was exposed?

Confirm what the MCP bridge on port 3001 and MongoDB on port 27017 actually bind to, rather than trusting the compose file. If either answered on a public interface, close it, rotate exposed LLM API keys, and diff the AgentDB pattern store against a known-good baseline to spot injected entries.

Ready to meet the Guardians?

Deploys fast - agentless for monitoring and cloud, a lightweight agent for deep endpoint security. Just Suriq, standing watch.