- Spegnimento
- 23 settembre 2026 alle ore 01:50 UTC
- Autore
- Kamo
- Impegno
- 9060c7c
Tre risultati indipendenti, fissati insieme perché i primi due file di condivisione e una classe. 1. AiMcpController aveva zero controlli giusti su creazione/aggiornamento/determinazione/test — qualsiasi membro sottoscritto l'organizzazione potrebbe installare una configurazione server MCP e Mcp-gateway-service's McpStdioTransport esegue config.command con config.envVars come processo operativo reale (nuovo ProcessBuilder(...).start()), su gateway inizio e di nuovo su ogni controllo sanitario 30s. Questa è la RCE non autenticata contro mcp-gateway-service. Ogni operatore mutante/test richiede ora MANAGE AI SETTINGS, corrispondente AiProviderController, e STDIO viene rifiutato in modo definitivo per una configurazione creata dall'organizzazione — una inquilino può configurare solo SSE/HTTP. (ai mcp server configs ha 0 righe; nessuna migrazione necessaria.) 2. SSRF: ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** qualsiasi host fosse in baseUrl e riflesse la risposta, e OpenAiCompatibleAdapter (che serve 8 dei 12 tipi di fornitori) non aveva alcuna regola host su una delle sue tre chiamate in uscita — incluso il percorso di chat reale ogni messaggio prende, non solo il pulsante Test manuale. Aggiunto OutboundUrlGuard, costruito sull'esistente PublicHostGuard (già utilizzato da SafeSiteFetcher e SafeImageFetcher di SecurityService per la stessa classe di problemi): risolve l'ospite e rifiuta gli indirizzi e gli indirizzi. nomi di cluster-only (*.svc, *.cluster.local, dotless), controllati al momento di risparmiare AiProviderController e AiMcpController e di nuovo immediatamente prima di ogni chiamata OpenAiCompatibleAdapter, dal momento che la risposta DNS di un nome host al momento del salvataggio non è la sua risposta per sempre. Il rifiuto è un semplice 400 con il nostro messaggio — nessuna eccezione di rete grezza e nessuna connessione è mai tentato di una destinazione rifiutata. E poi... incondizionatamente, restituito vero — ogni richiesta di AiAccessPolicy / limite di token era decorativo. The due veri siti di chiamata (camere di streaming e sincronizzazione di Chat OrchestrationService) ora risolvere ogni ruolo che il membro detiene e far rispettare la politica mappata di ogni ruolo: un ruolo senza sovvenzioni politiche mappate Non vi è alcuna restrizione, ma non può anche annullare una politica restrittiva assegnata attraverso una ruolo diverso che un membro può anche tenere. Il sovraccarico sprecato a 2 corde e' sparito. Test: AiMcpControllerAuthzTest (diritti + rifiuto STDIO + validazione url), OutboundUrlGuardTest, AiProviderKeyExposureTest (2 nuovi casi SSRF) AccessPolicyMultiRoleTest. Ogni caso è stato verificato rosso contro il codice prefisso prima di questo commit (diritti aperti, fiducia del corpo, controllo delle quote e controlli sempre veri e propri ogni reintrodotto a livello locale, uno alla volta, e restaurato dopo aver confermato il test di corrispondenza fallito). mcp-gateway-service ottiene un commit corrispondente: un ammissibile STDIO indipendente (difesa in profondità, in caso questo controllo è mai bypassato) e il proprio controllo di prima connessione su un URL di configurazione SSE/HTTP.
