Noma Tells LDS Why Patching Ruflo's CVSS 10 Flaw Cannot Undo Poisoned AI Memory
Ruflo patched CVE-2026-59726, a CVSS 10.0 flaw that let a single unauthenticated request reach 233 privileged tools, in version 3.16.3 on July 1. In an email interview with Lets Data Science, Eli Ainhorn, Senior AI Vulnerability Researcher at Noma Security, explained why upgrading is not the end of the incident: the exploit could write a fake compliance policy into the platform's persistent AI memory, and that poisoned pattern survives the patch, shaping answers for every later user.
A patch normally ends a vulnerability's story. The researcher who found the flaw in Ruflo told us that this time it does not.
Ruflo, an open source platform for deploying swarms of AI agents, closed CVE-2026-59726 in version 3.16.3 on July 1, one day after Noma Labs disclosed it. The flaw carries a CVSS score of 10.0, the maximum. Noma took the research public on July 29, and in an email interview with Lets Data Science, Eli Ainhorn, Senior AI Vulnerability Researcher at Noma Security, walked through what the exploit reached and named the part an upgrade cannot clean up.
One request, 233 tools, no authentication
| Measure | Detail |
|---|---|
| CVSS score | 10.0 (GitHub CNA) |
| Tools exposed without auth | 233 |
| Affected versions | everything before 3.16.3 |
| Disclosed to maintainers | June 30, fixed July 1 |
| GitHub stars at publication | ~67,000 (company-reported) |
Ruflo's MCP bridge is an Express.js server on port 3001 that Docker Compose bound to all network interfaces by default. Its POST /mcp endpoint implements the Model Context Protocol's JSON-RPC interface, and, as Ainhorn put it, "you send it a tool name and arguments and it executes them without any authentication whatsoever."
Among those 233 tools is ruflo__terminal_execute, which runs shell commands inside the container. "One curl, you're running code inside the container as the node user," he said. From there the chain is short: printenv returns every provider API key, and the MongoDB instance holding all user chat history had no authentication either.
Ainhorn said Ruflo drew Noma's attention because of what it can do rather than because of a hunch. The platform ships shell access, agent swarms, persistent memory, a self-learning pipeline and knowledge-graph retrieval. "When a platform can do that much, the first question that comes to mind is 'who's allowed to ask it to do those things?', in Ruflo's case the answer turned out to be anyone."
The part the patch does not reach
Ruflo stores patterns that shape future model behaviour in a learning pipeline called AgentDB, and one of the exposed tools wrote directly to it. For the proof of concept, Ainhorn stored a fake SOC2 compliance policy instructing the AI to post environment variables to an attacker-controlled URL in every deployment script it subsequently generated.
"The pattern looks like legitimate organizational policy," he said. "The AI has no way to distinguish it from real company guidance. It just incorporates it into future responses. That's the persistence problem. You patch the vulnerability, restart the container, but the poisoned pattern is still in the database influencing every conversation going forward."
That is the difference between this and a conventional remote-code-execution bug, and it is why Ruflo's own advisory tells operators of previously exposed instances to rotate keys and audit the pattern store rather than simply upgrade.
Auditing poisoned memory is manual, and self-referential
Asked how anyone actually performs that audit, Ainhorn was blunt: "It's mostly manual." Teams connect to the MongoDB instance and review stored patterns for anything they did not create, paying attention to entries that reference external URLs, instruct the AI to include specific content in its output, or imitate internal policies nobody wrote.
The obvious shortcut is the one he warned against. "You could use an AI agent to help audit the memory, but that's a chicken-and-egg problem, if the memory is already poisoned, the agent reviewing it could be influenced by the same tampered patterns."
For teams checking exposed deployments, he listed what to look for: unexpected files in the application directory, injected require statements in index.js, outbound connections to unknown domains, and memory-store patterns nobody on the team created. Noma found no evidence of exploitation in the wild, though he noted an attacker at this level of access "can easily clean up after themselves."
His broader concern is awareness rather than tooling. "Most organizations don't even know their agent platforms have persistent memory, let alone that it could be tampered with."
Noma says this is a pattern, not a Ruflo bug
We asked whether other agent frameworks carry the same default exposure. "It's a pattern," Ainhorn said. "These platforms ship with powerful capabilities and no access control because they were built for local use. The moment the service binds to a network interface, everything it can do is exposed. And docker-compose defaults to binding to all interfaces."
He added that Noma is "actively researching other platforms in this space and seeing similar patterns." The company has not named them, so that claim currently rests on Noma's word.
Against the argument that faster discovery and patching solves this class of problem, he was direct: "Find and patch is necessary but not sufficient. With agent platforms that have persistent memory, the damage can outlive the fix." What he wants instead is visibility, into which agent platforms are running, what tools they can reach, and what is sitting in their memory.
What is not established
Noma says it found "numerous" exposed instances through internet scanning but has published no count, and we have asked for one. Ruflo's reported reach, roughly 67,000 GitHub stars and, per Noma's research, 10 million downloads and a million active users, is company-reported.
Timing is worth holding in mind too. The fix has been available since July 1, so any instance still exposed has had four weeks to upgrade, and the publicity lands the week Black Hat opens in Las Vegas.
What Ruflo got right
Asked what other open source projects should copy from the maintainers' response, Ainhorn answered with one word: "Everything." They took it seriously from the first message, published an advisory within a day, and scored it honestly at CVSS 10. The fix went beyond the reported endpoint, and the remediation notes told operators to rotate keys and audit memory rather than just update.
"I truly and firmly believe that's how responsible disclosure should work on both sides," he said.
For anyone building on this stack, his summary of the lesson was the shortest thing he said: "If it touches the network, it needs authentication and runtime controls and protection. That goes for any tool execution layer, not just agent frameworks."
We covered the related research on poisoning long-term agent memory earlier this month.
Key Points
- 1The MCP bridge shipped as an Express.js server on port 3001 that Docker Compose bound to all interfaces by default, exposing 233 tools with no authentication at all. Ainhorn told Lets Data Science one request to ruflo__terminal_execute gave shell access inside the container, after which environment variables yielded provider API keys.
- 2The persistence problem is the story: a planted pattern in Ruflo's AgentDB learning pipeline, written to look like an internal SOC2 policy, keeps steering the AI after the software is fixed. Auditing for it is mostly manual, and Ainhorn warned that using an AI agent to review poisoned memory is a chicken-and-egg problem.
- 3Ainhorn says this is a pattern rather than a Ruflo bug and that Noma is actively researching other agent frameworks and MCP servers with the same default exposure, though it has not named them. Ruflo's own response drew unqualified praise: an advisory within a day and an honest CVSS 10 self-score.
Scoring Rationale
The critical, network-reachable flaw exposed shell execution, provider keys and persistent agent memory in a default deployment path. It is directly actionable for Ruflo and MCP operators, while the impact score remains below the highest tier because the reviewed sources do not establish broad exploitation.
Sources
Original reporting, with the public references used alongside it.
LDS Exclusive
Reporting based on written answers given directly to Let's Data Science by Noma Security.
Practice interview problems based on real data
1,625 SQL & Python problems across 15 industry datasets — the exact type of data you work with.
Try 250 free problems


