Biuletyn bezpieczeństwa ProfilePress
Jeśli otrzymałeś ode mnie wiadomość e-mail kierującą Cię na tę stronę, to dlatego, że Twoja
witryna najwyraźniej korzysta z wersji ProfilePress (wtyczki WordPress, która nadal jest
dostarczana pod nazwą folderu wp-user-avatar, autorstwa ProperFraction), która mieści się
w zakresie objętym znanym problemem bezpieczeństwa. Ta strona wyjaśnia, na czym polega
problem, jak ustalić, czy w ogóle dotyczy on Twojej strony, oraz jak zaktualizować.
Najpierw uwaga o nazwie, ponieważ bywa myląca: ta wtyczka zaczynała jako WP User Avatar i
zachowała ten identyfikator (slug) mimo zmiany marki, więc w Twoich plikach znajduje się pod
ścieżką /wp-content/plugins/wp-user-avatar/, podczas gdy panel administracyjny WordPress
wymienia ją pod jej pełną obecną nazwą, “Paid Membership Plugin, Ecommerce, User
Registration Form, Login Form, User Profile & Restrict Content – ProfilePress”. WP User
Avatar i ProfilePress to ta sama wtyczka. Przez cały czas jest to wtyczka WordPress.
Przede wszystkim najważniejszy fakt dotyczący tego powiadomienia: wersja z zakresu, którego
dotyczy problem, sama w sobie nie oznacza, że Twoja strona jest narażona. Opisany poniżej
problem można wykorzystać tylko wtedy, gdy ProfilePress publikuje frontendowy formularz
rejestracji zawierający pole wyboru roli (shortcode [reg-select-role] albo pole
“reg-select-role” w kreatorze formularzy typu przeciągnij i upuść), skonfigurowane w określony
sposób. Jeśli Twoja strona nie oferuje publicznej samodzielnej rejestracji albo Twoje
formularze rejestracji nie pozwalają odwiedzającemu wybrać roli, najprawdopodobniej nie jest
ona narażona, nawet w wersji, której dotyczy problem. Mogę odczytać wersję Twojej wtyczki z
publicznych plików, ale nie widzę Twoich formularzy rejestracji, więc to powiadomienie jest
zapobiegawczym ostrzeżeniem, a nie potwierdzonym ustaleniem dotyczącym Twojej strony.
Problem ten to CVE-2026-12497, nieuwierzytelnione podniesienie uprawnień w obsłudze frontendowej rejestracji wtyczki (CWE-269, nieprawidłowe zarządzanie uprawnieniami). Urząd, który przydzielił CVE, nie opublikował oceny wagi, a ja jej nie wymyślam; dla oceny problemu istotne jest to, że jest on nieuwierzytelniony, ale ograniczony do roli innej niż administrator i zależny od opisanej powyżej konfiguracji rejestracji. Dotyczy on wersji od 3.0.0 do 4.16.17 i został naprawiony w 4.16.18. Jeśli korzystasz z wersji, której dotyczy problem, zaktualizuj ProfilePress do 4.16.18 lub nowszej (bieżące wydanie to 4.16.19). Nic nie wskazuje na to, że problem ten jest gdziekolwiek wykorzystywany.
Słowo o pilności, ponieważ jest to powiadomienie warunkowe: to, jak bardzo sprawa dotyczy Ciebie, zależy niemal wyłącznie od tego, czy publikujesz taki formularz rejestracji. Jeśli nie oferujesz publicznej samodzielnej rejestracji z polem wyboru roli, aktualizacja to rutynowa konserwacja wtyczki. Jeśli oferujesz, potraktuj aktualizację priorytetowo: w tej konfiguracji luka mogłaby pozwolić nieuwierzytelnionemu odwiedzającemu zarejestrować się z wyższą rolą, niż oferował Twój formularz (na przykład Redaktor lub Autor). Nawet wtedy ta strona jest zapobiegawczym ostrzeżeniem, a nie raportem o incydencie, i nie wynika z niej potrzeba żadnej reakcji awaryjnej.
Jest to luka we wtyczce, a nie w rdzeniu WordPressa. W pełni aktualny WordPress nie chroni Cię, jeśli sama wtyczka ProfilePress jest w wersji, której dotyczy problem.
Czy ta wiadomość jest wiarygodna?
Tak. Jest to powiadomienie w dobrej wierze, zgodne z zasadą odpowiedzialnego ujawniania, od niezależnego badacza bezpieczeństwa. Nie proszę Cię o pieniądze, hasła ani dostęp do Twojej strony, i nie próbowałem się do niej włamać, niczego przesłać ani niczego wykorzystać.
Jedyne, co zrobiłem, to obejrzenie publicznie widocznych plików, które Twoja witryna
udostępnia każdemu odwiedzającemu (tak samo jak publiczna jest Twoja strona główna), i
odnotowanie numeru wersji, który wtyczka publikuje w swoim publicznym pliku readme.txt.
Świadomie nie dotknąłem systemu rejestracji i nic w tym sprawdzeniu nie dotyka Twoich
danych, Twojego panelu administracyjnego ani żadnej prywatnej części Twojej strony (więcej
szczegółów w sekcji Co zrobiłem, a czego nie zrobiłem poniżej).
Jeśli chcesz zweryfikować, kim jestem, zobacz dane kontaktowe na dole tej strony oraz stronę O tej stronie.
Dlaczego to ważne
ProfilePress to szeroko używana wtyczka członkostwa, rejestracji użytkowników i logowania dla WordPressa (około 100 000 aktywnych instalacji). Między innymi pozwala ona witrynie publikować frontendowe formularze rejestracji, dzięki którym odwiedzający mogą zakładać własne konta, a formularze te mogą opcjonalnie zawierać pole pozwalające odwiedzającemu wybrać, jaką rolę powinno mieć jego nowe konto.
W wersjach, których dotyczy problem, obsługa rejestracji ustala role, które formularz oferuje, oraz role, które przyjmie, za pomocą dwóch różnych fragmentów kodu. Przy niektórych prawidłowych konfiguracjach pola roli kod obliczający przyjmowane role nie odczytuje listy ról formularza i po cichu domyślnie przyjmuje dowolną edytowalną rolę (czyli każdą rolę z wyjątkiem administratora). Ponieważ publiczna obsługa rejestracji nie jest chroniona nonce’em, nieuwierzytelniony odwiedzający może przesłać rolę wybraną przez siebie i zostać zarejestrowany z wyższą rolą, niż oferował formularz, na przykład jako Redaktor lub Autor, a nie zamierzony Subskrybent.
Dwie rzeczy pozwalają zachować właściwą perspektywę. Po pierwsze, skutek ma twardy pułap: wtyczka wyraźnie wyklucza rolę administratora z tego, co rejestracja może przypisać, więc jest to problem podniesienia uprawnień ograniczony do roli innej niż administrator, a nie przejęcie serwera, przejęcie konta administratora czy zdalne wykonanie kodu. Po drugie, punktem wejścia jest opublikowany formularz rejestracji z polem wyboru roli, więc problem sięga tylko stron skonfigurowanych w ten sposób; strona bez publicznej samodzielnej rejestracji albo taka, której formularze nie pozwalają odwiedzającemu wybrać roli, najprawdopodobniej nie jest narażona, nawet w wersji, której dotyczy problem. I powtarzając to wprost, nic nie wskazuje na aktywne wykorzystywanie: luka nie figuruje w katalogu znanych wykorzystywanych podatności CISA, a mnie nie są znane żadne doniesienia o wykorzystywaniu.
Jeśli moja wiadomość e-mail przywołała ten problem, oznacza to, że wersja, którą zgłasza Twoja strona, mieści się w zakresie, którego dotyczy problem. Nie testowałem, czy Twoja konkretna strona jest podatna na wykorzystanie, i nie widzę, jak skonfigurowane są Twoje formularze rejestracji; jedyne, co zaobserwowałem, to że strona zgłasza wersję, której dotyczy problem.
Czy problem mnie dotyczy?
Rozstrzygają o tym dwa pytania, w tej kolejności.
Po pierwsze: czy publikujesz formularz rejestracji ProfilePress, który pozwala odwiedzającemu wybrać rolę? To pytanie rozstrzygające i tylko Ty możesz na nie odpowiedzieć.
- Jeśli Twoja strona nie oferuje publicznej samodzielnej rejestracji albo jej formularze
rejestracji nie zawierają pola wyboru roli (shortcode
[reg-select-role]albo pole “reg-select-role” w kreatorze formularzy), najprawdopodobniej nie jesteś narażony, nawet w wersji, której dotyczy problem. Aktualizacja jest nadal zalecana, jako zwykła konserwacja. - Jeśli Twoja strona publikuje frontendowy formularz rejestracji z polem wyboru roli, problem Cię dotyczy i powinieneś niezwłocznie zaktualizować.
- Aby to sprawdzić: w panelu administracyjnym WordPress sprawdź, czy Twoje formularze rejestracji ProfilePress mają pole roli, albo otwórz jedną ze swoich stron rejestracji w oknie przeglądania prywatnego i zobacz, czy odwiedzającemu, który nie jest zalogowany, oferowany jest wybór roli konta.
Po drugie: z jakiej wersji korzystasz? Nie musisz wierzyć mi na słowo, a w przypadku tej wtyczki wersja jest zgłaszana wiarygodnie.
Z panelu administracyjnego WordPress (wiarygodne źródło):
- Zaloguj się do kokpitu WordPress (zwykle pod adresem
yourdomain.com/wp-admin). - Przejdź do Wtyczki następnie Zainstalowane wtyczki.
- Znajdź wpis wymieniony jako “Paid Membership Plugin … ProfilePress” (jego folder to
wp-user-avatar) i odnotuj wersję pokazaną pod jego nazwą. To jest rzeczywiście zainstalowana wersja.
Z publicznego manifestu (bez logowania): otwórz w przeglądarce
yourdomain.com/wp-content/plugins/wp-user-avatar/readme.txt. Wiersz Stable tag: blisko
początku to wersja, którą zgłasza Twoja instalacja, i jest to ten sam publiczny plik, który
odczytałem.
Jedna drobna uwaga, jeśli należysz do osób, które odczytują numery wersji z adresów URL
zasobów: oceniaj wersję na podstawie wartości ?ver= własnego pliku frontend.min.js lub
frontend.min.css wtyczki, która jest wersją ProfilePress. Nie odczytuj jej z dołączonego
select2/select2.min.css, którego ?ver= (na przykład 7.0.2) jest wersją samej biblioteki
select2 i nie ma nic wspólnego z wersją wtyczki.
Następnie zastosuj poniższą regułę, pamiętając, że wersje porównuje się numerycznie, a nie alfabetycznie:
- Od 3.0.0 do 4.16.17: potencjalnie objęte problemem (z zastrzeżeniem powyższego pytania o formularz rejestracji), zaktualizuj teraz.
- 4.16.18 lub nowsza: już naprawiona. Obejmuje to bieżące wydanie 4.16.19.
- Starsze niż 3.0: ten problem ich nie dotyczy. Podatna obsługa rejestracji pojawiła się po raz pierwszy wraz ze zmianą marki ProfilePress 3.0; wcześniejsza linia “WP User Avatar” 1.x i 2.x, obsługująca wyłącznie awatary, nie miała funkcji rejestracji i jej nie zawiera. (W praktyce niemal każda bieżąca instalacja to wydanie z linii 4.16.x.)
Jak zaktualizować
Najbezpieczniejsza droga to aktualizacja przez samego WordPressa, po uprzednim utworzeniu kopii zapasowej:
- Utwórz kopię zapasową swojej strony (pliki i baza danych) przed wprowadzeniem zmian. Większość dostawców hostingu oferuje kopie zapasowe jednym kliknięciem, albo skorzystaj z wtyczki do tworzenia kopii zapasowych WordPress.
- W panelu administracyjnym WordPress przejdź do Kokpit następnie Aktualizacje, albo Wtyczki następnie Zainstalowane wtyczki. Jeśli aktualizacja ProfilePress jest na liście, zainstaluj ją stąd.
- Jeśli wolisz wiersz poleceń, WP-CLI robi to samo:
wp plugin update wp-user-avatar(polecenie używa nazwy folderu,wp-user-avatar). - Jeśli nie pojawi się żadna aktualizacja, możesz pobrać najnowsze wydanie bezpośrednio ze strony wtyczki w katalogu WordPress.org, ProfilePress, i zaktualizować przez Wtyczki następnie Dodaj nową wtyczkę następnie Wyślij wtyczkę na serwer.
- Po aktualizacji potwierdź nowy numer wersji (4.16.18 lub nowszy; bieżące wydanie to 4.16.19) zgodnie z powyższymi krokami i sprawdź, czy Twoje strony rejestracji i logowania działają normalnie.
Skoro już tam jesteś, warto potwierdzić, że rdzeń WordPress oraz pozostałe wtyczki są aktualne, ponieważ ta sama zasada dotyczy ich wszystkich.
Po aktualizacji
Aktualizacja do 4.16.18 lub nowszej zamyka problem i dla większości stron to całe zadanie. Nic nie wskazuje na to, że luka ta była gdziekolwiek wykorzystywana, więc nie wynika z tego potrzeba żadnej reakcji awaryjnej: nie musisz traktować swojej strony jako naruszonej ani wyłączać jej.
Warto rozważyć jeden krok uzupełniający, a jest on zależny od tego samego pytania o rejestrację. Jeśli Twoja strona publikowała formularz rejestracji ProfilePress z polem wyboru roli, będąc w wersji, której dotyczy problem, to przynajmniej teoretycznie możliwe było, że odwiedzający zarejestrował się z wyższą rolą, niż zamierzano, mimo że nie ma dowodów, by ktokolwiek to zrobił. W takim przypadku rozsądny jest jeden rutynowy środek ostrożności:
- Przejrzyj niedawne rejestracje użytkowników pod kątem kont utworzonych z nieoczekiwanie wysoką rolą (na przykład Redaktora lub Autora, którego nie rozpoznajesz), w zwykły sposób, w jaki przeglądasz aktywność na stronie, i popraw lub usuń wszystko, co wygląda nie na miejscu.
Potraktuj to jako zwykłe porządki w zakresie bezpieczeństwa, a nie reakcję na incydent. Jeśli nie oferujesz publicznej samodzielnej rejestracji z polem wyboru roli, sama aktualizacja wystarczy.
Co zrobiłem, a czego nie zrobiłem
Aby zachować pełną przejrzystość co do sprawdzenia stojącego za moją wiadomością e-mail:
odczytałem wyłącznie publiczne pliki, które Twoja strona i tak udostępnia każdemu
odwiedzającemu, konkretnie publiczny plik readme.txt wtyczki oraz Twoją stronę główną.
Nie uzyskałem dostępu do Twojego panelu administracyjnego WordPress, Twojej bazy danych ani
żadnej prywatnej części strony. W szczególności nie dotknąłem podatnej ścieżki rejestracji
i niczego nie testowałem ani nie wykorzystywałem.
Jest to obserwacja oparta na wersji: Twoja strona zgłasza wersję w zakresie, którego dotyczy problem. Ponieważ problem ten zależy od konfiguracji, strona w tym zakresie może w ogóle nie być narażona (jeśli nie oferuje publicznej samodzielnej rejestracji albo jej formularze nie zawierają pola wyboru roli), a może też być już złagodzona w inny sposób, na przykład zaporą aplikacji webowych. To powiadomienie nie jest stwierdzeniem, że Twoja strona była podatna na wykorzystanie w chwili, gdy ją sprawdzałem.
Nie mam webmastera / utknąłem
Jeśli nie jesteś osobą, która utrzymuje stronę, prześlij tę stronę temu, kto to robi (Twojemu deweloperowi, agencji lub dostawcy hostingu). Szybko rozpoznają powyższe kroki.
Jeśli sam utrzymujesz stronę i utkniesz, chętnie pomogę Ci wskazać właściwy kierunek, bezpłatnie. Skontaktuj się, korzystając z danych kontaktowych poniżej.
Kontakt
Evan Harris, badacz bezpieczeństwa
- E-mail: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Kontaktuję się w sprawach takich jak ta wyłącznie po to, by pomóc operatorom zabezpieczyć ich strony. Jeśli wolisz nie być więcej kontaktowany, po prostu daj mi znać, a uszanuję to.
Źródła
Oficjalne biuletyny i śledzenie
Producent / wtyczka