- Spegnimento
- 23 settembre 2026 alle ore 08:54 UTC
- Autore
- Kamo
- Impegno
- da4e9f3
Trova 2-6 dall'audit del sistema telefonico, fissato insieme perché diversi file di condivisione. 2. HIGH — VoipInstanceController non ha avuto il giusto controllo su qualsiasi punto finale mutante Non solo il suo VOIP. amministratori, potrebbero creare, eliminare o ridefinire le credenziali di un server telefonico. Ora richiede MANAGE VOIP SETTINGS, le stesse impostazioni giuste -> Caratteristiche - > Il telefono stesso è recintato. Inoltre: platformUrl/baseUrl sono stati non validati, quindi un membro potrebbe puntare la menta di token di RingCentral (che invia il vero client di orgId/clientSecret + JWT) o un client FreePBX GraphQL presso un host delle loro credenziali di scelta e di cattura, o raggiungere la rete pod (Redis/MinIO/Yugabyte tutti rispondere non autenticato, nessun egress NetworkPolicy). Fisso con PhoneServerUrlGuard: RingCentral è ora limitato ai propri due host (produzione/sandbox); FreePBX ottiene il solo pubblico Controllo SSRF costruito su PublicHostGuard (la stessa primitiva SecurityService) SafeSiteFetcher e l'uso OutboundUrlGuard di aiservice). Sia RingCentralJwtTokenService sia Le cache di token di FreePBXTokenCache sono state chiave senza l'host, quindi un token di Bearer dal vivo coniato contro l'ospite reale sarebbe continuare a essere inviato a uno nuovo dopo una piattaformaUrl/baseUrl edit -- entrambe le chiavi della cache ora lo includono. mergeConfig non permette più una mascherata "***" giro segreto lungo un host di nuova costituzione (devo essere ri-entrato), mai unisce account server-assegnato di KamoPBXId/realm da un client, e Test Connection / sincronizzazione manuale non eco più un messaggio di eccezione raw (che potrebbe portare l'host di destinazione o un frammento di risposta al chiamante). Telnyx's apiKey aggiunto a SECRET FIELDS. 3. HIGH — Il PUT di MemberVoipConfigController ha solo controllato che il membro di destinazione era nel chiamante Org. Qualsiasi membro della firma puo' riassegnare un membro della COLLEAGUE e' un membro del gruppo. SipController.getSipCredentials consegna qualsiasi estensione è attualmente assegnata -- a account-takeover primitivo, non solo un IDOR. Ora richiede MANAGE EXTENSIONI o MANAGE VOIP SETTINGS incondizionatamente, abbinando le impostazioni proprio commento dell'interfaccia utente che l'estensione l'assegnazione è amministrata e mai self-service. istanzaId è ora anche controllato contro caller's org -- in precedenza un server telefonico da un'organizzazione diversa potrebbe essere chiamato e, se una delle sue estensioni non è stata firmata, rivendicata. 4. ALTA — Nessun controllo di destra da nessuna parte su (creare/aggiornamento/delete/ test/test-send/send), VoipDevicesController, VoipUsersController, VoipExtensionsController, VoipOrgAggregateController, OrgPhoneNumberController, MemberPhoneNumberController. La maggior parte ora richiede il diritto che lo schermo kamo-internal corrispondente stesso è gated su (MANAGE VOIP SETTINGS per l'inventario del telefono/numeri schermi, ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** assegnazione estensione). VoipOrgAggregateController's /org/voicemails inoltre richiesto VIEW VOICEMAIL specificatamente (matching VoipVoicemailController, non il default org-aggregate) e ha ottenuto la stessa chiamata di controllo trascrizione-disclosure PHI. BulkTextInstanceController's /send inviato SMS arbitrario senza il consenso in uscita / cancello di soppressione -- ora rifiuta (409) un numero il cui ultima TCPA SMS ConsentRecord è REVOKED, leggendo il WORM ledger SmsKeywordService già scrive su ogni in entrata STOP/START, inquilino-scoped in modo da un STOP a un org diverso mai blocca questo Uno. MemberPhoneNumberController è l'unica eccezione per "admin destra richiesta, periodo": diversamente da VOIP assegnazione estensione/instanza (finanza 3, nessun percorso self-service affatto da prodotto esplicito decisione -- le impostazioni del proprio commento dell'interfaccia utente lo dice), le impostazioni/membro della scheda del telefono MemberTextNumbersCard offre tutti i controlli completi di self-service (assign/remove/make-primary) sopra i loro numeri OWN senza cancello solo amministratore del proprio -- quella pagina è raggiungibile su ACCESS VOIP da solo, per proprio commento: "ACCESS * copre l'utente che gestisce le proprie impostazioni; amministratori che si configurano per conto di un membro." Quindi questo controllore ha una regola auto-or-admin invece (mirrors)********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** i loro numeri senza diritto speciale; agire su un collega richiede ancora MANAGE EXTENSIONI O MANAGE VOIP SETTINGS. Una regola di amministratore qui avrebbe 403'd ogni membro ACCESS VOIP fuori da una carta che funziona oggi. 5. MEDIUM - ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** (org id, phone canon), non (phone canon) da solo (deliberatamente, così la storia di un numero portato può esistere sotto due organizzazioni nel tempo) -- ma nulla ha fermato un org SECOND dalla creazione del suo propria fila per un numero un PRIMO org già attivamente tenuto, dal momento che ottenere()/findByNumber() sono org-scope e semplicemente non troverebbe la fila dell'altro org. salvare() ora rifiuta di creare una nuova riga quando un altro org ha già un reclamo attivo sullo stesso numero; scoperta (che chiede al fornitore essa stessa, vera prova di proprietà) è intatta. Assegnazione/dimissioni di MemberPhoneNumberService/ setPrimary/forMember validato numberId contro l'org ma mai membroId affatto -- combinato con acquisizione()'s write-through a MemberVoipConfig (preso da solo membro id), un chiamante in uno org potrebbe rinominare un vero e proprio MEMBRO del chiamante in uscita di un ORG DIFFERENTE al proprio telefono infrastrutture. richiedonoMemberInOrg è la soluzione. 6. LOW (perf) — instanceSyncService ha ri-saltato ogni estensione cache/utente/device/voicemail riga su ogni spazzata con una data urtataUpdated, anche quando il fornitore ha riferito nulla di diverso -- ~23k UPDATEs evitabili al giorno. Ognuno dei quattro metodi di sincronizzazione ora confronta ogni campo prima di scrivere esso e salva solo quando qualcosa realmente cambiato. Test: PhoneServerUrlGuardTest, E' il momento giusto. RingCentralJwtTokenServiceTest (nuovo caso), FreePBXTokenCacheTest, E' il momento giusto. E' il momento giusto. E' il momento giusto. E' il momento giusto. E' il momento giusto. (auto-servizio consentito, cross-member richiede il diritto amministrativo, entrambi i diritti accettati), ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Integrazioni solo per i diritti Sono stati verificati. per revisione del codice e compilazione full-suite piuttosto che un test dedicato per controller -- il modello è Identico e già coperto da... Ogni guardia sopra è stata controllata dalla mutazione (revertita localmente, confermata la prova corrispondente va rossa, restaurata). Tre test preesistenti VoipInstanceController E' il momento giusto. VoipInstanceJustCallIdTest, Non e' vero. predate di trovare 2 e costruito la loro sessione senza lista dei diritti a tutti; ora includono MANAGE VOIP SETTINGS in modo da esercitare ancora il comportamento per cui sono stati scritti (provisione retry, JustCall id adozione, convalida JWT-shape) piuttosto che triplicare il nuovo check giusto prima. E' il momento giusto. FreePBX caso anche scambiato un non-risolvente "pbx.example.com" segnaposto per un IP letterale, dal momento che il controllo baseUrlGuard di PhoneServerUrlGuard ora esegue una reale ricerca DNS. Rapporto per il coordinatore: nessun cambiamento di schema, nessuna modifica di configurazione, nessuna modifica di gateway necessaria per Questi sei risultati (solo la ricerca del rapporto 1 ha un follow-up operativo). Confermato contro apiservice: inoltra /api/voip/** all'ingrosso, così i risultati 2, 3, 5 e 6 non hanno bisogno di nulla lì. BulkTextInstanceController (finding 4) si trova a /api/bulktext/instances/**, che apiservice NON fa jolly (solo /api/bulktext/inbound/** è pubblico, sorvegliando l'interno X-Internal-Auth /api/bulktext/send da sempre raggiungibile da internet) -- ma mai necessario: il proprio server di kamo-internal lo raggiunge direttamente attraverso ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** gateway interamente. Niente da cambiare da entrambe le parti.
