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.
- AUTOR
- Karol Rapacz / CEO Breachroad · OSCP · PNPT
- PUBLIKACJA
- 1 sierpnia 2026
- CZAS CZYTANIA
- 11 min czytania
- TEMAT
- Łańcuch dostaw
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
inputoraztextarea; - 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:
- użytkownik kopiuje prawidłowy adres odbiorcy;
- skrypt rozpoznaje format kryptowaluty;
- zastępuje wartość adresem napastnika;
- użytkownik widzi podobnie wyglądający ciąg i zatwierdza transakcję;
- 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.


