CVE-2026-104963
ŚrednieCVSS 4.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 9 - wyżej niż 9% wszystkich znanych CVE
Streszczenie
Plane to narzędzie do zarządzania projektami typu open-source. Przed wersją 1.4.0 endpointy GET /api/workspaces/{slug}/cycles/ (WorkspaceCyclesEndpoint) i GET /api/workspaces/{slug}/modules/ (WorkspaceModulesEndpoint) zwracają rekordy ze wszystkich projektów w przestrzeni roboczej bez sprawdzania, czy wywołujący należy do każdego projektu. Każdy uwierzytelniony członek przestrzeni roboczej, w tym Gość z dostępem tylko do jednego projektu, może wyliczyć nazwy, opisy, daty sprintów, liczby problemów, migawki postępu, zewnętrzne identyfikatory integracji, powiązane URL-e i listy członków dla cykli i modułów w prywatnych projektach. Sąsiednie endpointy WorkspaceLabelsEndpoint i WorkspaceStatesEndpoint stosują odpowiedni filtr, co czyni endpointy cykli i modułów niespójnymi. Problem naprawiono w wersji 1.4.0.
Ocena ryzyka
Goście z ograniczonym dostępem mogą uzyskać szczegółowe informacje o prywatnych projektach, co narusza poufność danych.
Rekomendacja
Zaktualizuj Plane do wersji 1.4.0 lub nowszej. Ogranicz dostęp do endpointów API i monitoruj aktywność.
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, GET /api/workspaces/{slug}/cycles/ through WorkspaceCyclesEndpoint and GET /api/workspaces/{slug}/modules/ through WorkspaceModulesEndpoint return records from every project in a workspace without checking whether the requester belongs to each project. Any authenticated workspace member, including a Guest with access to only one project, can enumerate names, descriptions, sprint dates, issue counts, progress snapshots, external integration IDs, linked URLs, and member lists for cycles and modules in private projects. The sibling WorkspaceLabelsEndpoint and WorkspaceStatesEndpoint apply the correct project__project_projectmember__member=request.user filter, making the cycle and module endpoints inconsistent outliers. This issue is fixed in 1.4.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

