Agents IA & Automation

MCP con Claude: i rischi di sicurezza della nuova specifica

8 min di lettura

La nuova specifica MCP trasferisce le responsabilità di sicurezza agli sviluppatori. Scopri i rischi e come mitigarli in produzione.

Sviluppatore che consulta il codice di sicurezza su schermo con lucchetto digitale

La nuova specifica del Model Context Protocol (MCP) di Anthropic, lanciata a giugno 2026, trasferisce le responsabilità di sicurezza direttamente agli sviluppatori. Prima le gestiva il protocollo stesso. Adesso tocca a voi.

Questo cambio non è una novità. I team che deployano Claude con MCP in produzione, Simple Booking nel settore ricettivo, X con i suoi MCP server per gli agenti IA, si pongono già la domanda: dove esattamente sono i buchi?

Lo shift di responsabilità: da dove viene il problema

La nuova specifica MCP è enterprise-ready, vero. Ma questa parola nasconde una realtà: Anthropic ha deliberatamente spostato una parte dei controlli di sicurezza verso il layer sviluppatore per guadagnare flessibilità.

Concretamente, significa tre cose:

1. Niente più autenticazione implicita

Prima, MCP includeva meccanismi di sicurezza di default. Adesso, devi costruire tu la catena di autenticazione. Un'agenzia e-commerce Shopify che connette Claude a una base clienti deve gestire come un agente Claude accede ai dati sensibili, nomi, email, numeri di telefono. Non c'è magia qui.

2. I permessi granulari diventano un tuo problema

MCP non dice più "questo tool può leggere ma non scrivere". Lo dici tu. Un agente potrebbe potenzialmente eseguire un'azione per la quale non è autorizzato se non hai messo delle barriere. Simple Booking conosce questo dilemma: i loro MCP connector integrano un CRS (Central Reservation System), tocca direttamente le prenotazioni clienti. Un permesso configurato male = una prenotazione modificata per errore.

3. Le injection prompt diventano più critiche

Claude è intelligente, ma se un agente MCP accetta un'istruzione dall'esterno senza validazione, "chiama lo strumento X con il parametro Y", hai appena creato un'entrata per un attaccante. Gli avversari non cercano di hackare il protocollo. Cercano di manipolare il tuo agente.

I quattro pericoli concreti che incontrate

Pericolo 1: le credenziali esposte nelle variabili d'ambiente

Il classico. Il tuo server MCP ha bisogno di una chiave API per parlare a un database. La metti in .env. OK fino a qui. Se non che il vostro container Docker o la vostra funzione AWS Lambda espone queste variabili nei log se mai va in crash.

Con MCP, ogni errore di connessione al server risale a Claude. Claude lo logga. E se Claude è in debug mode o se i log non sono cifrati, ciao ciao la tua chiave.

Mitigazione: usate un gestore di segreti (Vault, AWS Secrets Manager). Iniettate le credenziali a runtime, mai in duro.

Pericolo 2: fiducia cieca verso il server MCP

Deployi un server MCP che espone 15 strumenti. Claude è connesso. Un dev junior aggiunge un nuovo strumento che cancella registri clienti. Senza una revue di accesso, Claude può chiamarlo.

Peggio: se questo server è sulla tua rete interna e qualcuno compromette un'altra macchina in rete, può fare pivot per inviare comandi MCP falsificati.

Mitigazione: ogni strumento MCP deve avere una lista esplicita di chi può chiamarlo. Claude? Sì, ma solo se risponde a X criteri. Audit degli strumenti regolarmente.

Pericolo 3: i timeout infiniti che bloccano

Un server MCP risponde lentamente o non risponde. Claude aspetta. Nel frattempo, una richiesta utente ristagna, la sessione rimane aperta, la memoria gonfia. Non è una falla di sicurezza diretta, ma crea vettori di DoS.

Peggio se è intenzionale: qualcuno invia una richiesta che forza MCP a fare un'operazione molto lunga (una scansione di database gigantesca, un calcolo costoso).

Mitigazione: timeout rigoroso su ogni chiamata MCP. 5s, 10s massimo. Niente infinito.

Pericolo 4: niente log o log insufficienti

Se Claude chiama uno strumento MCP e non loggi l'azione, il timestamp, i parametri, il risultato, non hai alcuna tracciabilità. Un'agenzia alberghiera che scopre 500 prenotazioni cancellate non avrà alcuna pista per risalire a quello che è successo.

Verificate la sicurezza del vostro server MCP

Le difese da mettere in place

1. Autenticazione forte tra claude e il tuo server MCP

MCP usa JSON-RPC su una connessione stdio o HTTP. Se è HTTP, usate HTTPS + un token Bearer valido. Meglio ancora: mTLS con certificati client.

Test: il tuo server MCP deve rifiutare qualsiasi richiesta senza autenticazione valida. Niente eccezioni.

2. Autorizzazione per ruolo (rbac) o per attributi (abac)

Definite esplicitamente chi può chiamare quale strumento.

Ruolo AgenteStrumenti autorizzatiParametri limitati
ReadOnlyAnalystGetBookings, GetReviewsNessun parametro sensibile
ReservationManagerCreateBooking, ModifyBookingModifiche < 3 giorni prima dell'arrivo
AdminTuttiNessun limite

Implementate questo nel vostro server MCP. Prima di eseguire uno strumento, verificate il ruolo di Claude (o più precisamente, il contesto della sessione che lo usa).

