Riskialtis liiketoiminta: Itsestään poistuvat npm-paketit selitettynä

Riskialtis liiketoiminta: Proktorointia estävät paketit, jotka poistavat itsensä

TL; DR

Paketit poistavat itsensä. Viidentoista elokuun päivän aikana yksi npm-operaattori julkaisi yhdeksän pakettia yhdeksällä nimellä seitsemältä tililtä ja veti niistä kahdeksan pois henkilökohtaisesti. Kunkin palveluntarjoajan jättämä aika putosi kolmestatoista tunnista seitsemääntoista minuuttiin. Tekniikka ei ole ainoa heidän: seitsemän muuta pakettia toisilta osapuolilta, jotka sisälsivät täysin erilaisia ​​​​hyötykuormia, poistettiin heidän omien julkaisijoidensa toimesta keskimäärin 37.8 minuutissa. Artefakti on poissa ennen kuin useimmat puolustusprosessit ovat käynnissä, ja asennus on jo tapahtunut.

Kaikki rekisterin paljastama sisältö vaihtuu; hyötykuorma ei. Kaikki yhdeksän lähettivät tavuidenttisen bin/ hakemistossa samat SHA-256-tiivistelmät kolmella paketin nimellä ja kahdella tilillä, viidentoista päivän välein. Sisällön identiteetti on ainoa seurantasignaali, jota tämä operaattori ei murtanut, ja yksittäinen paketti, jota he eivät koskaan poistaneet, on syy siihen, miksi sitä voitiin ylipäätään tutkia.

Sen asentajat eivät ole uhreja ja ovat joka tapauksessa pahasti alttiina. Tämä työkalu ei ole suunnattu kehittäjille: se estää etäkokeiden valvomisen piilotetun näyttökaappauksen, näytöllä olevan tekstin poiminnan ja vastausten palauttamisen päällekkäiskuvaan, joten kuka tahansa juoksee npm install on tarkoitettu hyötyjä eikä kohderyhmää. He suorittavat myös allekirjoittamattoman binääritiedoston, joka purkaa selaimensa evästevaraston salauksen tililtä, ​​joka poistaa itsensä tunnin sisällä. He eivät voi saada korjausta, eivät voi myöhemmin tarkastaa suorittamaansa tiedostoa eivätkä voi ilmoittaa vahingosta paljastamatta, miksi he asensivat sen.

Ekosysteemi: npm, sama kuvio havaittu PyPI:ssä. Kausi: Kesäkuu–elokuu 2026.

Mittaus

Viipymäaika on paketin ilmestymisen ja katoamisen välinen aika, joka lasketaan rekisterin omista metatiedoista. Nämä ovat mittauksia, eivät arvioita.

PakettiJulkaistu (UTC)Vasen seisomaan
moidev2026-08-16 16:315h 58m
moidevx2026-08-17 03:2413h 23m
moidevz2026-08-26 03:3812h 56m
moideva2026-08-26 18:581h 33m
amicat2026-08-28 20:4817m
bmcat2026-08-28 21:1747m
eyevox2026-08-28 21:4421m
moidevh2026-08-31 03:2247m

Julkaisujärjestyksessä luettuna ikkuna kutistuu yli neljäkymmentäkertaisesti – leveimmästä kohdasta 13 tuntia 23 minuuttia kapeimmasta kohdasta 17 minuuttiin. Neljä ensimmäistä pakettia kestävät keskimäärin kahdeksan ja puoli tuntia; neljä viimeistä keskimäärin kolmekymmentäkolme minuuttia. 28. elokuuta julkaistiin ja vedettiin pois kolme pakettia yhden 77 minuutin aikana.

Supistuminen ei ole asteittaista. Se keskittyy 26. ja 28. elokuuta väliselle ajalle, ja muuttui vain operaattorin arvio siitä, kuinka kauan paketti voi turvallisesti seistä.

