Not in the middle: why a Context AI–style breach against Caiioo would yield nothing useful

Questa è una traduzione automatica del documento originale in inglese. In caso di discrepanze tra la presente traduzione e la versione originale in inglese, prevarrà la versione inglese. Leggi la versione originale in inglese


Non nel mezzo: perché una violazione in stile Context AI contro Caiioo non produrrebbe nulla di utile

2026-04-22 · Caiioo Team

Il 19 aprile 2026, Vercel ha reso noto che lo strumento di IA di terze parti di un singolo dipendente era stato compromesso e che il token OAuth compromesso era stato utilizzato per penetrare negli ambienti interni di Vercel. Un sottoinsieme limitato di clienti ha subito l'esposizione di variabili d'ambiente non sensibili. Le variabili d'ambiente crittografate/sensibili non sono state colpite.

Lo strumento era Context AI. Il dipendente gli aveva concesso un ampio accesso "Consenti tutto" al proprio Google Workspace aziendale. Quella singola concessione OAuth, conservata nei server di Context AI, è stata la leva per tutto ciò che è seguito.

Un attore malevolo su BreachForums ha separatamente messo in vendita quelli che sostiene essere 580 record di dipendenti Vercel per 2 milioni di dollari. Vercel non ha verificato tale annuncio.

L'incidente non è concluso. Ma la lezione architettonica è già chiara ed è utile per chiunque stia valutando uno spazio di lavoro IA.

La dinamica dell'attacco

Il modello SaaS-AI pone un fornitore nel mezzo di ogni concessione OAuth che gli viene fornita.

Quando installi uno strumento di produttività IA di terze parti e accetti la schermata di consenso OAuth, il token di accesso e il token di aggiornamento emessi da Google (o Microsoft, o qualsiasi provider di identità) non rimangono sul tuo dispositivo. Vengono inviati ai server del fornitore, perché l'IA che ne ha bisogno gira nel cloud del fornitore. L'infrastruttura del fornitore conserva un set di token costantemente aggiornati per ognuno dei propri utenti, con i permessi "Consenti tutto" che la maggior parte degli utenti ha accettato senza leggere.

Quel deposito centralizzato di token è esattamente ciò che i criminali informatici prendono di mira. Compromettere il fornitore una sola volta garantisce l'accesso al Workspace di migliaia di clienti. Il bollettino di Vercel avverte che gli effetti a valle potrebbero colpire "centinaia di utenti in molte organizzazioni".

I rapporti fanno risalire la catena originale a un dipendente di Context AI il cui dispositivo personale è stato compromesso nel febbraio 2026, a quanto pare tramite un exploit scaricato per un gioco di Roblox che conteneva il malware infostealer Lumma Stealer. Quel malware ha sottratto le credenziali Google Workspace e AWS del dipendente, che a loro volta hanno sbloccato il deposito dei token OAuth. Un dispositivo personale infetto, un deposito SaaS aziendale, centinaia di Workspace compromessi a valle.

Tre ragioni architettoniche per cui una violazione in stile Context AI contro Caiioo non produrrebbe nulla di utile

Caiioo è un workspace potente e orientato alla privacy, dotato di un orchestratore agentico e un'interfaccia chat che viene eseguita in un pannello laterale. "Privacy-first" descrive una specifica postura architettonica, non uno slogan di marketing. Sono in gioco tre proprietà concrete.

1. I token OAuth del tuo Workspace sono memorizzati criptati sul tuo dispositivo, non sui nostri server

Quando colleghi un account Google o Microsoft in Caiioo, vedrai la schermata di consenso OAuth standard di Google con gli scope che stai concedendo. Fin qui, la procedura appare identica all'autorizzazione di Context AI.

La differenza strutturale risiede in ciò che accade ai token generati da quel flusso di consenso. L'access token e il refresh token emessi da Google vengono memorizzati criptati sul tuo dispositivo — nel Keychain su macOS e iOS, nel Keystore di Android su Android, nello storage sicuro del browser nell'estensione. Non vengono memorizzati nel database centrale di caiioo. Non disponiamo di un vault di token che li conservi per tuo conto.

Quando l'orchestratore agentico deve leggere il tuo calendario o cercare nella tua casella di posta, la chiamata API parte dal tuo dispositivo direttamente verso Google, con il token prelevato dallo storage sicuro del tuo dispositivo. La nostra infrastruttura non si trova nel percorso dei dati per nessuno dei tuoi contenuti Workspace.

