CVE-2026-77999
WysokieCVSS 8.7Streszczenie
W rozszerzeniu Joomla J2Store (wersje 1.0.0-3.3.21, 4.0.0-4.0.21, 4.1.0-4.1.6) wykryto podatność umożliwiającą nieuwierzytelnione fałszowanie wywołania zwrotnego PayPal, prowadzące do oszustwa związanego z potwierdzeniem zamówienia. Listener PayPal IPN akceptował odpowiedzi `UNVERIFIED` i każdą nie-`INVALID` jako ważne, wyłączał weryfikację SSL (CURLOPT_SSL_VERIFYPEER) i przechowywał werdykt w polu, którego nic później nie sprawdzało — więc przetwarzanie kontynuowało się niezależnie od wyniku. Dodatkowo porównanie zapłaconej kwoty działało tylko, gdy `mc_gross` było liczbą dodatnią; pominięcie pola w treści POST (`floatval(null) == 0`) pomijało sprawdzenie. W połączeniu z `receiver_email` skonfigurowanym przez sprzedawcę i sekwencyjnym, możliwym do odgadnięcia identyfikatorem zamówienia odczytanym z pola `custom`, anonimowy POST wystarczył, aby przenieść oczekujące zamówienie bezpośrednio do statusu `CONFIRMED` bez płatności lub wymusić na innym kliencie zmianę statusu oczekującego zamówienia na `FAILED`. `paypalv2.php` nie przeprowadzał żadnej kontroli kwoty w żadnych okolicznościach.
Ocena ryzyka
Ryzyko obejmuje możliwość potwierdzania zamówień bez płatności, co prowadzi do strat finansowych, oraz manipulację statusami zamówień innych klientów, co narusza integralność procesu zamówień.
Rekomendacja
Zaleca się aktualizację J2Store do wersji zawierającej poprawkę oraz wdrożenie ścisłej weryfikacji podpisów PayPal, włączenie weryfikacji SSL i obowiązkowej kontroli kwot dla wszystkich transakcji.
Inne podatności w J2Store
Zobacz wszystkie- CVE-2026-78065Wysokie
W rozszerzeniu Joomla J2Store (wersje 1.0.0-3.3.21, 4.0.0-4.0.21, 4.1.0-4.1.6) wykryto podatność IDOR w funkcji editAddress(), która umożliwia każdemu uwierzytelnionemu użytkownikowi dostęp do adresów zamówień gości. Funkcja przekierowywała nie-właścicieli tylko wtedy, gdy załadowany wiersz adresu miał niepusty user_id należący do kogoś innego. Wiersze adresów zamówień gości mają pusty user_id, więc ten warunek nigdy nie był spełniony — każdy zalogowany użytkownik, zgadując mały, sekwencyjny address_id, mógł zobaczyć pełne imię, adres ulicy i numer telefonu klienta-gościa w formularzu edycji.
- CVE-2026-78064Wysokie
W rozszerzeniu Joomla J2Store (wersje 1.0.0-3.3.21, 4.0.0-4.0.21, 4.1.0-4.1.6) wykryto podatność umożliwiającą anonimowe manipulowanie rekordami koszyka poprzez odziedziczone zadanie `save` z FOF. Plik `fof.xml` przyznaje zadaniom widoku `carts` dziką kartę ACL `true`, a FOF egzekwuje tokeny CSRF tylko na żądaniach HTML backendu, nie na żądaniach frontendu `format=raw`. `J2StoreControllerCarts` ograniczył `remove()` do własnej sesji wywołującego, ale nie nadpisał ogólnego zadania `save` FOF, więc pozostało ono dostępne do wstawiania nowych wierszy koszyka z wybranym przez atakującego `user_id`/`session_id` lub nadpisywania istniejącego wiersza po id.
- CVE-2026-78000Średnie
Rozszerzenie Joomla - j2commerce.com - zawiera odzwierciedlony XSS poprzez parametry `filter_tag`, `pricefrom` i `priceto` w J2Store 1.0.0-3.3.21, 4.0.0-4.0.21, 4.1.0-4.1.6. Cztery procedury obsługi zadań akceptowały zakodowany w base64 adres URL od użytkownika i przekierowywały do niego bez weryfikacji hosta docelowego, umożliwiając phishing przy użyciu zaufanej domeny sklepu. Nie wymaga uwierzytelnienia.
- CVE-2026-78069Krytyczne
Rozszerzenie Joomla - j2commerce.com - Brak autoryzacji w łańcuchu delegacji kontrolera Apps w J2Store 1.0.0-3.3.21, 4.0.0-4.0.21, 4.1.0-4.1.6 - Ścieżka delegacji appTask w J2StoreControllerApps tworzy kontrolery wtyczek bez żadnej kontroli ACL. Ponadto applocalizationdata::getInstallerTool() używa nazwy tabeli zależnej od wywołującego bez listy dozwolonych, co umożliwia odczyt/wykonanie plików z możliwością path traversal.
- CVE-2026-74252Wysokie
Rozszerzenie Joomla J2Store (wersje 1.0.0-3.3.20, 4.0.0-4.0.20, 4.1.0-4.1.5) jest podatne na trwały Cross-Site Scripting (XSS) przez pola adresu rozliczeniowego w kasie gościa. Nieuwierzytelniony atakujący wykorzystuje obejście filtra w Joomla Input::getArray() w połączeniu z PHP variables_order=EGPCS (Cookie nadpisuje POST w $_REQUEST), aby przechowywać nieoczyszczony HTML w polach takich jak billing_first_name.
- CVE-2026-67362Średnie
Rozszerzenie Joomla - j2commerce.com - Otwarte przekierowanie w kontrolerze koszyka w J2Store 1.0.0-3.3.20, 4.0.0-4.0.20, 4.1.0-4.1.5 - Cztery procedury obsługi zadań akceptowały zakodowany w base64 URL z danych wejściowych użytkownika i przekierowywały do niego bez weryfikacji hosta docelowego, umożliwiając phishing przy użyciu zaufanej domeny sklepu. Nie wymaga uwierzytelnienia.
- CVE-2026-67361Średnie
Rozszerzenie Joomla - j2commerce.com - Nieuwierzytelnione przesyłanie plików z brakiem ochrony katalogu w J2Store 1.0.0-3.3.20, 4.0.0-4.0.20, 4.1.0-4.1.5 - Punkt końcowy przesyłania plików akceptował żądania POST od nieuwierzytelnionych odwiedzających bez tokena CSRF. Dodatkowo, manifest instalatora pominął katalogi upload i invoices, powodując, że świeże instalacje wdrażają te katalogi bez ochrony .htaccess/web.config, co czyni przesłane pliki bezpośrednio dostępnymi w sieci.
- CVE-2026-67360Średnie
Rozszerzenie Joomla - j2commerce.com - Replikacja zamówień między klientami w J2Store 1.0.0-3.3.20, 4.0.0-4.0.20, 4.1.0-4.1.5 - Uwierzytelniony użytkownik mógł podać order_id innego klienta, aby skopiować zawartość koszyka i dane adresowe do swojej sesji. Token CSRF był walidowany, ale własność nie była sprawdzana.
- CVE-2026-67359Wysokie
Rozszerzenie Joomla J2Store (wersje 1.0.0-3.3.20, 4.0.0-4.0.20, 4.1.0-4.1.5) umożliwia nieuwierzytelnionemu odwiedzającemu podanie dowolnego order_id jako parametru zapytania, aby wyświetlić pełną stronę potwierdzenia zamówienia, w tym pozycje, ceny i sumy.
- CVE-2026-67358Średnie
Rozszerzenie Joomla - j2commerce.com - Manipulacja limitem pobrań w J2Store 1.0.0-3.3.20, 4.0.0-4.0.20, 4.1.0-4.1.5 - Uwierzytelniony użytkownik z prawidłowym tokenem zamówienia mógł zwiększyć licznik limitu pobrań na rekordzie pobrania należącym do innego zamówienia. Punkt końcowy również nie miał tokena CSRF.
Oryginalny opis (angielski, źródło NVD)
Joomla Extension - j2commerce.com - Unauthenticated PayPal callback forgery leading to order confirmation fraud in J2Store 1.0.0-3.3.21, 4.0.0-4.0.21, 4.1.0-4.1.6 - The PayPal IPN listener's signature check (`_validateIPN()`) accepted `UNVERIFIED` and any non-`INVALID` response as valid, made its verification request with `CURLOPT_SSL_VERIFYPEER` disabled, and stored its verdict in a field nothing downstream ever checked — so processing continued regardless of the outcome. Separately, the paid-amount comparison only ran when `mc_gross` was a positive number; omitting the field from the POST body (`floatval(null) == 0`) skipped the check entirely. Combined with a merchant-configured `receiver_email` and a sequential, enumerable order id read from the `custom` field, an anonymous POST was enough to move a pending order straight to `CONFIRMED` with no payment, or force another customer's pending order to `FAILED`. `paypalv2.php` performed no amount check under any circumstances.