Jokainen tässä mainittu peruutus on julkaisijan aloittama. Kunkin rekisteriasiakirjassa näkyy tyhjä ylläpitäjäluettelo merkinnän vieressä. aika.julkaisematon tietue – julkaisun peruutuksen allekirjoitus pikemminkin kuin poistopyynnön allekirjoitus. Yhdeksäs paketti silmät, ei koskaan vedetty pois; se on syy siihen, miksi kaikkea tätä voitiin tarkastella.

On olemassa toinenkin peruutusjärjestelmä, eikä sitä pidä sekoittaa tähän. Jos vain hyötykuorman versio vedetään pois ja paketti selviää, mediaani on noin 73 tuntia 31 paketin osalta. Nämä korvaavat osat saapuvat käsikirjoitetuissa erissä ja jättävät jälkeensä tyhjän kuoren – a package.json julistaa tärkein joka ei lähetä tiedostoa – jonka ainoa tehtävä on pitää nimi tallessa. Tuo järjestelmä pitää yllä aikataulua. Tämä on viritetty valotusaika.

Mikä selviää poistosta

Yhdeksän näistä paketeista on yhden operaattorin: moidev, moidevx, moidevz, moideva, moidevh, amicat, bmcat, eyevox ja silmätNimillä ei ole yhteistä käytäntöä – kuka tahansa, joka seuraa moidev Stem olisi missannut niistä yli puolet – ja ne julkaistiin seitsemältä eri tililtä, ​​jotka lähes kaikki olivat rekisteröityneet kertakäyttöisille sähköpostiverkkotunnuksille.

He jakavat manifest-merkinnän, jolla ei ole mitään syytä olla olemassa:

"roskakori": { "": "bin/kalamasha-tool.js" } }

Säilytimme kopiot viidestä ennen poistamista. Kaikissa viidessä koko roskakori/ hakemisto on tavuidenttinen:

fileeSHA-256
bin/kalamasha-tool.js0c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd
bin/uia_extract.exee2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865
bin/chrome_cookies.ps121b61ec810331850d72423c40c5448e6cd310c4cfad6aed54f92cd7e7cac5f3a
bin/stealth_capture.ps1c9baf5897c03b941c54f736df5af9243ad28794a9e69746d41d4f4a34065589c
bin/uia_extract.pyc20b38c63efd9221930095c54b42cdd5adffa1972c44c4578226cbe1e4dbac3e
bin/uia_get_text.ps14a3f3ada0bdf13aa8e89edb8af817c7816296147dae5be25f169ff960d28a87c

Kaksi muuta signaalia on samaa mieltä. Kolme paketeista julkaistiin klo 03.24, 03.38 ja 03.22 UTC 17., 26. ja 31. elokuuta – kuudentoista minuutin kaista viidentoista päivän ja kolmen eri tilin ajalta. Ja kaksi näistä tileistä oli rekisteröity samaan kertakäyttöiseen sähköpostiverkkotunnukseen, mikä sitoi ne yhteen koodista riippumatta.

Tilit

Nämä ovat hyötykuorman lähettäneet npm-julkaisijatilit, joista näkyy kunkin paketin lataustiedot ja latausaika:

Julkaisijan tiliPakettiSähköpostiosoiteVasen seisomaan
letol39119moidev:1.0.0hutdot.com (kertakäyttöinen)5h 58m
so1d1a7i27moidevx:1.0.0ogzmail.com (kertakäyttöinen)13h 23m
lololololol435678eyiouss:3.0.21, 3.0.22, 4.0.1ogzmail.com (kertakäyttöinen)edelleen julkaistu
tagadob568moidevz:1.0.0ebflyai.com (kertakäyttöinen)12h 56m
tayihim489moideva:1.0.0prodbits.com (kertakäyttöinen)1h 33m
sahihai123amicat:1.0.0, bmcat:2.0.9, eyevox:1.0.0kuluttajille tarkoitettu webmail17m / 47m / 21m
heytoshanmoidevh:1.0.0kuluttajille tarkoitettu webmail47m

