Poznaj AI! Obejrzyj bezpłatnie szkolenie jutro o godz. 10:00 lub 19:00
Wyciek tytułów szkiców i prywatnych wpisów w silniku WordPress
Badacze z firmy Imperva odkryli i opisali interesującą podatność w popularnym silniku blogowym WordPress. Luka umożliwia osobom postronnym poznanie tytułów prywatnych wpisów oraz szkiców. Na pierwszy rzut oka nie brzmi dramatycznie, bo dotyczy tylko tytułów, ale w niektórych sytuacjach już samo przedwczesne ujawnienie tytułu może mieć poważne konsekwencje. Jako przykład podawane są tu wpisy na blogach firmowych dotyczące wyników finansowych czy planowanych fuzji.
Podatność występuje w domyślnej instalacji WordPress i polega na wykorzystaniu endpointu odpowiedzialnego za obsługę XML-RPC, a dokładnie funkcjonalności pingback. Działa ona tak, że jeśli jeden blog linkuje do innego, to ten, do którego jest tworzony link, jest powiadamiany o tym fakcie, aby utworzyć podobny do komentarza link do blogu linkującego.
Przebieg wykorzystania tej funkcjonalności w WordPress jest następujący:
- Na blogu A następuje publikacja wpisu odnoszącego się do blogu B.
- Blog A wysyła powiadomienie pingback do blogu B.
- Blog B weryfikuje, czy link faktycznie jest odnośnikiem do któregoś z jego wpisów.
- Blog B pobiera treść wpisu, aby upewnić się, że link faktycznie tam istnieje.
Kluczowy dla podatności jest krok trzeci, w którym WordPress sprawdza, czy którykolwiek z tytułów wpisów – w tym wpisów prywatnych lub będących wpisami – zawiera podany ciąg znaków (rys. 1).

Atakujący wykorzystuje różnicę w zachowaniu instancji WordPress w sytuacji, gdy podany ciąg znaków występuje w którymkolwiek tytule wpisu i w przypadku braku takiego wystąpienia. Jeśli nastąpi dopasowanie w trakcie sprawdzenia, blog B przechodzi do punktu czwartego i wykonuje żądanie do bloga atakującego w celu pobrania wpisu i weryfikacji, czy link faktycznie występuje. W przypadku braku dopasowania ciągu znaków do tytułu, żądanie nie jest wykonywane.
Atakujący może zatem generować kolejne żądania XML-RPC udające pingback (rys. 2) oraz linkowanie do wpisów o podanych fragmentach tytułów i sprawdzać, czy dla danego ciągu otrzyma żądanie z bloga ofiary. Całość tytułu atakujący może poznać poprzez rozbudowywanie pasującego ciągu o kolejne znaki. Widowiskowy przebieg ataku – zupełnie jak na filmach! – przedstawia wideo z demo na blogu Impervy.

Innym sposobem wykorzystania podatności, który opisali autorzy znaleziska, jest wykorzystanie analizy czasu wykonania operacji – w przypadku dopasowania atakowany serwer odczekuje 1 sekundę przed pobraniem treści z bloga, który wykonał żądanie. Zgodnie z komentarzem ma to dać czas na faktyczne dokonanie publikacji przez blog A.
Autorzy w swoim opisie podatności linkują skrypt w Pythonie, który ma umożliwić zbadanie, czy nasza instancja jest podatna na opisany atak, jednak wymaga on niewielkiej modyfikacji przed uruchomieniem.
Jako ochronę sugerują wykorzystanie WAF lub wyłączenie funkcjonalności pingback w WordPressie. My ze swojej strony dodamy, że jeśli w naszym WordPressie nie wykorzystujemy funkcjonalności związanych z XML-RPC, możemy zupełnie zablokować dostęp do xmlrpc.php na poziomie serwera WWW.
~Paweł Różański