Przejdź do treści
INDEKS ANALIZ BREACHROAD / NOTA TECHNICZNA

Skrypt Adform podmieniał adresy portfeli kryptowalut na stronach

Złośliwy JavaScript z domeny reklamowej Adform potrafił zmieniać adresy BTC, ETH i TRON w schowku oraz formularzach. Analizujemy ryzyko łańcucha dostaw.

MATERIAŁ PUBLICZNY
AUTOR
/ CEO Breachroad · OSCP · PNPT
PUBLIKACJA
1 sierpnia 2026
CZAS CZYTANIA
11 min czytania
TEMAT
Łańcuch dostaw
Skrypt Adform podmieniał adresy portfeli kryptowalut na stronach

Adform poinformował o incydencie, w którym część skryptów dostarczanych klientom zawierała nieautoryzowaną modyfikację. Złośliwy JavaScript działający w kontekście odwiedzanej strony wyszukiwał adresy portfeli Bitcoin, Ethereum i TRON, a następnie podmieniał je na wartości kontrolowane przez napastnika.

Mechanizm nie wymagał instalacji rozszerzenia ani malware na komputerze. Wystarczało otwarcie strony, która w danym momencie ładowała zmodyfikowany zasób. To klasyczny problem łańcucha dostaw frontendu: kod strony pierwszej strony może być bezpieczny, lecz zewnętrzny skrypt otrzymuje te same możliwości dostępu do DOM co własna aplikacja.

Co wiadomo o incydencie

W aktualizacji bezpieczeństwa Adform podaje, że wykrył zdarzenie 27 lipca, usunął nieautoryzowany kod, rozpoczął dochodzenie i powiadomił klientów. Firma opisuje nieuprawnioną manipulację fragmentem JavaScript obsługiwanym przez jej infrastrukturę.

Analiza publicznej próbki wskazuje na skrypt trackpoint-async.js serwowany z domeny s2.adform.net. Kod szukał wzorców adresów kryptowalut w kilku miejscach:

  • schowku podczas kopiowania i wklejania;
  • polach input oraz textarea;
  • edytowalnej treści contenteditable;
  • tekstowych węzłach strony.

Adform stwierdza, że nie znalazł dowodów na transmisję adresów IP ani odwiedzanych witryn do napastnika. Jednocześnie firma zaznacza, że zmodyfikowany JavaScript technicznie mógł wykonywać zewnętrzne żądania. To ważna granica między obserwacją a możliwością: „nie znaleziono dowodu” nie oznacza „kod nie miał takiej zdolności”.

Publicznie nie ustalono jeszcze pełnej liczby narażonych witryn, źródła pierwotnego dostępu, wartości podmienionych transakcji ani sprawcy.

Jak działa podmiana adresu

Adres portfela jest długim ciągiem, którego człowiek zwykle nie sprawdza znak po znaku. Napastnik wykorzystuje ten słaby punkt procesu:

  1. użytkownik kopiuje prawidłowy adres odbiorcy;
  2. skrypt rozpoznaje format kryptowaluty;
  3. zastępuje wartość adresem napastnika;
  4. użytkownik widzi podobnie wyglądający ciąg i zatwierdza transakcję;
  5. blockchain poprawnie realizuje nieodwracalny przelew — tylko do złego odbiorcy.

Podmiana w formularzu i DOM rozszerza ryzyko poza schowek. Adres może zmienić się po wklejeniu, po przejściu między polami, a nawet już w widocznym tekście instrukcji płatności. Samo sprawdzenie, czy schowek zawiera oczekiwaną wartość, może więc nie wystarczyć.

Dlaczego zewnętrzny JavaScript jest tak uprzywilejowany

Skrypt załadowany przez znacznik <script> zwykle działa jako część strony, a nie jako odizolowany zasób dostawcy. Może odczytywać i modyfikować DOM, przechwytywać zdarzenia, korzystać z aktywnej sesji strony i wysyłać żądania zgodnie z ograniczeniami przeglądarki.

To oznacza, że tag reklamowy lub analityczny staje się zależnością produkcyjną o wpływie zbliżonym do kodu aplikacji. Lista takich zasobów nie jest więc wyłącznie problemem marketingu albo wydajności. Jest częścią inwentarza oprogramowania.

Szczególnie narażone są serwisy, na których użytkownik:

  • kopiuje identyfikatory płatności;
  • uzupełnia dane finansowe;
  • pracuje w zalogowanym panelu;
  • ma dostęp do informacji wewnętrznych;
  • podejmuje decyzję na podstawie treści generowanej w DOM.

Co powinien zrobić właściciel strony

Najpierw ustal, czy i kiedy zasób Adform był używany:

  • przeszukaj kod, tag manager, szablony i konfigurację nagłówków;
  • sprawdź archiwum wdrożeń, a nie tylko bieżącą wersję;
  • przejrzyj logi CSP, proxy i przeglądarkowy RUM;
  • ustal strony i kraje, dla których tag był aktywny;
  • określ, czy na tych stronach występują adresy kryptowalut lub formularze płatności.

