{"id":20538,"date":"2026-06-17T12:01:23","date_gmt":"2026-06-17T09:01:23","guid":{"rendered":"https:\/\/sysadmin.courses\/supply-chain-%d0%b0%d1%82%d0%b0%d0%ba%d0%b0-%d0%bd%d0%b0-optinmonster-%d0%ba%d0%b0%d0%ba-%d0%be%d0%b4%d0%b8%d0%bd-%d1%83%d0%ba%d1%80%d0%b0%d0%b4%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-%d0%ba%d0%bb%d1%8e%d1%87\/"},"modified":"2026-06-17T12:27:05","modified_gmt":"2026-06-17T09:27:05","slug":"optinmonster-tiekimo-grandines-ataka-kaip-vienas-pavogtas-raktas-atvere-duris-i-12-mln-wordpress-svetainiu","status":"publish","type":"post","link":"https:\/\/sysadmin.courses\/lt\/optinmonster-tiekimo-grandines-ataka-kaip-vienas-pavogtas-raktas-atvere-duris-i-12-mln-wordpress-svetainiu\/","title":{"rendered":"OptinMonster tiekimo grandin\u0117s ataka: kaip vienas pavogtas raktas atv\u0117r\u0117 duris \u012f 1,2 mln. WordPress svetaini\u0173"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u012esivaizduokite: j\u016bs\u0173 WordPress visi\u0161kai atnaujintas, visi \u012fskiepiai aktual\u016bs, savame kode joki\u0173 pa\u017eeid\u017eiamum\u0173. Administratorius prisijungia prie valdymo skydelio \u2014 eilin\u0117 darbo diena. Po keli\u0173 valand\u0173 svetain\u0117je atsiranda pasl\u0117pta paskyra su administratoriaus teis\u0117mis ir u\u017epakalini\u0173 dur\u0173 \u012fskiepis su web shell&#8217;u. Niekas ne\u012fsilau\u017e\u0117 \u012f j\u016bs\u0173 server\u012f. Problema at\u0117jo i\u0161 patikimo \u012frankio, u\u017e kur\u012f mokate pinigus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2026 m. bir\u017eelio 12 d. u\u017epuolikai sureng\u0117 tiekimo grandin\u0117s atak\u0105 prie\u0161 tris populiarius \u201eAwesome Motive&#8221; kompanijos WordPress \u012fskiepius: OptinMonster (daugiau nei 1,2 mln. aktyvi\u0173 diegim\u0173), TrustPulse ir PushEngage. Ataka nei\u0161naudojo pa\u017eeid\u017eiamum\u0173 pa\u010diuose \u012fskiepiuose \u2014 ji smog\u0117 auk\u0161\u010diau grandin\u0117je, CDN infrastrukt\u016brai, per kuri\u0105 \u012fskiepiai tiekia savo JavaScript klientams. Atak\u0105 pirmieji pasteb\u0117jo Sansec tyr\u0117jai, specializuojantys e-komercijos saugumo srityje. V\u0117liau i\u0161sami\u0105 technin\u0119 analiz\u0119 paskelb\u0117 Patchstack.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u010cia n\u0117ra CVE numerio ar CVSS balo. Tai ataka prie\u0161 pasitik\u0117jim\u0105: u\u017epuolikai i\u0161naudojo tai, kad svetain\u0117s pasitiki JavaScript, kur\u012f joms tiekia \u012fskiepi\u0173 pardav\u0117jas. Ir tas pasitik\u0117jimas buvo panaudotas prie\u0161 jas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP TAI TAPO \u012eMANOMA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">U\u017epuolikai nelau\u017e\u0117 OptinMonster. Jie neie\u0161kojo pa\u017eeid\u017eiamum\u0173 \u012fskiepi\u0173 kode, neband\u0117 per j\u0117g\u0105 \u012fveikti API, nesikas\u0117 per WordPress branduol\u012f. Jie tiesiog \u012f\u0117jo per pa\u010dios kompanijos rinkodaros svetain\u0119 \u2014 \u012fprast\u0105 WordPress diegim\u0105 su UpdraftPlus, kuriame buvo \u017einomas, neu\u017elopintas pa\u017eeid\u017eiamumas. Pralau\u017eti \u012fskiepi\u0173 gamintojo rinkodaros svetain\u0119 daug papras\u010diau nei pralau\u017eti pat\u012f \u012fskiep\u012f. O laukiantis atlygis pasirod\u0117 neproporcingai didelis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toje rinkodaros svetain\u0117je gul\u0117jo CDN paskyros API raktas \u2014 to paties CDN, per kur\u012f Awesome Motive tiekia JavaScript failus visiems klientams, visoms 1,2 mln. svetaini\u0173 su OptinMonster. Raktas buvo vienas. Prieigos lygis \u2014 visi\u0161kas. U\u017epuolikas nereik\u0117jo kompromituoti kiekvienos svetain\u0117s atskirai: jis pakeit\u0117 vien\u0105 fail\u0105 vienoje vietoje, ir CDN pats i\u0161platino u\u017ekr\u0117st\u0105 skript\u0105 visiems klientams. Tai ir yra tiekimo grandin\u0117s ataka gryniausiame pavidale \u2014 vietoj milijono spyn\u0173 buvo pralau\u017eta viena dirbtuv\u0117, kurioje jos gaminamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">U\u017epuolikai pakeit\u0117 teis\u0117tus JavaScript SDK kenksmingomis versijomis \u0161iuose CDN domenuose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a.omappapi.com\/app\/js\/api.min.js     (OptinMonster)\na.opmnstr.com\/app\/js\/api.min.js      (OptinMonster)\na.optnmstr.com\/app\/js\/api.min.js     (OptinMonster)\na.trstplse.com\/app\/js\/api.min.js     (TrustPulse)\nclientcdn.pushengage.com\/sdks\/pushengage-web-sdk.js  (PushEngage)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kenksmingasis kodas nepakeit\u0117 originalaus \u2014 jis buvo prid\u0117tas prie teis\u0117to minifikuoto SDK pabaigos. \u012eskiepis toliau veik\u0117 \u012fprastai, o kenksmingoji logika veik\u0117 lygiagre\u010diai. B\u016btent d\u0117l to standartin\u0117 steb\u0117sena i\u0161 karto nesuk\u0117l\u0117 pavojaus signalo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP VEIK\u0116 KENKSMINGASIS KODAS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Skriptas buvo para\u0161ytas chirurginiu tikslumu \u2014 aktyvavosi tik esant tinkamoms s\u0105lygoms ir i\u0161veng\u0117 aptikimo keliais lygmenimis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pirmiausia patikrino vykdymo aplink\u0105: ie\u0161kojo <code>navigator.webdriver<\/code>, headless nar\u0161ykli\u0173 \u017eymekli\u0173 (<code>window._phantom<\/code>, <code>window.__nightmare<\/code>) ir nulinio dyd\u017eio nar\u0161ykl\u0117s lang\u0173. Tai apsauga nuo automatini\u0173 skaneri\u0173 ir saugumo tyr\u0117j\u0173. Tada \u012fsitikino, kad veikia b\u016btent WordPress administratoriaus kontekste: tikrino admin juostos buvim\u0105, <code>\/wp-admin\/<\/code> kelius ir <code>wordpress_logged_in_<\/code> slapuk\u0105. Jei administratoriaus nerasta \u2014 papras\u010diausiai sustodavo. S\u0117kmingai suveikus, pa\u017eym\u0117davo <code>localStorage<\/code>, kad toje pa\u010dioje nar\u0161ykl\u0117je per 24 valandas nepasikartot\u0173.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rad\u0119s administratori\u0173, skriptas rinko visk\u0105, ko reikia veikti jo vardu: nustat\u0117 WordPress \u0161akn\u012f ir admin keli\u0105, i\u0161trauk\u0117 galiojant\u012f REST nonce i\u0161 <code>wpApiSettings<\/code>, per <code>admin-ajax.php?action=rest-nonce<\/code> arba i\u0161 vartotojo prid\u0117jimo puslapio. Tur\u0117damas administratoriaus sesij\u0105 ir galiojant\u012f nonce, visi tolesni u\u017eklausai tinklo lygmeniu atrod\u0117 kaip teis\u0117ti paties administratoriaus veiksmai.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kenksminga administratoriaus paskyra buvo kuriama per keturis lygiagre\u010dius metodus \u2014 skriptas band\u0117 juos po vien\u0105 iki pirmojo s\u0117kmingo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ 1 metodas: REST API\nPOST \/wp-json\/wp\/v2\/users\n{\"username\": \"dev_3m6nyp\", \"email\": \"dev_wvi65g@gmail.com\", \"roles\": &#91;\"administrator\"]}\n\n\/\/ 2 metodas: WordPress forma\nPOST \/wp-admin\/user-new.php?action=createuser\n\n\/\/ 3 metodas: AJAX\nPOST \/wp-admin\/admin-ajax.php (tas pats payload)\n\n\/\/ 4 metodas: pasl\u0117ptas 1x1px iframe, \u012fkeliantis user-new.php<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Skriptas k\u016br\u0117 tiek fiksuot\u0105 paskyr\u0105 <code>developer_api1<\/code> su adresu <code>customer1usx@gmail.com<\/code>, tiek atsitiktines paskyras pagal \u0161ablon\u0105 <code>dev_xxxxxx<\/code> \/ <code>dev_xxxxxx@gmail.com<\/code>. Jame net buvo \u012fdiegtas daugiakalbis \u017eodynas su prane\u0161imais \u201evartotojas jau egzistuoja&#8221; \u2014 kad lokalizuotose WordPress instaliacijose gal\u0117t\u0173 teisingai nustatyti s\u0117km\u0119.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gav\u0119s administratoriaus prieig\u0105, skriptas atsisiunt\u0117 u\u017epakalini\u0173 dur\u0173 ZIP archyv\u0105 i\u0161 C2 serverio ir \u012fdieg\u0117 j\u012f per <code>POST \/wp-admin\/update.php?action=upload-plugin<\/code>. U\u017epakalini\u0173 dur\u0173 \u012fskiepis keit\u0117 pavadinim\u0105: skirtinguose steb\u0117jimuose jis maskavosi kaip <strong>\u201eContent Delivery Helper&#8221;<\/strong> (<code>content-delivery-helper<\/code>, versija 2.7.1) arba <strong>\u201eDatabase Optimizer&#8221;<\/strong> (<code>database-optimizer<\/code>, versija 2.9.4). Be to, sl\u0117p\u0117 save \u012fskiepi\u0173 s\u0105ra\u0161e, atnaujinim\u0173 eil\u0117je ir WordPress veiklos \u017eurnaluose \u2014 per valdymo skydel\u012f jo aptikti prakti\u0161kai nebuvo \u012fmanoma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u012ediegtos u\u017epakalin\u0117s durys atv\u0117r\u0117 du nuotolinio kodo vykdymo kanalus. Per parametr\u0105 <code>?developer_api1_fm<\/code> veik\u0117 web shell, vykdantis <code>system($_POST['cmd'])<\/code>. Per parametr\u0105 <code>developer_api1_eval<\/code> buvo vykdomas bet koks base64-dekoduotas PHP kodas. Surinkti duomenys buvo XOR-\u0161ifruojami raktu <code>jX9kM2nP4qR6sT8v<\/code>, koduojami \u012f base64 ir siun\u010diami \u012f domen\u0105 <code>tidio.cc<\/code> (s\u0105moninga teis\u0117to <code>tidio.com<\/code> imitacija) per atspari\u0105 grandin\u0119: <code>navigator.sendBeacon<\/code> \u2192 <code>fetch<\/code> \u2192 <code>XMLHttpRequest<\/code> \u2192 pikselinis paveiksl\u0117lis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>REALI ATAKOS GRANDIN\u0116<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mast\u0105 patvirtino Patchstack statistika. Per 36 valandas \u2014 bir\u017eelio 14\u201315 d. \u2014 j\u0173 WAF taisykl\u0117 u\u017eblokavo 271 kenksmingo administratoriaus k\u016brimo bandym\u0105 13 svetaini\u0173 i\u0161 81 unikalaus IP adreso. Pasiskirstymas pagal vektorius: 263 u\u017eklausos per REST API <code>\/wp-json\/wp\/v2\/users<\/code>, 5 per form\u0105 <code>\/wp-admin\/user-new.php<\/code>, 3 per <code>\/wp-admin\/admin-ajax.php<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Srauto pob\u016bdis ypa\u010d i\u0161kalbingas: 81 skirtingas IP adresas, ma\u017edaug 60 % mobiliosios nar\u0161ykl\u0117s (Android\/Samsung), likusios \u2014 Windows, macOS ir Linux. Tai ne centralizuota ataka i\u0161 u\u017epuoliko serveri\u0173. Tai reali\u0173 WordPress administratori\u0173 nar\u0161ykl\u0117s, kurios tapo nevalingais atakos \u012frankiais. Tod\u0117l WAF&#8217;ams ir buvo taip sunku atskirti kenksmingas u\u017eklausas nuo teis\u0117t\u0173: jos ne\u0161\u0117 galiojan\u010di\u0105 sesij\u0105 ir galiojant\u012f nonce.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Domenas <code>tidio.cc<\/code> buvo u\u017eregistruotas dar 2026 m. baland\u017eio 28 d. \u2014 pusantro m\u0117nesio prie\u0161 atak\u0105. Tuo pat metu gautas TLS sertifikatas. Ataka buvo planuota i\u0161 anksto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CHRONOLOGIJA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2026 m. baland\u017eio 28 d.: C2 domeno <code>tidio.cc<\/code> registracija ir TLS sertifikato gavimas \u2014 infrastrukt\u016bros paruo\u0161imas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2026 m. bir\u017eelio 12 d., 22:17 UTC: kenksmingasis kodas pirm\u0105 kart\u0105 pasteb\u0117tas OptinMonster ir TrustPulse <code>api.min.js<\/code> failuose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2026 m. bir\u017eelio 12 d., 22:42 UTC: paskutinis patvirtintas kenksmingojo kodo buvimas OptinMonster ir TrustPulse CDN. Poveikio langas pagrindiniame CDN \u2014 apie 25 minut\u0117s, ta\u010diau d\u0117l CDN kra\u0161tini\u0173 mazg\u0173 talpyklos dalis mazg\u0173 kenksming\u0105 skript\u0105 tiek\u0117 ilgiau.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2026 m. bir\u017eelio 13 d., 19:02 UTC: PushEngage SDK vis dar tiekia u\u017ekr\u0117st\u0105 kod\u0105 i\u0161 dalies CDN mazg\u0173.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2026 m. bir\u017eelio 14 d.: kenksmingasis kodas pa\u0161alintas i\u0161 PushEngage CDN; Awesome Motive paskelbia oficial\u0173 prane\u0161im\u0105 apie incident\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2026 m. bir\u017eelio 14\u201315 d.: Patchstack aktyviai blokuoja i\u0161naudojimo bandymus apsaugotose svetain\u0117se.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KOD\u0116L TAI SVARBU<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viskas atnaujinta. \u012eskiepiai aktual\u016bs. Serveris pataisytas. Ir vis tiek pa\u017eeistas. B\u016btent tai daro \u0161i\u0105 atak\u0105 tikrai nemalonia \u2014 ji netrenkia \u012f silpn\u0105 j\u016bs\u0173 apsaugos viet\u0105, o \u012f akl\u0105. Standartinis modelis \u201eatnaujink \u012fskiepius ir bus gerai&#8221; \u010dia tiesiog neveikia, nes pa\u017eeid\u017eiamumas buvo ne \u012fskiepyje, o jo pristatymo infrastrukt\u016broje. J\u016bs negal\u0117jote jo pamatyti, negal\u0117jote jo pa\u0161alinti atnaujinimais ir negal\u0117jote jo aptikti standartin\u0117mis priemon\u0117mis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yra dar vienas dalykas, kur\u012f svarbu ai\u0161kiai suprasti: u\u017eklausas kenksmingo administratoriaus k\u016brimui generavo ne u\u017epuoliko serveris \u2014 jas generavo j\u016bs\u0173 paties administratoriaus nar\u0161ykl\u0117. Su jo sesija, jo nonce, jo slapukais. WordPress mat\u0117 teis\u0117t\u0105 vartotoj\u0105, atliekant\u012f teis\u0117t\u0105 veiksm\u0105. Tod\u0117l dauguma WAF taisykli\u0173 tyl\u0117jo: kaip blokuoti administratori\u0173, kuriant\u012f vartotoj\u0105? Pasirodo, galima \u2014 bet tik jei tiksliai \u017einai konkretaus u\u017epuoliko para\u0161us. Patchstack tai padar\u0117, ta\u010diau tik tada, kai kampanija jau vyko.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jei j\u016bs\u0173 svetain\u0117 naudoja WooCommerce \u2014 pavojus dar didesnis. Mok\u0117jimo korteli\u0173 duomenys, klient\u0173 adresai, u\u017esakym\u0173 istorija, prenumeratos \u017eetonai. U\u017epakalin\u0117s durys su visu RCE tokioje svetain\u0117je \u2014 tai jau ne techninis incidentas. Tai duomen\u0173 nutek\u0117jimas su visomis pasekm\u0117mis: prane\u0161imas reguliatoriui, prane\u0161imas klientams, reputacijos \u017eala.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP PATIKRINTI SAVO SVETAIN\u0118<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jei j\u016bs\u0173 svetain\u0117je buvo aktyvus OptinMonster, TrustPulse ar PushEngage ir administratorius prisijung\u0117 prie valdymo skydelio 2026 m. bir\u017eelio 12\u201314 d. \u2014 patikrinimas b\u016btinas. WordPress valdymo skydelis \u0161iam tikslui netinka: u\u017epakalin\u0117s durys aktyviai slepia save nuo administratoriaus s\u0105sajos \u2014 pa\u0161alina save i\u0161 \u012fskiepi\u0173 s\u0105ra\u0161o, atnaujinim\u0173 eil\u0117s ir veiklos \u017eurnal\u0173. Visi svarb\u016bs patikrinimai atliekami tik serverio fail\u0173 sistemos lygmeniu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prad\u0117kite nuo administratoriaus paskyr\u0173 s\u0105ra\u0161o. Jei turite WP-CLI, pakanka vienos komandos \u2014 ji i\u0161veda vis\u0173 vartotoj\u0173 su administrator vaidmeniu prisijungimo vardus ir el. pa\u0161to adresus, naujausias vir\u0161uje:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wp user list --role=administrator --fields=user_login,user_email<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Komanda turi b\u016bti paleid\u017eiama WordPress fail\u0173 savininko vardu \u2014 kitaip WP-CLI negal\u0117s perskaityti <code>wp-config.php<\/code>. Jei gavote klaid\u0105 Permission denied, patikrinkite failo savinink\u0105 ir naudokite <code>sudo -u<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Patikrinkite WordPress fail\u0173 savinink\u0105\nls -la \/var\/www\/html\/wp-config.php\n\n# Paleiskite to vartotojo vardu (paprastai www-data)\nsudo -u www-data wp user list --role=administrator --fields=user_login,user_email --path=\/var\/www\/html<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei WP-CLI n\u0117ra, t\u0105 pat\u012f galima padaryti tiesiogiai per MySQL. U\u017eklausa sujungia vartotoj\u0173 lentel\u0119 su metaduomen\u0173 lentele ir filtruoja tuos, kuri\u0173 capabilities lauke yra administrator:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT user_login, user_email FROM wp_users\nJOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id\nWHERE meta_key = 'wp_capabilities'\nAND meta_value LIKE '%administrator%'\nORDER BY user_registered DESC;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ie\u0161kokite <code>developer_api1<\/code> \/ <code>customer1usx@gmail.com<\/code> ir paskyr\u0173 pagal \u0161ablon\u0105 <code>dev_xxxxxx<\/code> \u2014 \u0161e\u0161i atsitiktiniai simboliai po dev_. Bet kuris i\u0161 j\u0173 \u2014 tiesioginis kompromiso indikatorius.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toliau tikrinkite fail\u0173 sistem\u0105. Parametrai <code>-la<\/code> komandoje ls rodo pasl\u0117ptus failus ir katalogus (prasidedan\u010dius ta\u0161ku), taip pat prieigos teises ir paskutinio pakeitimo dat\u0105 \u2014 tai padeda pasteb\u0117ti neseniai sukurtus aplankus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -la \/var\/www\/html\/wp-content\/plugins\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">U\u017epakalin\u0117s durys diegiamos pavadinimu <code>content-delivery-helper<\/code> arba <code>database-optimizer<\/code>, ta\u010diau pavadinimas kinta \u2014 tod\u0117l atkreipkite d\u0117mes\u012f \u012f bet kokius nepa\u017e\u012fstamus katalogus, ypa\u010d sukurtus bir\u017eelio 12\u201314 d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Net jei pavadinimai neatrodo \u012ftartinai, ie\u0161kokite u\u017epakalini\u0173 dur\u0173 para\u0161\u0173 tiesiogiai kode. Parametras <code>-r<\/code> paleid\u017eia rekursin\u0119 paie\u0161k\u0105 visuose nurodyto kelio failuose. Trys komandos ie\u0161ko: web shell parametro pavadinimo, savavali\u0161ko PHP vykdymo parametro ir XOR \u0161ifravimo rakto. Jei bent viena ka\u017ek\u0105 gr\u0105\u017eino \u2014 u\u017epakalin\u0117s durys yra:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>grep -r \"developer_api1_fm\" \/var\/www\/html\/wp-content\/plugins\/\ngrep -r \"developer_api1_eval\" \/var\/www\/html\/wp-content\/plugins\/\ngrep -r \"jX9kM2nP4qR6sT8v\" \/var\/www\/html\/wp-content\/plugins\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei svetain\u0117 veik\u0117 atakos metu \u2014 papildomai u\u017eblokuokite C2 domen\u0105, kad nutrauktum\u0117te galimus i\u0161orinius ry\u0161ius. Pirmas variantas per nftables prideda taisykl\u0119 \u012f output grandin\u0119, kuri numeta visus siun\u010diamus paketus \u012f IP 84.201.6.54. Antras variantas per \/etc\/hosts nukreipia visus DNS u\u017eklausimus \u012f tidio.cc neegzistuojan\u010diu adresu \u2014 tinka kaip atsargin\u0117 priemon\u0117, jei nftables nenaudojamas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1 variantas: nftables \u2014 blokavimas paket\u0173 lygmeniu\nnft add rule inet filter output ip daddr 84.201.6.54 drop\n\n# 2 variantas: \/etc\/hosts \u2014 blokavimas DNS lygmeniu\necho \"0.0.0.0 tidio.cc\" | sudo tee -a \/etc\/hosts<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei radote bent vien\u0105 i\u0161 \u0161i\u0173 indikatori\u0173 \u2014 svetain\u0117 laikoma visi\u0161kai pa\u017eeista. U\u017epakalini\u0173 dur\u0173 ir kenksmingos paskyros pa\u0161alinimas tik prad\u017eia: esant RCE galimybei, u\u017epuolikas gal\u0117jo palikti papildom\u0173 prieigos ta\u0161k\u0173 bet kurioje fail\u0173 sistemos vietoje. Keiskite visk\u0105: administratori\u0173 slapta\u017eod\u017eius, API raktus, duomen\u0173 baz\u0117s prisijungimo duomenis ir saugumo raktus bei salts <code>wp-config.php<\/code> faile \u2014 b\u016btent salts naudojami sesij\u0173 slapuk\u0173 pasira\u0161ymui, juos pakeit\u0119 i\u0161 karto panaikinsite visas aktyvias sesijas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP APSISAUGOTI I\u0160 ANKSTO<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0160i ataka jau pra\u0117jo, ta\u010diau tiekimo grandin\u0117s per CDN mechanizmas niekur nedingo. \u0160tai kas realiai suma\u017eina rizik\u0105 j\u016bs\u0173 serveryje jau dabar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Steb\u0117kite nauj\u0173 administratori\u0173 paskyr\u0173 k\u016brim\u0105. WordPress pagal nutyl\u0117jim\u0105 neprane\u0161a, kai atsiranda nauja paskyra su admin teis\u0117mis. Tai galima i\u0161taisyti per kabl\u012f <code>user_register<\/code> \u2014 prid\u0117kite \u0161\u012f kod\u0105 \u012f <code>functions.php<\/code> arba mu-plugin. Jis suveikia kiekvienos naujos registracijos metu, patikrina priskirt\u0105 vaidmen\u012f ir siun\u010dia jums el. lai\u0161k\u0105, jei tai administrator. Naujas administratorius \u2014 pakankamai retas \u012fvykis, kad kiekvienas toks atvejis reikalaut\u0173 nedelsiant atkreipti d\u0117mes\u012f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>add_action('user_register', function($user_id) {\n    $user = get_userdata($user_id);\n    if (in_array('administrator', $user-&gt;roles)) {\n        wp_mail(\n            get_option('admin_email'),\n            'Naujas administratorius: ' . $user-&gt;user_login,\n            'Prisijungimas: ' . $user-&gt;user_login . \"\nEl. pa\u0161tas: \" . $user-&gt;user_email\n        );\n    }\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fail\u0173 sistemos vientisumo steb\u0117jimas per AIDE fiksuoja fail\u0173 sistemos b\u016bsen\u0105 \u017einomos \u0161varaus diegimo momentu ir kiekvieno v\u0117lesnio paleidimo metu lygina su etalonu. U\u017epakalini\u0173 dur\u0173 \u012fskiepis, atsirad\u0119s <code>wp-content\/plugins\/<\/code>, bus pasteb\u0117tas kito patikrinimo metu \u2014 net jei jis slepiasi nuo valdymo skydelio. Inicializuokite duomen\u0173 baz\u0119 vien\u0105 kart\u0105, tada paleiskite patikrinim\u0105 kasdien per systemd timer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Etaloninio stovio inicializavimas \u2014 paleiskite \u0161variai sistemai\nsudo aide --init\nsudo mv \/var\/lib\/aide\/aide.db.new \/var\/lib\/aide\/aide.db\n\n# Dabartin\u0117s b\u016bsenos tikrinimas pagal etalon\u0105\nsudo aide --check<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dviej\u0173 veiksni\u0173 autentifikacija visiems WordPress administratoriams neb\u016bt\u0173 sustabd\u017eiusi \u0161ios konkre\u010dios atakos \u2014 skriptas naudojo jau aktyvi\u0105 sesij\u0105. Ta\u010diau ji u\u017edaro gretimuosius vektorius: sesij\u0173 per\u0117mim\u0105, credential stuffing, suk\u010diavim\u0105. Tiekimo grandin\u0117s atakos retai ateina vienos \u2014 da\u017enai jas lydi bandymai gauti prisijungimo duomenis kitais b\u016bdais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Galiausiai reguliariai tikrinkite administratori\u0173 s\u0105ra\u0161\u0105 rankiniu b\u016bdu. Kart\u0105 per savait\u0119 paleiskite <code>sudo -u www-data wp user list --role=administrator<\/code> ir palyginkite su tuo, kas tur\u0117t\u0173 b\u016bti. Tai u\u017etrunka trisde\u0161imt sekund\u017ei\u0173 ir leid\u017eia aptikti nepageidaujamas paskyras gerokai anks\u010diau, nei jos padarys realios \u017ealos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP I\u0160VENGTI PANA\u0160I\u0172 ATAK\u0172 ATEITYJE<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0160i ataka atskleid\u0117 problem\u0105, kurios visi\u0161kai pa\u0161alinti sunku, ta\u010diau galima \u017eenkliai apriboti. Pirma pamoka: CDN raktai su ra\u0161ymo teis\u0117mis neturi b\u016bti saugomi serveriuose, veikian\u010diuose ant WordPress ar kitos TVS. Rinkodaros svetain\u0117 \u2014 tai ne saugi infrastrukt\u016bra. Slaptai su gamybine prieiga ten ne vieta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Antra pamoka: administratoriaus paskyr\u0173 k\u016brimo steb\u0117sena turi b\u016bti j\u016bs\u0173 \u012fsp\u0117jim\u0173 sistemos dalis. Nauja WordPress administratoriaus paskyra \u2014 tai \u012fvykis, apie kur\u012f turite su\u017einoti nedelsiant, o ne i\u0161 savaitinio ataskaitos. Tai galima sukonfig\u016bruoti per saugumo \u012fskiepius arba tiesiogiai per WordPress kablius su prane\u0161imu el. pa\u0161tu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tre\u010dia pamoka: Subresource Integrity (SRI) \u2014 mechanizmas, leid\u017eiantis nar\u0161yklei patikrinti i\u0161orinio skripto mai\u0161\u0105 prie\u0161 j\u012f vykdant. Jei <code>&lt;script&gt;<\/code> \u017eym\u0117 tur\u0117t\u0173 <code>integrity<\/code> atribut\u0105 su laukiamo failo SHA-256 mai\u0161a, nar\u0161ykl\u0117 atsisakyt\u0173 vykdyti pakeist\u0105 SDK. Deja, dauguma SaaS \u012fskiepi\u0173 ne\u012fgyvendina SRI savo SDK failams \u2014 b\u016btent tod\u0117l, kad reguliariai juos atnaujina. Ta\u010diau kritin\u0117ms i\u0161orin\u0117ms skriptams verta apsvarstyti \u0161\u012f mechanizm\u0105 ten, kur tai \u012fmanoma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ketvirta pamoka: dviej\u0173 veiksni\u0173 autentifikacija visiems WordPress administratoriams neb\u016bt\u0173 sustabd\u017eiusi \u0161ios konkre\u010dios atakos (skriptas naudojo jau aktyvi\u0105 sesij\u0105), ta\u010diau suma\u017eint\u0173 rizik\u0105 prisijungimo duomen\u0173 pa\u017eeidimo scenarijuose, kurie da\u017enai lydi tiekimo grandin\u0117s atakas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KOMPROMISO INDIKATORIAI<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kenksmingos paskyros:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>developer_api1 \/ customer1usx@gmail.com  (fiksuota)\ndev_xxxxxx \/ dev_xxxxxx@gmail.com        (atsitiktin\u0117s, 6 simboliai)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">U\u017epakalini\u0173 dur\u0173 \u012fskiepiai (pavadinimas kinta, tikrinkite disk\u0105):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>content-delivery-helper   \"Content Delivery Helper\"   v2.7.1\ndatabase-optimizer        \"Database Optimizer\"        v2.9.4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Web shell parametrai:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>?developer_api1_fm      (web shell, vykdo system($_POST&#91;'cmd']))\ndeveloper_api1_eval     (vykdo base64-dekoduot\u0105 PHP)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">C2 infrastrukt\u016bra:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tidio.cc  (IP: 84.201.6.54, AS214036 Ultahost)\nKeliai: \/cdn-cgi\/p, \/cdn-cgi\/b, \/cdn-cgi\/l, \/cdn-cgi\/pe-p, \/cdn-cgi\/pe-b, \/cdn-cgi\/pe-l<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kenk\u0117ji\u0161kos programos \u0161ifravimo raktas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jX9kM2nP4qR6sT8v<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">U\u017ekr\u0117sti CDN failai (jau i\u0161valyti, ta\u010diau naudingi retrospektyvinei \u017eurnal\u0173 analizei):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a.omappapi.com\/app\/js\/api.min.js\na.opmnstr.com\/app\/js\/api.min.js\na.optnmstr.com\/app\/js\/api.min.js\na.trstplse.com\/app\/js\/api.min.js\nclientcdn.pushengage.com\/sdks\/pushengage-web-sdk.js<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>I\u0160VADOS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ataka prie\u0161 OptinMonster nemaloni b\u016btent tod\u0117l, kad nepalieka paprasto \u201eatnaujinkite \u012fskiepius&#8221; ar \u201enaudokite stiprius slapta\u017eod\u017eius&#8221; patarimo. Nukent\u0117jusios svetain\u0117s dar\u0117 visk\u0105 teisingai. Problema buvo ne jose \u2014 ji buvo pas pardav\u0117j\u0105, vietoje, kur svetaini\u0173 savininkai neturi nei prieigos, nei matomumo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Awesome Motive atveju tai vadov\u0117linis pavyzdys, kod\u0117l gamybiniai slaptai negali gyventi \u017eemesnio saugumo infrastrukt\u016broje. WordPress diegimas su UpdraftPlus ir CDN API raktu su ra\u0161ymo teis\u0117mis rinkodaros serveryje \u2014 tai buvo laiko bomba. Ji sprogo per tre\u010diosios \u0161alies \u012fskiepio pa\u017eeid\u017eiamum\u0105, kur\u012f ka\u017ekas surado ir tikslingai i\u0161naudojo b\u016btent \u0161iam tikslui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jums kaip WordPress administratoriui \u2014 tai priminimas, kad j\u016bs\u0173 saugumo perimetras platesnis, nei manote. Jis apima kiekvien\u0105 i\u0161orin\u012f skript\u0105, kiekvien\u0105 CDN, kiekvien\u0105 SaaS pardav\u0117j\u0105, kuriam j\u016bs\u0173 svetain\u0117 pasitiki lankytojo nar\u0161ykl\u0117je. Administratori\u0173 paskyr\u0173 k\u016brimo steb\u0117sena, fail\u0173 sistemos vientisumo tikrinimas per AIDE, WAF su para\u0161ais gr\u012fstomis taisykl\u0117mis \u2014 tai ne perteklinis atsargumas. Tai vieninteliai dalykai, kurie tikrai pad\u0117s, kai problema ateis ne i\u0161 j\u016bs\u0173 kodo, o i\u0161 svetimo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u012esivaizduokite: j\u016bs\u0173 WordPress visi\u0161kai atnaujintas, visi \u012fskiepiai aktual\u016bs, savame kode joki\u0173 pa\u017eeid\u017eiamum\u0173. Administratorius prisijungia prie valdymo skydelio \u2014 eilin\u0117 darbo diena. Po keli\u0173 valand\u0173 svetain\u0117je atsiranda pasl\u0117pta paskyra su administratoriaus teis\u0117mis ir u\u017epakalini\u0173 dur\u0173 \u012fskiepis su web shell&#8217;u. Niekas ne\u012fsilau\u017e\u0117 \u012f j\u016bs\u0173 server\u012f. Problema at\u0117jo i\u0161 patikimo \u012frankio, u\u017e kur\u012f mokate pinigus. 2026 m. bir\u017eelio 12 d. u\u017epuolikai sureng\u0117 tiekimo grandin\u0117s atak\u0105 prie\u0161 tris populiarius \u201eAwesome Motive&#8221; kompanijos WordPress \u012fskiepius: OptinMonster (daugiau nei 1,2 mln. aktyvi\u0173 diegim\u0173), TrustPulse ir PushEngage. Ataka nei\u0161naudojo pa\u017eeid\u017eiamum\u0173 pa\u010diuose \u012fskiepiuose \u2014 ji smog\u0117 auk\u0161\u010diau grandin\u0117je, CDN infrastrukt\u016brai, per kuri\u0105 \u012fskiepiai tiekia savo JavaScript klientams. Atak\u0105 pirmieji pasteb\u0117jo Sansec tyr\u0117jai, specializuojantys e-komercijos saugumo srityje. V\u0117liau i\u0161sami\u0105 technin\u0119 analiz\u0119 paskelb\u0117 Patchstack. \u010cia n\u0117ra CVE numerio ar CVSS balo. Tai ataka prie\u0161 pasitik\u0117jim\u0105: u\u017epuolikai i\u0161naudojo tai, kad svetain\u0117s pasitiki JavaScript, kur\u012f joms tiekia \u012fskiepi\u0173 pardav\u0117jas. Ir tas pasitik\u0117jimas buvo panaudotas prie\u0161 jas. KAIP TAI TAPO \u012eMANOMA U\u017epuolikai nelau\u017e\u0117 OptinMonster. Jie neie\u0161kojo pa\u017eeid\u017eiamum\u0173 \u012fskiepi\u0173 kode, neband\u0117 per j\u0117g\u0105 \u012fveikti API, nesikas\u0117 per WordPress branduol\u012f. Jie tiesiog \u012f\u0117jo per pa\u010dios kompanijos rinkodaros svetain\u0119 \u2014 \u012fprast\u0105 WordPress diegim\u0105 su UpdraftPlus, kuriame buvo \u017einomas, neu\u017elopintas pa\u017eeid\u017eiamumas. Pralau\u017eti \u012fskiepi\u0173 gamintojo rinkodaros svetain\u0119 daug papras\u010diau nei pralau\u017eti pat\u012f \u012fskiep\u012f. O laukiantis atlygis pasirod\u0117 neproporcingai didelis. Toje rinkodaros svetain\u0117je gul\u0117jo CDN paskyros API raktas \u2014 to paties CDN, per kur\u012f Awesome Motive tiekia JavaScript failus visiems klientams, visoms 1,2 mln. svetaini\u0173 su OptinMonster. Raktas buvo vienas. Prieigos lygis \u2014 visi\u0161kas. U\u017epuolikas nereik\u0117jo kompromituoti kiekvienos svetain\u0117s atskirai: jis pakeit\u0117 vien\u0105 fail\u0105 vienoje vietoje, ir CDN pats i\u0161platino u\u017ekr\u0117st\u0105 skript\u0105 visiems klientams. Tai ir yra tiekimo grandin\u0117s ataka gryniausiame pavidale \u2014 vietoj milijono spyn\u0173 buvo pralau\u017eta viena dirbtuv\u0117, kurioje jos gaminamos. U\u017epuolikai pakeit\u0117 teis\u0117tus JavaScript SDK kenksmingomis versijomis \u0161iuose CDN domenuose: Kenksmingasis kodas nepakeit\u0117 originalaus \u2014 jis buvo prid\u0117tas prie teis\u0117to minifikuoto SDK pabaigos. \u012eskiepis toliau veik\u0117 \u012fprastai, o kenksmingoji logika veik\u0117 lygiagre\u010diai. B\u016btent d\u0117l to standartin\u0117 steb\u0117sena i\u0161 karto nesuk\u0117l\u0117 pavojaus signalo. KAIP VEIK\u0116 KENKSMINGASIS KODAS Skriptas buvo para\u0161ytas chirurginiu tikslumu \u2014 aktyvavosi tik esant tinkamoms s\u0105lygoms ir i\u0161veng\u0117 aptikimo keliais lygmenimis. Pirmiausia patikrino vykdymo aplink\u0105: ie\u0161kojo navigator.webdriver, headless nar\u0161ykli\u0173 \u017eymekli\u0173 (window._phantom, window.__nightmare) ir nulinio dyd\u017eio nar\u0161ykl\u0117s lang\u0173. Tai apsauga nuo automatini\u0173 skaneri\u0173 ir saugumo tyr\u0117j\u0173. Tada \u012fsitikino, kad veikia b\u016btent WordPress administratoriaus kontekste: tikrino admin juostos buvim\u0105, \/wp-admin\/ kelius ir wordpress_logged_in_ slapuk\u0105. Jei administratoriaus nerasta \u2014 papras\u010diausiai sustodavo. S\u0117kmingai suveikus, pa\u017eym\u0117davo localStorage, kad toje pa\u010dioje nar\u0161ykl\u0117je per 24 valandas nepasikartot\u0173. Rad\u0119s administratori\u0173, skriptas rinko visk\u0105, ko reikia veikti jo vardu: nustat\u0117 WordPress \u0161akn\u012f ir admin keli\u0105, i\u0161trauk\u0117 galiojant\u012f REST nonce i\u0161 wpApiSettings, per admin-ajax.php?action=rest-nonce arba i\u0161 vartotojo prid\u0117jimo puslapio. Tur\u0117damas administratoriaus sesij\u0105 ir galiojant\u012f nonce, visi tolesni u\u017eklausai tinklo lygmeniu atrod\u0117 kaip teis\u0117ti paties administratoriaus veiksmai. Kenksminga administratoriaus paskyra buvo kuriama per keturis lygiagre\u010dius metodus \u2014 skriptas band\u0117 juos po vien\u0105 iki pirmojo s\u0117kmingo: Skriptas k\u016br\u0117 tiek fiksuot\u0105 paskyr\u0105 developer_api1 su adresu customer1usx@gmail.com, tiek atsitiktines paskyras pagal \u0161ablon\u0105 dev_xxxxxx \/ dev_xxxxxx@gmail.com. Jame net buvo \u012fdiegtas daugiakalbis \u017eodynas su prane\u0161imais \u201evartotojas jau egzistuoja&#8221; \u2014 kad lokalizuotose WordPress instaliacijose gal\u0117t\u0173 teisingai nustatyti s\u0117km\u0119. Gav\u0119s administratoriaus prieig\u0105, skriptas atsisiunt\u0117 u\u017epakalini\u0173 dur\u0173 ZIP archyv\u0105 i\u0161 C2 serverio ir \u012fdieg\u0117 j\u012f per POST \/wp-admin\/update.php?action=upload-plugin. U\u017epakalini\u0173 dur\u0173 \u012fskiepis keit\u0117 pavadinim\u0105: skirtinguose steb\u0117jimuose jis maskavosi kaip \u201eContent Delivery Helper&#8221; (content-delivery-helper, versija 2.7.1) arba \u201eDatabase Optimizer&#8221; (database-optimizer, versija 2.9.4). Be to, sl\u0117p\u0117 save \u012fskiepi\u0173 s\u0105ra\u0161e, atnaujinim\u0173 eil\u0117je ir WordPress veiklos \u017eurnaluose \u2014 per valdymo skydel\u012f jo aptikti prakti\u0161kai nebuvo \u012fmanoma. \u012ediegtos u\u017epakalin\u0117s durys atv\u0117r\u0117 du nuotolinio kodo vykdymo kanalus. Per parametr\u0105 ?developer_api1_fm veik\u0117 web shell, vykdantis system($_POST[&#8216;cmd&#8217;]). Per parametr\u0105 developer_api1_eval buvo vykdomas bet koks base64-dekoduotas PHP kodas. Surinkti duomenys buvo XOR-\u0161ifruojami raktu jX9kM2nP4qR6sT8v, koduojami \u012f base64 ir siun\u010diami \u012f domen\u0105 tidio.cc (s\u0105moninga teis\u0117to tidio.com imitacija) per atspari\u0105 grandin\u0119: navigator.sendBeacon \u2192 fetch \u2192 XMLHttpRequest \u2192 pikselinis paveiksl\u0117lis. REALI ATAKOS GRANDIN\u0116 Mast\u0105 patvirtino Patchstack statistika. Per 36 valandas \u2014 bir\u017eelio 14\u201315 d. \u2014 j\u0173 WAF taisykl\u0117 u\u017eblokavo 271 kenksmingo administratoriaus k\u016brimo bandym\u0105 13 svetaini\u0173 i\u0161 81 unikalaus IP adreso. Pasiskirstymas pagal vektorius: 263 u\u017eklausos per REST API \/wp-json\/wp\/v2\/users, 5 per form\u0105 \/wp-admin\/user-new.php, 3 per \/wp-admin\/admin-ajax.php. Srauto pob\u016bdis ypa\u010d i\u0161kalbingas: 81 skirtingas IP adresas, ma\u017edaug 60 % mobiliosios nar\u0161ykl\u0117s (Android\/Samsung), likusios \u2014 Windows, macOS ir Linux. Tai ne centralizuota ataka i\u0161 u\u017epuoliko serveri\u0173. Tai reali\u0173 WordPress administratori\u0173 nar\u0161ykl\u0117s, kurios tapo nevalingais atakos \u012frankiais. Tod\u0117l WAF&#8217;ams ir buvo taip sunku atskirti kenksmingas u\u017eklausas nuo teis\u0117t\u0173: jos ne\u0161\u0117 galiojan\u010di\u0105 sesij\u0105 ir galiojant\u012f nonce. Domenas tidio.cc buvo u\u017eregistruotas dar 2026 m. baland\u017eio 28 d. \u2014 pusantro m\u0117nesio prie\u0161 atak\u0105. Tuo pat metu gautas TLS sertifikatas. Ataka buvo planuota i\u0161 anksto. CHRONOLOGIJA 2026 m. baland\u017eio 28 d.: C2 domeno tidio.cc registracija ir TLS sertifikato gavimas \u2014 infrastrukt\u016bros paruo\u0161imas. 2026 m. bir\u017eelio 12 d., 22:17 UTC: kenksmingasis kodas pirm\u0105 kart\u0105 pasteb\u0117tas OptinMonster ir TrustPulse api.min.js failuose. 2026 m. bir\u017eelio 12 d., 22:42 UTC: paskutinis patvirtintas kenksmingojo kodo buvimas OptinMonster ir TrustPulse CDN. Poveikio langas pagrindiniame CDN \u2014 apie 25 minut\u0117s, ta\u010diau d\u0117l CDN kra\u0161tini\u0173 mazg\u0173 talpyklos dalis mazg\u0173 kenksming\u0105 skript\u0105 tiek\u0117 ilgiau. 2026 m. bir\u017eelio 13 d., 19:02 UTC: PushEngage SDK vis dar tiekia u\u017ekr\u0117st\u0105 kod\u0105 i\u0161 dalies CDN mazg\u0173. 2026 m. bir\u017eelio 14 d.: kenksmingasis kodas pa\u0161alintas i\u0161 PushEngage CDN; Awesome Motive paskelbia oficial\u0173 prane\u0161im\u0105 apie incident\u0105. 2026 m. bir\u017eelio 14\u201315 d.: Patchstack aktyviai blokuoja i\u0161naudojimo bandymus apsaugotose svetain\u0117se. KOD\u0116L TAI SVARBU Viskas atnaujinta. \u012eskiepiai aktual\u016bs. Serveris pataisytas. Ir vis tiek pa\u017eeistas. B\u016btent tai daro \u0161i\u0105 atak\u0105 tikrai nemalonia \u2014 ji netrenkia \u012f silpn\u0105 j\u016bs\u0173 apsaugos viet\u0105, o \u012f akl\u0105. Standartinis modelis \u201eatnaujink \u012fskiepius ir bus gerai&#8221; \u010dia tiesiog neveikia, nes pa\u017eeid\u017eiamumas buvo ne \u012fskiepyje, o jo pristatymo infrastrukt\u016broje. J\u016bs negal\u0117jote jo pamatyti, negal\u0117jote jo pa\u0161alinti atnaujinimais ir negal\u0117jote jo aptikti standartin\u0117mis priemon\u0117mis. Yra dar vienas dalykas, kur\u012f svarbu ai\u0161kiai suprasti: u\u017eklausas kenksmingo administratoriaus k\u016brimui generavo ne u\u017epuoliko serveris \u2014 jas generavo j\u016bs\u0173 paties administratoriaus nar\u0161ykl\u0117. Su jo sesija, jo nonce, jo slapukais. WordPress mat\u0117 teis\u0117t\u0105 vartotoj\u0105, atliekant\u012f teis\u0117t\u0105 veiksm\u0105. Tod\u0117l dauguma WAF taisykli\u0173 tyl\u0117jo: kaip blokuoti administratori\u0173, kuriant\u012f vartotoj\u0105? Pasirodo, galima \u2014 bet tik jei tiksliai \u017einai konkretaus u\u017epuoliko para\u0161us. Patchstack tai padar\u0117, ta\u010diau tik tada, kai kampanija jau vyko. Jei j\u016bs\u0173 svetain\u0117 naudoja WooCommerce \u2014 pavojus dar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":20534,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[199,155,151],"tags":[427,533,267,268,534,535,536,289,537,538,539,540,362,541],"class_list":["post-20538","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-lt","category-saugumas","category-wordpress","tag-backdoor","tag-cdn","tag-cybersecurity","tag-infosec","tag-linuxsecurity","tag-malware","tag-optinmonster","tag-serversecurity","tag-supplychain","tag-supplychainattack","tag-websecurity","tag-woocommerce","tag-wordpress","tag-wordpresssecurity"],"_links":{"self":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/comments?post=20538"}],"version-history":[{"count":3,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20538\/revisions"}],"predecessor-version":[{"id":20545,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20538\/revisions\/20545"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/media\/20534"}],"wp:attachment":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/media?parent=20538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/categories?post=20538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/tags?post=20538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}