CVE-2026-88003
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 20 - wyżej niż 20% wszystkich znanych CVE
Streszczenie
InvoicePlane to samodzielnie hostowana aplikacja open source do zarządzania fakturami, klientami i płatnościami. Przed wersją 1.7.2 InvoicePlane nie odwołuje uprawnień administracyjnych po obniżeniu roli, ponieważ Admin_Controller ufa zrzutowi user_type przechowywanemu w istniejącej sesji zamiast ponownie weryfikować ip_users.user_type. Gdy jeden administrator obniża rolę innego konta, aktywna sesja obniżonego użytkownika nadal autoryzuje żądania administracyjne. Obniżony użytkownik może użyć Users::form() do ustawienia user_type z powrotem na 1, przywracając rolę w bazie danych i czyniąc eskalację uprawnień trwałą. Podatność naprawiono w wersji 1.7.2.
Ocena ryzyka
Ryzyko trwałej eskalacji uprawnień, umożliwiającej obniżonemu użytkownikowi odzyskanie dostępu administracyjnego i pełną kontrolę nad aplikacją.
Rekomendacja
Zaleca się aktualizację InvoicePlane do wersji 1.7.2 lub nowszej oraz wdrożenie mechanizmów ponownej weryfikacji uprawnień w sesjach.
Inne podatności w InvoicePlane
Zobacz wszystkie- CVE-2026-85293Średnie
W InvoicePlane w wersji 1.7.2-beta-1 wartość client_email jest przechowywana bez sprawdzania składni adresu e-mail i wyświetlana bez escape'owania wewnątrz atrybutów z podwójnymi cudzysłowami w formularzach mailerów. Administrator, który może edytować klienta, może zapisać dane łamiące atrybuty, a gdy mailer jest skonfigurowany, JavaScript wykonuje się po otwarciu strony mailera przez innego administratora. Problem naprawiono w wersji 1.7.2.
- CVE-2026-85292Średnie
Przed wersją 1.7.2 w InvoicePlane kontroler User_Controller porównuje wartość user_type z sesji z wymaganą rolą za pomocą luźnego operatora nierówności PHP. W niestandardowym backendzie sesji, który zwraca niespodziewane typy skalarne, type juggling może spowodować, że wartość nie będąca ściśle wymaganą rolą przejdzie kontrolę autoryzacji. Problem naprawiono w wersji 1.7.2.
- CVE-2026-85291Średnie
Przed wersją 1.7.2 w InvoicePlane metoda Users::change_password() przyjmuje user_id z URL i aktualizuje hasło tego konta bez autoryzacji na poziomie obiektu. Uwierzytelniony administrator drugorzędny może zmienić hasło konta administratora głównego bez znajomości obecnego hasła, a następnie przejąć konto i uzyskać jego dane oraz uprawnienia. Problem naprawiono w wersji 1.7.2.
- CVE-2026-85289Średnie
Przed wersją 1.7.2 w InvoicePlane brakuje walidacji tokena CSRF w metodach usuwania, takich jak Payments::delete(), Recurring::delete() i User_clients::delete(). Mimo że trasy wymagają metody POST, nie sprawdzają tokena CSRF. Atakujący może wysłać formularz z innego origin przez przeglądarkę uwierzytelnionego administratora, aby usunąć dane finansowe i inne rekordy. Problem naprawiono w wersji 1.7.2.
- CVE-2026-85274Średnie
Przed wersją 1.7.2 w InvoicePlane trasa Recurring::stop() jest dostępna przez GET i nie waliduje tokena CSRF. Gdy uwierzytelniony administrator załaduje treść kontrolowaną przez atakującego, która żąda /invoices/recurring/stop/{id}, aplikacja zatrzymuje wybraną fakturę cykliczną. Atakujący może celować w wiele identyfikatorów, przerywając cykliczne rozliczenia i powodując straty finansowe. Problem naprawiono w wersji 1.7.2.
- CVE-2026-54790Średnie
Przed wersją 1.7.2 w InvoicePlane wartość custom_field_table jest przechowywana bez sprawdzania zgodności z dozwolonymi nazwami tabel pól niestandardowych. Metoda Mdl_custom_fields::used() później konkatenuje tę wartość w pozycje identyfikatorów tabeli i kolumny w zapytaniu, co powoduje wtórną iniekcję SQL po otwarciu formularza edycji pól niestandardowych. Iniekcja może odczytywać dowolne dane ze schematu i powodować błędy lub awarię usługi. Problem naprawiono w wersji 1.7.2.
- CVE-2026-50547Wysokie
W InvoicePlane przed wersją 1.7.2 metoda Invoices::generate_xml() dołącza pochodzący z bazy danych xml_id do katalogu pomocniczego XMLconfigs i włącza wynikową ścieżkę PHP bez walidacji identyfikatora. Atakujący z niskimi uprawnieniami, mogący wpłynąć na konfigurację e-faktury, może użyć sekwencji przejścia katalogów do włączenia istniejącego pliku PHP. Wykonanie kodu wymaga oddzielnego mechanizmu przesyłania lub zapisu plików.
- CVE-2026-49850Wysokie
W InvoicePlane przed wersją 1.7.2 metody Invoices::delete() i Invoices::delete_invoice_tax() są eksponowane jako trasy zmieniające stan bez wymogu POST i walidacji tokenu CSRF. Gdy uwierzytelniony administrator załaduje treść kontrolowaną przez atakującego, która wywoła odpowiednią trasę, aplikacja może usunąć fakturę lub rekord podatku. Akcja cross-origin może usunąć dane finansowe bez wiedzy administratora.
- CVE-2017-1000238Wysokie
Wersja 1.4.10 InvoicePlane jest podatna na atak umożliwiający przesyłanie dowolnych plików, co pozwala uwierzytelnionemu użytkownikowi na przesłanie złośliwego pliku na serwer WWW. Atakujący może przesłać skrypt, który może skompromitować serwer.
- CVE-2026-39353Krytyczne
W InvoicePlane przed wersją 1.7.2-rc-1, lista dozwolonych szablonów jest budowana na podstawie katalogu PHP, który może być zapisywany przez administratora. Złośliwy plik PHP umieszczony w tym katalogu jest automatycznie zaufany i może być wybrany jako publiczny szablon, a następnie wykonany podczas renderowania publicznej faktury.
Oryginalny opis (angielski, źródło NVD)
InvoicePlane is a self-hosted open source application for managing invoices, clients, and payments. Prior to 1.7.2, InvoicePlane fails to revoke administrative privileges after a role downgrade because Admin_Controller trusts the user_type snapshot stored in an existing session instead of revalidating ip_users.user_type. When one administrator downgrades another account, the target's active session continues to authorize administrative requests. The downgraded user can use Users::form() to set user_type back to 1, restoring the database role and making the privilege escalation persistent. This vulnerability is fixed in 1.7.2.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

