KamoCRM

Les configurations MCP ont besoin de MANAGE-AI-SETTINGS, les urls fournisseurs/MCP ne peuvent pas atteindre le cluster, les politiques de quotas sont appliquées

FixAIService
Expédié
23 septembre 2026 à 01:50 UTC
Auteur
Kamo
Commite
9060c7c

Trois résultats indépendants, fixés ensemble parce que les deux premiers fichiers de partage et une classe. 1. AiMcpController avait un contrôle de droite zéro sur création/mise à jour/suplet/test - tout membre signé de l'organisation pourrait implanter un serveur MCP config et McpStdioTransport de service de passerelle mcp exécute config.command avec config.envVars comme un processus OS réel (nouveau ProcessBuilder(...).start()), sur la passerelle recommence et à nouveau sur le bilan de santé des années 30. C'est un RCE sans authentifide contre escale mcp-pass-service. Chaque manipulateur de mution/test nécessite maintenant MANAGE-AI-SETTINGS, apparié AiProviderController, et STDIO se voient refuser purement et simplement une configuration créée par une organisation. locataire peut configurer SSE/HTTP seulement. (ai-mcp-server-configs a 0 lignes; aucune migration n'est nécessaire.) 2. SSRF : envoyer la clé de fournisseur déchiffrée d'une organisation pour quel que soit l'hôte dans la baseUrl et reflète la réponse, et OpenAiCompatibleAdapter (qui serve 8 des 12 types de fournisseurs) n'avait de règle d'accueil sur aucun de ses trois appels sortants. y compris le chemin réel de chat, chaque message prend, pas seulement le bouton de test manuel. Ajouté OutboundUrlGuard, construit sur le PublicHostGuard existant de la bibliothèque kamo-shared (déjà utilisé par SafeSiteFetcher et SafeImageFetcher de SecurityService pour la même classe de problèmes) : l'hôte et refuse les adresses et noms de cluster uniquement (.svc, .cluster.local, dotless), vérifiés à gain de temps AiProviderController et AiMcpContrôleur et à nouveau immédiatement avant chaque appel OpenAiCompatibleAdapter, car la réponse DNS d'un nom d'hôte à l'épargne n'est pas sa réponse pour toujours. Le refus est un 400 clair avec notre propre message - pas d'exception de réseau brut, et aucune connexion n'est a jamais tenté d'accéder à une destination refusée. 3. - userId) interrogez les enregistrements d'utilisation et ensuite, sans condition, restituée - chaque demande d'AiAccessPolicy/token limit était décorative. Le deux sites d'appels réels (ChatOrchestrationService's streaming et sync chat) résolvent maintenant tous les le rôle du membre exerce et applique la politique cartographiée de chaque rôle: un rôle sans subventions cartographiées aucune restriction ne s'y rapportant, mais elle ne peut pas non plus annuler une politique restrictive assignée par le biais d'une politique restrictive un rôle différent qu'un membre occupe également. La surcharge de 2 poids-g a disparu. Tests: AiMcpControllerAuthzTest (droits et refus STDIO et validation url), OutboundUrlGuardTest, AiProviderKeyExposureTest (2 nouveaux cas de SSRF), AccessPolicyMultiRoleTest. Chaque cas a été vérifié en rouge par rapport au code de préfixe avant cet engagement. (droits en échec, mission, contrôle sans héritage et contrôles de quotas toujours vrais, chacun réintroduit localement, un à la fois, et restauré après confirmation du test d'appariement a échoué). mcp-gateway-service obtient un commit correspondent: une liste d'autorisation STDIO indépendante (défense en profondeur, en profondeur, en cas ce contrôle est jamais contourné) et son propre contrôle avant connexion sur une url de configuration SSE/HTTP.

Tous les changements

Comme ce que tu vois expédier ?

Tout cela arrive dans votre espace de travail par lui-même. Commencez sur le plan gratuit et relisez cette page dans un mois.

Commencez gratuitement pour toujoursPrix de visualisation