Vai al contenuto

Sicurezza del server MCP

Questa pagina descrive come il server MCP di Optimo IoT protegge i dati della piattaforma quando l'accesso viene concesso a un assistente AI esterno (Claude, ChatGPT, Mistral AI, Microsoft Copilot, ...).

In sintesi:

  • l'accesso è sempre in sola lettura: il server MCP non espone alcuna funzione per modificare configurazioni, inviare comandi o scrivere dati;
  • l'utente sceglie esplicitamente quale gruppo rendere accessibile, e l'accesso non può mai superare i permessi che l'utente stesso possiede;
  • un'autorizzazione concessa non si allarga mai nel tempo, mentre si restringe immediatamente se l'utente perde dei permessi;
  • i nuovi strumenti del server MCP che leggono nuovi tipi di dato richiedono un nuovo consenso esplicito dell'utente;
  • i token hanno una durata breve (1 ora) e l'autorizzazione scade al massimo dopo 30 giorni, oltre i quali è necessario autorizzare di nuovo.

Flusso di autorizzazione

Il collegamento tra un assistente AI e Optimo IoT avviene tramite lo standard OAuth 2.1 con PKCE, come previsto dalla specifica MCP:

  1. l'utente aggiunge il server MCP al proprio assistente AI;
  2. l'assistente apre la pagina di login di cloud.optimoiot.it, dove l'utente si autentica con le proprie credenziali Optimo IoT (incluso il secondo fattore, se abilitato sull'account). Le credenziali non vengono mai comunicate all'assistente AI;
  3. la pagina indica chiaramente che si sta concedendo un accesso in sola lettura a un servizio esterno e chiede all'utente di selezionare il gruppo a cui il servizio potrà accedere;
  4. solo dopo la conferma, Optimo IoT rilascia all'assistente un token limitato al gruppo scelto.

Ulteriori protezioni del flusso:

  • il token viene rilasciato esclusivamente agli indirizzi di ritorno (redirect URI) dei fornitori supportati (Claude, ChatGPT, Mistral AI, Microsoft Copilot, Google Antigravity). Una richiesta di autorizzazione costruita da terzi con un indirizzo diverso viene rifiutata, anche se il login dell'utente è valido;
  • il codice di autorizzazione intermedio è utilizzabile una sola volta, scade dopo 5 minuti ed è vincolato tramite PKCE (S256) al client che ha avviato la richiesta;
  • ogni login può essere usato per una sola autorizzazione: non è possibile riutilizzare lo stesso login per modificare a posteriori l'ambito di un'autorizzazione già concessa;
  • i token che l'assistente riceve non sono quelli del login: vengono generati nuovamente dopo la scelta del gruppo, e quindi contengono solo i permessi effettivamente concessi.

Restrizione dei permessi

Ogni autorizzazione MCP è vincolata da tre limiti, applicati contemporaneamente:

Limite Descrizione
Sola lettura Indipendentemente dal livello dell'utente (lettura, scrittura, amministrazione), l'assistente riceve sempre e solo permessi di lettura. Il server MCP, inoltre, non espone alcuno strumento di scrittura.
Gruppo scelto L'assistente può leggere solo il gruppo selezionato dall'utente nella pagina di autorizzazione (e i relativi sotto-gruppi), non tutti i gruppi a cui l'utente ha accesso. È possibile scegliere anche un singolo sotto-gruppo, ad esempio un solo impianto, per ridurre al minimo i dati esposti.
Permessi correnti dell'utente A ogni richiesta l'ambito concesso viene confrontato con i permessi che l'utente possiede in quel momento. L'assistente non può mai leggere più di quanto l'utente stesso possa leggere.

I dati accessibili all'assistente all'interno del gruppo autorizzato sono:

  • l'albero degli asset e i relativi metadati (nomi, descrizioni);
  • l'elenco delle variabili e i relativi metadati (unità di misura, limiti, ...);
  • i valori delle variabili, sia grezzi che aggregati;
  • il log AIMS degli asset.

Non sono accessibili: dati di altri gruppi, utenti e relativi dati personali, configurazioni dei gateway, impostazioni di notifica, dati di fatturazione.

Suggerimento

Per collegare un assistente AI a un solo impianto o a una sola linea, è consigliato selezionare il sotto-gruppo più specifico possibile invece del gruppo principale dell'azienda.

Variazione dei permessi dell'utente

L'ambito di un'autorizzazione è fissato nel momento in cui l'utente la concede, e da quel momento può solo restringersi.

Se i permessi dell'utente si riducono (ad esempio l'utente viene rimosso da un gruppo, oppure un sotto-gruppo autorizzato viene spostato altrove nella gerarchia), la riduzione si applica anche all'assistente AI già collegato, entro pochi minuti e senza bisogno di alcuna azione.

