CVE-2026-104961
ŚrednieCVSS 5.4Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 7 - wyżej niż 7% wszystkich znanych CVE
Streszczenie
Przed wersją 1.4.0 narzędzia Plane, uprawnienie WorkspaceOwnerPermission nie wymaga, aby użytkownik miał ustawione is_active=True podczas sprawdzania, czy jest właścicielem workspace. Dezaktywowany użytkownik może pozostać autoryzowany jako właściciel workspace i zachować dostęp na poziomie właściciela.
Ocena ryzyka
Dezaktywowani użytkownicy mogą nadal mieć pełny dostęp właściciela, co stwarza ryzyko nieautoryzowanego dostępu i naruszenia bezpieczeństwa po odejściu pracownika.
Rekomendacja
Zaktualizuj Plane do wersji 1.4.0, która wymusza sprawdzanie is_active=True przy weryfikacji właściciela workspace.
Inne podatności w Plane
Zobacz wszystkie- CVE-2026-102988Średnie
W Plane przed wersją 1.4.0 wiele punktów końcowych listy zgłoszeń, w tym nieuwierzytelnione publiczne tablice, przekazuje kontrolowany przez użytkownika parametr order_by do Django order_by bez walidacji allowlisty. Atakujący może użyć podwójnego podkreślenia do przechodzenia przez relacje i odwoływania się do dowolnych pól powiązanych modeli, ujawniając szczegóły schematu bazy danych poprzez błędy i potencjalnie ujawniając wartości pól poprzez różnicowe sortowanie. Luka naprawiona w wersji 1.4.0.
- CVE-2026-102982Wysokie
Podatność w Plane przed wersją 1.4.0 dotyczy braku sanityzacji niebezpiecznych schematów URL w komentarzach (comment_html). Członek projektu może umieścić złośliwy link w komentarzu, a skrypt atakującego wykona się w przeglądarce innego użytkownika, który kliknie link. Problem naprawiono w wersji 1.4.0.
- CVE-2026-102981Średnie
W samodzielnie hostowanych wdrożeniach Plane przed wersją 1.4.0 nieuwierzytelnione żądania GET do api/workspaces/{slug}/invitations/{pk}/join/ przez WorkspaceJoinEndpoint ujawniają tajny token zaproszenia bezpośrednio i poprzez get_invite_link. Zewnętrzny atakujący może pobrać token przeznaczony dla innego użytkownika i przesłać go do procesu akceptacji zaproszenia, dołączając do przestrzeni roboczej bez otrzymania zaproszenia i uzyskując przypisaną do niego rolę. Luka naprawiona w wersji 1.4.0.
- CVE-2026-104892Wysokie
W Plane przed wersją 1.4.0 oprogramowanie pośredniczące aPITokenLogMiddleware loguje klucze API w postaci jawnej. Umożliwia to osobie z niskimi uprawnieniami kradzież kluczy API użytkowników i dalszą eskalację uprawnień.
- CVE-2026-105641Krytyczne
Plane przed wersją 1.4.0 w manifestach deployments/aio/community/ i deployments/cli/community/ zawiera stałe, publicznie znane domyślne wartości SECRET_KEY i LIVE_SERVER_SECRET_KEY, które pozostają aktywne, gdy operatorzy ich nie nadpiszą. Znajomość SECRET_KEY umożliwia atakującym fałszowanie podpisanych przez Django wartości i kompromitację kont lub sesji. Znajomość LIVE_SERVER_SECRET_KEY omija uwierzytelnianie usługi live na niezmienionych wdrożeniach community.
- CVE-2026-105640Krytyczne
Plane przed wersją 1.4.0 ufa adresom e-mail zwracanym przez Gitea OAuth oraz przez samodzielnie zarządzane wdrożenia GitLab OAuth, gdzie potwierdzenie e-maila jest wyłączone, bez weryfikacji, czy dostawca uwierzytelnił własność adresu. Atakujący może ustawić niezweryfikowany e-mail dostawcy na adres ofiary, który Plane dopasowuje bezpośrednio do istniejącego lokalnego konta ofiary. Atakujący może następnie zalogować się na konto ofiary bez znajomości hasła. GitHub, GitLab.com i Google nie są dotknięte, ponieważ zwracają zweryfikowane adresy e-mail.
- CVE-2026-105639Krytyczne
Plane przed wersją 1.4.0 w procesie rejestracji tworzy zalogowany wiersz User dla każdego przesłanego e-maila bez weryfikacji własności poza pasmem, podczas gdy User.email jest unique=True. Uwierzytelniony użytkownik może wywołać GET /api/users/me/workspaces/invitations/, który zwraca każdą WorkspaceMemberInvite, której e-mail pasuje do request.user.email. WorkSpaceMemberInviteSerializer używa fields = "all", ujawniając token chroniący endpoint dołączania do zaproszenia. Nieuwierzytelniony atakujący znający e-mail ofiary może zarejestrować konto z tym adresem, wyliczyć oczekujące zaproszenia i zaakceptować zaproszenie jako ofiara, dołączając do workspace na zaproszonej roli.
- CVE-2026-105638Krytyczne
Plane przed wersją 1.4.0 w logowaniu przez kod magiczny używa sześciocyfrowego OTP z około 20 bitami entropii. Weryfikator nie ma licznika nieudanych prób na kod, a błędny kod nie zwiększa licznika, nie unieważnia wpisu Redis ani nie blokuje adresu e-mail. Weryfikator rozszerza django.views.View zamiast DRF APIView, więc limit AnonRateThrottle nie ma zastosowania. Stos middleware nie zawiera również ogranicznika szybkości na poziomie Django, takiego jak django-ratelimit, django-axes lub IP-throttling.
- CVE-2026-105637Krytyczne
Przed wersją 1.4.0 narzędzia Plane, endpoint ProjectBulkAssetEndpoint.post nie ograniczał zapytań o zasoby do projektu z URL-a. Gość z rolą Workspace Guest mógł podać identyfikatory UUID zasobów z innego projektu w tym samym workspace i przypisać je do encji kontrolowanej przez atakującego, co umożliwiało przejęcie plików.
- CVE-2026-105636Krytyczne
Przed wersją 1.4.0 narzędzia Plane, zadanie dostarczania webhooków nie ustawiało allow_redirects=False i nie walidowało celów przekierowań. Użytkownik z możliwością tworzenia workspace mógł zarejestrować webhook wskazujący na publiczny endpoint kontrolowany przez atakującego, który zwraca przekierowanie 302 do wewnętrznego adresu, co pozwalało na dostęp do wewnętrznych zasobów, w tym metadanych chmury.
Oryginalny opis (angielski, źródło NVD)
Plane is an open-source project management tool. Prior to 1.4.0, WorkspaceOwnerPermission does not require is_active=True when checking whether a user is a workspace owner. A deactivated user can therefore remain authorized as the workspace owner and retain owner-level access. This issue is fixed in 1.4.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

