Luka w funkcji WordPress

Informacja: Luka ta została oficjalnie zgłoszona zespołowi bezpieczeństwa WordPress już 7 miesięcy temu, lecz nadal pozostaje niezałatana. Długi czas, który upłynął od pierwszego zgłoszenia bez łatki lub konkretnych planów, doprowadził nas do decyzji o upublicznieniu.
Link do oryginalnego artykułu…
Aby wykorzystać lukę opisaną poniżej, osoba atakująca musi uzyskać wpierw uprawnienia do edytowania i usuwania plików multimedialnych. W związku z tym lukę w zabezpieczeniach można wykorzystać do eskalacji przywilejów uzyskanych poprzez przejęcie konta z rolą, jak autor, lub poprzez wykorzystanie innej luki w zabezpieczeniach / błędnej konfiguracji.
Wykorzystanie tej luki daje osobie atakującej możliwość usunięcia dowolnego pliku z instalacji WordPress (+ dowolnego innego pliku na serwerze, na którym użytkownik procesu PHP ma uprawnienia do plików). Poza możliwością wymazania całej instalacji WordPress, która może mieć katastrofalne konsekwencje, jeśli nie jest dostępna bieżąca kopia zapasowa, atakujący może wykorzystać możliwość dowolnego usuwania plików w celu ominięcia niektórych środków bezpieczeństwa i wykonania niepożądanego kodu na serwerze.
Link do oryginalnego artykułu…
Kto jest narażony?
Każdy WordPress włącznie z aktualną wersją 4.9.6
(aktualna w momencie pisania tego newsa)
Możliwość wykorzystania luki w zabezpieczeniach polegająca na usunięciu dowolnego pliku pojawia się w momencie korzystania z funkcji wp_delete_attachement() poprzez podanie argumentów z wykorzystaniem funkcji unlink() i zmiennej $filename.
Tymczasowa łatka
Ponieważ na czas pisania tego artykułu nie jest to załatane przez twórców WordPress, możemy zaimplementować poniższą łatkę.
Wystarczy za pomocą edytora kodu dodać w używanym na stronie motywie, dodać odpowiednią funkcję filtrującą w pliku functions.php
add_filter( 'wp_update_attachment_metadata', 'rips_unlink_tempfix' ); function rips_unlink_tempfix( $data ) { if( isset($data['thumb']) ) { $data['thumb'] = basename($data['thumb']); } return $data; }
Opis: Funkcja podpina się pod wywołanie wp_update_attachement_metadata() i wymuszą użycie funkcji basename() na tablicy $data, która odfiltruje niepożądane wartości.
Uwaga:
Dostarczona poprawka to tymczasowa poprawka, aby zapobiec możliwości wykorzystania luki. Nie możemy nadzorować wszystkich możliwych problemów kompatybilności wstecznej z wtyczkami WordPress. Zalecamy, aby wszelkie modyfikacje plików WordPress były wykonywane z ostrożnością, a zwłaszcza zalecamy utworzenie wcześniej kopii zapasowej.
O tym jak wykonać kopie zapasowe z poziomu WordPress opisaliśmy ostatnio w naszym Poradniku:
Zachęcamy do zapoznania się z powyższym artykułem opisującym jak wykonać i przywrócić kopie zapasowe w WordPress.