Puoi verificarlo tu stesso nel codice sorgente: src/shared/auth/connections-manager.ts è il punto in cui le connessioni OAuth Google/Microsoft vengono persistite. I record OAuthConnection, inclusi i campi accessToken e refreshToken, vengono scritti tramite l'adapter di storage locale — non trasmessi a un archivio token centrale.

2. Il message bus del relay è criptato end-to-end

Quando i componenti di Caiioo su diversi dispositivi devono coordinarsi — l'estensione del browser che comunica con l'app desktop, il telefono che comunica con il server domestico, l'interfaccia del pannello laterale che invoca uno strumento eseguito nativamente su macOS — lo fanno attraverso un relay che ospitiamo su relay.pebbleflow.ai. Il relay è il punto di incontro che permette ai tuoi dispositivi di trovarsi tra reti diverse.

Tale relay è criptato end-to-end. I dispositivi di ogni utente eseguono uno scambio di chiavi attraverso l'involucro del relay e, da quel momento in poi, i messaggi tra i tuoi dispositivi sono testo cifrato dal punto di vista del relay. Il relay può instradarli ma non può leggerli.

Questo non è un obiettivo futuro. Il Durable Object che gestisce le connessioni WebSocket, cloud/relay/src/user-relay.ts, è documentato come: "Gestisce le connessioni WebSocket per un singolo utente. Gestisce messaggi criptati E2E (opachi per il relay) e lo scambio di chiavi." I percorsi del codice che gestiscono il tipo di messaggio ENCRYPTED sono esplicitamente commentati: "Messaggio criptato per un client specifico (non possiamo leggerlo)." Il relay non è architettonicamente in grado di ispezionare il contenuto dei messaggi che inoltra.

3. Il relay è single-tenant per utente, per costruzione

Il relay di Caiioo è costruito su Cloudflare Durable Objects. Ogni utente riceve la propria istanza UserRelay — un'unità separata e isolata a livello di runtime per elaborazione e storage. Non esiste un database multi-tenant condiviso che contenga lo stato della sessione live di ogni utente, perché non esiste affatto un database multi-tenant per quel ruolo. Il relay di ogni utente è un oggetto separato.

Questo è fondamentale perché elimina la modalità di guasto a bersaglio unico condiviso. Anche se un utente malintenzionato trovasse un modo per compromettere il Durable Object di un utente, non otterrebbe l'accesso laterale ai dati di nessun altro utente — non esiste un archivio di supporto condiviso attraverso cui spostarsi. Ogni utente è, strutturalmente, il proprio tenant.

Cosa c'è e cosa non c'è nel nostro database centrale

Gestiamo un database centrale (Cloudflare D1) per le cose che devono essere centralizzate. L'onestà è fondamentale qui. Il database memorizza:

  • Identità dell'account: la tua email, la tua password hash se usi il login email/password, l'ID del fornitore restituito da Google/Apple/Microsoft se usi un pulsante di social login.
  • Stato di fatturazione: il tuo ID cliente Stripe, il livello di abbonamento, la chiave di licenza e lo stato dell'abbonamento.
  • Chiavi API per utente per i fornitori di inferenza IA (OpenRouter, nello specifico). Queste sono credenziali del fornitore di inferenza — distinte dai tuoi token OAuth di Workspace. Esistono per il flusso di crediti gestiti e per gli utenti che desiderano portare la propria chiave OpenRouter da utilizzare in tutte le funzionalità IA di caiioo.
  • Elenco di attivazione dei dispositivi per l'applicazione della licenza.
  • Log di audit, conservati per i requisiti di conformità SOC 2.
  • Una tabella di instradamento per i webhook in entrata opzionali (WhatsApp, Telegram, ecc.) — utilizzata solo se hai configurato tali integrazioni di messaggistica.

