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ż wtyczka, 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
- 0przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- —33 przebiegów bez liczby stron
CARD
karta z kodu CREATO_PING, odczyt 22.09.2026Jak ten parametr trafia do ClickUpa: wynik sondy to linia w subtasku 2. Pomiar, a usterka, którą otwiera — linia w subtasku 1. Podsumowanie (z identyfikatorem CWE i kategorią OWASP), skąd liczy się wskaźnik zagrożenia i status strony. Projekcja z bazy skanera odświeża oba subtaski co godzinę. Do 22.09 każde ustalenie dostawało własny subtask i status ze starego słownika (PODATNA, WARNING…) — te słowa zostały jeszcze w części opisów pomiaru niżej jako język wewnętrzny sond.
| Obszar i ważność | Bezpieczeństwo · wysoka (B08) |
|---|---|
| Workflow i częstotliwość | creato_ping_security_v2 · P3 działa na LAB247Skaner 2.0, rytm „p3” / „bezpieczenstwo”: premium co 6 h, reszta co 24 h (tier 1–3), co 9 dni (tier 4) · 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 wtyczka, bez Checku 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 = 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, update_data_missingCREATO_PING/wp-plugin/creato-ping/creato-ping.php → wiek danych o aktualizacjach (48 h) |
| Retencja odczytów | Odczyt z zewnątrz: wiersz w tabeli `odczyty` skanera (sonda wp_fingerprint, import JSONL zlecenia), z tym samym oknem retencji co inne odczyty. 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/creato-ping.php · LAB247/site/src/lib/ingest/apply.ts · CREATO_PING/skaner/usterki.toml · CREATO_PING/skaner/ocena.py · odczyt 22.09.2026 |
wp_fingerprint: bramka polityki zamknięta (gate=false) — zostaje odczyt i werdykt „bez_subtaska” w bazie skanera, sprawa nie powstaje, więc usterka „Rozpoznano wersję WordPressa (informacja)” (waga 0) nie wchodzi do wskaźnika strony. outdated_wp: bramka polityki zamknięta (gate=false) — zostaje odczyt i werdykt „bez_subtaska” w bazie skanera, sprawa nie powstaje, więc usterka „Nieaktualny rdzeń WordPressa bez potwierdzonej luki” (waga 2) nie wchodzi do wskaźnika strony. Wersja od środka, z wtyczki monitorującej, trafia do opisu strony i do panelu LAB247; dane o aktualizacjach starsze niż 48 h dają `update_data_missing` — usterkę monitoringu, która oceny nie obniża, a przy zerze potwierdzonych usterek daje status „niezbadana”.
| Kod | Finding | Severity | Pewność | Skutek | Finding / alarm | Waga → ocena | Co zrobić |
|---|---|---|---|---|---|---|---|
| B08.01 | Nieaktualny rdzeńoutdated_wp | Średnia | Niepewne | do weryfikacji | nie / nie | waga 2 → ocena 3–4 (niebieski) | Zaktualizuj przy najbliższym oknie serwisowym. |
| B08.02 | Wersja WordPresswp_fingerprint | Niska | Ewidentne | bez wpływu | nie / nie | waga 0 — nie usterka | Nic do zrobienia. |
| B08.03 | Nie ustalono wersji WordPressa — luki nie mają do czego się dopasowaćwersja_nieznana | — | — | — | — / — | waga 2 — monitoring, oceny nie obniża | — |
| Kod i klucz | B08.01 · outdated_wp · w tabeli typów |
|---|---|
| Co znaczy | Rdzeń WordPress jest nieaktualny, bez potwierdzonego CVE. |
| Kiedy powstaje | Gdy fingerprint ma wp_version, a dla slugu „wordpress” (sw_type core) nie ma żadnej aktywnej luki, ale wersja < najwyższej górnej granicy (< / <=) z affected_versions wpisów rdzenia w indeksie Wordfence → outdated_plugin przemianowany na outdated_wp (severity low).Brak porównania z najnowszym wydaniem WP z wordpress.org — wyłącznie heurystyka z feedu Wordfence. |
| Severity · pewność | Średnia · Niepewne |
| Skutek dla strony | do weryfikacji · tylko statystyka (gate=false) · alarm nie |
| Waga → ocena | waga 2 → ocena 3–4 (niebieski) |
| Klasyfikacja | OWASP ASVS 5.0.0: 15.2.1OCSF 1.9.0: Compliance Finding (class_uid 2003) |
| Rekord OCSF | finding_info.analytic.uid = "B08.01" · analytic.name = "outdated_wp" · finding_info.types = ["B08 Wersja WordPressa"] |
| Co zrobić | Zaktualizuj przy najbliższym oknie serwisowym. |
| Wersje typu |
|
| Kod i klucz | B08.02 · wp_fingerprint · w tabeli typów |
|---|---|
| Co znaczy | Wykryta wersja rdzenia — informacja wejściowa do dopasowania CVE. |
| Kiedy powstaje | Nie emitowany jako finding_type: fingerprint_one zwraca słownik wyniku (wp_version, plugins, themes, active_theme, php_version, behind_cdn, unreliable) bez pola finding_type; „wp_fingerprint” to tylko nazwa Checku/Resultu.nie emitowany: tylko wpis w polityce/katalogu (config/incident_policy.toml:156; skaner/usterki.toml:260, waga 0). Kontekst: wersja rdzenia tylko z meta generator „WordPress X”, potem <generator> w /feed/, potem /readme.html z markerem; akceptowana przy majorze 3–10. unreliable = behind_cdn i brak wersji WP i brak wtyczek (wp_fingerprint.py:576) — wtedy vuln_match nie rusza. |
| Severity · pewność | Niska · Ewidentne |
| Skutek dla strony | bez wpływu · tylko statystyka (gate=false) · alarm nie |
| Waga → ocena | waga 0 — nie usterka |
| Klasyfikacja | MITRE ATT&CK 19.2: T1592.002 Gather Victim Host Information: Software (jak atakujący)OCSF 1.9.0: poza klasami Findingu |
| Rekord OCSF | finding_info.analytic.uid = "B08.02" · analytic.name = "wp_fingerprint" · finding_info.types = ["B08 Wersja WordPressa"] |
| Co zrobić | Nic do zrobienia. |
| Wersje typu |
|
| Kod i klucz | B08.03 · wersja_nieznana → wp_version_unknown (klucz angielski przyjęty 01.10; skaner nadaje jeszcze stary) · w tabeli typów |
|---|---|
| Co znaczy | opis do opracowania |
| Kiedy powstaje | Tylko atom skanera: tytuł version_summary ma „WP: nieznana” (regex WP:\s*(?P<wersja>[^\s(|]+), wersja zaczyna się od „nieznan”). Tytuł ma tę postać, gdy fingerprint nie ustalił wp_version (brak meta generator, <generator> w /feed/ i readme.html z markerem albo major poza 3–10), a podsumowanie istnieje, czyli jest ≥1 aktywny vuln_cve wtyczki/motywu.Tytuł: helpers/version_summary.py:238–244. Strona bez aktywnego CVE nie dostaje podsumowania, więc nie dostaje tego atomu nawet przy nieznanej wersji WP. |
| Severity · pewność | — |
| Skutek dla strony | — · brak w polityce |
| Waga → ocena | waga 2 — monitoring, oceny nie obniża |
| Klasyfikacja | OCSF 1.9.0: poza klasami Findingu |
| Rekord OCSF | finding_info.analytic.uid = "B08.03" · analytic.name = "wp_version_unknown" · finding_info.types = ["B08 Wersja WordPressa"] |
| Co zrobić | — |
| Wersje typu |
|
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ż: Luki wtyczek i motywów
- 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ż: Wstrzyknięty skrypt, 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 = update_data_missing (WARNING, subtask).wp-plugin/creato-ping/creato-ping.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 |