Wstrzyknięty skrypt
ważność krytycznamierzonysposób infection
Złośliwy JavaScript wstrzyknięty w HTML strony: zaciemniony kod (base64 i eval), loader z własnej domeny, bramka SocGholish, kod pobierany z blockchaina (EtherHiding). Skutek włamania widoczny z zewnątrz.
Do 2026-10-01 „Malware / infekcja” z 10 typami; cloaking i spam przeszły do B35, obce elementy do B36, skan nierozstrzygnięty do B48.
WIKI
artykuł z 16.09.2026 · źródeł 12Malware / infekcja (ang. hacked content, website malware) — parametr monitoringu stron WordPress opisujący skutki włamania widoczne z zewnątrz, w treści odpowiedzi HTTP: wstrzyknięty lub zaciemniony JavaScript, ukryte ramki iframe, spam SEO, przekierowania i cloaking. Google definiuje treść zhakowaną jako każdą treść umieszczoną w witrynie bez zgody właściciela wskutek luk w jej zabezpieczeniach i wyróżnia cztery jej postacie: wstrzyknięcie kodu, wstrzyknięcie stron, wstrzyknięcie treści oraz przekierowania.[1]
Jak działa
Wstrzyknięty JavaScript. Wstrzyknięcie kodu ma najczęściej postać złośliwego JavaScriptu dodanego bezpośrednio do strony albo do ramek iframe.[1] Typowe ślady to element script ładujący plik z serwera napastnika oraz iframe o zerowej wysokości i szerokości ze stylem display:none, niewidoczny dla odwiedzającego.[2] Kod bywa zaciemniany, np. konstrukcją eval(atob(...)), w której eval parsuje przekazany argument i wykonuje go jako JavaScript — MDN zalicza tę funkcję do tzw. injection sinks.[4] Taki zapis ukrywa właściwą treść skryptu przed pobieżnym przeglądem kodu źródłowego strony.
Spam SEO. Wstrzyknięcie treści polega na dodaniu do istniejących stron ukrytych linków lub ukrytego tekstu, a wstrzyknięcie stron — na tworzeniu nowych podstron ze spamem.[1] W odmianie znanej jako „Japanese keyword hack” powstają automatycznie generowane strony z japońskim tekstem w katalogach o losowych nazwach, zarabiające na linkach partnerskich do sklepów z podróbkami markowych towarów; napastnik często dopisuje się też jako właściciel witryny w Google Search Console.[7]
Cloaking. Cloaking to pokazywanie wyszukiwarkom innej treści niż użytkownikom w celu manipulowania rankingiem; Google podaje przykład strony o podróżach wyświetlanej wyszukiwarce i strony z tanimi lekami wyświetlanej ludziom.[1] Wstrzyknięty kod rozpoznaje robota po nagłówku User-Agent. W przypadku opisanym przez Sucuri w styczniu 2026 roku skrypt porównywał go z listą robotów (Googlebot, Bingbot, Baiduspider): człowiek otrzymywał zwykłą stronę, robot — reklamy hazardowe.[6] Pokrewne warianty uzależniają przekierowanie od User-Agent, pory dnia lub strony odsyłającej, a część złośliwego kodu uaktywnia się wyłącznie przy wejściu z wyników wyszukiwania Google.[2]
Z zewnątrz obserwowalny jest środkowy odcinek łańcucha infekcji: kod zapisany w plikach lub bazie danych trafia do HTML-a, a stamtąd uruchamia przekierowanie albo ładunek w przeglądarce odwiedzającego.[12]
Standardy i specyfikacje
Punktem odniesienia są dokumenty wyszukiwarki Google, dokumentacja platformy webowej i zalecenia organizacji branżowych.
- Zasady Google dotyczące spamu definiują cloaking, treść zhakowaną oraz ukryty tekst i linki, np. biały tekst na białym tle albo czcionkę o rozmiarze lub przezroczystości 0.[1]
- Google Safe Browsing pozwala aplikacjom sprawdzać adresy URL na stale aktualizowanych listach niebezpiecznych zasobów: stron socjotechnicznych (phishing), stron z malware i z oprogramowaniem niechcianym. API Safe Browsing jest przeznaczone wyłącznie do użytku niekomercyjnego; do zastosowań komercyjnych Google wskazuje Web Risk API.[8]
- Raport „Problemy dotyczące bezpieczeństwa” w Google Search Console rozróżnia treść zhakowaną (wstrzyknięcie kodu, treści i adresów URL), malware i oprogramowanie niechciane oraz socjotechnikę.[3]
- MDN opisuje
evaljako punkt wstrzyknięcia podatny na XSS i jako ograniczenie ryzyka wskazuje przekazywanie obiektówTrustedScriptz wymuszeniem Trusted Types.[4] - OWASP w zestawieniu „Third Party JavaScript Management Cheat Sheet” opisuje tagi marketingowe i analityczne jako niewielkie fragmenty JavaScriptu, które wykonują się z pełnymi uprawnieniami strony, i zaleca m.in. Subresource Integrity.[9]
Zagrożenia i skutki
Strony, u których Google stwierdzi problem bezpieczeństwa, mogą otrzymać etykietę ostrzegawczą w wynikach wyszukiwania albo pełnoekranowe ostrzeżenie w przeglądarce.[3] Odwiedzający stają się celem dalszych ataków: SocGholish wyświetla okno udające komunikat przeglądarki o konieczności aktualizacji, które prowadzi do pobrania malware GhoLoader,[11] a technika ClickFix nakłania ofiarę do samodzielnego uruchomienia złośliwego polecenia w oknie „Uruchom” systemu Windows.[12]
Granice obserwacji z zewnątrz. Napastnicy serwują złośliwą treść tylko wybranym agentom lub odwiedzającym z określonych stron odsyłających, aby uniknąć wykrycia przez właścicieli i skanery.[2] Znaczna część infekcji w ogóle nie trafia do HTML-a: DollyWay tworzy konta administratorów o losowych szesnastkowych nazwach i przy każdym wczytaniu strony ponownie wstrzykuje kod do wszystkich aktywnych wtyczek,[10] SocGholish instaluje fałszywe wtyczki CMS działające jako backdoory,[11] a napastnik „Japanese keyword hack” dodaje się do właścicieli witryny w Search Console.[7] Złośliwe zadania cron potrafią ponownie zainfekować witrynę w ciągu kilku minut nawet po przywróceniu plików i bazy z czystej kopii, a skanowanie plików ani bazy danych ich nie obejmuje.[5] Obserwacja odpowiedzi HTTP wykrywa więc skutek, lecz nie potwierdza braku takich elementów.
Obce skrypty. Skrypt z cudzej domeny nie jest sam w sobie oznaką infekcji — tagi analityczne i marketingowe są standardowym elementem stron.[9] Zarazem pochodzenie z własnej domeny nie świadczy o czystości: DollyWay dołącza skrypt funkcją wp_enqueue_script pod adresem samej zainfekowanej witryny, w postaci /? z 32-znakowym skrótem MD5 i parametrem ver.[10]
Przykłady
| Kampania | Lata | Mechanizm | Skala |
|---|---|---|---|
| DollyWay World Domination | od 2016, opis 2025[10] | skrypt ładowany z domeny ofiary, ruch do sieci VexTrio/LosPollos[10] | ponad 20 000 stron w 8 lat, ok. 10 mln wyświetleń miesięcznie[10] |
| SocGholish (TA569) z TDS TA2726 | opis 2026[11] | zaciemniony JS z fałszywych wtyczek; złośliwy Keitaro TA2726 kieruje ruch wg profilu i kraju; fałszywa aktualizacja przeglądarki[11] | 14 971 stron oczyszczonych i ponad 100 serwerów oraz domen wyłączonych w Operation Endgame[11] |
| UNC5142: EtherHiding i ClickFix | 2025[12] | JS w plikach wtyczek, motywu lub w bazie; konfiguracja pobierana z kontraktów BNB Smart Chain[12] | ok. 14 000 stron z wstrzykniętym kodem (czerwiec 2025)[12] |
| Japanese keyword hack | — | generowane strony w losowych katalogach, cloaking, reguły .htaccess[7] | brak danych |
DollyWay wiąże się z kampaniami działającymi od 2016 roku; GoDaddy opisał ją w marcu 2025 roku jako operację, która w ciągu ośmiu lat zainfekowała ponad 20 000 witryn.[10] SocGholish korzysta z usługi TDS prowadzonej przez TA2726, dystrybuującej ładunki w zależności od profilu i położenia odwiedzającego; w czerwcu 2026 roku operacja Endgame wyłączyła ponad 100 serwerów i domen.[11]
EtherHiding to technika ukrywania złośliwego kodu lub danych w publicznym blockchainie, np. BNB Smart Chain. Wstrzyknięty skrypt CLEARSHORT łączy się z siecią przez publiczny węzeł RPC za pomocą biblioteki Web3.js. Zmiana adresu przynęty lub klucza w kontrakcie kosztuje od 0,25 do 1,50 USD opłat sieciowych, a niezmienność blockchaina utrudnia przejęcie i wyłączenie infrastruktury.[12]
- [1] Spam policies for Google web search · Google for Developers (Search Central)
- [2] Hacked with malware · Google (web.dev)
- [3] Security issues report · Google Search Console Help
- [4] eval() · MDN Web Docs
- [5] Attackers Abuse Cron Jobs to Reinfect Websites · Sucuri
- [6] Google Sees Spam, You See Your Site: A Cloaked SEO Spam Attack · Sucuri
- [7] Fix the Japanese keyword hack · Google (web.dev)
- [8] Safe Browsing — Overview · Google for Developers
- [9] Third Party JavaScript Management Cheat Sheet · OWASP
- [10] DollyWay World Domination: Eight Years of Evolving Website Malware Campaigns · GoDaddy
- [11] Sayonara, SocGholish: Operation Endgame Disrupts Major Cybercrime Operation · Proofpoint
- [12] New Group on the Block: UNC5142 Leverages EtherHiding to Distribute Malware · Google Threat Intelligence Group
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
- 65sposób infection
- W 30 dni
- 0przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- —65 przebiegów bez liczby stron
CARD
karta z kodu CREATO_PING, odczyt 01.10.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 · krytyczna (B06) |
|---|---|
| Workflow i częstotliwość | creato_ping_security_v2 · P4 działa na LAB247Skaner 2.0, rytm „p4”: co 24 h (tier 1–3), co 48 h (tier 4) · Szybki skan: tylko ewidentne przejęcie widoczne z zewnątrz.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. |
| Sonda i helper | sposób infection · CREATO_PING/helpers/infection_check.py |
| Testy |
|
| Typ wyniku | 0–4 ustalenia, każde osobnym typem: infection_base64_eval, infection_same_origin_loader, infection_socgholish_gateway, infection_etherhiding; w dowodzie dopasowane fragmenty |
| Jednostka | brak — wynik jakościowy |
| Próg i reguła | Reguły, nie progi: dowolne dopasowanie wzorca = ustalenie o powadze pilnej (helper i polityka zgodnie). Jedyna liczba: literał base64 ≥ 40 znaków. |
| Gdzie leżą pokrętła | CREATO_PING/helpers/infection_check.py → _BASE64_EVAL, _SAME_ORIGIN_LOADER, _SOCGHOLISH_ANCHORS, _SOCGHOLISH_ROUTE, _ETHERHIDING_RPC, _ETHERHIDING_OBFCREATO_PING/helpers/html_fetch.py → MAX_BODY_BYTESCREATO_PING/config/incident_policy.toml → [finding] infection_base64_eval, infection_same_origin_loader, infection_socgholish_gateway, infection_etherhiding |
| Retencja odczytów | Surowy pomiar jako NIEZMIENNY wiersz tabeli `odczyty` w bazie skanera (wejście, wyjście, dowody, sha karty sondy i helpera, commit kodu) — trigger odrzuca każdą zmianę. Okno retencji z kohorty: 90 dni premium, 30 dni reszta; poza oknem zostają odczyty z werdyktem problemu, akcją albo etykietą, bo replay reguł ich potrzebuje (`skaner/retencja.py`). Do LAB247 ten kanał nie idzie (do bazy serwisu jadą dziś tylko sprawdzenia dostępności), więc poza odczytem zostaje werdykt w tabeli `werdykty` i sprawa w tabeli `sprawy`. |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/infection_check.py · CREATO_PING/helpers/html_fetch.py · CREATO_PING/helpers/security_runner.py · CREATO_PING/helpers/security_testy.py · CREATO_PING/skaner/kohorty.toml · CREATO_PING/skaner/scenariusze/premium_pelny.toml · CREATO_PING/skaner/scenariusze/tani_ciezki.toml · CREATO_PING/skaner/scenariusze/tani_lekki.toml · CREATO_PING/config/incident_policy.toml · CREATO_PING/skaner/cykl.py · CREATO_PING/skaner/usterki.toml · CREATO_PING/skaner/ocena.py · odczyt 01.10.2026 |
infection_base64_eval: bramka polityki otwarta (gate=true) → sprawa w skanerze → Zaciemniony skrypt w treści strony (wstrzyknięcie) — waga 5 → ocena 9–10 (czerwony), status strony „krytyczny”, dopóki sprawa jest otwarta. infection_same_origin_loader: bramka polityki otwarta (gate=true) → sprawa w skanerze → Loader złośliwego kodu z własnej domeny — waga 5 → ocena 9–10 (czerwony), status strony „krytyczny”, dopóki sprawa jest otwarta. infection_socgholish_gateway: bramka polityki otwarta (gate=true) → sprawa w skanerze → Brama kampanii SocGholish w API strony — waga 5 → ocena 9–10 (czerwony), status strony „krytyczny”, dopóki sprawa jest otwarta. infection_etherhiding: bramka polityki otwarta (gate=true) → sprawa w skanerze → Ładunek pobierany z blockchaina (ClickFix) — waga 5 → ocena 9–10 (czerwony), status strony „krytyczny”, dopóki sprawa jest otwarta. Trzy sygnatury kampanii mają w katalogu usterek znacznik incydentu (incydent=true, kryterium właściciela z 30.09): założenie sprawy ogłasza incydent i uruchamia pomiar MTTD/MTTR (`skaner/cykl.py`). Zaciemniony skrypt waży tyle samo, ale incydentu sam nie ogłasza — bywa legalnym kodem. Sprawy zakłada rytm; w badaniu droga kończy się na usterce przebiegu i wskaźniku badania.
| Kod | Finding | Severity | Pewność | Skutek | Finding / alarm | Waga → ocena | Co zrobić |
|---|---|---|---|---|---|---|---|
| B06.01 | Zaciemniony kod JSinfection_base64_eval | Krytyczna | Ewidentne | przejęcie strony | tak / tak | waga 5 → ocena 9–10 (czerwony) | Przywróć czystą kopię plików, zmień hasła, zaktualizuj wszystko. |
| B06.02 | Loader z własnej domeny (DollyWay)infection_same_origin_loader | Krytyczna | Ewidentne | przejęcie strony | tak / tak | waga 5 → ocena 9–10 (czerwony) | Przywróć czystą kopię plików i bazy, zmień hasła, sprawdź konta administratorów. |
| B06.03 | Bramka SocGholishinfection_socgholish_gateway | Krytyczna | Ewidentne | przejęcie strony | tak / tak | waga 5 → ocena 9–10 (czerwony) | Przywróć czystą kopię, usuń nieznane wtyczki i zadania cykliczne, zmień hasła. |
| B06.04 | Payload z blockchaina (EtherHiding)infection_etherhiding | Krytyczna | Ewidentne | przejęcie strony | tak / tak | waga 5 → ocena 9–10 (czerwony) | Usuń wstrzyknięty kod z motywu i bazy, zmień hasła, zaktualizuj wszystko. |
| Kod i klucz | B06.01 · infection_base64_eval · w tabeli typów |
|---|---|
| Co znaczy | W HTML wykryto eval(atob(...)) — klasyczny web-shell lub wstrzyknięty skrypt. |
| Kiedy powstaje | HTML strony głównej (UA monitora) pasuje do regexu (case-insensitive) (?:eval|Function)\s*\(\s*atob\s*\(\s*['"][A-Za-z0-9+/=]{40,}['"]\s*\) — czyli eval(/Function( + atob( z literałem base64 o długości ≥ 40 znaków.Regex: infection_check.py:93. Wejście wspólne dla infection_*: GET {scheme}://{domena}/ (follow_redirects, max 5, cap 3 MB, timeout http 5 s, connect 5 s) z UA „CREATO_PING/1.0 (+monitoring; contact: tomek@creato.pl)”; przy 403/406/415/429/451 jedna powtórka z nagłówkami przeglądarki. Heurystyki działają tylko, gdy ten fetch ma status_code < 400 (html_fetch.py:206). Uruchamiane na poziomie p3 i p4. |
| Severity · pewność | Krytyczna · Ewidentne |
| Skutek dla strony | przejęcie strony · zakłada Finding · alarm tak |
| Waga → ocena | waga 5 → ocena 9–10 (czerwony) |
| Klasyfikacja | CWE: CWE-506 (Embedded Malicious Code)OWASP Top 10:2025: A08:2025 Software or Data Integrity FailuresMITRE ATT&CK 19.2: T1608.004 Stage Capabilities: Drive-by Target (ślad)OCSF 1.9.0: Detection Finding (class_uid 2004) |
| Rekord OCSF | finding_info.analytic.uid = "B06.01" · analytic.name = "infection_base64_eval" · finding_info.types = ["B06 Wstrzyknięty skrypt"] |
| Co zrobić | Przywróć czystą kopię plików, zmień hasła, zaktualizuj wszystko. |
| Wersje typu |
|
| Kod i klucz | B06.02 · infection_same_origin_loader · w tabeli typów |
|---|---|
| Co znaczy | Skrypt ładowany z domeny samej strony pod adresem /?<hash> — WordPress nigdy tak nie podłącza skryptów. |
| Kiedy powstaje | HTML zawiera tag pasujący do regexu (case-insensitive) <script[^>]+src=['"](?:(?:https?:)?//[^/'"]+)?/\?[0-9a-f]{32}&(?:amp;)?ver=[0-9.]+['"] — skrypt ładowany pod /?<32 znaki hex>&ver=<cyfry/kropki> (host dowolny lub względny; wzorzec DollyWay).Regex: infection_check.py:106. Wejście wspólne dla infection_*: GET {scheme}://{domena}/ (follow_redirects, max 5, cap 3 MB, timeout http 5 s, connect 5 s) z UA „CREATO_PING/1.0 (+monitoring; contact: tomek@creato.pl)”; przy 403/406/415/429/451 jedna powtórka z nagłówkami przeglądarki. Heurystyki działają tylko, gdy ten fetch ma status_code < 400 (html_fetch.py:206). Uruchamiane na poziomie p3 i p4. |
| Severity · pewność | Krytyczna · Ewidentne |
| Skutek dla strony | przejęcie strony · zakłada Finding · alarm tak |
| Waga → ocena | waga 5 → ocena 9–10 (czerwony) |
| Klasyfikacja | CWE: CWE-506 (Embedded Malicious Code)OWASP Top 10:2025: A08:2025 Software or Data Integrity FailuresMITRE ATT&CK 19.2: T1608.004 Stage Capabilities: Drive-by Target (ślad)OCSF 1.9.0: Detection Finding (class_uid 2004) |
| Rekord OCSF | finding_info.analytic.uid = "B06.02" · analytic.name = "infection_same_origin_loader" · finding_info.types = ["B06 Wstrzyknięty skrypt"] |
| Co zrobić | Przywróć czystą kopię plików i bazy, zmień hasła, sprawdź konta administratorów. |
| Wersje typu |
|
| Kod i klucz | B06.03 · infection_socgholish_gateway · w tabeli typów |
|---|---|
| Co znaczy | Ślad bramki REST kampanii SocGholish (fałszywe aktualizacje przeglądarki) w HTML strony. |
| Kiedy powstaje | HTML zawiera dosłownie (case-sensitive) którykolwiek z anchorów: PH_PARAM_DIAG, PH_FUNC_DO_REQUEST, PH_VAR_FILTER_DATA, continueWithGatewayRequest, eval(atob(filter.template)), wpgq_tds_fail; LUB dopasowanie regexu /wp-json/[a-z]+-[a-z]+-([a-z0-9]{5,12})/v1/([a-z0-9]{5,12})\b (case-insensitive), w którym sufiks namespace'u lub endpoint zawiera co najmniej jedną cyfrę.Anchory: :111, regex trasy: :118, filtr cyfry: :216. Wejście wspólne dla infection_*: GET {scheme}://{domena}/ (follow_redirects, max 5, cap 3 MB, timeout http 5 s, connect 5 s) z UA „CREATO_PING/1.0 (+monitoring; contact: tomek@creato.pl)”; przy 403/406/415/429/451 jedna powtórka z nagłówkami przeglądarki. Heurystyki działają tylko, gdy ten fetch ma status_code < 400 (html_fetch.py:206). Uruchamiane na poziomie p3 i p4. |
| Severity · pewność | Krytyczna · Ewidentne |
| Skutek dla strony | przejęcie strony · zakłada Finding · alarm tak |
| Waga → ocena | waga 5 → ocena 9–10 (czerwony) |
| Klasyfikacja | CWE: CWE-506 (Embedded Malicious Code)OWASP Top 10:2025: A08:2025 Software or Data Integrity FailuresMITRE ATT&CK 19.2: T1608.004 Stage Capabilities: Drive-by Target (ślad)OCSF 1.9.0: Detection Finding (class_uid 2004) |
| Rekord OCSF | finding_info.analytic.uid = "B06.03" · analytic.name = "infection_socgholish_gateway" · finding_info.types = ["B06 Wstrzyknięty skrypt"] |
| Co zrobić | Przywróć czystą kopię, usuń nieznane wtyczki i zadania cykliczne, zmień hasła. |
| Wersje typu |
|
| Kod i klucz | B06.04 · infection_etherhiding · w tabeli typów |
|---|---|
| Co znaczy | Strona pobiera kod z węzłów blockchaina i uruchamia go przez new Function — schemat kampanii ClickFix/EtherHiding. |
| Kiedy powstaje | HTML zawiera JEDNOCZEŚNIE trafienie RPC (bsc-dataseed\d*\.binance\.org|polygon-rpc\.com|\beth_call\b) i trafienie obfuskacji (stateMutability|orchidABI|merlionAddress|tokyoSkytree|new\s+Function\s*\(|new\s+Web3\s*\(), oba case-insensitive.Regexy: infection_check.py:124–128. Wejście wspólne dla infection_*: GET {scheme}://{domena}/ (follow_redirects, max 5, cap 3 MB, timeout http 5 s, connect 5 s) z UA „CREATO_PING/1.0 (+monitoring; contact: tomek@creato.pl)”; przy 403/406/415/429/451 jedna powtórka z nagłówkami przeglądarki. Heurystyki działają tylko, gdy ten fetch ma status_code < 400 (html_fetch.py:206). Uruchamiane na poziomie p3 i p4. |
| Severity · pewność | Krytyczna · Ewidentne |
| Skutek dla strony | przejęcie strony · zakłada Finding · alarm tak |
| Waga → ocena | waga 5 → ocena 9–10 (czerwony) |
| Klasyfikacja | CWE: CWE-506 (Embedded Malicious Code)OWASP Top 10:2025: A08:2025 Software or Data Integrity FailuresMITRE ATT&CK 19.2: T1608.004 Stage Capabilities: Drive-by Target (ślad)OCSF 1.9.0: Detection Finding (class_uid 2004) |
| Rekord OCSF | finding_info.analytic.uid = "B06.04" · analytic.name = "infection_etherhiding" · finding_info.types = ["B06 Wstrzyknięty skrypt"] |
| Co zrobić | Usuń wstrzyknięty kod z motywu i bazy, zmień hasła, zaktualizuj wszystko. |
| Wersje typu |
|
LOOP
pętli: 7Trafnoś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ł: Seria fałszywych alarmów „zainfekowana” na legalnych integracjach: płatności, marketing, widgety, GTM, piksel, czat.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek rozpoznał integracje jako legalne
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionedwie reguły obniżone do sygnału niepewnego
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-07-15 | infection_foreign_script i infection_hidden_iframe: z „wysokie / zainfekowana” na „niskie / do weryfikacji”, bez alarmu.config/incident_policy.toml · helpers/incident_policy.py | W praktyce obcy skrypt to prawie zawsze PayU, Klaviyo, Elfsight, ShareThis; ukryty iframe to GTM, piksel albo czat. | cały system W tym samym wydaniu powstała polityka incydentów z dwiema osiami — powaga i pewność — dla wszystkich ustaleń bezpieczeństwa. Od tej zmiany każdy nowy typ ustalenia deklaruje, jak jest pewny. | d59385ebez replayuzatwierdził: właściciel, 2026-07-11 (cała tabela polityki) |
Sygnał: Fałszywy sygnał obcego skryptu na stronie lecznicy weterynaryjnej.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieskrypt rozpoznany jako SaaS rezerwacji wizyt
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionejeden wpis na liście zaufanych domen
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-08-13 | Domena systemu rezerwacji wizyt dopisana do SCRIPT_WHITELIST.helpers/infection_check.py | Legalna integracja klienta, nie wstrzyknięty skrypt. | tylko ten parametr | 8aa6d77bez replayubez zapisu zatwierdzenia |
Sygnał: Strona z regułą blokowania niezweryfikowanych Googlebotów dostawała co noc „cloaking” (powaga pilna): sonda pyta z UA Googlebota spoza adresów Google, więc dostaje pustkę.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręczniezabezpieczenie strony uznane za poprawne działanie, nie incydent
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobioneosobne ustalenie bez subtaska
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-08-14 | detect_cloaking rozróżnia cloaking (inna treść) od blokady (pusta odpowiedź); nowe ustalenie bot_protection_detected.helpers/infection_check.py | Cloaking podaje inną treść, nie żadną — brak dokumentu to podpis odcięcia żądania. | tylko ten parametr | f43e973bez replayubez zapisu zatwierdzenia |
| 2026-08-14 | bot_protection_detected: gate=false — sama statystyka, bez subtaska.config/incident_policy.toml | Bez tego ustawienia domyślne założyłyby subtask „do weryfikacji” co noc. | tylko ten parametr | 0f2826bbez replayubez zapisu zatwierdzenia |
Sygnał: Research kampanii: DollyWay, SocGholish i EtherHiding ładują kod z domeny ofiary albo z blockchaina, więc filtr „obcy host” ich nie widzi. Przypadek źródłowy: wielomiesięczna niewykryta infekcja typu DollyWay. · dotyczy też: Google Safe Browsing
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieluka reguły potwierdzona na znanym przypadku
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionetrzy sygnatury, ustalenie „nie sprawdzono”, Web Risk
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-09-05 | Trzy sygnatury kampanii jako sygnały pewne: loader z własnej domeny pod /?<hash>, bramka REST SocGholish, payload z blockchaina.helpers/infection_check.py · config/incident_policy.toml | Kampanie omijają logikę obcego hosta; WordPress nigdy nie podłącza skryptu pod /?<hash>. | tylko ten parametr | b0fc77cbez replayubez zapisu zatwierdzenia |
| 2026-09-05 | Nieudane pobranie strony głównej daje infection_scan_unknown (tylko statystyka) zamiast pustej listy.helpers/infection_check.py · config/incident_policy.toml | Pusta lista ustaleń po 403 z WAF-a czytała się jak „czysto”, choć heurystyki w ogóle się nie wykonały. | cały system Zasada „nie dało się sprawdzić” jako trzeci stan weszła do polityki i do cotygodniowego zestawienia; ten sam podział obowiązuje dziś w statystykach wszystkich parametrów. | b0fc77cbez replayubez zapisu zatwierdzenia |
| 2026-09-05 | Zbiorczy odczyt reputacji używa Web Risk, gdy na serwerze jest klucz; bez klucza zostaje Safe Browsing v4 (klucz Web Risk w runbooku: do zrobienia).helpers/safebrowsing.py | Safe Browsing v4 jest wycofywany i licencyjnie niekomercyjny. | cały system Dotyczy też parametru Google Safe Browsing — to ten sam kanał reputacji. | b0fc77cbez replayubez zapisu zatwierdzenia |
Sygnał: Pierwszy parametr pętli 1 (plan projektu LAB247, cel C4): najwięcej sygnałów niepewnych i najdroższa pomyłka w obie strony.
- 1. Zbiórkaczekazapis przebiegów per strona per parametr
- 2. Werdyktczekawerdykt przy każdym zamknięciu subtaska
- 3. Miaraczekacztery liczby tygodniowo
- 4. Kartaczekapróg i wyjątki z datą ostatniej zmiany
- 5. Zmianaczekajedna zmiana naraz, z kryterium cofnięcia
- 6. Replayczekareguła po zapisanych odczytach przed utrwaleniem
Pętla jeszcze nie wprowadziła żadnej zmiany.
Sygnał: Strona klienta przekierowywała stronę główną na profil w serwisie społecznościowym — porównanie treści dla człowieka i Googlebota badało cudzy serwis, który sam podaje botom inną treść.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek rozpoznał, że porównanie dotyczy cudzego serwisu
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionecloaking pomijany przy cudzym hoście
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-09-16 | Gdy strona główna ląduje dla zwykłego pobrania na hoście spoza domeny, porównanie cloakingu jest pomijane; gdy poza domeną ląduje tylko Googlebot, dalej jest to cloaking.helpers/infection_check.py · helpers/html_fetch.py | Inna treść cudzego serwisu dla botów nie jest infekcją strony klienta. | tylko ten parametr | cf89ebebez 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ż: Wersja WordPressa, 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 |