- Spegnimento
- 23 settembre 2026 alle ore 03:08 UTC
- Autore
- Kamo
- Impegno
- 6f10239
I webhook di RingCentral sono stati elaborati con zero verifica: WebhookController ha diretto gli eventi di telefonia/message-store direttamente in E' il momento giusto. E' il momento giusto. era `return true; // TODO`, e gli abbonamenti sono stati creati senza verificaToken Per niente. Il punto finale è pubblico. Chiunque abbia fatto un carico utile artigianale potrebbe iniettare testo in qualsiasi org, forge eventi di conformità STOP/START, attivare un popup in entrata per un numero arbitrario (toll-fraud adiacente), o spoof "da" contenuto mostrato a membro — e la risoluzione al numero («findByFromPhoneNumber») non è mai stata portata a termine un org, quindi un numero reale del cliente potrebbe essere abbinato e mostrato al inquilino sbagliato anche da un carico reale. Fisso: - RingCentralWebhookProvisioner genera ora una verifica casuale per-instanceToken (persisted in config json, redatta dalle impostazioni API), registra gli abbonamenti in un URL per-instance (`?instanceId=`, corrispondente Teams/JustCall), e invia il token Percio' RingCentral riecheggia come il Intestazione `Verification-Token` su ogni notifica. L'abbonamento di RingCentral URL-proprietà handshake (il `Validation-Token` header WebhookController già echi indietro) è intoccato — che è un intestazione diverso che dimostra una cosa diversa. Ora controlla l'intestazione in modo costante. tempo e fallisce chiuso (non token ancora, nessun intestazione, o un errore tutti rifiutano). - WebhookController risolve l'istanza da `?instance Id=`, richiede Verifica-Token di passare, e solo allora elabora l'evento — mirato a L'istanza e' org. E' una cosa che non va. ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** match in un org DIFFERENTE rispetto al webhook verificato è trattato come unowned, esattamente come un numero che nessuno possiede, mai fidato. - Sicurezza di distribuzione (le 3 istanze live RingCentral non devono perdere il traffico in entrata): ogni passaggio di RingCentralWebhookProvisioner ora riconcilia l'effettivo conto elenco degli abbonamenti — abbonamento prefisso (non istanzaId/token) è DELETED e sostituito con una verificata, quindi live istanze self-heal entro ~30 del nuovo pod diventando leader (è già in fase di avvio + ogni 12h). Per il gap prima che guarisce completa, WebhookController accetta ancora un evento senza istanzaId a tutti sotto il prefisso, regole non arrotolate — ma SOLO fino al 2026-10-13, e ogni Usa i registri ad alta voce. linea in modo che il fallback è visibile e non permanente. Dopo quella data non si chiude come tutto il resto. Relazione per il coordinatore: nessuna azione necessaria per le 3 istanze live RingCentral — guariscono automaticamente sulla prossima distribuzione. Operativamente, cerca di ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** smettere di apparire in pochi minuti. Se appare ancora vicino al 2026-10-13, scoprilo perché l'abbonamento di quell'istanza non è stato guarito (RingCentralJwtTokenService guasti sono registrati separatamente) prima del taglio, o estendere E' il momento giusto. Test: Non e' vero. (rivestimenti chiusi senza token/header/ token sbagliato, accetta il token corrispondente, intestazione caso insensibile), E' il momento giusto. (genera+persists+riutilizza il token; cancella un abbonamento prefisso e registra una sostituzione verificata; lascia una corrente sana abbonamento da solo), più i casi di org-scoping aggiunti a VoipCallEventService Test e VoipMessageServiceKeywordTest. Tutte e quattro le mutazioni-controllate: ripristinare il relativo guardia gira il test corrispondente rosso, ripristinandolo diventa verde.