Se i permessi dell'utente si ampliano (ad esempio l'utente viene aggiunto a un nuovo gruppo, oppure ottiene permessi di scrittura), l'autorizzazione già concessa all'assistente non cambia: l'assistente continua a vedere solo il gruppo originariamente scelto, in sola lettura. Per estendere l'accesso dell'assistente a nuovi dati, l'utente deve eseguire di nuovo l'intera procedura di autorizzazione, con un nuovo login e una nuova scelta esplicita del gruppo.

In questo modo un ampliamento dei permessi non si traduce mai, in modo implicito o silenzioso, in un ampliamento dei dati esposti a un servizio esterno.

Nuove funzionalità del server MCP

Optimo IoT può rilasciare nel tempo nuovi strumenti per il server MCP. Il consenso dato dall'utente nella pagina di autorizzazione riguarda però dei tipi di dato ben precisi: metadati di asset e variabili, valori delle variabili e log AIMS. Un nuovo strumento non estende mai in modo silenzioso un'autorizzazione già concessa:

  • se il nuovo strumento legge tipi di dato già inclusi nel consenso (ad esempio un nuovo modo di interrogare i valori delle variabili), resta all'interno di quanto l'utente ha già autorizzato;
  • se il nuovo strumento legge un nuovo tipo di dato (ad esempio allarmi o report), Optimo IoT aggiorna la pagina di autorizzazione e la versione del consenso. Da quel momento tutte le autorizzazioni concesse con una versione precedente vengono rifiutate: l'assistente AI non riceve più dati né nuovi token, e l'utente deve autenticarsi di nuovo e confermare esplicitamente il consenso aggiornato prima di poter usare il connettore.

Il controllo della versione del consenso è applicato lato server a ogni richiesta e a ogni rinnovo dei token, ed è quindi efficace entro pochi minuti dal rilascio anche sugli access token già emessi.

In ogni caso, qualunque nuovo strumento resta soggetto agli stessi limiti di tutti gli altri: sola lettura e solo all'interno del gruppo autorizzato.

Durata, rinnovo e revoca dei token

Elemento Durata Note
Codice di autorizzazione 5 minuti Utilizzabile una sola volta, vincolato tramite PKCE
Access token 1 ora Inviato dall'assistente a ogni richiesta, firmato e verificato a ogni chiamata
Refresh token 30 giorni dal login Usato dall'assistente per ottenere nuovi access token. Alla scadenza è necessario un nuovo login
Autorizzazione MCP 30 giorni dall'ultimo rinnovo dei token, comunque non oltre la scadenza del refresh token Verificata a ogni richiesta: se l'assistente non viene usato per 30 giorni, l'autorizzazione decade

In pratica:

  • un access token sottratto è utilizzabile al massimo per un'ora;
  • ogni 30 giorni al massimo l'utente deve autenticarsi di nuovo e confermare di nuovo il gruppo da condividere, anche se l'assistente viene usato regolarmente;
  • a ogni rinnovo viene verificato che l'autorizzazione sia ancora valida: un'autorizzazione revocata o scaduta impedisce il rilascio di nuovi token.

Revoca

Un'autorizzazione può essere revocata in qualsiasi momento:

  • dall'utente, scollegando il connettore dal proprio assistente AI: l'assistente elimina i token e, se il fornitore lo supporta, revoca il refresh token tramite l'apposito endpoint, impedendo il rilascio di nuovi token;
  • da Optimo IoT, su richiesta del cliente, per una singola autorizzazione oppure per tutte le autorizzazioni di un utente. Questa revoca è verificata lato server a ogni richiesta, e ha quindi effetto entro pochi minuti anche sugli access token già emessi;
  • implicitamente, se l'account dell'utente viene disabilitato o rimosso, o se l'utente perde l'accesso al gruppo autorizzato.

Proprietà e tracciabilità del dato

I dati letti tramite il server MCP restano di proprietà del cliente, come tutti gli altri dati presenti sulla piattaforma Optimo IoT. È importante chiarire il percorso che i dati seguono:

  1. Optimo IoT invia i dati richiesti esclusivamente all'assistente AI autorizzato dall'utente, in risposta alle sue richieste e solo per il gruppo autorizzato;
  2. da quel momento i dati sono elaborati dal fornitore dell'assistente AI (Anthropic, OpenAI, Mistral AI, Microsoft, ...) secondo i termini contrattuali e le impostazioni sulla privacy che il cliente ha con quel fornitore (ad esempio conservazione delle conversazioni o utilizzo per l'addestramento dei modelli). Optimo IoT non ha controllo su questa fase;
  3. Optimo IoT non invia autonomamente dati ad alcun fornitore di AI: ogni trasferimento avviene solo a seguito di un'autorizzazione esplicita dell'utente e di una richiesta dell'assistente.

