WordPress: 320 tysięcy stron narażonych na atak (The InfiniteWP Client i WP Time Capsule)
Luka umożliwiająca pominięcie uwierzytelniania i zalogowanie się do back-endu strony z pominięciem hasła użytkownika odkryta w pluginach The InfiniteWP i WP Time Capsule.
Do dokonania ataku wystarczy nazwa użytkownika administratora.
Ze wtyczek narażonych na atak korzysta ponad 300 tysięcy użytkowników (InfiniteWP Client 300 tysięcy, The WP Time Capsule 20 tysięcy).
Wtyczki te umożliwiają logowanie się do wielu stron przy pomocy jednego, centralnego serwera, co ma ułatwić obsługę, dokonywanie uaktualnień przy pomocy jednego kliknięcia, czy zmianę wyglądu wielu stron naraz.
Luka została odkryta przez firmę WebArx 7 stycznia 2020 roku i załatana przez autorów dzień później. Publiczne ogłoszenie podatności na atak zostało ogłoszone 14 stycznia.
Luka w The InfiniteWP Client
Na atak podatny jest plugin w wersji poniżej 1.9.4.5.
Atak dokonany jest przy wykorzystaniu prośby POST zawierający odpowiedni payload w formacie JSON zakodowanym w Base64.
Po wysłaniu zapytania, które wymaga znajomości nazwy administratora, atakujący zostaje automatycznie zalogowany.
Problematyczna okazała się funkcja iwp_mmb_set_request zlokalizowana w pliku init.php. Funkcja ta sprawdza, czy zmienna request_params klasy IWP_MMB_Core nie jest pusta (a nie jest pusta w przypadku gdy payload spełnia odpowiednie warunki).
Warunki, które muszą być spełnione to równowartość parametrów iwp_action i readd_site lub add_site, które nie sprawdzają autoryzacji. Brakujące sprawdzenie autoryzacji w tym przypadku jest powodem istnienia tej luki. Wysłanie payload'u z nazwą administratora i spełniającym powyższe wymagania kończy się nieautoryzowanym logowaniem.
Luka w WP Time Capsule
Na atak podatny jest plugin w wersji poniżej 1.21.16
Do ataku wystarczy prośba POST z odpowiednim tekstem w treści zapytania.
Plikiem zawierającym lukę jest wptc-cron-functions.php. Funkcja parse_request odpala funkcję decode_server_request_wptcsprawdzającą, czy zapytanie POST zawiera tekst IWP_JSON_PREFIX — w przypadku posiadania tego tekstu użytkownik zostaje zalogowany jako administrator.
Firewall może być nieskuteczny
Ponieważ sama luka wykorzystuje błędy logiczne w kodzie, fragment przesyłanych danych nie różni się od zwykłych zapytań, co oznacza, że nie wygląda podejrzanie dla zapory sieciowej.
Jak się chronić?
Należy jak najszybciej zaktualizować wtyczki.