- Se descapó
- 23 de septiembre de 2026 a las 1:50 UTC
- Autor
- Kamo
- Compromit
- 9060c7c
Tres hallazgos independientes, arreglados juntos porque los dos primeros archivos de acciones y una clase. 1. AiMcpController tuvo cero comprobaciones correctas en la creación/actualización/borrar/test. la organización podría plantar una configuración de servidor MCP, y Mcp-gate-way-service McpStdioTransport ejecuta config.command con config.envVars como un verdadero proceso de sistema operativo (nuevo ProcessBuilder (nuevo ProcessBuilder(...).start()), en la puerta de entrada comienza y de nuevo en cada 30s de la salud. Eso no es autenticado RCE contra mcp-gate-way-service. Cada manipulador mutante/prueba ahora requiere MANAGE-AI-SETTINGS, que coincidía con AiProviderController, y STDIO se niegan rotundamente para una configuración creado por la organización. El inquilino puede configurar SSE/HTTP solamente. (ai-mcp.server-configs tiene 0 filas; no es necesario la migración.) 2. SSRF: **************** envió la clave del proveedor descifrado de una organización a cualquier anfitrión fuera en baseUrl y reflejó la respuesta, y OpenAiCompatibleAdapter (que sirve a 8 de los 12 tipos de proveedores) no tenía ninguna regla de huésped en ninguna de sus tres llamadas salientes. incluyendo el verdadero camino de chat que cada mensaje toma, no sólo el botón de prueba manual. Añadido OutboundUrlGuard, construido sobre el actual PublicHostGuard de la biblioteca compartida de kamo (ya utilizado por SecurityService's SafeSiteFetcher and SafeImageFetcher para la misma clase de problema): resuelve el anfitrión y se niega **************** direcciones y Nombres solo clúster (*.svc, *.cluster.local, sin puntos), comprobados en tiempo de espera en AiProviderController y AiMcpController una y otra vez inmediatamente antes de cada llamada OpenAiCompatibleAdapter, ya que la respuesta DNS de un hostname en el tiempo de ahorro no es su respuesta para siempre. La negativa es un 400 liso con nuestro propio mensaje. No hay excepción de red en bruto, y ninguna conexión es alguna vez intentó un destino rechazado. 3. ************* usuarioId) preguntó los registros de uso y luego, incondicionalmente, devuelto verdadero.Toda la petición/límite simbólico de AiAccessPolicy era decorativo. El dos sitios de llamada real (ChatOrchestrationSertorservice's streaming and sync chat) ahora resuelven cada El papel que el miembro ocupa y hace cumplir la política mapeada de cada rol: un papel sin subvenciones de política mapeadas no hay restricción propia, pero tampoco puede cancelar una política restrictiva asignada a través de un diferente papel que un miembro también tiene. La desperdiciada sobrecarga de 2 cerdas se ha ido. Pruebas: AiMcpControllerAuthzTest (derechos de rechazo de STDIO - Validación url), OutboundUrlGuardTest, AiProviderKeyExposureTest (2 nuevos estuches SSRF), ************* AccessPolicyMultiRoleTest. Cada caso fue verificado en rojo contra el código prefijo antes de este commit (derechos de entrada libre, control de la competencia, de guardia defectuosos y de cuota siempre verdaderas y controles de cuotas siempre reintroducidos localmente, uno a la vez, y restaurado después de confirmar la prueba de coincidencia falló). servicio de pasarela mcp-gate obtiene una confirmación a juego: una lista de autorización de STDIO independiente (defensa en profundidad, en caso este cheque se evita jamás) y su propia comprobación de sesión antes de la conexión en un url de la configuración de SSE/HTTP.