3. Validazione e sanitizzazione rigorosa

Ogni parametro ricevuto da MCP deve essere validato:

  • Tipo corretto (stringa, numero, etc.)
  • Lunghezza limitata (non 10 MB di testo in un campo)
  • Formato validato (una data è veramente una data, un email è veramente un email)
  • Nessun carattere escapato che potrebbe fare una injection SQL
// Esempio: endpoint che crea una prenotazione
// SBAGLIATO
app.post('/MCP/create-booking', (req, res) -> {
  const booking = req.body; // Pericolo diretto
  db.insertBooking(booking);
});

// CORRETTO
app.post('/MCP/create-booking', (req, res) -> {
  const schema = z.object({
    clientId: z.string().uuid(),
    checkIn: z.string().date(),
    nights: z.number().min(1).max(365),
    roomType: z.enum(['single', 'double', 'suite'])
  });
  
  const validated = schema.parse(req.body); // Throw se invalido
  db.insertBooking(validated);
});

4. Log esaustivo con contesto

Ogni chiamata MCP deve essere loggata con:

  • Timestamp esatto
  • Identità dell'agente (o del contesto che lo usa)
  • Strumento chiamato + parametri completi
  • Risultato (successo, errore, eccezione)
  • Durata di esecuzione
  • Indirizzo IP sorgente (se pertinente)

Memorizzate questi log in un sistema immutabile (CloudWatch, Splunk, o un semplice file append-only cifrato).

5. Monitoraggio e alert in tempo reale

Rilevate le anomalie:

  • Troppi appelli a uno strumento in poco tempo -> tentativo di DoS
  • Uno strumento chiamato con parametri anomali -> fuzz attack
  • Errori ripetuti -> ricognizione o vuln scanning

Configurate un alert se Claude chiama 100 volte "GetUserData" in 30s.

Il caso studio: X e i suoi MCP server

X (precedentemente Twitter) ha lanciato MCP server affinché Claude, Cursor, Grok Build e altri AI tool potessero accedere a X direttamente. È la stessa logica di Simple Booking e le prenotazioni alberghiere.

La differenza: i dati su X sono pubblici di default. Un agente può recuperare tweet senza danno. Ma se avessi un X MCP server che esponesse i DM privati o gli analytics interni, lo scenario cambierebbe completamente.

Anthropic e X hanno assunto che gli sviluppatori che integrano questi server sapranno mettere delle barriere. Spoiler: non sempre è così.

Domande frequenti

Bisogna cifrare la comunicazione MCP anche su localhost?

Sì se dati sensibili transitano. Se è solo calcolo innocuo (convertire una temperatura Celsius in Fahrenheit), no. Ma non appena c'è cliente, account, pagamento: cifrate.

Qual è la differenza tra MCP e un'API REST classica dal punto di vista della sicurezza?

Fondamentalmente: nessuna. MCP è solo una convenzione JSON-RPC. Gli stessi principi di sicurezza si applicano. La differenza è che molti dev pensano che perché è "per IA", è meno critico. Errore.

Come testare la sicurezza del mio server MCP?

Fare fuzzing: inviare parametri casuali, stringhe giganti, null, caratteri strani. Usare tool come Burp Suite per intercettare le chiamate MCP. Tentare un'injection SQL su ogni parametro. Misurare i timeout. Cercare bypass di ruolo.

C'è una certificazione o uno standard per MCP sicuro?

Non ancora. MCP è troppo giovane. Anthropic pubblica raccomandazioni ma nulla di ufficiale. Al contrario, applicate gli standard di sicurezza API classici: OWASP Top 10, funziona.

Come gestire MCP se l'agente claude ha bisogno di diritti amministrativi?

Scenario da incubo: devi dare a Claude la capacità di cancellare dati. Opzione 1: dargli uno strumento separato "DeleteWithConfirmation" che chiede un'approvazione umana (dici al sistema "approva l'agente per questa azione"). Opzione 2: strumenti granulari con ruoli molto limitati. Opzione 3: non farlo affatto e usare un umano per le operazioni distruttive.

L'autenticazione tra claude e MCP è sufficiente, o bisogna anche proteggere claude -> anthropic?

Entrambi. Devi fidarti del tubo tra Claude e il tuo server. Ma devi anche fidarti di Anthropic per non loggare/esporre i tuoi dati. Anthropic ha garanzie di confidenzialità per i piani Enterprise. Controllate il vostro contratto.

Conclusione

La nuova specifica MCP di Anthropic è più flessibile ma meno sicura di default. La sicurezza non è più incorporata. Dipende da te.

I tre riflessi da avere:

  1. Autenticazione forte tra Claude e MCP, HTTPS + token, mTLS se possibile.
  2. Autorizzazione granulare, ogni strumento ha una lista esplicita di chi può chiamarlo e come.
  3. Osservabilità completa, ogni chiamata è loggata, controllabile, allertabile.

Se deployi MCP in produzione senza questi tre pilastri, stai giocando alla roulette russa. E spoiler: il proiettile finirà per essere nella camera.

Hai bisogno di aiuto per proteggere la tua implementazione MCP? Parliamo della tua architettura su fstck.co, abbiamo casi reali in ricettività, e-commerce e fintech.

Équipe Fullstack
Seguici su LinkedIn →

Parliamo del tuo progetto

Hai un progetto in cantiere, un'idea audace?
Incontriamoci e parliamone.

Contattaci