Specjaliści z RipsTech wykryli poważny błąd w WooCommerce umożliwiający przejęcie konta administratora WordPressa. Błąd jest już naprawiony (najstarsza podatna wersja WC to 3.4.5) i wymaga nieco socjotechniki, ale i tak warto przyjrzeć się na czym polegał, zwłaszcza, że całe włamanie musiałoby być wieloetapowe. Co więcej WooCommerce 3.4.6 naprawia tylko jeden z etapów włamania, wszystkie inne nadal istnieją i być może da się je wciąż wykorzystać w innych wtyczkach.
Po pierwsze osobą włamującą się musiał by być zarejestrowany użytkownik WordPressa z rolą „Menedżer sklepu”. Musielibyśmy więc albo zatrudnić naszym sklepie potencjalnego włamywacza i dać jej takie konto, albo osobę nierozgarniętą, która albo po otrzymaniu takiego konta ustawiłaby sobie łatwe do łamania hasło, albo dała się zmanipulować na przykład przez phishing i udostępnić dostęp do swojego konta faktycznemu włamywaczowi.
To byłby najtrudniejszy etap włamania. Gdyby włamywacz dostałby się na takie konto, miałby już z górki by stać się administratorem.
Menadżer sklepu poza zarządzaniem produktami ma uprawnienia zarządzania także użytkownikami (klientami), łącznie ze zmianą ich hasła. Wewnątrz WooCommerce jest dodatkowy kod,który sprawdza czy manager próbuje właśnie edytować administratora strony i blokuje takie akcje.
Sęk w tym, że raz zarejestrowana rola pozostaje w WordPressie nawet jeśli wtyczka rejestrująca tę rolę jest wyłączona. Dodatkowo jeśli taką wtyczkę (WooCommerce w tym wypadku) wyłączymy, wyłączymy także kod blokujący menadżerowi możliwość edycji administratora.
A więc włamywacz musi znaleźć sposób na wyłączenie WooCommerce. I ten sposób istnieje (istniał do wersji 3.4.5).
WooCommerce potrafi zapisywać do pliku logi zdarzeń w sklepie i menadżer sklepu ma możliwość skasowania takiego pliku. Spójrzcie na kod, który jest za to odpowiedzialny:
Nazwa pliku do skasowania pobierana jest z $_REQUEST (czyli zapytania wysłanego metodą POST lub GET), następnie dołączana do ścieżki do katalogu z logami (wewnątrz wp-content) i na podstawie takiej pełnej ścieżki, plik jest kasowany.
Wystarczy więc wysłać do strony zapytanie wskazujące na lokalizację pliku jako ../../plugins/woocommerce/woocommerce.php
i skasowany w ten sposób zostanie główny plik wtyczki WooCommerce.
Skasowany główny plik wtyczki WooCommerce automatycznie oznacza wyłączenie tej wtyczki.I od tej chwili Menadżer sklepu może spokojnie przejść do edycji konta administratora zmieniając mu hasła na nowe, a następnie przelogować się na tak przejęte konto. Sklep od tej pory jest już w posiadaniu włamywacza.
Jak wspomniałem błąd ten jest już naprawiony w WC 3.4.6, jednak poprawiono jedynie obsługę kasowania pliku. W samym WordPressie nadal nie ma możliwości nadania użytkownikowi uprawnienia do edycji wybranych innych użytkowników. edit_user
pozwala edytować dowolnego użytkownika i jeśli jakaś wtyczka podobnie jak WooCommerce obchodzi te ograniczenie dodatkowym kodem, należy się przyjrzeć czy nie istnieje inny sposób na jej deaktywację.
Szczegóły włamania znajdziecie w artykule odkrywców luki.