Wersja WordPressa
ważność wysokamierzonysposób wp_fingerprint
Wykrycie wersji rdzenia z nagłówków, tagu meta generator i sum kontrolnych plików. Stara wersja to znane podatności.
Na stronach z wtyczką monitorującą wersję przysyła też Wtyk, od środka.
WIKI
artykuł z 16.09.2026 · źródeł 10Wersja WordPressa to parametr monitoringu stron internetowych, który ustala numer wersji rdzenia WordPress zainstalowanego na stronie. Wynikiem jest numer wersji ze wskazaniem źródła odczytu albo wersja nieznana. Sam numer nabiera znaczenia dopiero w zestawieniu z cyklem wsparcia projektu: WordPress.org klasyfikuje każde wydanie jako najnowsze (latest), nieaktualne, ale wciąż łatane (outdated), albo niebezpieczne (insecure) [5].
Jak działa
Z zewnątrz wersję rdzenia widać tylko tam, gdzie WordPress sam ją wypisuje. Funkcja get_the_generator tworzy znacznik generatora w kilku formatach: dla HTML jest to <meta name="generator" content="WordPress X">, a dla kanału RSS 2.0 element <generator> z adresem https://wordpress.org/?v=X [6]. Każdy format przechodzi przez filtr get_the_generator_{$type}, więc wtyczka może znacznik zmienić albo usunąć [6]. Odczyt z zewnątrz obejmuje zatem kod strony głównej i kanał /feed/, bo generator jest w obu miejscach wypisywany osobno [6].
Trzecim tropem był plik readme.html w katalogu instalacji. W grudniu 2016 roku z jego nagłówka usunięto wiersz z numerem wersji (wtedy „Version 4.8”), a razem z nim test, który pilnował zgodności tego numeru z wersją rdzenia [8]. Numer zniknął więc z pliku od wydania 4.8; starsze instalacje mogą go nadal ujawniać [8].
Mylącym tropem jest parametr ?ver= na zasobach z katalogu wp-includes. Domyślną wersją skryptów i stylów rdzenia jest wprawdzie wersja WordPressa (get_bloginfo( 'version' )), ale biblioteki dołączone do rdzenia są rejestrowane z własnymi numerami, np. jQuery z wersją 3.7.1, a jQuery Migrate z 3.4.1 [7]. Odczyt ?ver=3.7.1 z pliku jQuery to numer biblioteki, nie rdzenia.
Źródła różnią się pewnością. Kod działający wewnątrz WordPressa odczytuje wersję wprost, tak jak rdzeń podstawia ją do adresów własnych zasobów [7]. Znaczniki generatora pochodzą z tej samej funkcji, ale filtr może je usunąć [6], a readme.html pomaga tylko przy starych instalacjach [8]. Brak wszystkich sygnałów oznacza wersję nieznaną, nie aktualną.
Standardy i specyfikacje
- Polityka wsparcia. Archiwum wydań podaje, że bezpieczna i aktywnie utrzymywana jest tylko najnowsza wersja z serii 7.1 [1]. Zespół bezpieczeństwa WordPressa zaznacza, że jedyną aktywnie wspieraną wersją jest najnowsza, a poprawki bezpieczeństwa trafiają do starszych gałęzi wyłącznie grzecznościowo [2].
- API wersji. Zapytanie
core/version-check/1.7zwraca oferty aktualizacji:upgradedo najnowszego wydania i ofertyautoupdatedla starszych gałęzi. We wrześniu 2026 roku lista sięga od 7.1 do 4.7.35 [4]. Zapytaniecore/stable-check/1.0przypisuje każdemu wydaniu jedną z trzech etykiet [5]. - Automatyczne aktualizacje. Wprowadzono je w WordPressie 3.7. Domyślnie obejmują wydania drobne, czyli poprawkowe i bezpieczeństwa; od wersji 5.6 nowe instalacje dostają także wydania główne, a istniejące zachowują wcześniejsze ustawienie [3]. Stała
WP_AUTO_UPDATE_COREprzyjmujetrue,falsealbo'minor', aAUTOMATIC_UPDATER_DISABLEDwyłącza wszystkie aktualizacje automatyczne [3]. - CPE. Słownik CPE prowadzony przez NVD zawiera nazwę
cpe:2.3:a:wordpress:wordpress:6.8.2:*:*:*:*:*:*:*z tytułem „WordPress 6.8.2”; producent i produkt towordpress, a wersja jest osobnym składnikiem nazwy [10]. - OWASP WSTG. Przewodnik testów wymienia znacznik
<meta name="generator" content="WordPress X.X" />jako identyfikator WordPressa w kodzie strony [9].
Zagrożenia i skutki
Wydanie bez poprawek. Etykietę insecure mają wszystkie wydania gałęzi 4.6 oraz wcześniejsze wydania gałęzi wciąż wspieranych, np. 7.0.3 [5]. Od lipca 2025 roku wersje 4.1–4.6 nie dostają poprawek bezpieczeństwa; według WordPress.org ponad 99% instalacji działa na nowszych wersjach [2]. Najstarszą gałęzią z ofertą automatycznej aktualizacji jest 4.7 [4].
Starsza gałąź, ale załatana. Ostatnie wydania starszych gałęzi, np. 6.8.8 czy 4.7.35, mają etykietę outdated, nie insecure [5]. Porównanie numeru wyłącznie z najnowszym wydaniem wrzuca je do jednego worka z wersjami bez poprawek. Poprawki wsteczne są jednak grzecznością i mogą się skończyć, tak jak dla gałęzi 4.1–4.6 [2].
Wyłączone aktualizacje. Przy WP_AUTO_UPDATE_CORE równym false wyłączone są aktualizacje rdzenia wszystkich typów [3]. Wersja stoi wtedy w miejscu, a po wydaniu kolejnej poprawki zmienia etykietę na insecure, jak 7.0.3 po wydaniu 7.0.4 [5].
Ukrywanie wersji. Znacznik generatora można usunąć filtrem [6], a readme.html od 4.8 numeru nie podaje [8]. OWASP nazywa ukrywanie nagłówków, ścieżek i znaczników frameworka „security through obscurity”, które spowalnia tylko najmniej zaawansowanych napastników [9]. Wersja nieznana nie mówi więc nic o tym, czy strona jest aktualna.
Błędny odczyt. Numer biblioteki z ?ver= wzięty za wersję rdzenia [7] daje wersję, której na stronie nie ma. Wersja jest składnikiem nazwy CPE [10], więc taki odczyt wskazuje inne wydanie niż zainstalowane.
Przykłady
| Sytuacja | Co widać z zewnątrz | Ocena według cyklu wsparcia |
|---|---|---|
| Najnowsze wydanie | meta generator z numerem 7.1 [6] | latest [5] |
| Ostatnie wydanie starszej gałęzi | ?v=6.8.8 w generatorze kanału RSS [6] | outdated, poprawki wsteczne grzecznościowo [5] [2] |
| Wcześniejsze wydanie wspieranej gałęzi | meta generator z numerem 7.0.3 [6] | insecure [5] |
| Gałąź po końcu wsparcia | numer 4.6.x w generatorze albo w readme.html starej instalacji [6] [8] | insecure, bez poprawek od lipca 2025 [5] [2] |
Generator usunięty, readme.html bez numeru | brak odczytu [6] [8] | wersja nieznana, nie aktualna [9] |
Zasób jQuery z ?ver=3.7.1 | numer biblioteki, nie rdzenia [7] | odczyt do odrzucenia |
| Automatyczne aktualizacje wyłączone | numer bez zmian od miesięcy [3] | z czasem insecure [5] |
- [1] Releases — WordPress.org · WordPress.org
- [2] Dropping security updates for WordPress versions 4.1 through 4.6 · WordPress News
- [3] Upgrading WordPress — Configuring Automatic Background Updates · WordPress Developer Resources
- [4] Core version-check API 1.7 · WordPress.org API
- [5] Core stable-check API 1.0 · WordPress.org API
- [6] get_the_generator() — Function Reference · WordPress Developer Resources
- [7] script-loader.php (wordpress-develop, trunk) · WordPress Core
- [8] Remove the WordPress version number from readme.html (commit 9e70bab, trunk@39583) · WordPress Core
- [9] WSTG — Fingerprint Web Application Framework · OWASP
- [10] NVD CPE API — cpe:2.3:a:wordpress:wordpress:6.8.2 · NIST (National Vulnerability Database)
STATS
wyniki z systemu · tylko liczby zbiorczeTen parametr nie zapisuje odczytu per strona — przebieg zostawia tylko ustalenia, więc liczby sprawdzonych stron i wyników „ok” system nie ma. Pojawią się po wdrożeniu zapisu przebiegów per strona per parametr.
Ten parametr nie otworzył jeszcze żadnego ustalenia w bazie LAB247. Pusto nie znaczy „czysto” — znaczy, że nic nie przekroczyło reguły.
- Przebiegów
- 33sposób wp_fingerprint
- W 30 dni
- 33przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- —33 przebiegów bez liczby stron
CARD
karta z kodu CREATO_PING, odczyt 16.09.2026| Obszar i ważność | Bezpieczeństwo · wysoka (B08) |
|---|---|
| Workflow i częstotliwość | creato_ping_security_v2 · P3 działa na LAB247cron co 24 h, T1–T3; T4 raz po anomalii · Dokładny skan. dns_integrity porównuje NS, MX, SPF i DMARC z wzorcem z poprzedniego przebiegu.creato_ping_plugin_report_v1 działa na LAB247webhook od wtyczki monitorującej · Od środka WordPressa: wersje rdzenia i wtyczek przysyła Wtyk, bez sondy z zewnątrz. |
| Sonda i helper | sposób wp_fingerprint · CREATO_PING/helpers/wp_fingerprint.py |
| Testy |
|
| Typ wyniku | numer wersji rdzenia ze źródłem (meta generator, generator feedu, readme.html) albo brak; osobno ustalenie outdated_wp z dopasowania do feedu podatności |
| Jednostka | brak — wersja jako tekst |
| Próg i reguła | Reguła, nie próg: wygrywa pierwsze źródło z wiarygodnym odczytem. outdated_wp: wersja niższa od najwyższej granicy wpisów rdzenia przy zerze aktywnych CVE. Pobranie i sondy: timeout 5,0 s. Od środka: dane o aktualizacjach starsze niż 48 h = agent_update_data_missing. |
| Gdzie leżą pokrętła | CREATO_PING/helpers/wp_fingerprint.py → _META_GENERATOR, _FEED_GENERATOR, _README_VERSION, _plausible_core_versionCREATO_PING/helpers/vuln_match.py → _latest_patched_from_entries (granica outdated_wp)CREATO_PING/config/incident_policy.toml → [finding] wp_fingerprint, outdated_wp, agent_update_data_missingCREATO_PING/wp-plugin/creato-ping-agent/creato-ping-agent.php → wiek danych o aktualizacjach (48 h) |
| Retencja odczytów | Odczyt z zewnątrz: żaden (przebiegi z --no-stats), zostaje nadpisywany subtask podsumowania w ClickUp. Odczyt od środka: każdy raport wtyczki w tabeli plugin_reports bazy LAB247, bez czyszczenia. |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/wp_fingerprint.py · CREATO_PING/helpers/html_fetch.py · CREATO_PING/helpers/vuln_match.py · CREATO_PING/helpers/version_summary.py · CREATO_PING/config/incident_policy.toml · CREATO_PING/helpers/plugin_report_writer.py · CREATO_PING/wp-plugin/creato-ping-agent/creato-ping-agent.php · LAB247/site/src/lib/ingest/apply.ts · odczyt 16.09.2026 |
Sam odczyt wersji niczego nie tworzy: wp_fingerprint ma gate=false i żaden kod go nie emituje. outdated_wp dostaje od helpera niską powagę, więc odpada na filtrze przebiegu. Wersja z zewnątrz pojawia się tylko w tytule niedzielnego subtaska „Wersje i podatności” (tylko strony z aktywnymi CVE). Wersja od środka trafia do opisu strony i do panelu LAB247; stare dane o aktualizacjach dają WARNING z subtaskiem.
| Ustalenie | Powaga | Pewność | Skutek | Subtask / alarm | Co zrobić |
|---|---|---|---|---|---|
| Wersja WordPresswp_fingerprint | Niskie | Ewidentne | bez wpływu | nie / nie | Nic do zrobienia. |
| Nieaktualny rdzeńoutdated_wp | Normalne | Niepewne | DO WERYF. | nie / nie | Zaktualizuj przy najbliższym oknie serwisowym. |
LOOP
pętli: 3Trafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.
Sygnał: Nocny skan strony z wtyczką cache dał 145 ustaleń „CVE w rdzeniu”: wtyczki optymalizacji przepisywały ?ver= na zasobach rdzenia, a odczyty wersji były śmieciowe. · dotyczy też: Dopasowanie podatności
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek rozpoznał śmieciowe wersje rdzenia
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionepewne źródła wersji, bramka wyłączona
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-07-18 | Wersja rdzenia tylko z meta generator, generatora feedu RSS albo readme.html; żaden ?ver= zasobu. Brak sygnału = wersja nieznana.helpers/wp_fingerprint.py | Fałszywa wersja z ?ver= dawała lawinę ustaleń; po zmianie 145 → 0 na stronie testowej i wypłynęły realne CVE wtyczek. | cały system Ta sama wersja rdzenia zasila parametr Wersja WordPressa. | 6b624dfbez replayubez zapisu zatwierdzenia |
| 2026-07-18 | vuln_cve, vuln_wp_core, outdated_plugin i outdated_wp: gate=false i bez alarmu — bez subtasków do czasu ustalenia sposobu prezentacji.config/incident_policy.toml | Ustalenia per CVE zapchałyby tablicę zadań; od 2026-07-19 widoczny jest jeden subtask podsumowania wersji na stronę. | cały system Bramka obejmuje też outdated_wp z parametru Wersja WordPressa. | 6b624dfbez replayubez zapisu zatwierdzenia |
| 2026-07-19 | Odczyt wersji rdzenia spoza wersji głównych 3–10 odrzucany; generator feedu RSS sprawdzany przed readme.html.helpers/wp_fingerprint.py | readme.html dawało zmyłkowy odczyt 2.7 na stronie z WordPressem 4.9. | cały system Dotyczy też parametru Wersja WordPressa — ten sam odczyt rdzenia. | 343b699bez replayubez zapisu zatwierdzenia |
Sygnał: Działające strony wypadały z całego skanu bezpieczeństwa: serwer deklarujący gzip wysyłał coś innego, a WAF odrzucał nagłówek monitora. Bez strony głównej nie było odczytu wersji ani heurystyk infekcji. · dotyczy też: Malware / infekcja, Indeksowalność
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek rozpoznał zdrowe strony jako „martwe” w skanie
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionepowtórki pobrania strony głównej
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-09-05 | Kod 403, 406, 415, 429 lub 451 dla nagłówka monitora = jedna powtórka z nagłówkami przeglądarki (nie dla Googlebota); błąd dekompresji = jedna powtórka bez kompresji.helpers/html_fetch.py | Blokada nagłówka monitora i błędny gzip dawały „stronę martwą”, choć działała dla ludzi. | cały system Wspólne pobranie strony głównej zasila też infekcję, indeksowalność i SEO; Googlebot celowo bez powtórki, żeby nie zamazać sygnału cloakingu. Wydłużenie limitu połączenia z tego samego wydania opisuje pętla exposure-h1. | b0fc77cbez replayubez zapisu zatwierdzenia |
Sygnał: Analiza incydentu w sklepie internetowym z wtyczką cache: wtyczka kasowała dane o aktualizacjach, więc WordPress „nie wiedział” o nowych wydaniach, a flaga dostępnej aktualizacji rdzenia pokazywała fałsz.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek rozpoznał fałszywe „aktualny” w analizie incydentu
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionewiek danych o aktualizacjach, nowe ustalenie
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-09-09 | Wtyczka monitorująca raportuje wiek danych o aktualizacjach rdzenia, wtyczek i motywów; puste albo starsze niż 48 h = agent_update_data_missing (WARNING, subtask).wp-plugin/creato-ping-agent/creato-ping-agent.php · config/incident_policy.toml · helpers/plugin_report_writer.py | Flaga dostępnej aktualizacji bez świeżych danych o aktualizacjach nic nie znaczy. | tylko ten parametr | 7a07050bez replayubez zapisu zatwierdzenia |