Per questo motivo, la pagina di autorizzazione avvisa esplicitamente l'utente che sta consentendo a un servizio esterno di leggere tutti i dati del gruppo selezionato e dei suoi sotto-gruppi, e gli chiede di verificare che ciò sia consentito dalle politiche aziendali.

Attenzione

Si raccomanda di utilizzare il server MCP solo con piani dei fornitori AI che garantiscono adeguate tutele sui dati (ad esempio piani business/enterprise con esclusione dall'addestramento dei modelli), in linea con le politiche aziendali del cliente.

Per ogni autorizzazione, Optimo IoT registra quale utente l'ha concessa, quando e su quale gruppo. Queste informazioni possono essere fornite al cliente su richiesta, ad esempio per verifiche interne o di audit.

Prompt injection

Per prompt injection si intende il caso in cui un testo letto da un modello AI contenga istruzioni che il modello potrebbe eseguire come se provenissero dall'utente. Rispetto al server MCP di Optimo IoT, il rischio va considerato in due direzioni.

Il server MCP può inserire istruzioni nell'assistente?

No. Il server MCP di Optimo IoT:

  • espone un insieme fisso di strumenti, con descrizioni statiche definite e versionate da Optimo IoT, che descrivono solo come interrogare i dati;
  • restituisce esclusivamente dati strutturati (JSON) letti dalla piattaforma, oppure messaggi di errore predefiniti, senza testo generato dal server;
  • non può avviare autonomamente richieste verso l'assistente: risponde soltanto alle chiamate che l'assistente esegue.

I dati della piattaforma possono contenere istruzioni malevole?

Alcuni dati restituiti sono testo libero inserito dagli utenti della piattaforma: nomi e descrizioni di asset e variabili, metadati personalizzati, voci del log AIMS. In linea teorica, un utente con permessi di scrittura su questi campi potrebbe inserirvi un testo pensato per influenzare il comportamento dell'assistente AI che lo legge.

Questo rischio è contenuto dal modo in cui l'accesso è progettato:

  • nessuna azione possibile sulla piattaforma: l'accesso è in sola lettura e non esistono strumenti di scrittura, quindi un'istruzione malevola non può indurre l'assistente a modificare configurazioni, inviare comandi agli impianti o alterare dati su Optimo IoT;
  • perimetro limitato: anche in caso di manipolazione, l'assistente può leggere solo i dati del gruppo autorizzato, che l'utente stesso può già leggere;
  • autori noti: i campi di testo libero possono essere modificati solo da utenti autenticati con permessi di scrittura sul gruppo, cioè persone già autorizzate dal cliente.

Il rischio residuo riguarda la combinazione con altri connettori abilitati nella stessa conversazione: se l'assistente ha a disposizione anche strumenti in grado di compiere azioni (ad esempio inviare email, scrivere su file condivisi o navigare sul web), un testo malevolo potrebbe tentare di indurlo a trasferire altrove i dati letti. Questa protezione dipende dall'assistente AI e dalla sua configurazione, non dal server MCP.

Buone pratiche

  • Abilitare nella stessa conversazione solo i connettori strettamente necessari, in particolare evitando di combinare il server MCP con connettori in grado di inviare dati all'esterno.
  • Mantenere attiva, quando disponibile, la richiesta di conferma manuale prima che l'assistente esegua azioni tramite altri connettori.
  • Limitare i permessi di scrittura sui gruppi agli utenti che ne hanno effettivamente bisogno.
Tema Misura adottata
Prompt injection dal server Strumenti con descrizioni statiche, risposte solo con dati strutturati, nessuna richiesta avviata dal server
Prompt injection dai dati Sola lettura, nessuno strumento di scrittura, perimetro limitato al gruppo autorizzato
Restrizione dei permessi Sola lettura, gruppo scelto esplicitamente dall'utente, verifica dei permessi correnti a ogni richiesta
Ampliamento dei permessi Non si propaga mai all'autorizzazione esistente: serve una nuova autorizzazione esplicita
Nuovi strumenti MCP Un nuovo tipo di dato richiede un nuovo consenso esplicito: le autorizzazioni precedenti vengono rifiutate
Riduzione dei permessi Applicata anche alle autorizzazioni esistenti entro pochi minuti
Durata dei token Access token 1 ora, nuovo login obbligatorio al massimo ogni 30 giorni
Revoca Dall'utente (scollegando il connettore) o da Optimo IoT su richiesta, con effetto lato server anche sui token già emessi
Proprietà del dato I dati restano del cliente, vengono inviati solo all'assistente autorizzato dall'utente, ogni autorizzazione è tracciata