
Wprowadzenie do problemu / definicja luki
W ekosystemie Node.js wykryto siedem złośliwych paczek, które nadużywają chmurowej usługi Adspect (mechanizmy „cloaking”) do rozróżniania badaczy od potencjalnych ofiar i przekierowywania tych drugich na strony oszustw krypto. Paczki publikował autor „dino_reborn” (e-mail geneboo@proton[.]me) między wrześniem a listopadem 2025 r. — sześć z nich zawierało złośliwy kod, jedna służyła do budowy „białej” strony przynęty.
Nazwy zgłoszonych pakietów: signals-embed, dsidospsodlks, applicationooks21, application-phskck, integrator-filescrypt2025, integrator-2829, integrator-2830. Według badaczy Socket, po zgłoszeniach trafiły do „security holding” w npm.
W skrócie
- Cel: wyłudzanie przez przekierowania na strony krypto-scam z fałszywą CAPTCHA (Ethereum/Solana/Uniswap/Jupiter).
- Techniki: fingerprinting przeglądarki i adresu IP, Adspect API do klasyfikacji ruchu, IIFE autostart, blokada F12/Ctrl+U/Ctrl+Shift+I, wykrywanie DevTools i force-reload.
- Infrastruktura: proxy aktora (appprotector[.]online, protectorapp[.]online, association-google[.]xyz) ukrywa strukturę Adspect i zbiera prawdziwe IP ofiary; parametry identyfikacyjne kampanii ADSPECT_STREAM_ID różnią się między pakietami.
- Status: paczki oznaczone i blokowane przez npm po zgłoszeniach.
Kontekst / historia / powiązania
Kampania wpisuje się w szerszą falę ataków na łańcuch dostaw npm w 2025 r., obejmującą m.in. przejęcia kont maintainerów oraz masowe publikacje złośliwych bibliotek (np. incydent z kompromitacją chalk/debug i kilkunastu innych projektów o miliardowych tygodniowych pobraniach). W ostatnich miesiącach raportowano również kampanie z fałszywymi CAPTCHA i wielowarstwową obfuskacją.
Analiza techniczna / szczegóły luki
Łańcuch wykonania w przeglądarce. Złośliwy kod (ok. 39 kB) uruchamia się automatycznie dzięki IIFE po załadowaniu do aplikacji webowej ofiary (np. przez import skompromitowanej paczki). Skrypt zbiera charakterystyki środowiska (user-agent, host, referrer, URI, query string, protokół, język, kodowanie, akceptowane typy treści, port, timestamp) i wysyła je do proxy aktora (np. …/adspect-proxy.php). Proxy ustala realne IP odwiedzającego i pośredniczy w wywołaniach do Adspect API, które klasyfikuje wizytę (white/black).
Cloaking i anty-analiza. jeżeli Adspect oceni wizytę jako badawczą, serwowana jest „biała” witryna (np. fikcyjna strona Offlido) w celu zatarcia śladów; w przeciwnym razie ofiara widzi fałszywą CAPTCHA brandowaną (np. standx[.]com, Uniswap, Jupiter), której interakcja inicjuje przekierowanie do docelowego URL zdefiniowanego po stronie Adspect. Dodatkowo kod:
- blokuje prawy przycisk myszy i kombinacje F12/Ctrl+U/Ctrl+Shift+I,
- restartuje stronę po wykryciu otwartych DevTools,
- używa kontenera docelowego (TARGET_CONTAINER, np. signals-embed-root), łącząc poszczególne pakiety kampanii.
Konfiguracja kampanii. Każdy pakiet ma swój ADSPECT_STREAM_ID oraz zestaw domen-proxy (appprotector[.]online, protectorapp[.]online, association-google[.]xyz) i plików pomocniczych (adspect-file.php, adspect-proxy.php). Różnice konfiguracyjne pozwalają śledzić warianty i skuteczność strumieni w Adspect.
Praktyczne konsekwencje / ryzyko
- Aplikacje webowe wciągające złośliwe pakiety do frontendu mogą przekierowywać użytkowników na strony oszustw poza wiedzą zespołu dev. Ryzyko reputacyjne i prawne (phishing/malvertising pochodzący z Waszej domeny).
- Utrudniona analiza: klasyczny monitoring i manualne „podglądy” kodu bywają bezużyteczne (cloaking, anty-debug), co zwiększa czas detekcji i koszty IR.
- Trend rosnący: kampanie npm coraz częściej łączą typosquatting, obfuskację, fałszywe CAPTCHA i fingerprinting — a niekiedy również dołączają infostealery multi-OS.
Rekomendacje operacyjne / co zrobić teraz
1) Natychmiastowa higiena zależności
- Zablokuj/usuń z buildów nazwy paczek wskazane w artykule; przeszukaj lockfile i SBOM pod kątem signals-embed, dsidospsodlks, applicationooks21, application-phskck, integrator-filescrypt2025, integrator-2829, integrator-2830.
- Wdróż pinning (exact versions), npm --ignore-scripts w CI tam, gdzie to możliwe, oraz mirror/allow-list dla rejestru. (Praktyka szeroko rekomendowana po wrześniowych incydentach).
2) Detekcja artefaktów kampanii (IoC i zachowania)
- Domeny/proxy: appprotector[.]online, protectorapp[.]online, association-google[.]xyz, ścieżki adspect-proxy.php, adspect-file.php.
- Wzorce w kodzie: ADSPECT_STREAM_ID, TARGET_CONTAINER, IIFE z funkcjami blokującymi DevTools, wywołania do rpc.adspect[.]net/v2/ przez proxy.
3) Twardnienie frontendu i obserwowalność
- Treść-Security: CSP z default-src 'self' i restrykcyjnym connect-src, SRI dla skryptów, blokada window.open bez interakcji użytkownika; monitorowanie Content Security Policy violation reports. (Skuteczne przeciw nieautoryzowanym przekierowaniom.) — w kontekście tej kampanii ogranicza ładowanie skryptów i wywołań proxy.
- Telemetria RUM: loguj niespodziewane przekierowania/tab open i anomalie UA/locale.
4) Procesy i governance
- Pre-prod review dla zmian w zależnościach (4-eyes), skan SCA przed merge, w tym reputacja maintainerów i „first-party risk” z npm.
- Incident response: jeżeli strona mogła serwować fałszywą CAPTCHA/przekierowania, wyświetl komunikat użytkownikom, zweryfikuj kliknięcia i kampanie marketingowe, skonsultuj aspekt prawny/reklamowy.
Różnice / porównania z innymi przypadkami (jeśli dotyczy)
- W poprzednich kampaniach npm dominowały typosquatting + infostealer instalowany lokalnie u dewelopera. Tu złośliwy kod działa po stronie przeglądarki użytkownika, wykorzystując cloaking Adspect do „odfiltrowania” badaczy i uniknięcia wykrycia — to taktyka bliższa malvertisingowi niż typowemu „post-install malware”.
- Kampania dino_reborn używa Adspect jako usługi (API + strumienie). To odróżnia ją od masowych trojanizacji pakietów (np. wrześniowy incydent chalk/debug), gdzie wektor był inny (kompromitacja kont maintainerów i wstrzyknięcie ładunków w popularne biblioteki).
Podsumowanie / najważniejsze wnioski
Atak pokazuje, iż łańcuch dostaw JavaScript nie dotyczy już tylko masowych infostealerów u devów — frontend użytkownika końcowego staje się celem poprzez import „pozornie niewinnych” paczek. Wykorzystanie Adspect (cloaking-as-a-service) znacząco utrudnia analizę i wydłuża czas wykrycia. Organizacje powinny zacieśnić politykę zależności, wdrożyć CSP/SRI, śledzić IoC Adspect oraz gwałtownie izolować projekty, w których wykryto wskazane nazwy paczek.
Źródła / bibliografia
- BleepingComputer — „Malicious NPM packages abuse Adspect redirects to evade security”, 17 listopada 2025. (BleepingComputer)
- Socket Threat Research — „npm Malware Campaign Uses Adspect Cloaking to Deliver Malicious Redirects”, 17 listopada 2025 (analiza techniczna, IoC). (Socket)
- The Hacker News — raport o kampanii npm z fałszywą CAPTCHA i warstwową obfuskacją (kontekst trendu), 10–29 października 2025. (The Hacker News)
- Sonatype / CyberScoop — analizy wrześniowego „mega-incydentu” npm (chalk/debug) – kontekst supply-chain 2025. (sonatype.com)
- HUMAN Security — wyjaśnienie mechanizmów cloaking w malvertisingu (tło technik ukrywania), 8 października 2025. (humansecurity.com)














