Una richiesta POST senza password ha aperto all’aggressore una shell di comandi all’interno della piattaforma per la gestione degli agenti IA. L’accesso ottenuto ha permesso di rubare le chiavi dei servizi OpenAI e Anthropic, leggere la corrispondenza degli utenti, lanciare agenti controllati e iniettare istruzioni dannose nella memoria permanente del sistema.
I ricercatori di Noma Labs hanno scoperto una vulnerabilità critica nella piattaforma aperta Ruflo. Al problema è stato assegnato il CVE-2026-59726 e un punteggio CVSS massimo di 10,0.
La vulnerabilità ha interessato le versioni di Ruflo precedenti alla 3.16.3. Ruflo aiuta gli sviluppatori a creare team di agenti IA, coordinare la collaborazione, preservare il contesto tra le sessioni e connettere strumenti esterni tramite il Model Context Protocol. Al momento della pubblicazione dello studio, il progetto aveva ricevuto più di 67.000 stelle su GitHub.
Il componente centrale della piattaforma è MCP Bridge, un server basato su Express.js attraverso il quale passano le chiamate agli strumenti e altre azioni dell’agente. Il componente forniva l’accesso a 233 funzioni, tra cui la gestione degli agenti, la gestione della memoria, le operazioni del database e l’esecuzione di comandi all’interno del container.
La configurazione predefinita di Docker Compose pubblica la porta 3001 su tutte le interfacce di rete. L’accesso a Internet era soggetto alle impostazioni del firewall, ai gruppi di sicurezza cloud e alla segmentazione della rete, ma qualsiasi utente con accesso di rete a MCP Bridge poteva inviare comandi senza token, chiave API o altra autenticazione.
L’endpoint POST /mcp ha accettato richieste JSON-RPC e ha passato le chiamate direttamente alla funzione ExecuteTool(). Ruflo aveva un elenco di modelli che proibivano comandi pericolosi, ma la restrizione si applicava solo alla modalità di pilota automatico. Le chiamate dirette al Bridge MCP hanno bypassato la protezione.
Tra gli strumenti aperti c’era ruflo__terminal_execute, che lanciava comandi arbitrari all’interno del contenitore per conto dell’utente del nodo con UID 1000. Per eseguire il codice, i ricercatori avevano bisogno solo di una richiesta HTTP. Non era necessaria alcuna elevazione aggiuntiva dei privilegi poiché il processo aveva già accesso alle variabili di ambiente, alle interfacce dell’agente, alla memoria persistente e al database.
Un utente malintenzionato poteva leggere le chiavi API dei servizi connessi archiviate nelle variabili di ambiente. L’elenco delle credenziali potenzialmente disponibili includeva le chiavi OpenAI, Anthropic, Google e OpenRouter. Le chiavi rubate hanno permesso di utilizzare modelli e risorse informatiche pagate dalla vittima per avviare gruppi controllati di agenti.
Noma Labs ha preparato una catena di attacco automatizzata in otto passaggi e ha testato lo script su un’installazione Ruflo standard su AWS EC2. I ricercatori hanno elencato tutti gli strumenti disponibili, eseguito comandi, ottenuto chiavi del fornitore di intelligenza artificiale, creato i propri agenti e scaricato la corrispondenza da MongoDB.
Il database MongoDB veniva eseguito su una rete Docker interna senza richiedere l’autenticazione. Dopo aver ricevuto la shell dei comandi, l’aggressore potrebbe installare il client del database in una directory temporanea, copiare i messaggi, i titoli delle finestre di dialogo e i metadati associati, quindi trasferire le informazioni su un server esterno.
Una minaccia separata è stata causata dall’avvelenamento persistente della memoria di AgentDB. Un utente malintenzionato potrebbe aver salvato una regola dannosa, ad esempio la richiesta di aggiungere un indirizzo controllato a tutti gli script di distribuzione creati. L’istruzione implementata ha influenzato le risposte future ed è stata conservata dopo l’installazione dell’aggiornamento.
Gli specialisti di Synack hanno notato che una regolare correzione del codice non ripristina la fiducia nella memoria compromessa. Il record dannoso potrebbe essere cambiato durante l’elaborazione, essere finito in altri modelli o persistere in più posizioni, quindi gli amministratori richiedono un controllo AgentDB separato.
I ricercatori hanno anche dimostrato l’installazione di una backdoor permanente. Il file index.js principale era protetto da scrittura, ma la directory /app consentiva la creazione di nuovi file. Un utente malintenzionato potrebbe salvare uno script dannoso, allegare un file al processo di avvio e arrestare il processo del contenitore principale. La policy di riavvio di Docker: a meno che non venga interrotta riavvia automaticamente Ruflo insieme alla backdoor.
Gli sviluppatori hanno risolto la vulnerabilità nella versione 3.16.3. Secondo il bollettino ufficiale sulla sicurezza, MCP Bridge ora accetta connessioni per impostazione predefinita
Ricercatore di sicurezza informatica con esperienza nell’analisi delle vulnerabilità, nella mitigazione del rischio cyber, nelle attività di red teaming ed ethical hacking e nella protezione di sistemi complessi. Specializzato in penetration testing e Threat Intelligence, contribuisce al rafforzamento della resilienza digitale di infrastrutture e reti aziendali.
Aree di competenza: Penetration Testing, Threat Intelligence, Red Teaming, Vulnerability Assessment, Incident Response