Il 28 settembre 2026 il progetto MCP ha pubblicato un avviso di sicurezza sull'SDK Python e il 30 settembre uno dello stesso tipo sull'SDK TypeScript: un server MCP malevolo poteva indicare al client un indirizzo proprio per i token e ricevere le credenziali OAuth che il client usa per un servizio vero. MCP (Model Context Protocol) è lo standard aperto con cui un assistente AI si collega a strumenti e dati esterni. Se ti propongono di collegarne uno al gestionale, al CRM o a un'API, chiedi a chi lo sviluppa quale SDK usa, a quale versione e con quali permessi.
Cosa è successo
Un client MCP che si collega a un server gli chiede dove si trova il servizio di login. Nelle versioni coinvolte l'SDK non verificava sempre la risposta e non legava le credenziali salvate al servizio a cui appartenevano. Un server malevolo o compromesso poteva così indicare un indirizzo proprio per i token e ricevere dal client il segreto del client, il codice di autorizzazione e il verificatore PKCE. Cycode (analisi del 28 settembre) ha mostrato che con questi dati si ottiene un token valido presso il servizio vero.
- L'SDK Python (pacchetto
mcp) è coinvolto dalla 1.9.1 alla 1.29.1 e dalla 2.0.0 alla 2.1.1, ed è corretto nella 1.30.0 e nella 2.2.0. - L'SDK TypeScript lo è in
@modelcontextprotocol/sdkdalla 1.12.0 alla 1.30.1 (corretto nella 1.31.0) e, in alcune configurazioni, in@modelcontextprotocol/clientdalla 2.0.0 alla 2.1.0 (corretto nella 2.2.0). - La gravità è alta, CVSS 7,5. Né gli avvisi né Cycode riportano attacchi reali.
Chi è toccato
Sono toccati i client MCP scritti con uno dei due SDK che usano HTTP e OAuth e possono collegarsi a server non del tutto fidati, avendo le credenziali di un servizio di login vero. Da questo difetto non sono toccati i server costruiti con gli SDK e i client locali che usano stdio.
I provider con credenziali preconfigurate, due in Python (ClientCredentialsOAuthProvider e PrivateKeyJWTOAuthProvider) e quattro in TypeScript, dopo l'aggiornamento vanno configurati con il servizio di login atteso: issuer in Python, expectedIssuer in TypeScript. Senza questa impostazione si comportano come prima, e nell'SDK Python 1.30.0 l'omissione produce solo un avviso di deprecazione che Python nasconde per impostazione predefinita. Le credenziali salvate prima dell'aggiornamento vanno cancellate.
Altri due casi
- Secondo Pillar Security, il 10 agosto un solo account GitHub ha aperto 23 pull request su progetti di AI, MCP e strumenti per sviluppatori, per far aggiungere un server MCP chiamato productivity-suite. Il server offre due strumenti innocui e, dalla terza chiamata, cambia le istruzioni che passa all'assistente per indirizzarlo verso chiavi SSH, credenziali AWS, cronologia della shell e configurazioni Kubernetes, nascondendolo all'utente; un'ispezione rapida vede solo i due strumenti innocui. Al 12 agosto 19 pull request erano chiuse, 4 aperte e nessuna integrata.
- Uno studio di un ricercatore indipendente su arXiv (31 luglio) ha confermato 640 server MCP raggiungibili da internet e ne ha verificati 414: il 91,8% di questi non usava OAuth, nella grande maggioranza dei casi perché senza autenticazione o con un token statico. Tra i 640 ha contato 687 strumenti che offrono l'esecuzione di comandi di shell senza richiedere credenziali.
Cosa esporre del gestionale
Un assistente AI collegato al gestionale agisce come un utente in più, con le credenziali che gli assegni. Questa è la nostra indicazione di partenza per decidere prima cosa può vedere e cosa può fare.
| Cosa | Come esporlo | Perché |
|---|---|---|
| Letture (anagrafiche, ordini) | Sola lettura, con filtri | Il rischio è la fuga di dati |
| Scritture (preventivi, fatture) | Vietate di default, abilitate una per una | Un errore costa denaro |
| Azioni irreversibili | Solo con conferma di una persona | Cancellare o inviare non si annulla |
| Credenziali | Un utente tecnico per assistente, permessi minimi | Si revoca senza toccare le persone |
| Strumenti del server | Confrontati a ogni connessione | Possono cambiare dopo l'approvazione |
| Registro | Chi ha fatto cosa, con quale assistente | Serve a ricostruire un incidente |
Se il gestionale è esposto da un server scritto con l'SDK Python, l'avviso del 5 ottobre precisa che dopo l'aggiornamento il controllo sul destinatario del token resta spento: va acceso con validate_token_resource, altrimenti il server accetta anche i token che lo stesso servizio di login emette per altri servizi.
Cosa fare questa settimana
- Elenca dove un assistente AI o uno strumento di sviluppo ha già accesso ai tuoi sistemi, comprese le prove dei dipendenti.
- Chiedi a chi sviluppa un client MCP quale versione usa (Python 1.30.0 o 2.2.0, TypeScript 1.31.0 o 2.2.0, o successive) e se ha impostato
issueroexpectedIssuer. - Chiedi al fornitore quali strumenti vede l'assistente, con quale utente entra nel gestionale e dove finisce il registro delle sue azioni; se il server usa l'SDK Python, chiedi se
validate_token_resourceè acceso. - Se un client può essersi collegato a un server non verificato, cambia il segreto del client e revoca i token.
- Collega gli assistenti solo a server MCP che conosci: uno proposto in una pull request o trovato in un elenco pubblico non è fidato.
Cosa controlliamo prima
Un assistente collegato a un gestionale riguarda due dei nostri servizi: le automazioni AI e chatbot, dove integriamo i modelli linguistici nei flussi esistenti con controllo su costi e qualità delle risposte, e i gestionali e le piattaforme cloud, dove progettiamo piattaforme multiutente con ruoli, permessi granulari e integrazione con i sistemi già in uso.
Se ci chiedi di guardare un collegamento di questo tipo, partiamo da quattro cose: la versione dell'SDK e il servizio di login impostato nel client, l'utente con cui l'assistente entra nel gestionale e i suoi permessi, gli strumenti che vede, il registro delle sue azioni. Per un collegamento nuovo proponiamo di iniziare in sola lettura e di aggiungere le scritture una alla volta, con analisi, preventivo e roadmap concordati prima di partire. Non possiamo garantire il comportamento di un server di terzi, perciò teniamo i permessi dal lato del gestionale: un server che cambia dopo l'approvazione può fare solo ciò che l'utente tecnico può fare.
Cosa non sappiamo ancora
- Se ci siano stati abusi: gli avvisi e Cycode non ne riportano, ma da queste fonti non si può escluderlo.
- Quali prodotti commerciali usino versioni vulnerabili degli SDK: le fonti non lo dicono, va chiesto ai singoli fornitori.
- Quanto pesi lo studio sui server esposti: ha un solo autore, che scrive che servirebbero verifiche indipendenti.
Se vuoi che guardiamo il collegamento tra un assistente AI e il tuo gestionale, scrivici o parti dalla pagina sulle automazioni AI e chatbot.
Fonti
- GitHub, SDK Python: avviso GHSA-qx49-fqc8-xw99 (28 settembre 2026)
- GitHub, SDK TypeScript: avviso GHSA-6qxp-vccf-f47h (30 settembre 2026)
- Cycode: analisi del difetto OAuth dell'SDK Python (28 settembre 2026)
- GitHub, SDK Python: note di rilascio della 1.30.0
- GitHub, SDK Python: note di rilascio della 2.2.0
- Pillar Security: rapporto sulla campagna Deadbugz (12 agosto 2026)
- arXiv: Exposed by Design, studio sui server MCP esposti (31 luglio 2026)
- GitHub, SDK Python: avviso GHSA-w4fh-qvv9-3v23 (5 ottobre 2026)



