ujawnianie wersji
| Po angielsku | version disclosure / version fingerprinting |
|---|---|
| Którą formą pisać | po polsku Polska nazwa przyjęła się w tekstach i w wyszukiwarce — używaj jej samodzielnie. |
| Inne formy | ujawnienie wersji WordPressa · ukrywanie wersji WordPress · fingerprinting wersji · rozpoznawanie wersji · version disclosure |
| Kategoria | Podatności i klasy błędów |
Ujawnianie wersji to zdradzanie przez stronę, jakiej wersji oprogramowania używa: rdzenia WordPressa, wtyczek, motywu, PHP albo serwera WWW. Sekurak wymienia cztery miejsca, w których WordPress ujawnia swoją wersję: plik readme.html, metatag generator, kanały RSS i parametr ver w adresach arkuszy CSS i skryptów JavaScript [1]. Samo ujawnienie nie jest włamaniem, ale ułatwia dobranie exploita do znanej luki. Mieści się w szerszej klasie ujawnienia informacji, którą MITRE opisuje jako CWE-200 [6].
Jak działa
Numer wersji jest kluczem do publicznych baz podatności. Gdy atakujący zna wersję, sprawdza, które znane CVE jej dotyczą, i wybiera gotowy ładunek zamiast testować stronę na ślepo. OWASP w przewodniku testowania (test WSTG-INFO-08) opisuje rozpoznawanie frameworka jako krok, który znacząco pomaga w teście i ogranicza potrzebny wysiłek [4]. To samo działa na korzyść automatów: złośliwe boty skanują tysiące adresów i atakują tylko te, które przedstawiają się podatną wersją.
Wersję zdradzają nie tylko pliki, ale też nagłówki HTTP i komunikaty błędów. OWASP wskazuje nagłówek X-Powered-By, który często ujawnia wersję PHP, oraz nagłówek X-Generator [4]. Sekurak opisuje stronę błędu 404, na której serwer Apache albo Tomcat przedstawia się swoją wersją [7]. Wersję można też odczytać z plików README i Changelog: w przykładzie sekuraka narzędzie nmap z odpowiednim skryptem odczytało z pliku readme.html wersję WordPressa 3.4.1 [7].
Odmiany
Źródła wersji różnią się tym, czego dotyczą i kto może je zmienić.
- Rdzeń WordPressa. Wersję zdradzają
readme.html, metatag generator i kanały RSS [1]. Te miejsca kontroluje właściciel strony. - Wtyczki i motywy. Wersję zdradza parametr
verw adresach plików, jeśli autor go ustawił [3]. Znając wersję wtyczki, atakujący może sprawdzić, czy dotyczy jej znana podatność we wtyczce. - PHP i serwer WWW. Wersję zdradzają nagłówki odpowiedzi, na przykład
X-Powered-By, oraz strony błędów [4]. Sekurak zaleca sprawdzić, czy aplikacja albo serwer WWW „przedstawia się” swoją wersją po odwołaniu do nieistniejącej strony [7].
W WordPressie
| Miejsce | Co ujawnia | Jak ograniczyć |
|---|---|---|
readme.html w katalogu głównym | wersję rdzenia [1] | blokada pliku w konfiguracji serwera [1] |
| metatag generator | wersję rdzenia [1] | usunięcie akcji wp_generator [2] |
| kanały RSS | wersję rdzenia [1] | zmiana treści kanału [1] |
parametr ver przy CSS i JS | wersję rdzenia, wtyczki lub motywu [3] | usunięcie parametru z adresu [1] |
ciasteczko wp-settings | sam fakt użycia WordPressa [4] | zdradza system, nie wersję |
Metatag generator. Funkcja wp_generator() wypisuje znacznik generatora i jest podpięta do akcji wp_head [2]. Dokumentacja podaje sposób wyłączenia: usunięcie tej akcji w pliku motywu albo we wtyczce [2].
// wyłącza metatag generator w nagłówku strony
remove_action( 'wp_head', 'wp_generator' );
Parametr ver. Przy rejestrowaniu skryptu funkcją wp_enqueue_script() parametr $ver dodaje do adresu numer wersji jako zapytanie, żeby przeglądarka pobrała nowy plik po aktualizacji [3]. Jeśli wtyczka poda wartość false, WordPress dopisze numer aktualnie zainstalowanej wersji rdzenia; wartość null oznacza brak wersji w adresie [3]. Dlatego adres w rodzaju style.css?ver=6.x może zdradzić wersję rdzenia nawet po usunięciu metatagu.
Ścieżki i ciasteczka. OWASP wymienia katalogi /wp-admin/ i /wp-includes/ jako przewidywalne ścieżki WordPressa, a ciasteczko wp-settings jako znak rozpoznawczy tego systemu [4]. Faktu, że strona działa na WordPressie, w praktyce nie da się ukryć; można jedynie utrudnić odczyt konkretnych numerów wersji. Podobnie działa enumeracja użytkowników: przeciwnik zbiera drobne informacje, które razem ułatwiają atak.
Zagrożenia i skutki
MITRE zalicza do informacji wrażliwych stan i środowisko systemu, w tym system operacyjny i zainstalowane pakiety [6]. Ujawniona wersja nie szkodzi sama. Szkodzi wtedy, gdy wskazuje oprogramowanie z nienałataną luką, czyli gdy strona ma Vulnerable and Outdated Components. Dokumentacja WordPressa zaznacza, że starsze wersje nie otrzymują poprawek bezpieczeństwa [5]; numer takiej wersji jest dla atakującego informacją, gdzie szukać.
Ujawnianie wersji łączy się z innymi błędami konfiguracji. Publicznie dostępne pliki wrażliwe, listowanie katalogów (directory listing) i tryb debugowania na produkcji zdradzają nie tylko wersję, ale też ścieżki na serwerze i fragmenty konfiguracji.
Jak się bronić
Ukrycie wersji jest dodatkiem, nie zabezpieczeniem. Sekurak zaznacza, że ukrycie wersji nie zwalnia z używania najnowszej stabilnej wersji [1]. OWASP ocenia zmiany nagłówków, ścieżek i plików jako security through obscurity, które spowalnia tylko najmniej zaawansowanych przeciwników; czas lepiej przeznaczyć na utrzymanie rozwiązania [4]. Dokumentacja WordPressa określa takie ukrywanie jako niewłaściwą strategię podstawową, choć w niektórych miejscach pomocną [5].
Kolejność działań wynika z tych źródeł:
- Aktualizacja rdzenia WordPressa, wtyczek i motywów. Dokumentacja zaleca, by zawsze utrzymywać najnowszą wersję [5].
- Usunięcie niepotrzebnych informacji: metatagu generatora [2], dostępu do
readme.html[1], nagłówkaX-Powered-By[4]. - Sprawdzenie strony błędu 404 i nagłówków odpowiedzi, czy serwer nie podaje swojej wersji [7].
- Regularne skanowanie podatności własnej strony. Sekurak zaleca samodzielne sprawdzanie nagłówków i stron błędów pod kątem informacji o wersjach komponentów [7].
Historia i przykłady
Problem jest opisywany od lat. Sekurak w artykule z 2013 roku pokazał odczyt wersji WordPressa 3.4.1 z pliku readme.html skanerem nmap [7]. W poradniku z 2017 roku, autorstwa Marcina Pioska, te same miejsca ujawniania wersji zestawiono z metodami ich ukrycia i z zastrzeżeniem, że ukrycie nie zastępuje aktualizacji [1]. Przewodnik OWASP podaje jako przykład kodu źródłowego metatag generatora z wersją WordPress 3.9.2 [4].
Przypisy
7- [1] Jak zabezpieczyć WordPress? Poradnik krok po kroku · Sekurak
- [2] wp_generator() · WordPress.org
- [3] wp_enqueue_script() · WordPress.org
- [4] Fingerprint Web Application Framework (WSTG-INFO-08) · OWASP
- [5] Hardening WordPress · WordPress.org
- [6] CWE-200: Exposure of Sensitive Information to an Unauthorized Actor · MITRE
- [7] Jak zwiększyć bezpieczeństwo swojej webaplikacji – kilka prostych metod · Sekurak