Następnie usuń lokalne kopie zmienionego zasobu, wyczyść cache CDN i potwierdź, że użytkownicy nie otrzymują odpowiedzi z przeglądarkowego cache. Adform zaleca wyczyszczenie pamięci podręcznej przeglądarki. W środowisku firmowym można także wymusić zamknięcie kart lub restart zarządzanej przeglądarki.

Jeżeli witryna obsługuje płatności krypto, powiadom użytkowników w sposób, który nie uczy ich klikania przypadkowego linku. Poproś o sprawdzenie historii transakcji i porównanie pełnego adresu z wartością uzyskaną niezależnym kanałem.

Kontrole, które ograniczają kolejny incydent

Content Security Policy. Utrzymuj możliwie krótką listę dozwolonych źródeł skryptów. CSP nie pomoże, jeśli przejęty host już znajduje się na allowliście, ale ograniczy zewnętrzne połączenia i skalę dalszego ładowania kodu. Dyrektywa connect-src powinna być równie starannie zaprojektowana jak script-src.

Subresource Integrity. SRI pozwala przeglądarce sprawdzić hash statycznego skryptu. Nie pasuje do zasobu, który dostawca często i automatycznie zmienia, dopóki organizacja nie przypnie wersji. Właśnie ta niedogodność ujawnia realny wybór: wygodna aktualizacja dostawcy albo kontrolowana zmiana po weryfikacji.

Izolacja. Jeżeli funkcja może działać w odrębnej ramce bez dostępu do wrażliwego DOM, zastosuj sandbox iframe i minimalne uprawnienia. Nie każdy tag reklamowy daje się tak osadzić, lecz należy wymagać od dostawcy uzasadnienia dla dostępu do całej strony.

Monitoring zmian. Inwentaryzuj adres URL, hash, właściciela biznesowego, cel i ostatni przegląd każdego skryptu. Alarmuj na nową domenę, zmianę zachowania, próbę odczytu pól wrażliwych lub nieoczekiwany egress.

Jak bezpiecznie realizować płatności kryptowalutowe

Kontrole strony nie zastępują kontroli transakcji. Przed podpisaniem:

  • porównaj cały adres albo co najmniej długie fragmenty początku i końca;
  • wyświetl adres na sprzętowym urządzeniu podpisującym;
  • dla nowego odbiorcy użyj niezależnego, uwierzytelnionego kanału;
  • przy dużej kwocie wykonaj małą transakcję testową;
  • używaj książki zatwierdzonych odbiorców i wieloosobowej autoryzacji;
  • sprawdzaj wartość ponownie po wklejeniu i bezpośrednio przed podpisem.

Weryfikacja pierwszych i ostatnich czterech znaków jest lepsza niż brak kontroli, ale nie jest idealna. Atakujący mogą generować podobne adresy. Dla transakcji o dużej wartości potrzebny jest pełniejszy proces.

Detekcja i zakres dochodzenia

Zachowaj kopie odpowiedzi skryptu, nagłówki, hashe i czasy obserwacji. Przejrzyj zapisy proxy lub przeglądarek pod kątem pobrań z domeny oraz późniejszych połączeń wychodzących. Zespół finansowy powinien sprawdzić transakcje z okresu ekspozycji, zwłaszcza nowe adresy i rozbieżności z fakturami albo ticketami.

Brak transakcji kryptowalutowych ogranicza bezpośredni mechanizm kradzieży opisany w próbce, ale nie dowodzi braku ryzyka. Kod wykonywany w stronie mógł oddziaływać na dane widoczne w DOM; ocenę należy oprzeć na zachowanej wersji skryptu i rzeczywistej stronie.

Fakty a wnioski Breachroad

Adform potwierdza nieautoryzowaną zmianę JavaScript, działania naprawcze, brak znalezionych dowodów na transmisję IP i witryn oraz techniczną możliwość wykonywania zewnętrznych żądań. Publiczna analiza potwierdza logikę podmiany adresów BTC, ETH i TRON.

Wniosek Breachroad jest procesowy: kod trzeciej strony wymaga właściciela, inwentarza, oceny uprawnień i planu odłączenia. „Tag marketingowy” nie jest kategorią o mniejszym zaufaniu w przeglądarce — bez izolacji działa jak część aplikacji.

Szkolenia cyberbezpieczeństwa dla zespołów IT, marketingu i finansów pomagają rozpoznawać ryzyko dostawców i weryfikować płatności. Audyt bezpieczeństwa IT może objąć CSP, tag manager, skrypty zewnętrzne, monitoring zmian i proces reakcji.

UDOSTĘPNIJ / KOPIUJ