CVE-2026-105763
KrytyczneCVSS 9.6Streszczenie
Twenty to platforma CRM o otwartym kodzie źródłowym. Od wersji 1.20.10 do 2.7.0 zapytanie GraphQL /metadata connectedAccounts zwracało connectionParameters z ConnectedAccountDTO dla każdego konta w przestrzeni roboczej, w tym hasła IMAP, SMTP i CalDAV w postaci jawnego tekstu, ponieważ pole nie było ukryte, a wyszukiwanie nie wymuszało tożsamości ani widoczności konta. Zwykły członek przestrzeni roboczej mógł uzyskać poświadczenia usług zewnętrznych innych członków i wykorzystać je do dostępu do poczty lub kalendarzy oraz potencjalnie zresetować konta osób trzecich. Przestrzenie robocze korzystające wyłącznie z OAuth Google i Microsoft nie były dotknięte. Problem naprawiono w wersji 2.7.0.
Ocena ryzyka
Ujawnienie haseł do usług zewnętrznych (IMAP, SMTP, CalDAV) może prowadzić do nieautoryzowanego dostępu do skrzynek pocztowych i kalendarzy pracowników, a także do eskalacji uprawnień i przejęcia kont.
Rekomendacja
Zaleca się natychmiastowe zaktualizowanie Twenty do wersji 2.7.0 lub nowszej, która usuwa tę podatność. Dodatkowo należy rozważyć rotację wszystkich poświadczeń, które mogły być narażone.
Inne podatności w Twenty
Zobacz wszystkie- CVE-2026-73069Krytyczne
Twenty przed wersją 2.15.0 pozwala administratorowi z uprawnieniem DATA_MODEL na dostarczenie niesprawdzonego wyrażenia dla pola TS_VECTOR, co prowadzi do wstrzyknięcia SQL i wykonania dowolnych zapytań PostgreSQL jako użytkownik aplikacji.
- CVE-2026-85055Wysokie
Twenty to otwarta platforma CRM. Przed wersją 2.22.0 uprawnienia do odczytu na poziomie pola są egzekwowane dla wybranych pól wyjściowych, ale nie dla predykatów filtrów GraphQL lub REST. Członek przestrzeni roboczej lub klucz API z uprawnieniem do odczytu obiektu, ale bez dostępu do konkretnego pola, może odwołać się do tego pola w filtrach bezpośrednich, relacyjnych lub zapisanych, a wynikowe totalCount i obecność wierszy ujawniają, czy zgadywane wartości pasują do rzeczywistej kolumny, tworząc wyrocznię boolean/count.
- CVE-2026-92771Średnie
Twenty w wersjach przed 2.35.0 nie waliduje uprawnień do pól i wierszy w resolverze GraphQL groupBy-with-records, co pozwala uwierzytelnionym użytkownikom obejść kontrole uprawnień. Atakujący z uprawnieniem canReadObjectRecords, ale bez canReadFieldValue, może odczytać zastrzeżone wartości pól przez resolver groupBy, które normalnie byłyby zablokowane.
- CVE-2026-82274Średnie
Twenty do wersji 2.35.0 zawiera podatność na otwarte przekierowanie w punkcie końcowym OAuthPropagatorController.propagateOAuthCallback, który traktuje parametr state jako adres URL przekierowania. Atakujący mogą tworzyć złośliwe żądania, aby przekierować użytkowników na dowolne hosty, jednocześnie przekazując kody autoryzacji OAuth, omijając walidację domeny, gdy IS_MULTIWORKSPACE_ENABLED jest wyłączone.
- CVE-2026-33975Wysokie
Twenty (CRM open source) w wersjach 1.18.0 i wcześniejszych ma podatność SSRF, w której ochrona w SecureHttpClientService może być ominięta przez użycie adresów IPv4 zamapowanych na IPv6 w literałach IP URL. Node.js normalizuje takie adresy do skompresowanej postaci szesnastkowej, ale funkcja isPrivateIp rozpoznaje tylko notację dziesiętną z kropkami.
Oryginalny opis (angielski, źródło NVD)
Twenty is an open-source CRM (customer relationship management) platform. From 1.20.10 until 2.7.0, the /metadata GraphQL connectedAccounts query returned connectionParameters from ConnectedAccountDTO for every connected account in a workspace, including plaintext IMAP, SMTP, and CalDAV passwords, because the field was not hidden and the lookup did not enforce the calling user's identity or account visibility. A normal workspace member could obtain other members' external-service credentials and use them to access mail or calendars and potentially reset third-party accounts. Google and Microsoft OAuth-only workspaces were not affected. This issue is fixed in version 2.7.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

