
Una falla nell'SDK Python MCP espone le credenziali OAuth a server malevoli
Una debolezza nell'SDK Python MCP ufficiale potrebbe consentire a un server malevolo di intercettare i segreti di accesso OAuth, permettendo agli aggressori di ottenere accesso a lungo termine ai servizi connessi…
Una debolezza di sicurezza nell'SDK Python ufficiale di MCP può consentire a un server MCP malevolo di catturare le credenziali OAuth che un'applicazione utilizza per accedere a un servizio esterno, hanno avvertito i manutentori dell'SDK in un avviso di sicurezza. La falla, segnalata dalla società di sicurezza Cycode, permette a un server non affidabile di ingannare un client creato con le versioni interessate inducendolo a consegnare il proprio client secret, il codice di autorizzazione e la chiave di prova PKCE. Con questi segreti rubati, un aggressore può richiedere un token di accesso valido al servizio di accesso reale e mantenere un accesso persistente fino a quando le credenziali non vengono modificate.
Il Model Context Protocol (MCP) è uno standard aperto che consente alle applicazioni di intelligenza artificiale di comunicare con strumenti e fonti di dati esterni, e il pacchetto interessato è l'SDK Python ufficiale per la creazione di server e client MCP. Quando un client MCP deve effettuare l'accesso, chiede al server dove si trovi il proprio server di autorizzazione (il servizio che gestisce gli accessi e rilascia i token). Nelle versioni vulnerabili, l'SDK accettava quella risposta senza alcuna convalida, quindi un server ostile poteva reindirizzare il client a un endpoint controllato dall'aggressore mostrando all'utente la pagina di accesso autentica. Il client inviava quindi il proprio segreto, il codice di autorizzazione e la chiave di prova PKCE direttamente all'aggressore, vanificando lo scopo della chiave di prova ed esponendo credenziali a lunga durata.
L'avviso valuta la falla come di gravità elevata (7,5 su 10) per i due provider OAuth machine-to-machine che operano senza alcuna interazione da parte dell'utente. Il provider interattivo, che richiede l'approvazione di una persona per l'accesso, riceve un punteggio di 6,5 perché l'utente vede e approva comunque quella che sembra essere la pagina di accesso legittima. Al 29 settembre non era stato assegnato alcun identificativo CVE. Le versioni interessate coprono la linea 1.x dalla 1.9.1 alla 1.29.1 e la linea 2.x dalla 2.0.0 alla 2.1.1; le correzioni sono presenti nelle versioni 1.30.0 e 2.2.0. Le applicazioni sono a rischio solo se utilizzano l'SDK come client MCP su HTTP con uno dei provider OAuth elencati (OAuthClientProvider, ClientCredentialsOAuthProvider, PrivateKeyJWTOAuthProvider o il deprecato RFC7523OAuthClientProvider della 1.x), conservano credenziali per un servizio di accesso reale e possono connettersi a un server che non controllano completamente.
Per chiudere la vulnerabilità, gli utenti devono eseguire l'aggiornamento alla versione corretta e, per ClientCredentialsOAuthProvider e PrivateKeyJWTOAuthProvider, passare anche un argomento issuer= che indichi il server di autorizzazione previsto. Senza questo argomento, il client seguirà comunque qualsiasi endpoint fornito dal server MCP, anche nella versione corretta. Il provider deprecato RFC7523OAuthClientProvider non ha affatto l'opzione issuer=, quindi le organizzazioni dovrebbero migrare a un provider supportato. Dopo l'aggiornamento, tutte le registrazioni client OAuth memorizzate dovrebbero essere cancellate una volta, perché le registrazioni create prima della patch non sono vincolate a un servizio di accesso specifico e rimangono sfruttabili. Se un client potrebbe essersi già connesso a un server non affidabile, il suo client secret deve essere ruotato e i token attivi revocati presso il servizio di autenticazione. Sulle versioni precedenti non corrette non esiste alcuna soluzione alternativa se non quella di connettersi esclusivamente a server MCP affidabili.
I controlli sull'issuer sono stati inclusi per la prima volta nelle note di rilascio del 7 settembre per le versioni 1.30.0 e 2.2.0, elencati come modifiche al comportamento anziché come correzione di sicurezza. L'avviso formale è stato pubblicato il 28 settembre, lo stesso giorno in cui Cycode ha diffuso il suo resoconto dettagliato. L'avviso accredita otto segnalatori, incluso il ricercatore di Cycode, e afferma che non sono stati segnalati attacchi che sfruttino la falla. Per i proprietari di siti web e le aziende che si affidano ad applicazioni web, AEU Hosting offre hosting WordPress gestito con ambienti rafforzati dal punto di vista della sicurezza che aiutano a ridurre il rischio di furto di credenziali mantenendo il software e le sue dipendenze aggiornati attraverso l'applicazione proattiva di patch e il monitoraggio.
Come Proteggerti
- Aggiorna subito tutte le applicazioni che utilizzano l'SDK Python MCP alla versione 1.30.0 o 2.2.0.
- Se la tua app utilizza OAuth con i provider interessati, aggiungi l'impostazione 'issuer' per vincolare le credenziali al servizio di accesso corretto.
- Cambia il client secret e revoca tutti i token attivi per qualsiasi servizio che potrebbe essersi connesso a un server MCP non affidabile.
- Connetti le tue applicazioni basate su MCP solo a server di cui ti fidi completamente; evita di connetterti a server MCP sconosciuti o non verificati.
- Controlla regolarmente gli avvisi di sicurezza della tua applicazione e applica gli aggiornamenti non appena vengono rilasciati.
- Se stai utilizzando il provider deprecato RFC7523OAuthClientProvider, passa a un'alternativa supportata che supporti la validazione dell'issuer.
I Termini Spiegati
- MCP (Model Context Protocol) Uno standard aperto che consente alle applicazioni di intelligenza artificiale di connettersi a strumenti e fonti di dati esterni.
- SDK (Software Development Kit) Un insieme di strumenti e librerie di codice che aiuta gli sviluppatori a creare applicazioni più facilmente.
- OAuth Un metodo per concedere a siti web o applicazioni un accesso limitato ai tuoi account senza condividere la password.
- PKCE (Proof Key for Code Exchange) Una tecnica di sicurezza che impedisce a un aggressore di abusare di un codice di autorizzazione rubato richiedendo una chiave di prova unica.
- Client secret Una stringa a lungo termine, simile a una password, utilizzata da un'applicazione per dimostrare la propria identità a un servizio di accesso.
- Authorization server Il servizio che gestisce gli accessi degli utenti, verifica i permessi e rilascia token di accesso temporanei.
- Deprecated Una funzionalità obsoleta, non più consigliata e pianificata per la rimozione nelle versioni future.