CVE-2026-105639
KrytyczneCVSS 9.8Streszczenie
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.
Ocena ryzyka
Atakujący może dołączyć do workspace'ów ofiary bez jej zgody, co prowadzi do nieautoryzowanego dostępu do danych i naruszenia integralności.
Rekomendacja
Należy zaktualizować Plane do wersji 1.4.0 lub nowszej oraz wdrożyć weryfikację własności e-maila przed utworzeniem konta.
Inne podatności w Plane
Zobacz wszystkie- CVE-2026-105635Wysokie
Plane to narzędzie do zarządzania projektami o otwartym kodzie źródłowym. Przed wersją 1.4.0 endpoint ProjectJoinEndpoint w GET /api/workspaces/{slug}/projects/{project_id}/join/{pk}/ używa permission_classes = [AllowAny] i zwraca pełny rekord ProjectMemberInvite, w tym adres e-mail, token i rolę, nieuwierzytelnionym wywołującym. Odpowiadający endpoint POST sprawdza tylko, czy przesłany e-mail zgadza się z project_invite.email i nie weryfikuje tokena zaproszenia. Atakujący, który zna UUID zaproszenia, może odkryć zaproszony e-mail, zarejestrować konto z tym adresem i zaakceptować zaproszenie bez otrzymania oryginalnego zaproszenia. Problem został naprawiony w wersji 1.4.0.
- CVE-2026-105634Wysokie
Plane to narzędzie do zarządzania projektami o otwartym kodzie źródłowym. Przed wersją 1.3.0 metoda ProjectMemberViewSet.partial_update pozwala każdemu członkowi projektu, w tym użytkownikowi z najniższą rolą GUEST, na modyfikację roli innego członka projektu. Kontrola autoryzacji zapobiega przypisaniu roli wyższej niż rola żądającego, ale nie zapobiega przypisaniu roli niższej lub równej, co pozwala Gościowi zdegradować Administratorów i Członków oraz pozbawić ich kontroli nad projektem. Podatność została naprawiona w wersji 1.3.0.
- CVE-2026-105633Wysokie
W Plane przed wersją 1.4.0 endpoint PATCH dla załączników zgłoszeń V2 przyjmuje issue_id w adresie URL, ale pomija go w zapytaniu do bazy danych. Członek projektu może podać własny issue_id w URL, a mimo to zmodyfikować załącznik innego użytkownika, dopasowując go po UUID (pk). Gdy załącznik jest w stanie oczekującym, procedura PATCH ustawia created_by na atakującego i przenosi własność załącznika.
- CVE-2026-105632Wysokie
W Plane przed wersją 1.4.0 mutacja GraphQL joinProject pozwala dowolnemu członkowi przestrzeni roboczej dodać się do dowolnego projektu w tej przestrzeni, w tym do projektów oznaczonych jako sieć=0 (tajne/prywatne), do których nie został zaproszony, i przyznaje mu pełną rolę Member (odczyt i zapis). Resolver sprawdza tylko członkostwo i rolę na poziomie przestrzeni roboczej, nigdy nie weryfikuje widoczności (network) docelowego projektu. Prowadzi to do zniesienia izolacji projektów w ramach przestrzeni roboczej.
- CVE-2026-105631Wysokie
W Plane przed wersją 1.4.0 endpointy WorkspaceFileAssetEndpoint.get i WorkspaceAssetDownloadEndpoint.get rozwiązują rekordy FileAsset w przestrzeni roboczej bez sprawdzania członkostwa w projekcie zasobu, co pozwala członkowi przestrzeni pobierać zasoby z prywatnych projektów, jeśli zna UUID zasobu. EntityAssetEndpoint.get to osobny publiczny endpoint z dostępem AllowAny, który ogranicza wyszukiwanie tylko do przestrzeni roboczej kotwicy, a nie do jej opublikowanej encji lub projektu. Nieuwierzytelniony wywołujący znający prawidłową kotwicę i UUID zasobu może pobrać zasoby opisów zgłoszeń lub komentarzy należące do nieopublikowanych lub prywatnych projektów w tej przestrzeni.
- CVE-2026-105630Wysokie
W Plane przed wersją 1.4.0 uwierzytelniony członek przestrzeni roboczej o niskich uprawnieniach, w tym Gość, może przesłać plik image/svg+xml jako załącznik ogólny lub do zgłoszenia. Plik zachowuje kontrolowany przez atakującego nagłówek Content-Type, a endpoint pobierania zasobów tworzy presigned URL z Content-Disposition: inline. W domyślnym wdrożeniu self-hosted MinIO adres URL zasobu jest serwowany z tej samej domeny co aplikacja Plane, co pozwala na wykonanie osadzonego JavaScriptu SVG w kontekście bezpieczeństwa aplikacji. Ofiara, w tym administrator przestrzeni roboczej, otwierając link, może mieć przejętą sesję poprzez stored XSS, co prowadzi do przejęcia konta.
- CVE-2026-105629Wysokie
W Plane przed wersją 1.4.0 BulkEstimatePointEndpoint.destroy rozwiązuje punkt estymacji poprzez bezpośrednie wyszukiwanie po kluczu głównym, bez ograniczenia do przestrzeni roboczej, projektu lub estymacji. Administrator lub członek jednej przestrzeni roboczej może trwale usunąć punkt estymacji należący do innej przestrzeni, podając docelowy UUID w adresie URL w ramach własnej przestrzeni. Tworzy to destrukcyjny cross-tenant IDOR.
- CVE-2026-105628Wysokie
W Plane przed wersją 1.4.0 proces synchronizacji awatarów OAuth pobiera avatar_url z danych użytkownika dostawcy poprzez żądanie HTTP po stronie serwera bez walidacji wewnętrznych adresów IP i domyślnie podąża za przekierowaniami. Atakujący może podać adres URL awatara, który przekierowuje do zasobu wewnętrznego, takiego jak endpoint metadanych, a Plane przesyła pobraną odpowiedź jako plik awatara użytkownika. Obiekt jest następnie udostępniany przez /api/assets/v2/static/{asset_id}/, co pozwala na eksfiltrację wewnętrznie pobranej treści.
- CVE-2026-104979Wysokie
W Plane (open-source narzędzie do zarządzania projektami) w wersjach przed 1.4.0 występuje podatność XSS. IntakeIssuePublicViewSet.create w wersji 1.3.1 zapisuje description_html bez walidacji przy użyciu validate_html_content z nh3. Uwierzytelniony użytkownik może umieścić dowolny HTML w projekcie z opublikowanym DeployBoard i włączonym intake, a po kliknięciu przez ofiarę następuje wykonanie JavaScriptu i kradzież tokenu API.
- CVE-2026-104978Wysokie
W Plane (open-source narzędzie do zarządzania projektami) w wersjach przed 1.4.0 endpoint listy zaproszeń projektowych jest dostępny dla każdego uwierzytelnionego użytkownika znającego slug workspace i ID projektu. Publiczny endpoint akceptacji zaproszenia przyjmuje zaproszenie na podstawie podanego adresu e-mail. Atakujący może wyliczyć zaproszenie, zarejestrować konto na zaproszony e-mail bez weryfikacji skrzynki i zaakceptować zaproszenie, dodając swoje konto do workspace i projektu.
Oryginalny opis (angielski, źródło NVD)
Plane is an open-source project management tool. Prior to 1.4.0, Plane's signup flow creates a logged-in User row for any submitted email without an out-of-band ownership check, while User.email is unique=True. The authenticated user can call GET /api/users/me/workspaces/invitations/, which returns each WorkspaceMemberInvite whose email matches request.user.email. WorkSpaceMemberInviteSerializer uses fields = "all", exposing the token that protects the invitation join endpoint. An unauthenticated attacker who knows a target's email can register an account using that address, enumerate pending invitations, and accept an invitation as the target, joining a workspace at the invited role. The term pre-auth describes the attacker's initial state: the attacker has no credential before signup, while the enumeration and join requests use the session created by that signup. This issue is fixed in 1.4.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

