default_role
| Po angielsku | default_role |
|---|---|
| Którą formą pisać | po angielsku Polski odpowiednik istnieje, ale w praktyce nikt tak nie pisze. Zostaw angielski, polski trzymaj jako synonim. |
| Inne formy | domyślna rola nowego użytkownika · New User Default Role · rola domyślna |
| Kategoria | Strony WWW, WordPress i hosting |
default_role to opcja WordPressa, która określa rolę przypisywaną każdemu nowemu użytkownikowi: zarówno temu, kto zarejestrował się sam, jak i temu, kogo dodał administrator na ekranie Użytkownicy [1]. W panelu nosi nazwę „Domyślna rola nowych użytkowników” i znajduje się w Ustawieniach ogólnych [1]. Wartością domyślną jest subscriber, czyli Subskrybent [2]. Razem z opcją users_can_register decyduje o tym, jakie uprawnienia może zdobyć obca osoba bez udziału administratora.
Jak działa
WordPress przechowuje ustawienie jako zwykłą opcję w bazie danych. Dokumentacja Options API opisuje default_role jako domyślną rolę użytkowników rejestrujących się na stronie, typu tekstowego, z wartością subscriber [2]. Obok niej leży users_can_register, czyli pole „Każdy może się zarejestrować”, typu liczbowego, domyślnie 0 [2]. Zaznaczenie tego pola pozwala każdemu założyć konto na stronie [1].
Obie opcje działają razem. Przebieg samodzielnej rejestracji pokazuje schemat poniżej.
Lista wyboru na ekranie ustawień obejmuje pięć ról: Administrator, Redaktor, Autor, Współpracownik i Subskrybent [1]. Każda z nich oznacza inny zakres ról i uprawnień użytkowników.
Odmiany
Znaczenie opcji zależy od tego, jaką rolę wskazuje. Tabela zestawia role dostępne na liście z opisem z dokumentacji WordPressa.
| Rola jako default_role | Co może nowy użytkownik |
|---|---|
| Subskrybent | tylko zarządzać własnym profilem [3] |
| Współpracownik | pisać własne wpisy bez publikacji [3] |
| Autor | publikować własne wpisy i wgrywać pliki [3] |
| Redaktor | publikować i zarządzać wpisami innych osób [3] |
| Administrator | wszystkie funkcje administracyjne strony [3] |
Wtyczki mogą dopisywać własne role, na przykład klienta sklepu. Dokumentacja dla twórców wtyczek zaznacza, że rola dodana przez add_role() zostaje zapisana w bazie danych [4]. Gdy wtyczka usuwa rolę Subskrybenta, powinna ustawić nową wartość default_role przez update_option(), bo Subskrybent jest domyślną rolą WordPressa [4]. Ten sam podręcznik odradza usuwanie ról Administratora i Superadministratora oraz przypomina, że kolejne aktualizacje WordPressa mogą przywrócić usunięte role domyślne [4]. Dla bezpieczeństwa oznacza to, że lista ról na stronie zależy od historii zainstalowanych wtyczek, a nie tylko od bieżącej konfiguracji. Rola pozostawiona przez odinstalowaną wtyczkę może nadal istnieć w bazie i nadal być wskazana jako default_role, dlatego wartość opcji warto porównać z aktualną listą ról.
W WordPressie
Ryzyko pojawia się dopiero w zestawieniu z otwartą rejestracją. Przy wyłączonej rejestracji default_role dotyczy tylko kont dodawanych ręcznie przez administratora. Przy włączonej rejestracji każda rola wyższa niż Subskrybent daje nieznajomemu uprawnienia do treści, a rola Administrator — pełną kontrolę nad stroną [3].
Rola Redaktora ma dodatkowo uprawnienie unfiltered_html na pojedynczej witrynie [3]. Uprawnienie to pozwala publikować znaczniki HTML, a nawet JavaScript, a dokumentacja ostrzega przed nadawaniem go niezaufanym użytkownikom [3]. Redaktor jako rola domyślna oznacza więc w praktyce możliwość wstrzyknięcia Stored XSS przez każdego, kto założy konto.
Opcje users_can_register i default_role są też celem ataków, a nie tylko pomyłek w konfiguracji. Błąd we wtyczce, który pozwala zmieniać dowolne opcje, umożliwia atakującemu włączenie rejestracji i ustawienie roli domyślnej na Administrator. To odmiana eskalacji uprawnień, którą MITRE opisuje jako niewłaściwe przydzielanie, zmienianie lub sprawdzanie uprawnień podmiotu [7].
Zagrożenia i skutki
- Nieautoryzowane konto administratora utworzone przez zwykły formularz rejestracji.
- Instalacja złośliwej wtyczki, tylnej furtki (backdoor) albo podmiana plików motywu z konta o wysokich uprawnieniach [6].
- Masowe konta zakładane przez złośliwe boty, nawet przy roli Subskrybenta; formularz rejestracji bywa więc chroniony przez CAPTCHA.
- Publikacja spamu lub złośliwego kodu przez role Autora i Redaktora.
Jak się bronić
- Wyłączyć rejestrację, jeśli strona jej nie potrzebuje. Domyślnie jest wyłączona [2].
- Przy włączonej rejestracji zostawić rolę Subskrybenta albo najniższą rolę wymaganą przez wtyczkę sklepu lub forum, zgodnie z zasadą najmniejszych uprawnień. MITRE zaleca staranne zarządzanie uprawnieniami i jawne wydzielanie stref zaufania [7].
- Okresowo sprawdzać obie opcje i listę administratorów, na przykład z wiersza poleceń:
wp option get users_can_register
wp option get default_role
wp user list --role=administrator
- Traktować nieoczekiwaną zmianę tych opcji jako możliwy ślad włamania i monitorować ją tak samo jak zmiany w plikach.
- Aktualizować wtyczki obsługujące rejestrację i profile, bo to one najczęściej zawierają błędy weryfikacji uprawnień.
Historia i przykłady
W czerwcu 2023 roku WPScan opisał kampanię wykorzystującą wtyczkę Ultimate Member w wersjach poniżej 2.6.7, zainstalowaną na ponad 200 000 stron [6]. Błąd, oznaczony jako CVE-2023-3460, polegał na tym, że wtyczka nie blokowała tworzenia kont z dowolnymi uprawnieniami, co pozwalało zakładać konta administratorów bez logowania [5]. Atakujący w trakcie rejestracji manipulowali polem wp_capabilities, w którym WordPress przechowuje rolę i uprawnienia użytkownika [6]. Schemat ataku obejmował rejestrację, logowanie przez wp-login.php i wgranie złośliwej wtyczki [6]. WPScan zalecał aktualizację do 2.6.7 i przegląd kont administratorów [6]. Przypadek pokazuje, że rola nowego konta może zostać podniesiona z pominięciem default_role, dlatego sama poprawna wartość opcji nie wystarcza.
Przypisy
7- [1] Settings General Screen · WordPress.org
- [2] Options API — Common APIs Handbook · WordPress.org
- [3] Roles and Capabilities · WordPress.org
- [4] Roles and Capabilities — Plugin Handbook · WordPress.org
- [5] Ultimate Member before 2.6.7 — WPScan vulnerability entry (CVE-2023-3460) · WPScan
- [6] Hacking Campaign Actively Exploiting Ultimate Member Plugin · WPScan
- [7] CWE-269: Improper Privilege Management · MITRE