Podatność w WooCommerce Dynamic Pricing and Discounts – konieczna szybka aktualizacja

Published Reading time 7 minutes
Podatność w WooCommerce Dynamic Pricing and Discounts

Wykryto podatność w dynamicznym ustalaniu cen w WooCommerce

W ostatnich tygodniach naprawialiśmy kilka sklepów, które zostały zhakowane przez lukę w popularnej wtyczce WooCommerce Dynamic Pricing and Discounts. Jeśli korzystasz z tej wtyczki, warto szybko sprawdzić, czy Twój sklep jest bezpieczny.

Ten sam problem powraca – luka pozwala na import ustawień bez uprawnień.

Dynamic Pricing and Discounts, która służy sklepom do automatycznego ustalania cen i rabatów. To popularny dodatek, (choć nie wiemy dlaczego skoro istnieje tak wiele dużo lepszych darmowych alternatyw) który ma ponad 20 000 zakupów, dlatego skutki błędu mogą dotyczyć wielu witryn.

Choć wtyczka jest rozwijana od 2014 roku, jej changelog (historia zmian) jest dość lakoniczny, co utrudnia ocenę jakości poprawek. W sierpniu 2021 roku ujawniono w niej krytyczną lukę bezpieczeństwa: pozwalała ona dowolnej osobie wgrać plik z ustawieniami i nadpisać konfigurację sklepu i to wszystko bez żadnych uprawnień!

To oznacza, że atakujący mógł zmienić ceny, wprowadzić rabaty lub wstrzyknąć złośliwy kod, jeśli tylko wiedział, jak podać odpowiednio przygotowany plik.

Czym jest ta luka i skąd wziął się problem podatności?

We wtyczce znaleziono błąd w mechanizmie importu ustawień. Twórcy założyli, że skoro opcja importu jest widoczna tylko dla administratora, to nikt inny nie będzie w stanie jej uruchomić. Niestety, sam kod nie sprawdza tych uprawnień.

Kod importu (klasa: “RP_WCDPD_Settings”, metoda: “__construct”) wygląda tak:

Przykład podatnego kodu – Dynamic Pricing and Discounts WordPress plugin
Przykład podatnego kodu – Dynamic Pricing and Discounts WordPress plugin

Ten fragment powinien już budzić pewne wątpliwości. Jeśli plik w ramach określonej zmiennej został przesłany na serwer, metoda importu jest uruchamiana automatycznie. O wiele lepiej byłoby na tym etapie sprawdzić, czy bieżący użytkownik w ogóle ma prawo do przesłania pliku. Co zawiera metoda importu? Może uwzględnia ona wszystkie kontrole?

Przykład podatnego kodu – mechanizm ataku w WooCommerce Dynamic Pricing and Discounts
Przykład podatnego kodu – mechanizm ataku

W praktyce wygląda to tak: jeśli ktoś prześle na serwer plik o określonej nazwie wtyczka automatycznie uruchamia import ustawień. Bez pytania o uprawnienia i bez sprawdzania, czy użytkownik jest zalogowany. A nawet bez weryfikacji, co w ogóle znajduje się w pliku.

To właśnie otwiera drogę do ataku. Wtyczka nie sprawdza:

  • czy użytkownik ma prawo zmieniać ustawienia,
  • czy ktokolwiek jest zalogowany,
  • czy plik jest poprawny.

W efekcie każda osoba, która wie, jak wygląda struktura importu, może wgrać własny plik i nadpisać ustawienia sklepu w tym ceny, rabaty czy dodatkowe komunikaty.

Jak atakujący wykorzystują ten błąd?

Ponieważ wtyczka automatycznie wczytuje przesłany plik bez sprawdzania uprawnień, atakujący może przygotować własny plik z ustawieniami i w kilka sekund nadpisać konfigurację sklepu. Na przykład, atakujący może ustawić 100% zniżki na wszystkie produkty. 

Czytanie, aż boli? 

Niestety, podobnie jak wiele wtyczek z Envato, ta wtyczka jest bardzo rozbudowana (ma mnóstwo opcji). Oprócz samych rabatów można między innymi ustawić dodatkowe komunikaty. I tutaj pojawia się kolejna luka w zabezpieczeniach. Te komunikaty nie są poprawnie zabezpieczone (nie są poprawnie escapowane). Połączenie tych dwóch błędów bezpieczeństwa jest wykorzystywane do ataków.

I tak zaczyna się druga część tego koszmaru. Czyli do strony wstrzykiwane są ustawienia, które zawierają kod JS (JavaScript). Kod jest następnie umieszczany na stronie internetowej i wykonywany w przeglądarce odwiedzającego.

W przypadkach, które do nas trafiły w celu usunięcia złośliwego oprogramowania, JavaScript został użyty do przekierowania klientów sklepu na inne strony internetowe. W innych przypadkach atakujący manipulował cenami produktów.

Takie działanie może również prowadzić do poważniejszych konsekwencji. Kod JS może przechwytywać dane, modyfikować formularze lub wykradać informacje.

