KamoCRM

Controale la dreapta, SRF/garzi de încredere și remedieri încrucişate în cadrul VOIP

FixVOIPService
Expediere
23 septembrie 2026 la 08:54 UTC
Autor
Kamo
Comite
da4e9f3

Constatări 2-6 din auditul telefon-sistem, stabilite împreună, deoarece mai multe fișiere de partajare. 2. Înălţime ***************** orice membru al orgului, nu doar VOIP-ul său administratori, ar putea crea, șterge sau redirecționa acreditările unui server telefonic. Acum cere MANAGE VOIP SETTINGS, aceleași setări dreapta -> Caracteristici - > Telefonul în sine este deschis. De asemenea: platformaUrl/baseUrl au fost nevalidate, astfel încât un membru ar putea puncta menta jeton RingCentral (care trimite clientul real al orgId/clientSecret + JWT) sau un client FreePBX GraphQL la o gazdă de alegerea și capturarea acreditărilor lor, sau ajunge la rețeaua pod (Redis/MinIO/Yugabyte toate răspuns neautentic, nici o ieșire NetworkPolicy). Fixed with PhoneServerUrlGuard: RingCentral is Acum se limitează la propriile sale două gazde (producție/sandbox); FreePBX primește numai publicul larg Verificare SSRF construit pe kamo-shared-library publicHostGuard (același serviciu primitiv de securitate SafeSiteFetcher și utilizarea aiservice's OutboundUrlGuard). Ambele RingCentralJwtTokenService și Cache-uri de jetoane FreePBXToken Cache au fost tastate fără gazdă, astfel încât un purtător live token mented împotriva gazdei reale ar continua să fie trimise la unul nou după o platformăUrl/baseUrl editare - Ambele chei cache includ acum. fuzionConfig nu mai permite o plimbare secretă mascată "***" gazda nou stabilită (trebuie reintrată), nu fuzionează niciodată serverul KamoPBX cu contul alocatId/realm din un client, și Test Connection / sincronizare manuală nu mai ecou un mesaj de excepție brută (care ar putea transporta gazda de destinație sau un fragment de răspuns înapoi la apelantului). Telnyx apiKey adăugat la Secrete. 3. PESTE org. Orice membru care s-a înscris ar putea să-şi resemneze un coleg. SipController.getSipCredentials hands back whatever extension is nowed -- a același-org cont-preluarea primitivă, nu doar un IDOR. Acum necesită MANAGEMENT EXTENSIONS sau MANAGEMENT VOIP SETTINGS necondiționat, potrivirea setărilor IU propria comentariu că extensie Datoria este administrata si niciodata nu se autoserveste. De asemenea, în prezent, se verifică dacă org-ul apelantului -- anterior un server telefonic dintr-o organizaţie diferită ar putea fi numit şi, dacă Una dintre extinderile sale s-a întâmplat să fie nealocată, susţinută. 4. ŞI nu există controale corecte nicăieri pe: ***************** (creare/actualizare/ştergere/ test/test-send/send), VoipDevicesController, VoipUsersController, VoipExtensionsController; VoipOrgAggregateController, OrgPhoneNumberController, MemberPhoneNumberController. Majoritatea acum necesită dreptul ca ecranul kamo-intern corespunzător să fie deschis (MANAGE VOIP SETTINGS) pentru inventarul telefonului/elevilor de numere, ******************* pentru asignare de extensie). VoipOrgAggregateController /org/voicemail-uri suplimentare necesare VECHI VOICEMAIL specific (potrivirea VoipVoicemailController, nu org-extract) și a obținut același apel de audit privind transcriptarea. BulkTextController's /send end SMS arbitrar fără consimţământ/poartă de restricţie -- refuză acum (409) un număr al cărui Ultimul TCPA SMS ConsimțământRecord este REVOKED, citind registrul WORM SmsKeywordService deja scrie pe fiecare STOP / START de intrare, chiriaș-scop astfel încât un stop la un alt org nu blochează acest lucru Unu. MemberPhoneNumberController este singura excepție la "admin dreapta necesară, perioadă": spre deosebire de VOIP Extindere/atribuire de ședere (găsirea 3, nicio cale de self-service prin produs explicit Hotărîre -- comentariul propriu al UI spune acest lucru), setări/membru Telefon fila MemberTextNumbersCard oferă tuturor telespectatorilor controale complete de self-service (asign/remove/make-primar) peste numerele lor proprii cu nici o poartă admin-numai proprie - că pagina este accesibil pe ACCES VOIP singur, pe propriul comentariu: "ACCESS * acoperă utilizatorul care gestionează propriile setări; MANAGE * acoperă administratori configurând în numele unui membru." Deci, acest controler a primit o regulă auto-sau-admin în schimb (Oglinzi ************* forma existentă): un membru gestionează propriile lor numere fără niciun drept special; acţionând pe seama unui coleg necesită încă MANAGEMENT EXTENSIONS sau MANAGE VOIP Settings. O regulă numai-admin aici ar avea 403'd fiecare membru acces VOIP numai dintr-o carte care funcționează astăzi. 5. MEDIU *********************** indexul unic pe ORG PHONE NUMBER este (org id, telefon canon), nu numai (telefon canon) (în mod deliberat, astfel încât istoria unui număr portat poate există sub două organizații în timp) -- dar nimic nu a oprit o a doua org de la crearea acesteia rândul propriu pentru un număr pe care primul org l-a deținut deja în mod activ, deoarece obține ()/găseșteByNumber() sunt org-scoped şi pur şi simplu nu ar găsi rândul celeilalte orgi. salvează() refuză acum să creeze un nou rând atunci când un alt org are deja o cerere activă asupra aceluiași număr; descoperire (ceea ce cere furnizorului nu este atins. Atribuirea/inssignul serviciului telefonic membru/ setPrimary/forMember valided numberId against the org but never memberId at all -- combination cu atribuirea () scrierii către MemberVoipConfig (prevăzută numai de membrul ID), un apelant într-un singur org ar putea redirecţiona un membru real al unui apelant outbound diferit lui Id la propriul telefon infrastructura. Necesită membruInOrg este fix. 6. LOW (perf) fiecare matura cu o data lovitUpdated, chiar și atunci când furnizorul raportat nimic diferit - ~23k UPDATEs evitabile/zi. Fiecare dintre cele patru metode de sincronizare compară acum fiecare câmp înainte de a scrie şi salvează doar când ceva s-a schimbat. Teste: TelefonServerUrlGuardTest, *************** Nu-ţi face griji. RingCentralJwtTokenserviceTest (nou caz), FreePBXTokenCacheTest, *************** Nu-ţi face griji. Nu-ţi face griji. Nu-ţi face griji. - Nu. - Nu. (Self-service permised, cross-member cere dreptul de admin, ambele drepturi acceptate), *************** Totaluri numai pentru drepturi Au fost verificate. prin revizuire cod și compilare full-suite mai degrabă decât un test dedicat per controler - modelul este Sunt identice şi deja acoperite de ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* Fiecare gardian de mai sus a fost verificat mutație (reversat local, confirmat testul de potrivire merge roșu, restaurat). Trei teste VoipIntroducere pre-existentă Nu-ţi face griji. VoipInstance Just CallIdTest, - Nu. data anterioară constatării 2 și a construit sesiunea fără nicio listă de drepturi; ele includ acum MANAGE VOIP SETTINGS astfel încât acestea încă exercită comportamentul pentru care au fost scrise (preluând retry, JustCall id adoption, JWT-forma de validare) mai degrabă decât împiedicarea noua verificare dreapta primul. Nu-ţi face griji. Cazul FreePBX a schimbat, de asemenea, un locador "pbx.exemplu.com" nerezolvant pentru un IP literal, deoarece PhoneServerUrlGuard's baseUrl check acum efectuează o căutare DNS reală. Raport pentru coordonator: nici o schimbare schema, nici o schimbare de configurare, nici o schimbare de poarta necesare pentru aceste șase constatări (doar găsirea raportului 1 are o monitorizare operațională). Confirmat împotriva apiservice: it forwards /api/voip/** en-gros, so conclusions 2, 3, 5 and 6 need nothing there. BulkTextController (găsirea 4) se află la /api/bulktext/instances/**, care apiservice în mod deliberat NU wildcard (numai /api/bulktext/inbound/** este public, paza intern X-Normal-Auth /api/bulktext/send from ever been reacable from the internet) -- but it never necesare pentru: propriul server kamo-internal ajunge direct prin ***************** care se apropie de VOIPSERVICE URL, ocolind publicul Poartă în întregime. Nimic de schimbat de ambele părţi.

Toate modificările

Ca ceea ce vezi de transport maritim?

Toate acestea ajung în spațiul de lucru pe cont propriu. Începeți cu planul gratuit și citiți această pagină din nou într-o lună.

Pornește gratuit pentru totdeaunaVezi prețurile