Il database non memorizza:

  • I tuoi token OAuth di Workspace (Gmail, Calendar, Drive, Microsoft 365). Questi si trovano solo sul tuo dispositivo.
  • Il contenuto delle tue conversazioni. L'orchestratore degli agenti viene eseguito nel tuo pannello laterale; le conversazioni risiedono nella tua archiviazione locale.
  • I tuoi dati di Workspace — email, eventi del calendario, file di Drive. Questi vengono letti direttamente da Google/Microsoft sul tuo dispositivo, senza mai passare attraverso la nostra infrastruttura.
  • Il contenuto di qualsiasi messaggio che fluisce attraverso il relay WebSocket. Il relay vede solo testo cifrato.

Una violazione del nostro database centrale esporrebbe l'identità dell'account/fatturazione, i log di audit e la colonna delle chiavi di inferenza di OpenRouter. Non produrrebbe token di Workspace, contenuti delle conversazioni o dati di Workspace, perché non sono presenti.

Le oneste avvertenze

Questo è un modello di minaccia differente, non uno scudo magico. Ecco alcune precisazioni che preferiremmo sentissi da noi piuttosto che scoprire in seguito.

Lo scambio del codice OAuth tocca brevemente il nostro relay. Google (e Microsoft, GitHub, Slack) richiedono che il client_secret di OAuth venga presentato durante la fase di scambio del token, e tale segreto non può essere incluso nel codice client. Pertanto, il nostro relay stateless allega il client_secret e inoltra il tuo codice di autorizzazione a Google in cambio dei token effettivi. I token tornano attraverso il relay e vengono immediatamente restituiti al tuo dispositivo per l'archiviazione. Non vengono persistiti nella nostra infrastruttura. Questo è lo stesso motivo per cui ogni app nativa integrata con Google che tu abbia mai usato ha una qualche componente server — è un vincolo di Google, non una scelta di design di caiioo.