Używam wtyczki WooCommerce Dynamic Pricing and Discounts, co powinienem zrobić?

22 sierpnia autor wtyczki wydał aktualizację, która częściowo zabezpiecza mechanizm importu: dodano sprawdzenie, czy użytkownik ma prawo zmieniać ustawienia. To krok w dobrą stronę, ale nie rozwiązuje problemu w pełni.

Dlaczego? Bo druga luka, ta pozwalająca na wstrzykiwanie złośliwego kodu (XSS), nadal istnieje.

Zatem korekta ta korekta nie jest to wystarczająca, nie daje pełnej ochrony. Aby przeprowadzić atak, należy użyć konta użytkownika z odpowiednimi uprawnieniami. Jednak atak typu XSS (Cross-Site Scripting) jest nadal możliwy. Dlatego, jeśli atakujący przygotuje odpowiednie żądanie i wykona je z przeglądarki właściciela sklepu, nadal będzie mógł nadpisać ustawienia. Proces ten będzie jednak wymagał znacznie więcej wysiłku.

Biorąc pod uwagę powyższe, oto nasze zalecenia:

  1. Natychmiast zaktualizuj wtyczkę, aby uniemożliwić prosty atak osobom z zewnątrz.
  2. Rozważ zmianę wtyczki na bezpieczniejszą alternatywę. Ta podatność pokazuje, że mechanizmy wtyczki nie były projektowane z myślą o bezpieczeństwie.

Jeśli Twoja strona internetowa jest zainfekowana i zauważyłeś, że ma przekierowania, konieczne będzie jej wyczyszczenie. Skontaktuj się z nami, usuniemy skutki ataku i zabezpieczymy stronę, tak aby problem nie wrócił. 

Jakie są ogólne wnioski z historii tej luki i ataków?

Instaluj wtyczki po wcześniejszej analizie bezpieczeństwa i użyteczności.

Po pierwsze, nawet płatne wtyczki zawierają błędy (z mojego doświadczenia, znacznie częściej niż darmowe). Autorzy wtyczek często koncentrują się na funkcjonalności i możliwościach, a nie na bezpieczeństwie. Funkcje są atrakcyjne. Można się nimi chwalić i dobrze się sprzedają. Bezpieczeństwo? Bywa traktowane jako dodatek. Niestety, sami kupujący ignorują bezpieczeństwo wtyczek, a autorzy nadal popełniają podstawowe błędy.

Dlatego wybór wtyczki nie powinien opierać się wyłącznie na opisie funkcji. Warto przeanalizować również jej historię zmian (changelog) i sposób, w jaki jest rozwijana. Dobrą praktyką jest także ocena jakości kodu i podejścia do bezpieczeństwa. To najpewniejszy sposób, by korzystać z rozwiązań, które są nie tylko wygodne, ale też bezpieczne.

Sprawdzaj i aktualizuj wszystkie wtyczki na stronie.

Strony internetowe, które czyściliśmy z tej infekcji, nie były atakowane aż do września. Ataki pojawiły się dopiero po tym, jak poprawka została już wydana. Niestety, to dość typowe w takich sytuacjach, najwięcej ataków następuje po ujawnieniu błędu, kiedy wiadomo już, jak go wykorzystać.

Najłatwiejszym sposobem, by się przed tym chronić, jest regularne monitorowanie wtyczek i instalowanie aktualizacji od razu po ich pojawieniu się. Gdyby wtyczki były zaktualizowane na czas, wielu infekcji można by łatwo uniknąć.

Jeśli chcesz przeczytać więcej o tym, jak podchodzić do aktualizacji wtyczek, zajrzyj do naszego artykułu „Aktualizować, czekać, ignorować?” na 360WebCare.com.

Właśnie dlatego w ramach naszej usługi Wsparcia Technicznego i Konserwacji Stron Internetowych monitorujemy wtyczki na bieżąco, wraz ze zmianami w ich kodzie. Dzięki temu możemy szybciej reagować na krytyczne luki w zabezpieczeniach i zapobiegać ich wykorzystaniu. Znamy również jakość kodu poszczególnych wtyczek i możemy doradzić zmianę lub wprowadzić dodatkowe poprawki, które zmniejszą ryzyko ataku.

Jak mogę zabezpieczyć moją stronę w przyszłości?

Nie ulegaj pokusie odkładania dbania o swoją stronę WordPress na później – w dłuższej perspektywie może Cię to kosztować znacznie więcej. Gdy problemy się nagromadzą, trudniej jest je naprawić, a posiadanie słabej strony internetowej może prowadzić do większej liczby przestojów, co w dłuższej perspektywie kosztuje klientów i konwersje. 

Mądrzejszym i bardziej opłacalnym rozwiązaniem jest regularne sprawdzanie strony przez eksperta. Stała opieka techniczna pozwala wyłapać problemy zanim urosną, a dzięki temu Twoja strona pozostaje stabilna i bezpieczna.

Zmień zgody