Złośliwe paczki npm wykorzystują Adspect i fałszywe CAPTCHA do omijania analizy

securitybeztabu.pl 1 dzień temu

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

  1. BleepingComputer — „Malicious NPM packages abuse Adspect redirects to evade security”, 17 listopada 2025. (BleepingComputer)
  2. Socket Threat Research — „npm Malware Campaign Uses Adspect Cloaking to Deliver Malicious Redirects”, 17 listopada 2025 (analiza techniczna, IoC). (Socket)
  3. The Hacker News — raport o kampanii npm z fałszywą CAPTCHA i warstwową obfuskacją (kontekst trendu), 10–29 października 2025. (The Hacker News)
  4. Sonatype / CyberScoop — analizy wrześniowego „mega-incydentu” npm (chalk/debug) – kontekst supply-chain 2025. (sonatype.com)
  5. HUMAN Security — wyjaśnienie mechanizmów cloaking w malvertisingu (tło technik ukrywania), 8 października 2025. (humansecurity.com)
Idź do oryginalnego materiału