Dopasowanie podatności
ważność krytycznamierzonysposób vuln_match
Wykryte wtyczki i motywy porównane z bazą znanych CVE (feed Wordfence). Konkretna podatność z numerem CVE i wersją.
WIKI
artykuł z 16.09.2026 · źródeł 10Dopasowanie podatności to parametr monitoringu stron WordPress, który zestawia komponenty wykryte na stronie (rdzeń, wtyczki i motywy) oraz ich wersje z bazą znanych podatności. Wynikiem jest lista wpisów, w których zakres wersji podatnych obejmuje wersję wykrytą, albo brak dopasowania. Bazy podatności WordPressa opisują każdy wpis typem oprogramowania (core, plugin albo theme), jego identyfikatorem (slugiem) i zbiorem wersji podatnych [4]. Gdy wersji nie udało się ustalić, dopasowanie po zakresie jest niemożliwe; pozostają tylko wpisy obejmujące każdą wersję, oznaczone gwiazdką [4].
Jak działa
Pomiar ma dwa etapy: rozpoznanie oprogramowania i porównanie z bazą. Strona nie publikuje listy wtyczek, więc sonda z zewnątrz wnioskuje o nich pośrednio. Jednym tropem są adresy zasobów. Funkcja wp_enqueue_script dopisuje do adresu skryptu numer wersji jako parametr zapytania, który służy do unieważniania pamięci podręcznej [7]. Gdy wtyczka przekaże tu wartość false, WordPress wstawia własną wersję rdzenia, a przy null numer nie pojawia się wcale [7]. Parametr ?ver= bywa więc numerem wtyczki, numerem rdzenia albo niczym.
Drugim tropem jest plik readme.txt. W katalogu WordPress.org pole Stable Tag wskazuje stabilną wersję wtyczki, a katalog szuka jej w podkatalogu /tags/ [6]. Sam numer wersji wyznacza jednak nagłówek głównego pliku PHP, nie nazwa katalogu ani readme [6]. Stable Tag jest więc wskazówką, nie dowodem, i może różnić się od wersji faktycznie zainstalowanej.
Porównanie korzysta ze struktury wpisu. Zakres wersji zapisany jest jako pojedyncza wersja, zakres albo przedział z nawiasami otwartymi lub domkniętymi, a pola from_inclusive i to_inclusive mówią, czy granice należą do zakresu [4]. Gwiazdka oznacza dowolną wersję [4]. Wpis podaje też, czy istnieje poprawka, i listę wersji, które ją zawierają [4].
Standardy i specyfikacje
- CVE. Program CVE identyfikuje, definiuje i kataloguje publicznie ujawnione podatności, a każdej odpowiada jeden rekord CVE [1]. Rekordy przydzielają i publikują organizacje partnerskie [1]. Opis zawiera typ podatności, producenta i dotknięty kod [2].
- NVD. Rekordy CVE trafiają do NVD zwykle w ciągu godziny, a wzbogacanie o CVSS v4.0 i v3.1, CWE oraz kryteria CPE trwa różnie długo i obejmuje określony zakres rekordów [2]. NVD zaznacza, że w kryteriach wersji podatnego oprogramowania mogą być luki [2].
- CVSS v3.1. Specyfikacja FIRST dzieli metryki na grupy Base, Temporal i Environmental; wynik bazowy zakłada rozsądnie najgorszy skutek w dowolnym środowisku [3]. Metryka Privileges Required rozróżnia atak bez uprawnień, z uprawnieniami zwykłego użytkownika i z uprawnieniami administracyjnymi [3]. Skala jakościowa: Low 0,1–3,9, Medium 4,0–6,9, High 7,0–8,9, Critical 9,0–10,0 [3].
- Wordfence Intelligence. Feed udostępnia wersję Production z pełnymi rekordami i Scanner z danymi do wykrywania; wymaga klucza API i przy zbyt częstych zapytaniach odpowiada kodem 429 [4]. Pole
cvemoże mieć wartość null, a CVSS występuje w wersjach 3.0 i 3.1 [4]. - WPScan. Druga baza, udostępniana przez API; plan bezpłatny daje 25 zapytań dziennie, a skan zużywa jedno zapytanie na wersję WordPressa, każdą wtyczkę i motyw [5].
Zagrożenia i skutki
Błędna wersja. Dopasowanie jest tak dobre jak odczyt wersji. Numer rdzenia wstawiony do zasobu wtyczki [7] albo Stable Tag rozjechany z nagłówkiem PHP [6] dają fałszywe dopasowanie albo przeoczenie. Wykrywanie z zewnątrz jest niepełne także z definicji: WPScan domyślnie wykrywa wtyczki pasywnie i do pełniejszej enumeracji wymaga osobnego ustawienia [5].
Fałszywe dopasowania przy wielu gałęziach. Wpis może zawierać kilka zakresów, a poprawka może trafić do kilku wersji naraz [4]. Gdy producent przenosi poprawkę do starszej gałęzi (backport), porównanie wyłącznie z najwyższą wersją z poprawką uzna załataną starszą gałąź za podatną.
Wtyczki spoza katalogu. Konwencja Stable Tag dotyczy katalogu WordPress.org [6]. Wtyczki komercyjne rozprowadzane poza nim nie muszą jej stosować, więc ich wersja z zewnątrz bywa nieznana.
Wtyczki zamknięte. Zamknięta wtyczka przestaje być dostępna do pobrania, a wśród powodów zamknięcia jest problem bezpieczeństwa [8]. Szczegóły są przekazywane tylko autorom i zespołowi bezpieczeństwa [8]. Wpis bez poprawki oznacza, że aktualizacja nie usunie podatności [4].
Priorytety. CVSS nie ujmuje czynników organizacyjnych, które trzeba dołożyć przy decyzji o naprawie [3]. Katalog KEV zbiera podatności wykorzystywane w praktyce i jest zalecany jako wejście do priorytetyzacji [9]. EPSS szacuje prawdopodobieństwo wykorzystania opublikowanej CVE w ciągu 30 dni i publikuje je codziennie [10]. Wpisy oznaczone jako informacyjne mają bardzo ograniczony albo żaden realny wpływ [4].
Przykłady
| Sytuacja | Co widać z zewnątrz | Wynik dopasowania |
|---|---|---|
| Wersja w zakresie podatnym | Stable tag lub ?ver= wewnątrz przedziału wpisu [4] [6] | podatna |
| Wersja z listy poprawek | numer równy wersji z patched_versions [4] | załatana |
| Zasób zarejestrowany bez wersji | ?ver= równe wersji rdzenia [7] | ryzyko fałszywego dopasowania |
| Podatność bez numeru CVE | wpis z cve równym null [4] | dopasowanie po identyfikatorze bazy |
| Wtyczka zamknięta, brak poprawki | brak pobrania w katalogu, patched równe false [8] [4] | podatna bez ścieżki aktualizacji |
| Wtyczka spoza katalogu | brak Stable Tag [6], zasoby bez ?ver= [7] | nierozstrzygnięte |
| CVE w katalogu KEV | ten sam odczyt wersji, wyższy priorytet [9] | podatna, pilna |
- [1] Overview — About the CVE Program · CVE Program
- [2] CVEs and the NVD Process · NIST (National Vulnerability Database)
- [3] CVSS v3.1 Specification Document · FIRST
- [4] V3: Accessing and Consuming the Vulnerability Data Feed · Wordfence (Defiant)
- [5] WPScan — README · WPScan Team
- [6] How Your Plugin Readme File Works · WordPress Developer Resources
- [7] wp_enqueue_script() — Function Reference · WordPress Developer Resources
- [8] Plugin Alerts and Warnings · WordPress Developer Resources
- [9] Known Exploited Vulnerabilities Catalog · CISA
- [10] Exploit Prediction Scoring System (EPSS) · FIRST
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 vuln_match
- 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 · krytyczna (B07) |
|---|---|
| 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. |
| Sonda i helper | sposób vuln_match · CREATO_PING/helpers/vuln_match.py |
| Testy |
|
| Typ wyniku | lista dopasowań: typ ustalenia, komponent (rdzeń, wtyczka, motyw), tytuł wpisu, identyfikator Wordfence, CVE, CVSS, flaga załatana |
| Jednostka | brak — wynik jakościowy; CVSS 0,0–10,0 jako waga |
| Próg i reguła | Reguła, nie próg: wersja w zakresie affected_versions = aktywna podatność (vuln_cve, vuln_wp_core); nieznana wersja pasuje tylko do wpisów „każda wersja”. Waga z CVSS: ≥ 9,0 pilna, 7,0–8,9 wysoka, 4,0–6,9 normalna, niżej albo brak — niska. Sondy wersji: timeout 5 s. |
| Gdzie leżą pokrętła | CREATO_PING/config/incident_policy.toml → [finding] vuln_cve, vuln_wp_core, outdated_plugin, outdated_wp, outdated_themeCREATO_PING/helpers/wordfence_feed.py → _severity_from_cvssCREATO_PING/helpers/wp_fingerprint.py → TOP_PLUGIN_SLUGS, _MAX_README_VERIFY, _plausible_core_versionCREATO_PING/.env → CREATO_PING_WPSCAN_ESCALATE (drugie źródło, domyślnie wyłączone) |
| Retencja odczytów | Nocny przebieg nie zostawia śladu (gate=false, --no-stats); trwały jest tylko cotygodniowy subtask podsumowania w ClickUp. Replay po surowych odczytach dziś niemożliwy. |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/vuln_match.py · CREATO_PING/helpers/wordfence_feed.py · CREATO_PING/helpers/wp_fingerprint.py · CREATO_PING/helpers/version_summary.py · CREATO_PING/helpers/security_runner.py · CREATO_PING/config/incident_policy.toml · odczyt 16.09.2026 |
Od 2026-07-18 wszystkie typy ustaleń mają gate=false: nocny skan P3 nie tworzy subtaska ani alarmu. Zapis daje cotygodniowy skan portfolio (niedziela): jeden subtask „Wersje i podatności” na stronę z aktywnymi CVE — status PODATNA, gdy choć jedna ma CVSS ≥ 9,0; strona bez aktywnych CVE ma ten subtask zamykany.
| Ustalenie | Powaga | Pewność | Skutek | Subtask / alarm | Co zrobić |
|---|---|---|---|---|---|
| CVE we wtyczce lub motywievuln_cve | Wysokie | Ewidentne | PODATNA | nie / nie | Zaktualizuj do wersji z poprawką. |
| CVE w rdzeniu WordPressvuln_wp_core | Wysokie | Ewidentne | PODATNA | nie / nie | Zaktualizuj WordPress. |
| Nieaktualna wtyczkaoutdated_plugin | Normalne | Niepewne | DO WERYF. | nie / nie | Zaktualizuj przy najbliższym oknie serwisowym. |
| Nieaktualny motywoutdated_theme | Normalne | Niepewne | DO WERYF. | nie / nie | Zaktualizuj motyw (najpierw kopia i test na kopii strony). |
LOOP
pętli: 5Trafnoś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ł: Po przejściu na feed Wordfence v3 każda wykryta wersja wychodziła jako podatna — w wynikach były wyłącznie aktywne luki.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek zauważył same aktywne luki
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionekonwersja zakresów v3 na operatory
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-05-25 | Zakresy affected_versions z formatu v3 (granice od–do z flagą włączności) zamieniane na operatory porównania; kilka zakresów jednej podatności = osobne wpisy indeksu.helpers/wordfence_feed.py | Dopasowanie nie rozumiało struktury v3 i każdą wersję uznawało za podatną. | tylko ten parametr | 82e3a58bez replayubez zapisu zatwierdzenia |
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ż: Wersja WordPressa
- 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ł: Research detekcji: feed Wordfence ma około 3100 wpisów motywów, a dopasowanie przechodziło tylko po wtyczkach — podatne motywy premium były niewidoczne.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieluka reguły potwierdzona w feedzie
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionepętla po motywach, filtr typu
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-09-05 | Dopasowanie obejmuje motywy (aktywny, widziane w HTML, nadrzędny) z filtrem typu wpisu; nieaktualny motyw = outdated_theme.helpers/vuln_match.py · helpers/wp_fingerprint.py · config/incident_policy.toml | Brak motywów był błędem konsumenta feedu, nie brakiem danych; filtr typu, bo wtyczka mieszała się z motywem o tej samej nazwie. | tylko ten parametr | b0fc77cbez replayubez zapisu zatwierdzenia |
| 2026-09-05 | Wpisy informacyjne pomijane; brak poprawki i wymagane uprawnienia z wektora CVSS dopisywane do ustalenia.helpers/vuln_match.py · helpers/wordfence_feed.py | 121 wpisów informacyjnych bez realnego wpływu i około 11,6 tys. wpisów bez poprawki, których dopasowanie nie odróżniało. | tylko ten parametr | b0fc77cbez replayubez zapisu zatwierdzenia |
Sygnał: Fałszywe CVE WooCommerce na każdym sklepie (readme.txt wskazywał wersję niższą niż zainstalowana) i kilkadziesiąt wtyczek-widm na serwerach odpowiadających 200 na każdą ścieżkę.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek porównał wersje z zainstalowanymi
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionekolejność źródeł wersji, sonda soft-404
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-09-05 | Kolejność źródeł wersji wtyczki: meta generator WooCommerce, readme.txt, na końcu ?ver= po odrzuceniu znacznika czasu i wersji rdzenia.helpers/wp_fingerprint.py | ?ver= bywa wersją rdzenia albo znacznikiem pamięci podręcznej; readme WooCommerce wskazywało wersję niższą niż zainstalowana. | tylko ten parametr | b0fc77cbez replayubez zapisu zatwierdzenia |
| 2026-09-05 | Przed enumeracją zapytanie o readme.txt nieistniejącej wtyczki; odpowiedź 200 = enumeracja przez readme.txt pominięta.helpers/wp_fingerprint.py | Serwery z soft-404 dawały dziesiątki nieistniejących wtyczek i fałszywe dopasowania. | tylko ten parametr | b0fc77cbez replayubez zapisu zatwierdzenia |
Sygnał: Po przejściu na godzinowe odświeżanie feedu pomiar odpowiedzi Wordfence pokazał stały ETag dla każdej treści — zapytanie z If-None-Match dostawałoby 304 bez końca.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręczniepomiar nagłówków odpowiedzi API
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionezapytanie warunkowe bez ETag
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-09-12 | Zapytanie warunkowe o feed wysyła tylko If-Modified-Since, bez If-None-Match.helpers/wordfence_feed.py | Stały ETag zamroziłby lokalną kopię feedu, a z nią dopasowanie do nowych podatności. | cały system Ten sam feed zasila publiczną listę podatności w serwisie. | d90c146bez replayubez zapisu zatwierdzenia |