CVE-2026-102980
ŚrednieCVSS 6.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 22 - wyżej niż 22% wszystkich znanych CVE
Streszczenie
W Plane przed wersją 1.4.0 endpoint PageVersionEndpoint w apps/api/plane/app/views/page/version.py zawęża wyszukiwanie wersji stron po identyfikatorach workspace i page, ale nie po project_id z URL. ProjectPagePermission również wyznacza rolę wywołującego na podstawie projektu z URL, jednocześnie rozwiązując żądaną stronę w całym workspace, więc członek jednego projektu może użyć identyfikatora tego projektu, aby odczytać description_html publicznej strony w innym projekcie w tym samym workspace. Ścieżka jest tylko do odczytu i nie umożliwia modyfikacji stron między projektami. Problem naprawiono w wersji 1.4.0.
Ocena ryzyka
Członek jednego projektu może odczytać zawartość publicznych stron innych projektów w tym samym workspace, co stanowi wyciek informacji mogących zawierać dane wrażliwe lub wewnętrzne.
Rekomendacja
Zaktualizuj Plane do wersji 1.4.0 lub nowszej; do czasu aktualizacji rozważ ograniczenie widoczności publicznych stron w projektach o różnym poziomie zaufania.
Inne podatności w Plane
Zobacz wszystkie- 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-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.
- CVE-2026-102986Wysokie
Plane, narzędzie do zarządzania projektami open source, w wersji 1.3.1 i wcześniejszych w punkcie końcowym /api/public/assets/v2/anchor/{anchor}/ wymaga uwierzytelnienia do operacji zapisu, ale nie weryfikuje członkostwa w przestrzeni roboczej ani projekcie. Uwierzytelniony użytkownik znający publiczny DeployBoard.anchor opublikowanego projektu może tworzyć rekordy FileAsset w tym projekcie i miękko usuwać istniejące zasoby, co umożliwia wstrzyknięcie plików między przestrzeniami roboczymi, nadużycie pamięci i utratę danych.
- CVE-2026-102985Średnie
W Plane w wersji 1.3.1 i wcześniejszych kontrola autoryzacji w ProjectMemberViewSet.partial_update znajduje się wewnątrz gałęzi aktualizacji roli, więc gość lub członek może pominąć pole role i zmienić pole is_active innego rekordu ProjectMember, w tym dezaktywować administratora projektu. Dodatkowo ProjectMemberPreferenceEndpoint.patch ufa wartości member_id ze ścieżki URL i pozwala członkowi projektu nadpisać preferencje innego członka. Luka została naprawiona w wersji 1.4.0.
Oryginalny opis (angielski, źródło NVD)
Plane is an open-source project management tool. Prior to 1.4.0, PageVersionEndpoint in apps/api/plane/app/views/page/version.py scopes page-version lookups by workspace and page identifiers but not by the project_id from the URL. ProjectPagePermission likewise derives the caller's role from the URL project while resolving the requested page workspace-wide, so a member of one project can use that project's identifier to read description_html for a public page in another project in the same workspace. The affected path is read-only and does not enable cross-project page modification. This issue is fixed in version 1.4.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