niin1d1a7i27 ja lololololol435678 jaa ogzmail.com rekisteröintiverkkotunnus — linkki, joka yhdistää edelleen live-kopiota ylläpitävän tilin tiliin, joka julkaisi sen alla moidev varsi kaksi viikkoa aiemmin. sahihai123 julkaisi ja veti pois kolme erillistä pakettinimeä yhden 77 minuutin ikkunan sisällä 28. elokuuta. heytoshan rekisteröity, julkaistu moidevh, ja veti sen pois 47 minuuttia myöhemmin; se on edelleen kyseisen tilin ainoa julkaisu.

Kaikkien näiden tilien sähköpostiosoite on vahvistamaton, niillä ei ole vahvistettua versionhallintalinkkiä, eivätkä ne ole julkaisseet mitään asiaan liittymätöntä projektia. Kuusi seitsemästä tilistä ei enää ylläpidä mitään.

Yhtä pakettia ei koskaan nostettu pois. eyiouss:4.0.1 on julkaistu 16. elokuuta lähtien ja oli kirjoitushetkellä vielä ratkettavissa. Kahdeksan artefaktia oli palauttamattomissa; kampanja rekonstruoitiin kokonaan yhdestä jäljellä olleesta. Refleksinomaisesti poistava operaattori jättää lopulta yhden jäljelle.

Mitä työkalu tekee

eyiouss:4.0.1 kuvailee itseään npm:ssä "tehokkaaksi DOM-apuohjelmaksi ja diagnostiikkasillaksi nykyaikaisille verkkosovelluksille". Se on näytönkaappaus- ja vastausten hakutyökalu, joka on rakennettu toimimaan etäkokeen seurannan alaisuudessa, ja lähde kertoo tämän omin sanoin.

Käynnistysohjelma kopioi Electronin suoritusympäristön väärällä tiedostonimellä ennen sen suorittamista ja nimeää, mitä se välttää:

// 🛡️ STEALTH-BINAARIN NIMI: EI saa törmätä oikean Testpadin kanssa! const STEALTH_NAME = 'SearchApp.exe';

Saman tiedoston otsikko kutsuu sitä ns. Proctorin vastainen haamuvahtikoira ja toteuttaa uudelleensyntymissilmukan, joka perääntyy sitä kauemmas, mitä nopeammin se tapetaan. Muualla prosessi nostaa omaa prioriteettiaan torjuakseen prosessorin rajoitusta, työntää tenttisovelluksen pois etualalta, kun se aktivoituu, ja lopettaa Safe Exam Browserin aliprosessin taskkill /F /T.

Tallennus suoritetaan paketoidun PowerShell-komentosarjan avulla, jota käynnistetään suorituskäytäntö poistettuna käytöstä ja ikkuna piilotettuna. Näytöllä näkyvä teksti kerätään rinnakkain Windowsin käyttöliittymän automaation avulla. Jonossa olevat kuvat ja teksti lähetetään kielimalli-istuntoon upotetussa selaimessa ja vastaus renderöidään aina päällä olevassa peittokuvassa. Tätä yhteyttä lykätään tarkoituksella, ja koodissa annetaan syy: välttääkseen pysyvän NETSTAT-altistuksen.

Paketti myös lähetetään chrome_cookies.ps1, otsikkona CHROME-KEKSIENPOIMITIN, joka purkaa Chromen ja Edgen evästeiden salauksen DPAPI:n kautta ja lukee evästetietokannan jopa neljästä selainprofiilista. Ilmoitettu etukäteencisely: emme löytäneet nimeltä kutsuttua komentosarjaa mistään toimitetusta JavaScript-tiedostosta. Läsnä ja tavoitettavissa on vain sitä kuluttava puoli, joka lisää tallennettuja istuntoevästeitä upotettuun selaimeen.

Asentajien asema

Kukaan ei asenna tätä vahingossa. Sillä ei ole mitään toimintoa valvotun kokeen ulkopuolella, ja sen tulosteena on vastauskerros käyttäjän omalla näytöllä. Harhaanjohtava pakettikuvaus ei ole lainkaan suunnattu asentajalle – se on peitekuvaus, joka on suunnattu rekisterille ja kaikille, jotka tarkastavat konetta jälkikäteen. Asennusohjelma tietää, mitä hän saa; kuvaus on olemassa, jotta ennätys Asennuksesta se ei heijastu.

Vahingon kärsineet osapuolet ovat kolmansia osapuolia, jotka eivät koskaan koskeneet npm:ään: tenttiä järjestävä oppilaitos, muut ehdokkaat ja kaikki myöhemmässä vaiheessa olevat, jotka luottavat valtakirjan merkitykseen.

Mutta asentaja ei ole siksi turvassa, ja tämä kohta kannattaa selittää, koska itse katoavan paketin malli luo altistuksen.

He ajavat allekirjoittamatonta binääritiedostoa, jonka lähettäjä on tyhjä. uia_extract.exe tiedostot on käännetty ilman lähdekoodia ja koontiversion alkuperää tililtä, ​​jota ei enää ole olemassa. Sama tiedosto on julkaistu uudelleen käyttäjän hash-tunnisteen avulla. letol39119, niin1d1a7i27, lololololol435678, tagadob568, tayihim489, sahihai123 ja heytoshan viidentoista päivän ajan. Ei ole ylläpitäjää, jolta kysyä, ei tietovarastoa, jota lukea, eikä historiaa, jota tarkistaa – jokainen sen lähettänyt identiteetti poisti itsensä.

He ovat antaneet sille juuri ne ominaisuudet, joita haittaohjelmat tarvitsevat. Piilotettu prosessi, joka toimii väärällä nimellä ja purkaa selaimen evästeiden tallennustilan salauksen, lukee näyttöä jatkuvasti, lopettaa tietoturvaohjelmiston ja käynnistyy uudelleen lopetettaessa. Nykyään evästeiden salauksen purku on rajattu yhden toimittajan verkkotunnuksiin ja palvelee käyttäjän omaa istuntoa. Tämä laajuus on yhden rivin muutos, eikä toimitusmallissa näkyisi mitään, jos se muuttuisi – uusi nimi, uusi tili, uusi lataus.

He eivät voi vastaanottaa korjausta. Paketti poistetaan tunnin sisällä julkaisusta. Ei ole päivityspolkua, ei ilmoitusta eikä mitään keinoa selvittää myöhemmin, että heidän asentamansa versio eroaa heidän ystävänsä asentamasta versiosta. Kaikki koneella oleva pysyy siellä.

He eivät voi tarkastaa, mitä he suorittivat. Heidän lukitustiedostonsa viittaa nyt pakettiin, jota ei enää voida ratkaista. Jos he myöhemmin haluaisivat selvittää, mitä heidän koneellaan oli – jonkin ongelman tai kiistan jälkeen – rekisterillä ei ole heille mitään tietoja annettavana.

Eivätkä he voi ilmoittaa vahingoista. Tämän työkalun vaarantama käyttäjä ei voi tehdä väärinkäyttöilmoitusta paljastamatta, miksi hän asensi sen. Tämä ei ole sattumaa. Rekisterin väärinkäyttöilmoitukset ovat tärkein kanava, jonka kautta lyhytikäiset paketit siepataan, eikä tämän operaattorin käyttäjäkunta rakenteellisesti pysty käyttämään sitä. Ainoa jäljellä oleva vastustaja on automaattinen skannaus – jota vasten seitsemäntoista minuutin ikkuna on kalibroitu.

Uhrirakenne ja viipymäaika ovat sama tosiasia, joka nähdään kahdesti. Se selittää myös aikajanan poikkeavuuden: jos vetäytymisen taustalla olisi valitusten pelko, pitkään jatkunut suosittu paketti menisi ensin. Näin ei kuitenkaan käynyt, koska valituksia ei koskaan tule.

Sama kuvio, eri operaattori

Proctoring-operaattori ei ole tässä yksin, ja selkein rinnakkainen suoritus suoritetaan toisesta hyötykuormasta.

24. ja 27. elokuuta välisenä aikana neljä npm-pakettia ilmestyi kaksivaiheisen todennuksen työkaluista lainatuilla nimillä — auth-otp, salainen avain-2fa, salainen avain2fa ja 2fa-salainen avain — kantoivat mukanaan kuusitoista versiota. Jokainen julkaistiin omalta juuri rekisteröidyltä tililtään (beayilol, jeanpaul686g, zzzalipay, dluuuuu), kaikkien sähköpostiosoitteita vahvistamattomia, yhdelläkään ei ole vahvistettua lähteenvalvontalinkkiä, eikä mikään julkaise mitään muuta. Jokainen niistä on peruttu oman julkaisijan toimesta.

Hyötykuormalla ei ole mitään tekemistä tenttiohjelmiston kanssa. Se lukee selaimen tunnistetietovarastoja ja Discord-tokeneja ja kulkee Xbox Live -todennusportaita Minecraft-käynnistysohjelmaa vasten saadakseen päivitystokenin. Tässä asennusohjelma... is uhri tavallisessa merkityksessä – mikä tekee vertailusta hyödyllisen, koska toimituskäyttäytyminen on identtinen joka tapauksessa.

Neljä sykliä suoritettiin julkaisujärjestyksessä nopeuksilla 274.9, 37.8, 37.6 ja 35.7 minuuttia: yksi pitkä ensimmäinen yritys, sitten konvergenssi lukuun, joka pätee. Kolme muuta pakettia kuuluu jälleen muille operaattoreille ja niissä on sama nosto-ominaisuus.

PakettioperaattoriVasen seisomaan
octopus-actiontiedustelumajakka2.5 min
mt-ts-serverless-startertiedustelumajakka9.6 min
2fa-secretkey2FA-peitenimet35.7 min
secretkey2fa2FA-peitenimet37.6 min
secretkey-2fa2FA-peitenimet37.8 min
auth-otp2FA-peitenimet274.9 min
hex-encode-utilsmuut724.2 min

Seitsemän pakettia, mediaani 37.8 minuuttia, eikä yksikään niistä liittynyt tenttiohjelmistoon.

Kolme toisiinsa liittymätöntä hyötykuormaa, kolme toisiinsa liittymätöntä tilijoukkoa, yksi jaettu tekniikka.

Miksi ikkuna sulkeutuu

Rekisterin toimintaympäristössä tapahtui jotain uutta vuonna 2026, ja ilmeinen syy on se, että skannaus nopeutui.

Vielä vähän aikaa sitten haitalliset paketit löydettiin pääasiassa jälkikäteen: käyttäjän huomatessa jotakin, alavirran raportin kautta tai säännöllisen tarkistuksen avulla. Havaitsemislatenssi mitattiin päivissä. Se ei ole enää ainoa menetelmä. Lähes reaaliaikainen analyysi uusista julkaistuista paketeista — Xygenin oma haittaohjelmien ennakkovaroitusjärjestelmä alan kasvavan joukon tällaisten järjestelmien joukossa – kaventaa julkaisun ja tarkastuksen välistä kuilua huomattavasti lyhyemmäksi.

Operaattorilla on kaksi vaihtoehtoa. Vaikeuttaa hyötykuorman tunnistamista tai lyhentää aikaa, jonka se on tarkasteltavissa. Toinen vaihtoehto on halvempi, ei vaadi suunnittelua, ja rekisteri tarjoaa mekanismin ilmaiseksi: npm:n 72 tunnin julkaisun peruutusikkunan sisällä julkaisija voi poistaa paketin yksipuolisesti, ja nimeä voidaan käyttää uudelleen myöhemmin. Peruuttaminen ei maksa operaattorille mitään.

Ajoitus sopii. Molemmat yllä olevat operaattorit konvergoituvat hahmoon ja pitävät sen sen sijaan, että ne ajautuisivat, mikä pikemminkin näyttää viritetyltä parametrilta kuin mukavuussyistä. Ja parametri, johon ne konvergoituvat – kymmeniä minuutteja – on ennalta määritelty.cisjuuri siinä missä sen pitäisi sijaita läpäistäkseen automaattisen tarkastuksen ja samalla jättääkseen paketin asennettavaksi riittävän pitkäksi aikaa, jotta se tavoittaa kohdeyleisönsä.

Tämä on edelleen hypoteesi. Aikatiedot eivät pysty erottamaan skannaukseen liittyvää vastetta rekisterin valvontaan liittyvästä vasteesta tai tavanomaisesta toiminnan kehittymisestä, kun nämä operaattorit oppivat toisiltaan. Se, mitä voidaan sanoa ilman päättelyä, on suppeampaa ja silti hyödyllistä: Valotusikkuna on nyt riittävän lyhyt, että kaikki julkaisun jälkeiseen pakkauksen tarkastamiseen perustuva ohjaus kilpailee käyttäjän asettaman ajan kanssa. Kontrollit, jotka eivät ole riippuvaisia ​​tarkastuksesta – iän mukaan eristäminen, käytöstä poistetut asennusskriptit – eivät ole kyseisen rodun vaikutuspiirissä, mikä on käytännöllinen syy suosia niitä.

Mitä tehdä asialle

Karanteeni iän mukaan. Mikään viipymäaikataulukossa ei säilynyt kolmetoista tuntia. Käytäntö, jonka mukaan riippuvuusversiota ei voi asentaa ennen kuin se on ollut olemassa 72 tuntia, olisi sulkenut pois kaikki niistä havaitsematta mitään.

Poista asennusskriptit käytöstä oletuksena. –Ignore-komentosarjat poistaa toimitusmekanismin, josta tässä korpusessa olevat tunnistetietoja varastavat paketit ovat riippuvaisia. Se ei auta työkalua vastaan, jota käyttäjä käyttää tarkoituksella, mikä on ennalta määrätty.cisely ero, joka kannattaa ymmärtää.

Käsittele katoamista turvallisuustapahtumana. Hälytys, kun asennetun riippuvuuden selvittäminen lakkaa. Todisteet säilyvät edelleen lukitustiedostossasi, ei rekisterissä.

Seuraa sisältöä, älä nimiä. Yllä olevat kuusi tiivistettä vastaavat toisiaan paketin nimestä, julkaisijan tilistä tai versiomerkkijonosta riippumatta – jokainen kenttä, jonka tämä operaattori osoitti muuttuvan. Rekisteripuolen sääntö, jonka mukaan äskettäin rekisteröity tili, joka poistaa ainoan pakettinsa tunnin sisällä, on raportoitava malli, olisi laukaissut kaikki tässä olevat paketit pelkästään metadatan perusteella.

Ja jos harkitset jonkin tässä kategoriassa olevan asentamista: Rekisterin havaitsemisen vaikeuttamat ominaisuudet ovat samoja, jotka jättävät sinut vaille minkäänlaisia ​​​​korvauksia. Ei ole julkaisijaa, jota voisi pitää vastuullisena, ei päivityspolkua eikä mitään tietoa siitä, mitä suoritit.

indikaattorit

TyyppiArvo
fileebin/kalamasha-tool.js — ei-standard roskasäiliön sisääntulopiste
SHA-2560c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd
SHA-256e2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865
Käsitellä asiaaSearchApp.exe kirjoitettu laillisen Electron-ajonaikaisen ympäristön viereen
Käyttäytyminenpowershell -ExecutionPolicy Bypass -File windowsHide: true
Käyttäytyminentaskkill /F /T Safe Exam Browser -prosessin kohdentaminen
MetadataTyhjä ylläpitäjäluettelo vieressä time.unpublished ennätys
Tilitletol39119, so1d1a7i27, lololololol435678, tagadob568, tayihim489, sahihai123, heytoshan
Rekisteröintiogzmail.com, hutdot.com, ebflyai.com, prodbits.com — kertakäyttöpostiverkkotunnukset

Viitteet

sca-työkalut-ohjelmisto-koostumusanalyysityökalut
Priorisoi, korjaa ja suojaa ohjelmistoriskisi
Hanki ilmainen tili.
Luottokorttia ei vaadita.

Turvaa ohjelmistokehityksesi ja -toimituksesi

Xygeni-tuotepaketin kanssa