WordPress, mimo swej gigantycznej popularności, nigdy nie uchodził za bezpieczny system zarządzania treścią. Wręcz przeciwnie, powszechna jest opinia, że najpopularniejszy CMS w Internecie jest dziurawy jak sito. Dowodów nie brakuje – nie ma miesiąca, by w WordPressie nie odkryto tej czy innej luki bezpieczeństwa, nierzadko krytycznej. Czas na kolejny akt tej niekończącej się tragedii.
WordPress dziurawy jak sito
Lukę odnaleźli w WordPressie 5.0.0 eksperci z niemieckiego RipsTech. Scenariusz ataku wykorzystuje wektor dwóch podatności. Jedna z nich została już załatana w WordPressie 4.9.9 i 5.0.1, ale druga wciąż może zostać wykorzystana. Każda witryna wykorzystująca wtyczki, które niepoprawnie obsługuje wpisy Post Meta (służą zbieraniu metadanych wczytywanych do WP obrazków) wciąż jest podana. Według RipsTech mowa o milionach witryn – odsetek podatnych serwisów szacowany jest na około 33%.
Jak przebiega atak? Kluczowe są wspominany wpisy Post Meta. Są one tworzone po wczytaniu obrazka do WordPressa i służą przechowywaniu metadanych. Każdy wpis ma standardową strukturę klucza i wartości i stanowi po prostu rejestr przechowywanych na serwerach obrazków wczytanych przez autorów. Znajdują się w nim między innymi informacje o autorze, rozmiarach, nazwie, itp. Na podstawie wpisów Post Meta grafiki są identyfikowane, a następnie możliwe do odnalezienia i ponownego wykorzystania.
Post Meta i Path Traversal
Problem w tym, że wpisy Post Meta da się nadpisać i to bez zmiany pliku obrazku. Może to zrobić każdy użytkownik z uprawnieniami autora po prostu przez modyfikację metadanych obrazków. To zaś może zostać wykorzystane do ataku typu Path Traversal. WordPress wczytuje obrazki na strony na dwa sposoby – w pierwszej kolejności przez adres względny. Jeśli plik nie będzie dostępny, wówczas nastąpi próba pobrania obrazka przez adres bezwzględny, czyli https://atakowanastrona.pl/wp-content/uploads/obrazek.jpg.
Dzieje się tak, gdyż niektóre rozszerzenia generują obrazki „w locie”, dopiero po wywołaniu ich przez adres. Słowem – obrazka „nie ma”, dopóki wywoła się go adresem bezwzględnym. Niestety, CMS ignoruje w adresach bezwzględnych całą zawartość po znaku zapytania. Nic nie stoi na przeszkodzie, by obrazek został prawidłowo pobrany z adresu https://atakowanastrona.pl/wp-content/uploads/obrazek.jpg?skrypt.php. Po tym, jak obrazek zostaje wczytany, może być kadrowany i zapisywany ze zmodyfikowaną nazwą (przedrostek cropped-) do systemu plików WordPressa.
Zdalne wykonanie kodu możliwe od 6 lat
Oznacza to, że razem z obrazkiem może zostać pobrany i wykonany dowolny skrypt PHP, atak Path Traversal pozwala go bowiem umieścić w folderze z motywami WordPressa. Mowa zatem o krytycznej luce pozwalającej na zdalne wykonanie dowolnego kodu na serwerze. Nic bowiem nie stoi na przeszkodzie, by atakujący umieścił dowolny skrypt PHP przechowywany w danych EXIF obrazka, który będzie następnie przechowywany w folderze z motywami.
Scenariusz ataku wykorzystujący obie podatności jest możliwy od… 6 lat. Jak wspomnieliśmy, możliwość nadpisywania Post Meta przez nieuprawnionych użytkowników usunięto w WordPressie 4.9.9 i 5.0.1, niemniej Path Traversal wciąż jest możliwy. Twórcy WordPressa zostali poinformowani o podatności. Ma ona zostać załatana w kolejnej wersji CMS-a.