- Se descapó
- 23 de septiembre de 2026 a las 3:08 UTC
- Autor
- Kamo
- Compromit
- 6f10239
Los webhooks de llamada entrante de RingCentral fueron procesados con cero verificación: WebhookController en ruta eventos de telefonía/rema de mensajería ******************* ************* fue "return true"; // TODO, y se crearon suscripciones sin verificaciónToken para nada. El punto final es público. Cualquiera que mensajera una carga útil hecha a mano podría inyectar un texto en cualquier org, forja los eventos de cumplimiento STOP/START, desencadenar un popup de llamada entrante para un número arbitrario (fraude de peaje adyacente), o falseamiento "del" contenido mostrado a a miembro y la resolución a-numera (encontradoByByFromPhoneNumber) nunca fue objeto de un org, por lo que el número de un cliente real podría ser igualado y mostrado con el inquilino equivocado incluso por una carga útil de aspecto genuino. Arregárrate: - RingCentralWebhookProvisioner genera ahora una verificación aleatoria por instanciaToken (persistido en config-json, redactado de la API de configuración), registra suscripciones en una URL por-instancia (-instanceId=, que coincide Equipos/JustCall), y envía el token como **************** por lo que RingCentral se hace eco de nuevo como el Cabecera de Verificación-Token en cada notificación. Suscripción propia de RingCentral Apretón de manos de la propiedad de URL (el "Validation-Token" WebhookController ya ecos atrás) es intacto, es una cabecera diferente que demuestra una cosa diferente. - **************** ahora comprueba esa cabecera en constante tiempo y falla cerrado (todavía no hay token, ni cabecera, ni desajuste toda basura). - WebhookController resuelve la instancia de la Verificación-Comunto de control para pasar, y sólo entonces procesa el evento a esa instancia es org. **************** y ************* ambos ganaron un parámetro OrgId verificado: un número a-número match en un org DIFFERENTE que el webhook verificado se trata como no de propiedad, exactamente Como un número que nadie posee, nunca confiaba. - Implementar la seguridad (las 3 instancias de Ring Central en vivo no deben perder tráfico entrante): Cada pase de RingCentralWebhookProvisioner ahora reconcilia la cuenta lista de suscripción - una suscripción pre-fijo (sin casoId/token) es DELETED y reemplazado por uno verificado, por lo que los casos vivos se auto-curan dentro de los 30 de los nuevos pod convirtiéndose en líder (ya funciona en la startup cada 12h). Por la brecha antes que cura, WebhookController todavía acepta un evento sin casoId en absoluto bajo las reglas pre-fijos, sinsalidad, pero SOLO hasta 2026-10-13, y cada una usar registros un fuerte ******************* para que el retroceso sea visible y no permanente. Después de esa fecha falla cerrada como todo lo demás. Informe para el coordinador: no es necesario actuar para las 3 instancias de RingCentral en vivo. se curan automáticamente en el siguiente despliegue. Operacionalmente, vigila ************* en registros de voipservice después de esto se despliega; debería parar apareciendo en cuestión de minutos. Si todavía está apareciendo cerca de 2026-10-13, averídete por qué la suscripción de esa instancia no se curó (RingCentralJwtTokenService fallas se registran por separado) antes del corte, o se extienden ********************** Pruebas: **************** (fracasa cerrada sin ficha/cabeza/ incorrectos, acepta la cabecera simulada, insensible a la caja), ******************* (generates-persists-reuses the token; deletes a Suscripción pre-fijo y registra un reemplazo verificado; deja una corriente saludable suscripción solo), más org-scoping cajas añadidas a VoipCallEventServiceTest y VoipMessageServiceKeywordTest. Los cuatro controles de mutación: revirtiendo lo relevante El guardia gira la prueba correspondiente enrojecida, restablezándola de verde.
