CVE-2026-47127
ŚrednieCVSS 6.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 22 - wyżej niż 22% wszystkich znanych CVE
Streszczenie
Ghostfolio, oprogramowanie do zarządzania majątkiem, przed wersją 3.4.0 ma podatność w handlerze sukcesu Stripe checkout, który przyznaje subskrypcję Premium bez sprawdzania statusu płatności. Każdy uwierzytelniony użytkownik może samodzielnie przyznać sobie roczną subskrypcję Premium bez płacenia. Poprawka w wersji 3.4.0.
Ocena ryzyka
Atakujący może uzyskać nieautoryzowany dostęp do funkcji Premium, co prowadzi do strat finansowych i naruszenia integralności subskrypcji.
Rekomendacja
Zaleca się aktualizację Ghostfolio do wersji 3.4.0, która zawiera poprawkę.
Inne podatności w Ghostfolio
Zobacz wszystkie- CVE-2026-59708Wysokie
Endpoint GET /api/v1/public/:accessId/portfolio w Ghostfolio nie weryfikuje filtrowania granteeUserId, co pozwala nieuwierzytelnionym atakującym na dostęp do pełnych danych portfela za pomocą prywatnego identyfikatora dostępu.
- CVE-2026-59709Średnie
Endpoint PUT /api/v1/portfolio/holding/:dataSource/:symbol/tags w Ghostfolio nie weryfikuje pola Access.permissions podczas przetwarzania nagłówka Impersonation-Id, co pozwala użytkownikom z dostępem tylko do odczytu na modyfikowanie tagów portfela. Atakujący z ważnymi tokenami tylko do odczytu mogą przypisywać lub usuwać tagi na holdingach ofiary, zakłócając kategoryzację portfela i raporty.
Oryginalny opis (angielski, źródło NVD)
Ghostfolio is an open source wealth management software. Prior to version 3.4.0, Ghostfolio's Stripe checkout success-URL handler at `GET /api/v1/subscription/stripe/callback?checkoutSessionId=<id>` retrieves the Stripe Checkout Session by ID and unconditionally grants a Premium subscription to the session's `client_reference_id` — without ever checking `session.payment_status` or `session.status`. There is no separate Stripe webhook endpoint with `stripe-signature` verification; this callback is the sole code path that creates Stripe-driven subscriptions. Any authenticated user can self-grant a 1-year Premium subscription without ever paying. Version 3.4.0 rejects sessions unless `session.payment_status === 'paid'` AND `session.status === 'complete'` (fails closed). Additionally, new unique `stripeCheckoutSessionId` column → a session can't be redeemed twice (race-safe via DB unique constraint).
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

