CVE-2026-105636
KrytyczneCVSS 9.9Streszczenie
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.
Ocena ryzyka
Ryzyko wycieku wrażliwych danych wewnętrznych, w tym metadanych chmury, poprzez wykorzystanie przekierowań webhooków.
Rekomendacja
Zaleca się aktualizację do wersji 1.4.0 lub nowszej, która zawiera poprawkę.
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, the webhook delivery task in apps/api/plane/bgtasks/webhook_task.py calls requests.post() without allow_redirects=False and does not validate redirect targets. validate_url() blocks private, loopback, link-local, and reserved addresses in the original webhook URL, but the final URL reached after one or more redirects is not checked. A user who can create a workspace can register a webhook pointing to an attacker-controlled public endpoint that returns a 302 redirect to an internal address. The Plane worker then fetches internal resources, including cloud metadata, and stores the response body in webhook_logs, where the attacker can retrieve it through the workspace webhook-logs API. This issue is fixed in 1.4.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