Gli endpoint personalizzati ti permettono di bypassare completamente il nostro client OAuth. Caiioo supporta la configurazione di endpoint OAuth personalizzati, il che significa che un utente disposto a predisporre il proprio client OAuth nella Google Cloud Console (o l'equivalente Microsoft Entra) può evitare del tutto gli scope OAuth di Caiioo e la fase di scambio del nostro relay. Una volta configurato, il flusso di autenticazione avviene tra il tuo dispositivo e Google senza che Caiioo intervenga in alcun modo. Non presentiamo questa opzione come un'impostazione rivolta al consumatore medio perché la maggior parte degli utenti non ne ha bisogno e l'architettura predefinita mantiene già i tuoi dati Workspace fuori dai nostri server. Tuttavia, l'opzione esiste e l'implementazione risulterà familiare a chiunque abbia già configurato un client OAuth nella Google Cloud Console.

La compromissione del dispositivo è ancora rilevante. Se il tuo laptop viene compromesso, anche i tuoi token lo sono. L'approccio local-first sposta la superficie di attacco dal "caveau del fornitore" al tuo "endpoint". Si tratta di una superficie più piccola e più difendibile, ma non è pari a zero.

Il "Sign in with Google" a livello di login è separato dall'accesso a Workspace. Se accedi a Caiioo stesso con Google o Apple, quel flusso riguarda solo l'identità e crea una connessione Basic limitata al tuo account. Non è lo stesso percorso del flusso di accesso a Workspace descritto sopra e non concede all'AI l'accesso alla tua casella di posta o al tuo calendario.

Gli attacchi alla supply-chain contro Caiioo stessa sono ancora ipotizzabili. Un canale di aggiornamento compromesso potrebbe, in linea di principio, distribuire codice che esfiltra i token dal tuo dispositivo. Mitighiamo questo rischio con la firma del codice e la notarizzazione su ogni piattaforma su cui distribuiamo, ma la mitigazione è diversa dal modello basato sul caveau del fornitore — così come lo sono le dinamiche economiche degli aggressori.

Come verificarlo tu stesso

La risposta onesta è che la dichiarazione sulla privacy di un fornitore in una pagina di marketing non può essere provata a uno scettico. Ecco quindi come confermare quanto abbiamo dichiarato utilizzando i tuoi strumenti.

Esegui un monitor di rete mentre usi caiioo. Little Snitch su macOS, GlassWire su Windows o Wireshark su qualsiasi sistema. Usa Caiioo normalmente per un'ora. Il traffico che vedrai, con il significato di ogni connessione:

Destinazione Quando Cosa significa
oauth2.googleapis.com, gmail.googleapis.com, calendar.googleapis.com, www.googleapis.com Ogni volta che l'agente legge i tuoi dati Workspace Il tuo dispositivo comunica direttamente con Google tramite il tuo token on-device. Noi non siamo in questo percorso.
login.microsoftonline.com, graph.microsoft.com Se hai collegato Microsoft 365 Stessa modalità, dal tuo dispositivo a Microsoft.
api.anthropic.com, openrouter.ai, api.openai.com, generativelanguage.googleapis.com, localhost:11434 (Ollama) Quando invii una chat o esegui uno strumento che utilizza un LLM Il tuo dispositivo comunica con il fornitore AI che hai configurato. Noi non siamo in questo percorso.
relay.pebbleflow.ai (HTTPS) Brevemente, durante la configurazione iniziale di Workspace OAuth e durante il refresh periodico del token Lo scambio di codici OAuth stateless. I token transitano, ma non vengono persistiti lato server.
relay.pebbleflow.ai (HTTPS) Periodicamente Validazione della licenza, recupero dei contenuti delle note di rilascio / guida utente, dati di model-intelligence, controlli dello stato dell'abbonamento.
relay.pebbleflow.ai (HTTPS) Quando carichi il sito web o visualizzi lo stato dell'account collegato Traffico API standard.
relay.pebbleflow.ai (WebSocket) Continuamente, se hai installato più componenti Caiioo (estensione + app desktop, o mobile + desktop) Il bridge di funzionalità che permette ai tuoi dispositivi di comunicare tra loro. Criptato end-to-end. Noi vediamo solo testo cifrato.
relay.pebbleflow.ai/api/messaging/... Solo se hai configurato integrazioni di messaggistica (WhatsApp, Telegram, Slack in entrata) Instradamento dei webhook per i messaggi in entrata.

Cosa non vedrai mai:

  • I tuoi dati Workspace (email, eventi del calendario, file Drive) fluire verso relay.pebbleflow.ai. Quelle chiamate vanno dal tuo dispositivo direttamente a *.googleapis.com.
  • Il contenuto delle tue conversazioni fluire verso relay.pebbleflow.ai. L'orchestratore gira nel tuo pannello laterale; la cronologia della chat risiede nel tuo storage locale.
  • Le tue chiavi API dei fornitori AI fluire verso relay.pebbleflow.ai. Risiedono sul tuo dispositivo. (L'eccezione: se utilizzi il flusso dei crediti gestiti, stai usando un sub-account OpenRouter allocato dal server, e la chiamata di inferenza viene comunque effettuata dal tuo dispositivo.)

Se dovessi mai vedere una richiesta dal tuo dispositivo verso la nostra infrastruttura che non rientra nella tabella sopra, si tratta di una scoperta rilevante. Segnalacelo e ti forniremo una spiegazione o correggeremo il problema.

Cosa fare se sei un cliente Vercel o Context AI

Le linee guida pubblicate da Vercel, Context AI e dalla comunità di ricerca sulla sicurezza convergono su una lista di controllo coerente:

  1. Ruota ogni segreto memorizzato come variabile d'ambiente Vercel non crittografata. Le variabili crittografate/sensibili sono risultate non colpite, ma la rotazione è un'operazione rapida.
  2. Controlla le concessioni OAuth di terze parti del tuo team su Google Workspace (e Microsoft 365, se applicabile). Revoca tutto ciò che non riconosci e tratta qualsiasi strumento a cui hai concesso permessi "Consenti tutto" come una credenziale da sostituire.
  3. Rafforza il consenso futuro. Prediligi strumenti che richiedono permessi minimi necessari e scegli spazi di lavoro la cui architettura non richieda affatto la consegna di token a lunga durata.

Il terzo punto è la mossa strutturale, ed è quella che questo incidente continua a suggerire silenziosamente.

Prova Caiioo

Se la lezione dell'incidente Vercel/Context AI è che la posizione dei tuoi token OAuth determina il raggio d'azione dell'attacco quando il fornitore viene violato, la risposta è scegliere uno spazio di lavoro che non li conservi.

Caiioo è uno spazio di lavoro potente e orientato alla privacy con un orchestratore di agenti e un'interfaccia chat che viene eseguita in un pannello laterale. Disponibile come estensione del browser, app nativa per macOS, app nativa per iOS, app nativa per Android e app desktop per Windows e Linux. Inizia gratuitamente.


Fonti: