Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
WordPress: przejęcie admina i serwera – właśnie załatano krytyczną lukę
TLDR: zalogowany admin WordPressa, wchodzi w innym tabie przeglądarki na odpowiednio spreparowaną stronę i w tym momencie temat się kończy – tj. atakujący ma dostęp do WordPressa / na serwer (czyli ma zuploadowanego webshella z uprawnieniami web serwera).
W czym tkwi problem?
- Po pierwsze mamy podatność CSRF – czyli można przygotować stronę, która po odwiedzeniu jej przez zalogowanego admina, wykona w jego imieniu pewne żądania HTTP. To nie powinno się dać zrobić gdyby WordPress dobrze implementował ochronę przeciwko CSRF. Tymczasem: „The fact that no CSRF protection is implemented for the comment form has been known since 2009”.
- Atakujący może wykonać żądanie HTTP tworzące komentarz (jako admin). Ale czy może w nim umieścić wszystko? (w tym kawałek JavaScriptu?). Nie.
A tak na prawdę – to tak ;) I tu mamy kolejną podatność – da się wstrzyknąć fragment HTML-a do komentarza (dokładniej parametr do tagu a). Dlaczego? Jeśli komentującym jest admin + nie podamy parametru nonce, to do walidacji używana jest mniej bezpieczna funkcja wp_filter_post_kses() – zamiast bezpieczniejszej wp_filter_kses(). Dlaczego? Tego nikt nie wie… - Dalej – element parsujący linki działa(ł) w dość dziwny sposób, np. taki parametr: <a title=’XSS ” onmouseover=evilCode() id=” ’> (widzicie zupełnie prawidłowy i niewinny parametr, w którym żaden JavaScript nie ma prawa się nic wykonać) był konwertowany na: <a title=”XSS ” onmouseover=evilCode() id=” „>
- Ups. To mamy persistent XSS-a. Czyli można wstrzyknąć kod JavaScriptowy, który z uprawnieniami admina będzie miał możliwość uploadu nowego pluginu (czytaj – dowolnego kodu PHP).
Wszystko można w pełni zautomatyzować:
The victim administrator does not notice anything on the website of the attacker and does not have to engange in any other form of interaction, other than visiting the website set up by the attacker.
Podatność załatano w wersji 5.1.1 oraz 4.9.10 (poprzednia linia), dodając dla zmyłki dość niegroźny opis:
This release also includes a pair of security fixes that handle how comments are filtered and then stored in the database. With a maliciously crafted comment, a WordPress post was vulnerable to cross-site scripting.
–ms
W tabie przeglądarki??? A po polsku nie można – w zakładce.
pewnie można, ale się nam nie chciało :-)