- Keliose kampanijose buvo piktnaudžiaujama patikimais „React Native“ npm paketais ir įrankiais – nuo vartotojo sąsajos komponentų iki komandinės eilutės įrankių, – perimant paskyras ir atliekant rašybos klaidas.
- Užpuolikai vis dažniau diegia sudėtingą daugiapakopę kenkėjišką programinę įrangą, naudodami „Solana“ arba decentralizuotą C2, taikydamiesi į kūrėjų kompiuterius, CI kanalus ir piniginės ar kredencialų duomenis.
- Saugumo paslaugų teikėjai dabar pasikliauja dirbtinio intelekto analize, atvėsimo patikrinimais ir sustiprinta CI išėjimo kontrole, kad per kelias minutes aptiktų ir suvaldytų šias tiekimo grandinės atakas.
- „React Native“ komandos privalo derinti griežtą priklausomybių higieną, „npm 2FA“, užrakinimo failus ir nuolatinį stebėjimą, kad reikšmingai sumažintų tiekimo grandinės riziką.
„React Native“ tapo pagrindine mobiliųjų programėlių kūrimo sistema, todėl jos npm ekosistema yra itin patrauklus taikinys užpuolikams, norintiems pažeisti kūrėjų kompiuterius ir CI kanalus. Per pastaruosius kelerius metus kelios itin sudėtingos kampanijos piktnaudžiavo patikimais „React Native“ paketais, populiariais įrankiais, skirtais sistemai, ir netgi kopijavimo aparatūrą naudojančiomis programomis, kad platintų kenkėjiškas programas, vogtų prisijungimo duomenis, išfiltruotų pinigines ir dideliu mastu sabotuotų „JavaScript“ projektus.
Jei šiandien kuriate arba prižiūrite „React Native“ programas, nebeužtenka tiesiog „įdiegti npm ir tikėtis geriausio“. Daugybė grėsmių subjektų sistemingai piktnaudžiauja npm, taikydamiesi į viską – nuo vartotojo sąsajos komponentų iki komandinės eilutės valdymo įrankių ir net į tranzityvinę priklausomybių diagramą, kuri slepiasi giliai jūsų užrakinimo failuose. Šiame straipsnyje apžvelgiami pagrindiniai žinomi incidentai, analizuojama, kaip veikia kenkėjiška programa, ir išdėstomi pragmatiški veiksmai, kurių galite imtis, kad sumažintumėte sprogimo spindulį savo kūrimo aplinkoje.
Paskyros perėmimas ir kenkėjiškos programos „React Native“ įvesties komponentuose
Vienas labiausiai nerimą keliančių tiekimo grandinės incidentų „React Native“ pasaulyje paveikė du labai įprastus vartotojo sąsajos komponentus, skirtus telefono ir šalies pasirinkimui: react-native-international-phone-number bei react-native-country-select. Abu paketus prižiūri tas pats autorius (@AstrOOnauta, npm vartotojas astroonauta), sukaupė dešimtis tūkstančių atsisiuntimų per savaitę ir yra integruoti į daugelį mobiliųjų programėlių, skirtų gamybinei versijai.
2026 m. kovo 16 d. „StepSecurity“ dirbtiniu intelektu paremta paketų analitiko programa pirmoji pastebėjo, kad naujose šių bibliotekų versijose diegimo metu staiga atsirado kenkėjiškų programų. Iškart pažeisti leidimai buvo react-native-international-phone-number@0.11.8 bei react-native-country-select@0.3.91Paskutinės patvirtintos švarios versijos tuo metu buvo 0.11.7 bei 0.3.9 atitinkamai.
Pradinės užpakalinės durys (1 banga) buvo žiauriai paprastos: nauja preinstall scenarijus ir labai miglotas install.js failas, sugrupuotas į tarball. Piktybiški package.json fragmentas atrodė taip:
"scripts": { "preinstall": "node install.js" }
Kadangi npm gyvavimo ciklo scenarijai paleidžiami automatiškai npm installKiekvienas, išgavęs šias versijas – lokaliai arba iš integraliosios sąsajos – paleido kenkėjišką programą neimportavęs jokio kodo. Nebuvo jokių atitinkamų „Git“ žymų, leidimų ar CI darbo eigos paleidimų pažeistoms versijoms ir gitHead atitiko ankstesnę gerą versiją – tai aiškus rodiklis, kad užpuolikas gavo tiesioginę publikavimo prieigą prie prižiūrėtojo npm paskyros, o ne modifikavo „GitHub“ saugyklą.
Maždaug tuo metu gauti atsisiuntimų duomenys rodo, kokia bloga galėjo būti padėtis: maždaug 9,000 atsisiuntimų per savaitę. react-native-country-select ir daugiau nei 20,000 tūkst. react-native-international-phone-number, iš viso per mėnesį atsisiunčiama daugiau nei 130 000 kartų. Būtent tokia didelio masto, mažai matoma priklausomybė tyliai nusistovi tūkstančiuose kūrėjų ir CI mašinų.
Trijų bangų ataka: nuo akivaizdaus išankstinio diegimo iki slaptų priklausomybių grandinių
Kampanija prieš šiuos „React Native“ paketus vyko trimis skirtingais bangomis, kiekviena iteracija buvo vis labiau vengianti nei ankstesnė, pakartotinai naudojant tą pačią pagrindinę kenkėjišką programą. „StepSecurity“ beveik realiuoju laiku stebėjo įvykių eigą ir koordinavo veiksmus su administratoriumi, tačiau užpuolikas ne kartą atgavo arba išlaikė prieigą prie pažeistos „npm“ paskyros.
1 banga (2026 m. kovo 16 d.), kurios centre – tiesioginis preinstall sukabinkite abi pakuotes. Maždaug per penkias minutes nuo paskelbimo „StepSecurity“ dirbtinis intelektas pažymėjo naujas versijas kaip kritines, o problemos buvo atidarytos „GitHub“: #165, skirtos react-native-international-phone-number ir Nr. 11 už react-native-country-selectPrižiūrėtojas greitai sureagavo, pašalino kenkėjiškas versijas ir išleido švarią versiją. react-native-country-select@0.4.0Bendras laikas nuo paskelbimo iki nebenaudojimo nutraukimo buvo apie 2 valandas ir 21 minutę – tai greitas laikas pagal ekosistemos standartus.
Nepaisant to, užpuolikas niekada neprarado „npm“ prisijungimo duomenų kontrolės, todėl kovo 17 d. įvyko antroji banga. Užuot vėl į pagrindinius paketus įtraukęs akivaizdų scenarijų, grėsmės veikėjas sukūrė du naujus apribotus paketus, kurie veikia kaip paslėpta infrastruktūra:
@usebioerhold8733/s-format@2.0.1– tuščiaviduris klonasstring-formatsupostinstall: "node init.js"scenarijus, bet jo trūkstainit.jsfailą, todėl užklausa tyliai neveikia.@agnoliaarisian7180/string-argv@0.3.0– beveik tuščias paketas (README, LICENSE, package.json), kurio vienintelė tikroji paskirtis buvo priklausyti nuo@usebioerhold8733/s-format, su „ProtonMail“ pagrindu sukurtu prižiūrėtojo adresu.
Vėliau tą patį vakarą react-native-international-phone-number@0.12.1 buvo paskelbtas su @agnoliaarisian7180/string-argv@0.3.0 pridėta kaip nauja priklausomybė, vėlgi be jokios „GitHub Actions“ veiklos. Tuo metu grandinė buvo paruošta, bet inertiška, laukiant, kol bus įjungtas naudingasis srautas. Kai „StepSecurity“ pranešė apie anomaliją, prižiūrėtojas patvirtino tai, kas jau buvo akivaizdu iš artefaktų: „mano npm paskyra buvo užpulta, o biblioteka perimta“.
Trečioji banga (kovo 18 d.) pavertė etapinę infrastruktūrą aktyvia daugiasluoksne kenkėjiškų programų pristatymo grandine ir vėliau ją sparčiai tobulino. Naujos abiejų retransliavimo paketų ir pagrindinės bibliotekos versijos buvo išleistos per mažiau nei valandą, užpuolikui iteracijoje keičiant, kaip buvo paleistas naudingasis turinys.
Galutinė grandinėlė atrodė taip:
react-native-international-phone-number@0.12.2/0.12.3 → @agnoliaarisian7180/string-argv@latest → @usebioerhold8733/s-format@latest → postinstall → node child.js → init.js (malware)
Užpuolikas pirmiausia įjungė naudingąją apkrovą @usebioerhold8733/s-format@2.0.2 pridedant didelį, painų init.js failas, kuris buvo baitas po baito identiškas ankstesniam install.js iš 1 bangos. Tada jie pakeitė postinstall paskambinti child.js VIETOJ init.js, paskelbta 2.0.3 trūko scenarijaus (dar vienas bandomasis bandymas) ir galiausiai išsiųstas 2.0.4 su mažyčiu child.js krautuvas, kuris tiesiog patikrina init.js ir vykdo jį per child_process.exec atmetant klaidas ir standartinę išvestį.
Tuo pačiu metu, @agnoliaarisian7180/string-argv@0.3.1 įjungė savo priklausomybę s-format iš prisegtos versijos į "latest"ir react-native-international-phone-number@0.12.2 padarė tą patį su string-argv. Tai sukūrė savaime atsinaujinančią kenkėjišką grandinę, kurioje kiekvienas pagrindinio paketo diegimas automatiškai atsisiųsdavo naujausią naudingosios apkrovos versiją.
Galiausiai, react-native-international-phone-number@0.12.3 Pašalintas dabar nereikalingas išankstinio diegimo kabliukas (kad atrodytų tvarkingiau), išsaugota kenkėjiška priklausomybių grandinė ir „npm“ priežiūros el. pašto adresas pakeistas į dar vieną „ProtonMail“ paskyrą, kuri nepriklauso originaliam autoriui. Tai buvo aiškus ženklas, kad užpuolikas įtvirtino nuolatinę npm tapatybės kontrolę, o ne tik oportunistiškai pakartotinai panaudojo nutekėjusį žetoną.
„Solana“ palaikomos kenkėjiškos programos, skirtos „React Native“ kūrėjams, viduje
Visose trijose bangose slypi ta pati sudėtinga daugiapakopė kenkėjiška programa, kuri piktnaudžiauja „Solana“ blokų grandine kaip dinaminiu komandų ir valdymo kanalu. Pristatymo mechanizmas nuolat keitėsi, tačiau „ginklas“ visose iteracijose išliko toks pats – baitas po baito buvo tas pats failas, perkeltas iš 1-osios bangos į 3-iosios bangos infrastruktūrą.
Scenarijus prasideda su tyčiniu 10 sekundžių vėlavimu, naudojant setTimeout, klasikinis smėlio dėžės vengimo triukas. Daugelyje automatizuotų „smėlio dėžių“ ir saugos įrankių scenarijams suteikiamas tik trumpas vykdymo laikotarpis, prieš nusprendžiant, kad nieko įtartino neįvyko, todėl kenkėjiška programa tiesiog palaukia jų, prieš darydama ką nors įdomaus.
Toliau jis atlieka geofiltrą, kad būtų išvengta sistemų užkrėtimo Rusijoje ir kai kuriose NVS šalyse. Jis tikrina aplinkos kintamuosius, pvz. LANG, LANGUAGE, LC_ALL, pagrindinio kompiuterio vartotojo informaciją, sistemos laiko juostą ir net neapdorotus UTC poslinkius, ieškodami reikšmių, kurios nurodo Rusijos lokalę (pvz., ru_RU or Russian) arba vieną iš Rusijos / NVS laiko juostų sąrašo. Jei kuri nors iš jų sutampa, scenarijus iš karto ir tyliai uždaromas.
Tik jei aplinka praeina šį patikrinimą, kenkėjiška programa pradeda bendrauti su „Solana“ blokų grandine. Jame yra užkoduotas piniginės adresas ir jis užklausiamas per getSignaturesForAddress JSON-RPC metodas devyniuose skirtinguose „Solana RPC“ galiniuose taškuose, kuriuos talpina įvairūs tiekėjai. Šis dizainas suteikia užpuolikui aukštą prieinamumą ir neefektyvų paprastą domenų ar IP blokavimą.
Gudrybė ta, kad užpuolikas paslepia kito etapo naudingosios apkrovos URL „Solana“ operacijų, nukreiptų į tą piniginę, priminimo lauke. Atmintinėje saugomas „base64“ užkoduoto JSON failo fragmentas, kurio link lauke yra kito etapo URL. Paskelbdamas naują operaciją, operatorius gali bet kada pakeisti naudingosios apkrovos URL nemodifikuodamas paskelbtų npm paketų.
Išgavus URL, kenkėjiška programa atlieka HTTP užklausą užpuoliko serveriui adresu http://45.32.150.251/, siunčiant OS tipą pasirinktiniu būdu os antraštę, kad C2 galėtų grąžinti platformai būdingus dvejetainius failus. Atsakymo tekste yra užšifruotas naudingasis krovinys, tačiau AES-256 raktas ir jam iššifruoti reikalingi IV siunčiami tik HTTP antraštėse (secretkey bei ivbase64), todėl bet kokie talpykloje saugomi ar perimti kūno duomenys patys savaime yra nenaudingi.
Iššifruotas antrasis etapas niekada neliečia disko; jis vykdomas atmintyje su eval(atob(...)) Unix tipo sistemose arba per vm.Script „Windows“ sistemoje su visiška prieiga prie „Node“ vidinių komponentų. Vėliau kenkėjiška programa pateikia ~/init.json žymeklio failas, kuriame saugoma laiko žyma ir unikalus identifikatorius, kad tas pats kompiuteris nebūtų pakartotinai užkrėstas daugiau nei kartą per 48 valandas. Toks dažnio ribojimas smarkiai sumažina triukšmą ir suteikia gynėjams mažiau elgesio indikatorių, į kuriuos reikia atkreipti dėmesį.
AES iššifruotas trečiojo etapo paketas, kurį tyrėjai atkūrė pakartodami tuos pačius „Solana“ ir HTTP veiksmus, yra „Windows“ pagrindu sukurta kredencialų ir piniginės vagis bei įkėlėjas. Tai užtikrina atkaklumą schtasks ir Run registro raktas, atsisiunčia papildomus užšifruotus modulius iš 45.32.150.251ir išfiltruoja gautą grobį į IP adresą, esantį 217.69.3.x diapazone.
Ši apkrova ieško duomenų iš darbalaukio piniginių ir naršyklės plėtinių, tokių kaip „MetaMask“, „Phantom“, „Exodus“, „Atomic“, „Guarda“, „Coinomi“, „Daedalus“, „OKX Wallet“, „Trust Wallet“, „Braavos“ ir kt., naršydama naršyklės profilio aplankus ir vietinių piniginių katalogus po priverstinio „Chrome“ ir „Firefox“ uždarymo. Be to, jis tiesiogiai iš vietinių konfigūracijos ir kredencialų pagalbininkų gauna npm žetonus ir „GitHub“ kredencialus, paversdamas pažeistas kūrėjų platformas puikiomis paleidimo aikštelėmis tolesnėms tiekimo grandinės atakoms.
Pažymėtina, kad kenkėjiška programa netgi atsisiunčia savo „Node.js“ vykdymo aplinkas (22.9.0 versiją), skirtas tiek x86, tiek x64 sistemoms. %APPDATA%\_node_x86 bei %APPDATA%\_node_x64, užtikrinant nuoseklią vykdymo aplinką net tada, kai „Node“ nėra įdiegtas tikslinėje sistemoje.
Nuorodos į „ForceMemo“ ir „GlassWorm“ grėsmės veikėją
Šio „React Native“ npm incidento techninis pėdsakas beveik idealiai sutampa su ankstesne kampanija, pavadinta „ForceMemo“, kuri kompromitavo šimtus „Python“ saugyklų „GitHub“ platformoje. Abiejose operacijose kaip neaktyvus C2 serveris buvo naudojamas „Solana“, ta pati devynių RPC galinių taškų grupė, tas pats JSON atmintinės formatas su link laukas, identiška Rusijos / NVS geografinio filtravimo logika, tas pats ~/init.json „persistent lock“ ir net panašūs infrastruktūros diapazonai, talpinami „Vultr“.
Nors „Solana“ piniginių adresai abiejose kampanijose skiriasi, visa kita rodo vieną labai pajėgų veikėją, manoma, kad tai grupė, žinoma kaip „GlassWorm“. „ForceMemo“ taikėsi į kūrėjus per užterštus „GitHub“ saugyklų failus, o „React Native“ incidentas – per npm paketus ir jų priklausomybių grandines. Strategija aiški: pakartotinai naudoti sudėtingą, modulinę kenkėjiškų programų sistemą, tačiau įtraukti ją į skirtingus platinimo kanalus, kad būtų pasiekta kuo daugiau kūrimo aplinkų.
Kitos kenkėjiškos NPM kampanijos, susijusios su „React Native“ ir „JavaScript“
„AstrOOnauta“ kompromitacija yra tik viena iš platesnės npm pagrįstų atakų bangos, tiesiogiai ar netiesiogiai veikiančios „React Native“ programas, dalis. Keletas saugumo tiekėjų dokumentavo lygiagrečias kampanijas, kuriose daugiausia dėmesio skiriama „React Native“ vartotojo sąsajos bibliotekoms, pagrindiniams CLI įrankiams ir net bendriniams kūrimo papildiniams, nuo kurių priklauso daugelis „React Native“ kodų bazių.
„Aikido Security“ 2025 m. birželį atskleidė didelę tiekimo grandinės operaciją, kurios metu buvo slapta įsilaužta į mažiausiai 16 su „React Native“ susijusių paketų. @react-native-aria/* apimtis plius @gluestack-ui/utils, kartu aptarnaujant apie milijoną atsisiuntimų per savaitę. Pirmasis įsilaužimas įvyko 2025 m. birželio 6 d., pradedant nuo @react-native-aria/focus@0.2.10, o birželio 7 d. greitai išplėsta ir apėmė papildomus fokusavimo, perdangos, sąveikos, perjungimo, jungiklio, žymimojo langelio, radijo, mygtuko, meniu, sąrašo lauko, skirtukų, išskleidžiamojo lauko, atskleidimo, slankiklio, separatoriaus paketus ir „GlueStack“ programas.
Tos kampanijos kenkėjiška programa buvo nuotolinės prieigos Trojos arklys (RAT), pritaikytas „Windows“ aplinkoms, išlikęs %LOCALAPPDATA%\Programs\Python\Python3127 ir prisijungiant prie C2 serverių adresu 136.0.9[.]8 bei 85.239.62[.]36. Jos galimybės apėmė savavališką komandų vykdymą, failų įkėlimą / atsisiuntimą ir ilgalaikę nuotolinę prieigą. Nuolatinis veikimas reiškė, kad vien atnaujinus į švarią „React Native“ bibliotekos versiją, jau užkrėstų kompiuterių nebebūtų galima išvalyti.
Kita ilgai trukusi kampanija, kurią atskleidė „Socket“ grėsmių tyrimų komanda, naudojo tipografijos klaidą ir mimikrą, kad būtų įdiegti žalingi paketai, kurie yra tiesiogiai nukreipti prieš populiarias „JavaScript“ sistemas, tokias kaip „React“, „Vue“, „Vite“ ir „Quill“. Grėsmės veikėjas, naudodamas npm slapyvardį xuxingfeng, per daugiau nei dvejus metus paskelbė įvairių teisėtų ir kenkėjiškų paketų, sudarydamas paviršutinišką įspūdį, kad yra patikimas palaikytojas.
Paketai, tokie kaip vite-plugin-bomb, vite-plugin-bomb-extend, vite-plugin-react-extend, vite-plugin-vue-extend bei vue-plugin-bomb buvo sukurti ne duomenims vogti, o aktyviai projektams sugadinti ar sunaikinti. Jie įgyvendino daugiafazes atakas, kurias sukeldavo konkrečios datos, ištrindami svarbius sistemos failus node_modules („Vue“, „React“, „Vite“, „TypeScript“, „Ant Design Vue“, „Pinia“, „ECharts“ ir kt.), kartais kartu su priverstiniais sistemos išjungimais kas sekundę naudojant shutdown -s -t 5.
Vienas ypač nemalonus paketas, js-hood, sugadinti pagrindiniai „JavaScript“ prototipai, tokie kaip Array.prototype.filter, map, push, pop ir daugialypis String metodai, pakeičiant jas funkcijomis, kurios atrodo sintaksiškai galiojančios, bet grąžina atsitiktinius duomenis. Dėl to programos toliau veikia, tačiau pateikia sugadintus, nedeterministinius rezultatus, kuriuos itin sunku derinti.
Geriausios quill-image-downloader serija pasuko kita linkme, daugiausia dėmesio skirdama kliento pusės saugyklų sabotažui. Ji pateikė trijų failų architektūrą, kuri po nurodytos aktyvinimo datos iteruoja visus raktus localStorage, sessionStorage ir slapukus, o tada iš dalies sumaišo jų reikšmes su atsitiktiniais simboliais, išsaugodama struktūrą. Autentifikavimo žetonai, pirkinių krepšeliai, naudotojo nuostatos ir bet kokia naršyklės būsena yra subtiliai sugadinami, todėl gali pasitaikyti protarpinių gedimų, kuriuos daugelis komandų iš pradžių priskirtų programų klaidoms.
Atskiras „OP Innovate“ tyrimas atskleidė dešimties kenkėjiškų npm paketų grupę, kuri apsimetinėjo gerai žinomomis bibliotekomis, tokiomis kaip „TypeScript“, „discord.js“, „ethers.js“, „nodemon“. react-router-dom bei zustand. Įdiegus šiuos paketus, rodomas netikras CAPTCHA langas, nuskaitomas kompiuterio piršto atspaudas ir iš C2 atsisiunčiama didelė kelių platformų informacijos vagystės programa. 195.133.79.43, vėlgi su aiškia „Windows“, „macOS“ ir „Linux“ parama.
Galiausiai „Aikido“ išsamiai aprašyta „CanisterWorm“ kampanija pademonstravo, kiek toli užpuolikai nori nueiti, išnaudodami npm kaip siuntimo priemonę. Daugiau nei 135 paketai iš pažeistos leidėjo paskyros buvo apginkluoti diegimo laiko scenarijais, kurie vykdomi prieš bet kurį jūsų programos kodą ar kūrimo etapą. Vėlesni etapai elgiasi skirtingai, priklausomai nuo to, ar jie patenka į vietinę kūrėjo dėžę, CI užduotį, ar konteinerinį kūrimo mazgą, ir jie bendrauja su decentralizuota interneto kompiuterio (ICP) talpykla, kuri veikia kaip slaptas C2 – leidžiantis operatoriams keisti elgseną operatyviai, daugiau niekada neliesdami npm registro.
Kritiniai „React Native“ įrankių pažeidžiamumai: bendruomenės CLI RCE
Ne visos „React Native“ saugumo rizikos kyla dėl tiesiog kenkėjiškų paketų; kai kurios kyla dėl rimtų plačiai naudojamų įrankių pažeidžiamumų. Vienas pastebimas atvejis yra CVE‑2025‑11953, esantis „React Native Community CLI“ – pakete, kurį kūrėjai „Windows“, „macOS“ ir „Linux“ sistemose ištraukia milijonus kartų per savaitę.
Šis trūkumas leido neautentifikuotą nuotolinį kodo vykdymą (RCE) per sukurtas POST užklausas vietiniam kūrimo serveriui, paleistą CLI. Kadangi daugelis kūrėjų savo „metro“ / „dev“ serverius tinkle atveria derinimo arba mobiliųjų įrenginių testavimo tikslais, netoliese esantis užpuolikas (arba kažkas, kas gali nukreipti srautą į tuos prievadus) gali vykdyti savavališkas komandas kūrėjo kompiuteryje.
Poveikis gerokai viršija vienos kūrėjo darbo vietos ribas: Kai užpuolikas pradeda vykdyti kodą kūrėjo kompiuteryje, jis gali pereiti į korporacinius tinklus, nuskaityti prisijungimo duomenis, užkrėsti kompiliacijas arba manipuliuoti CI/CD srautais, kurie sinchronizuojami iš to kompiuterio. Tai puikus pavyzdys, kaip „tik vietinis kūrėjo įrankis“ yra jūsų gamybinės atakos paviršiaus dalis, kai dirbate su prie debesies prijungtomis sistemomis.
Rekomenduojamas rizikos mažinimo būdas yra paprastas, bet nederamas: atnaujinimas į „React Native Community CLI 12.5.1“ ar naujesnę versiją, įtartinų POST užklausų ar netikėtų procesų, kuriuos sukelia kūrėjo serveris, audito žurnalai, prieigos prie vietinių serverių apribojimas ir kūrimo įrankių integravimas į grėsmių aptikimo strategiją. Bet kurį „DevOps“ ar kūrėjo galinį tašką laikykite vertingu taikiniu, nes būtent taip jį mato šiuolaikiniai užpuolikai.
Kaip gynėjai reagavo: dirbtinio intelekto analizė, atvėsimo laikotarpiai ir sustiprinta CI
Šių istorijų teigiama pusė yra ta, kad saugumo bendruomenė tampa vis greičiau ir sudėtingiau aptikdama tiekimo grandinės grėsmes, kylančias prieš „React Native“ ir platesnę „JavaScript“ erdvę. Tokios priemonės kaip „StepSecurity“, „Socket“ ir „Aikido Security“ daug investuoja į elgsenos analizę, automatizuotą diferenciacijos ir mašininio mokymosi modelius, kurie nuskaito naujas NPM versijas per kelias minutes nuo jų paskelbimo.
„AstrOOnauta“ atakos metu „StepSecurity“ dirbtinio intelekto paketų analitikas aptiko kenkėjiškas versijas per mažiau nei penkias minutes, atidarė „GitHub“ problemas su visais techniniais gedimais ir vėliau pranešė „npm“ apie užpuoliko aptiktus infrastruktūros paketus, kad juos pašalintų. Komanda dokumentavo kiekvieną bangą, sekė „Git“ pagrindus, analizavo užmaskuotą kodą, pateikė „Solana C2“ naudojimo įrodymus ir pateikė priežiūros specialistui nuoseklias taisomųjų veiksmų gaires.
Be aptikimo, prevencinės kontrolės priemonės pradeda įgauti pagreitį CI vamzdynuose. Pavyzdžiui, „StepSecurity“ sukurta „npm Package Cooldown Check“ funkcija leidžia organizacijoms blokuoti priklausomybes, kurios buvo paskelbtos vos prieš kelias valandas, taip suteikiant laiko skaitytuvams ir žmonėms jas patikrinti. Jų pažeistų atnaujinimų patikra nuolat atnaujinamame žinomų blogų paketų sraute pateikia kryžmines nuorodas ir atmeta PR, kurie bando juos pridėti arba atnaujinti.
Tinklą naudojantys įrankiai, tokie kaip „Harden-Runner“, riboja išeinančius ryšius „GitHub Actions“ ir kitose CI užduotyse iki leidžiamųjų galinių taškų sąrašo. Pasaulyje, kuriame kenkėjiška programa gauna naudingąją informaciją iš „Solana RPC“ mazgų, „Google“ kalendoriaus URL, „Vultr“ IP adresų diapazonų arba ICP talpyklų, išėjimo iš kompiliavimo sistemų blokavimas gali lemti, ar netikslus paketų skirtumas, ar visiškas įsilaužimas.
Reagavimo srityje tokios funkcijos kaip siuntų paieška visoje organizacijoje ir grėsmių centrai padeda komandoms greitai nustatyti sprogimo spindulį. Kai tik aptinkamas pažeistas „React Native“ paketas ar papildinys, saugumo komandos gali matyti, kuriose saugyklose, šakose ir užrakinimo failuose jis yra, kokie darbai jį vykdė ir kurie kompiuteriai bendravo su įtartinais IP adresais, ir atitinkamai suskirstyti taisomuosius veiksmus dešimtyse ar šimtuose kodų bazių.
Praktiniai veiksmai „React Native“ komandoms, susiduriančioms su npm kenkėjiška programine įranga
Tiek „React Native“ kūrėjams, tiek saugumo inžinieriams gynyba nuo npm lygio atakų reiškia higienos derinimą atskiruose kompiuteriuose su CI/CD apsauginėmis ribomis ir priklausomybių valdymu. Nė viena kontrolės priemonė jūsų neišgelbės, tačiau daugiasluoksnė apsauga smarkiai sumažina tikimybę, kad kenkėjiškas paketas taps visišku užkrėtimu.
Jei naudojate anksčiau minėtus pažeistus paketus, reikia atlikti keletą neatidėliotinų patikrinimų. Dėl „AstrOOnauta“ incidento, prisekite react-native-international-phone-number į versiją 0.11.7 bei react-native-country-select į 0.4.0, vengiant visų versijų, pažymėtų kaip kenkėjiškos, arba sprendžiant problemas @latest kuris šiuo metu yra susijęs su pažeista versija.
Patikrinkite savo namų katalogą, ar jame nėra failo pavadinimu init.json pagal vartotojo profilį (pvz. ~/init.json „Unix“ ir ~\init.json sistemoje „Windows“). Jo buvimas rodo, kad „Solana“ pagrindu sukurta kenkėjiška programa buvo paleista bent kartą. Taip pat patikrinkite iš kūrėjų darbo stočių ir CI vykdytojų siunčiamus tinklo žurnalus, ar nėra ryšių su 45.32.150.251, kampanijose naudojami „Solana RPC“ galiniai taškai arba kiti anksčiau minėti C2 adresai (pvz., 136.0.9[.]8, 85.239.62[.]36, 195.133.79.43, 217.69.3.152).
Patikrinkite, ar jūsų node_modules ir užrakinimo failus, skirtus iškalbingoms priklausomybėms, pvz., @agnoliaarisian7180/string-argv, @usebioerhold8733/s-format ir piktavaliai @react-native-aria/* or @gluestack-ui/utils versijos, išvardytos patarimuose. Jei radote kurį nors iš jų, traktuokite įrenginį kaip potencialiai pažeistą ir pakeiskite visus jautrius prisijungimo duomenis: npm žetonus, „GitHub“ prieigos žetonus, SSH raktus, debesies teikėjo raktus ir visus juose esančius slaptus duomenis. .env arba konfigūracijos failus diegimo metu.
Žvelgiant į ateitį, sustiprinkite savo tiekimo grandinės poziciją „React Native“ darbui: visada įregistruoti ir vykdyti užrakinimo failus (package-lock.json, yarn.lock, pnpm-lock.yaml), įjunkite 2FA visose npm paskyrose su publikavimo teisėmis ir sukonfigūruokite savo CI taip, kad kompiliavimas nepavyktų, kai atsiranda naujų priklausomybių be peržiūros. Apsvarstykite galimybę paleisti su --ignore-scripts diegiant trečiųjų šalių paketus nepatikimose aplinkose, ir prijungti priklausomybių nuskaitymo įrankius prie vietinių darbo eigų ir CI.
Galiausiai, kūrimo aplinkas, ypač tas, kurios naudojamos „React Native“ programoms, kurios jungia mobiliųjų, žiniatinklio ir serverio API, laikykite savo gamybinės atakos paviršiaus dalimi. Ar grėsmė yra paskyros užgrobimas, į telefono įvesties komponentą įterpiant „Solana“ palaikomą kenkėjišką programą, ar klaidomis apipavidalintas „Vite“ papildinys, ištrynantis „React“ iš node_modules, kenkėjiška „Quill“ integracija, maišanti kliento pusės saugyklą, arba RCE „React Native“ bendruomenės komandinėje eilutėje (CLI), bendras bruožas yra tas, kad užpuolikai dabar kūrėjų įrankius laiko vienu efektyviausių kelių patekti į jūsų organizacijos karūnos brangakmenius.


