Il 29 luglio 2026 la piattaforma agentica Ruflo si confronta con una vulnerabilità che ridefinisce i confini del patching. Assegnata con il punteggio massimo CVSS 10.0 dal NIST, la CVE-2026-59726 — soprannominata RufRoot dai ricercatori di Noma Labs — non si limita a eseguire codice remoto: contamina la memoria persistente degli agenti AI, rendendo la compromissione irreversibile con un semplice aggiornamento software.
- CVE-2026-59726 colpisce il MCP Bridge di Ruflo, esponendo 233 tool senza autenticazione sulla rete tramite binding di default su
0.0.0.0:3001. - Una singola POST HTTP non autenticata a
/mcpattivaruflo__terminal_executeper RCE immediato nel container, con furto di API key LLM dal process environment. - La catena di impatto si estende a MongoDB non autenticato (porta 27017), furto di conversazioni e memory poisoning dell'AgentDB learning store.
- Il fix 3.16.3 chiude il vector iniziale ma non può annullare pattern già iniettati: la memoria avvelenata influenza output AI futuri indipendentemente dalla patch.
Il sistema nervoso centrale: come funziona il MCP Bridge
Ruflo è un meta-harness open-source per orchestrare agenti AI come Claude Code e OpenAI Codex, con circa 66.500 stelle GitHub, quasi 10 milioni di download e circa un milione di utenti attivi al momento della disclosure. Il Model Context Protocol (MCP) Bridge, implementato in Express.js, funge da intermediario tra i modelli linguistici e l'infrastruttura sottostante.
Secondo l'advisory originale di Noma Labs, il bridge espone 233 tool che coprono accesso shell, operazioni database, gestione agenti e storage della memoria. La criticità risiede in due scelte di default: l'endpoint POST /mcp è raggiungibile senza alcuna autenticazione, e il servizio si lega all'indirizzo 0.0.0.0:3001 — tutte le interfacce di rete — anziché al loopback locale.
Il maintainer Reuven Cohen ha confermato la configurazione difettosa nelle release notes citate da The Hacker News: "The docker-compose defaults bound the bridge and MongoDB to all interfaces". La stessa composizione include MongoDB senza autenticazione sulla porta 27017, amplificando la superficie di attacco.
Dalla POST al controllo totale: l'exploit chain in 8 passaggi
I ricercatori di Noma Labs hanno dimostrato una catena di attacco confermata live su istanza AWS EC2 con deployment Ruflo di default. Il punto di ingresso è tecnicamente banale: una richiesta JSON-RPC tools/call a ruflo__terminal_execute con comando arbitrario.
Il proof-of-concept documentato da Eli Ainhorn utilizza curl con callback OAST a Burp Collaborator. Da questo foothold iniziale, l'attaccante ottiene shell nel container, estrae tramite printenv le API key di tutti i provider LLM — OpenAI, Anthropic, Google, OpenRouter — presenti nelle environment variables. Il backend eredita l'intero ambiente tramite destructuring {…process.env}.
La compromissione prosegue con spawn di swarm agent controllati dall'attaccante sulle credenziali della vittima, furto di conversazioni dal MongoDB interno, e iniezione di pattern malevoli nell'AgentDB learning store. La persistenza è garantita da backdoor nella directory /app con policy di riavvio Docker.
"Prior to 3.16.3, Ruflo's default docker-compose deployment exposed the MCP bridge POST /mcp and POST /mcp/:group endpoints without authentication, allowing an unauthenticated network attacker to invoke tools/call to terminal_execute, obtain a shell in the bridge container, read provider API keys, and poison AgentDB learning-store patterns" — NIST National Vulnerability Database
La memoria che resiste: il paradigma del poisoning post-patch
Il maintainer Reuven Cohen ha sintetizzato l'anomalia in modo preciso: la compromissione abilita "a poisoned pattern into the AgentDB learning store that steers future AI outputs". Questo meccanismo introduce un vettore di persistenza senza precedenti nel panorama della sicurezza agentica.
Non è malware residente su disco, né rootkit nel kernel. È avvelenamento del comportamento futuro del modello: istruzioni iniettate nella memoria di apprendimento che condizionano risposte, decisioni e azioni successive dell'agente. Anche dopo l'aggiornamento alla versione 3.16.3, i pattern contaminati rimangono attivi.
John Gallagher, VP di Viakoo, ha definito il fenomeno "a critical turning point in cybersecurity" in un'analisi citata da Dark Reading. Il ricercatore Johan Edholm di Detectify ha aggiunto: "The bug class is old, but the blast radius is new". La classe di vulnerabilità — mancanza di autenticazione su servizio di rete — è nota da decenni. La novità è la contaminazione semantica persistente che trascende il binario compromesso.
Noma Labs ha documentato esplicitamente il limite: "a patched redeploy alone doesn't undo poisoning". L'incident response tradizionale — identificare, patchare, verificare — non basta più quando il software compromesso è il comportamento dell'intelligenza artificiale.
Cosa fare adesso
Per le installazioni Ruflo, le azioni prioritarie sono:
- Aggiornare immediatamente alla versione 3.16.3, che implementa binding su loopback di default, bearer token authentication, disabilitazione di
terminal_execute, autenticazione MongoDB e regression test CI. - Ruotare tutte le API key LLM esposte nel container: OpenAI, Anthropic, Google, OpenRouter. Considerare compromesse qualsiasi chiave presente in environment variables pre-patch.
- Audit completo della memoria AI: verificare pattern e istruzioni nell'AgentDB learning store, ricostruire da immagine pulita se non verificabili.
- Ricostruire l'istanza da zero anziché aggiornare in-place: il poisoning persistente richiede rebuild dell'ambiente con dati di memoria ripristinati da backup pre-compromissione.
L'ombra dello Shadow AI e la governance delle piattaforme MCP
Ruflo entra nelle aziende spesso come Shadow AI: deployment non autorizzati da team di sviluppo che cercano produttività senza attendere i cicli di approvazione IT. Questa vulnerabilità dimostra che un singolo errore di configurazione default espone non solo l'infrastruttura tradizionale, ma l'intero ecosistema decisionale AI.
Le piattaforme MCP richiedono hardening specifico che va oltre il patching automatico. Le credenziali LLM devono essere gestite come secrets di primo livello, con rotazione e monitoraggio dedicati. La segmentazione di rete deve isolare i bridge MCP da qualsiasi accesso laterale. E l'incident response deve integrare verifica della memoria agentica accanto alla forensics su disco e log.
Il record CVE-2026-59726 nel database NVD include classificazioni CWE-78 (OS Command Injection), CWE-306 (Missing Authentication) e CWE-942 (Permissive Cross-domain Policy). La disclosure responsabile è iniziata il 30 giugno 2026; il fix è stato mergiato nella PR #2521 entro 24 ore, con advisory GHSA-c4hm-4h84-2cf3.
Perché questa vulnerabilità cambia le regole
RufRoot non è un caso di supply chain compromessa nel senso classico. Non si tratta di binario malevolo iniettato in un repository, ma di infrastruttura di default configurata per l'esposizione e di memoria AI che assorbe il compromesso come insegnamento permanente. Il modello diventa esso stesso il veicolo di persistenza.
Per i CISO, la lezione è duplice: le piattaforme agentiche introducono superfici di attacco che non si mappano sugli asset tradizionali, e gli strumenti di difesa esistenti — EDR, SIEM, vulnerability scanner — non rilevano la contaminazione semantica. Serve una nuova categoria di audit: la verifica dell'integrità comportamentale degli agenti, non solo della loro infrastruttura.
FAQ
- Il protocollo MCP è intrinsecamente insicuro?
- No. La vulnerabilità risiede nell'implementazione specifica di Ruflo, non nel protocollo MCP di per sé. Il problema sono le scelte di default — binding su tutte le interfacce, assenza di autenticazione — non il paradigma agentico.
- Perché il CVSS è 10.0, il massimo possibile?
- Secondo il record NVD ufficiale, il vettore CVSS v3.1 è AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H: attacco remoto senza autenticazione, complessità bassa, impatto catastrofico su confidenzialità, integrità e disponibilità, con scope cambiato.
- L'aggiornamento a 3.16.3 risolve tutto?
- Il fix chiude il vector di accesso iniziale ma non può annullare pattern di memory poisoning già iniettati. Le istanze compromesse richiedono ricostruzione da immagine pulita e verifica della memoria AI, oltre alla rotazione delle credenziali.
Fonti
- https://thehackernews.com/2026/07/ruflo-mcp-flaw-lets-unauthenticated.html
- https://www.darkreading.com/cyber-risk/patch-resistant-rufroot-flaw-malicious-ai-agent-swarms
- https://cyberpress.org/critical-ruflo-mcp-bridge-flaw/
- https://noma.security/blog/rufroot-the-mcp-bridge-vulnerability-that-turns-agents-into-rogue-admins-cve-2026-59726/
- https://cve.threatint.eu/CVE/CVE-2026-59726
- https://gbhackers.com/critical-ruflo-mcp-bridge-flaw/amp/
- https://nvd.nist.gov/vuln/detail/CVE-2026-59726
- https://thehackernews.com/
- https://thehackernews.com/p/upcoming-hacker-news-webinars.html
Le informazioni sono state verificate sulle fonti citate e aggiornate al momento della pubblicazione.