TL; DR
I pacchetti si sguassanu da soli. In quindeci ghjorni d'aostu, un operatore npm hà publicatu nove pacchetti sottu nove nomi da sette conti è ne hà ritirati ottu personalmente. A finestra chì ognunu hè statu lasciatu in piedi hè cascata da tredeci ore à diciassette minuti. A tecnica ùn hè micca solu a soia: sette altri pacchetti da operatori senza relazione, chì portavanu carichi cumpletamente diversi, sò stati ritirati da i so editori à una mediana di 37.8 minuti. L'artefattu hè sparitu prima chì a maiò parte di i prucessi difensivi sianu eseguiti, è l'installazione hè digià accaduta.
Tuttu ciò chì u registru espone gira; u payload micca. Tutti i nove anu speditu un byte identicu bin/ annuariu, i stessi digests SHA-256 in trè nomi di pacchetti è dui conti, à quindici ghjorni di distanza. L'identità di u cuntenutu hè l'unicu signale di tracciamentu chì questu operatore ùn hà micca rottu, è u pacchettu unicu ch'elli ùn anu mai ritiratu hè a ragione per a quale puderia esse esaminatu.
E persone chì l'installanu ùn sò micca vittime, è sò comunque assai esposte. Stu strumentu ùn hè micca destinatu à i sviluppatori: scunfighja a surveglianza remota di l'esame per via di a cattura di schermu nascosta, l'estrazione di testu in schermu è e risposte restituite à una sovrapposizione, dunque quellu chì corre npm install hè u beneficiariu previstu piuttostu chè u bersagliu. Eseguiscenu ancu un binariu senza firma chì decifra u so magazinu di cookies di u navigatore, da un contu chì si cancella da per ellu in una ora. Ùn ponu micca riceve una riparazione, ùn ponu micca verificà dopu ciò chì anu eseguitu, è ùn ponu micca signalà danni senza divulgà perchè l'anu installatu.
Ecosistema: npm, listessu mudellu osservatu annantu à PyPI. Periudu: Ghjugnu-Agostu 2026.
A misura
U tempu di permanenza hè l'intervallu trà l'apparizione è a sparizione di un pacchettu, calculatu da i metadati di u registru. Queste sò misurazioni, micca stime.
| pacchettu | Publicatu (UTC) | Lasciatu in piedi |
|---|---|---|
moidev | 2026-08-16 16:31 | 5 ore è 58 minuti |
moidevx | 2026-08-17 03:24 | 13 ore è 23 minuti |
moidevz | 2026-08-26 03:38 | 12 ore è 56 minuti |
moideva | 2026-08-26 18:58 | 1 ore è 33 minuti |
amicat | 2026-08-28 20:48 | 17m |
bmcat | 2026-08-28 21:17 | 47m |
eyevox | 2026-08-28 21:44 | 21m |
moidevh | 2026-08-31 03:22 | 47m |
Letta in ordine di publicazione, a finestra si contrae di più di un fattore di quaranta - da 13 ore è 23 minuti à a più larga à 17 minuti à a più stretta. I primi quattru pacchetti duranu in media ottu ore è mezu; l'ultimi quattru duranu in media trentatrè minuti. U 28 d'aostu, trè pacchetti sò stati publicati è ritirati in un unicu intervallu di 77 minuti.
A cuntrazione ùn hè micca una deriva graduale. Hè cuncintrata trà u 26 è u 28 d'aostu, è ciò chì hè cambiatu hè stata a stima di l'operatore di quantu tempu un pacchettu pò stà in modu sicuru.
Ogni ritirata quì hè iniziata da l'editore. U documentu di registru per ognunu mostra una lista di mantenitori viota accantu à un tempu.ineditu registru - a firma di una dispubblicazione piuttostu chè una rimozione. Un nonu pacchettu, eyioss, ùn hè mai statu ritiratu; hè a ragione per a quale tuttu què puderia esse esaminatu.
Un secondu regime di ritirata esiste è ùn deve esse cunfusu cù questu. Induve solu u versione di carica utile hè tiratu è u pacchettu sopravvive, a mediana hè di circa 73 ore in 31 pacchetti. Quessi rimpiazzamenti ghjunghjenu in lotti scriptati è lascianu una buccia viota - a package.json dichjarà un principale chì ùn spedisce micca un schedariu - chì a so sola funzione hè di mantene u nome. Quellu regime hè di mantenimentu di l'ordine. Questa hè una finestra di esposizione sintonizzata.
Ciò chì sopravvive à a cancellazione
Nove di sti pacchetti sò un operatore: moidev, moidevx, moidevz, moideva, moidevh, amicatu, bmcat, eyevox e eyiossI nomi ùn anu nisuna cunvenzione - qualchissia chì seguita u moidev stem averia mancatu più di a mità di elli - è sò stati publicati da sette conti separati, guasi tutti registrati nantu à duminii email dispunibili.
Ciò ch'elli spartenu hè una entrata manifestu senza ragione di esiste:
"bin": { "": "bin/kalamasha-tool.js" } } Avemu cunservatu copie di cinque prima di a so rimuzione. In tutti i cinque, tuttu bin/ u cartulare hè identicu à byte:
| File | SHA-256 |
|---|---|
bin/kalamasha-tool.js | 0c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd |
bin/uia_extract.exe | e2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865 |
bin/chrome_cookies.ps1 | 21b61ec810331850d72423c40c5448e6cd310c4cfad6aed54f92cd7e7cac5f3a |
bin/stealth_capture.ps1 | c9baf5897c03b941c54f736df5af9243ad28794a9e69746d41d4f4a34065589c |
bin/uia_extract.py | c20b38c63efd9221930095c54b42cdd5adffa1972c44c4578226cbe1e4dbac3e |
bin/uia_get_text.ps1 | 4a3f3ada0bdf13aa8e89edb8af817c7816296147dae5be25f169ff960d28a87c |
Dui altri signali sò d'accordu. Trè di i pacchetti sò stati publicati à 03:24, 03:38 è 03:22 UTC u 17 d'aostu, u 26 d'aostu è u 31 d'aostu - una banda di sedici minuti in quindici ghjorni è trè conti separati. È dui di questi conti sò stati registrati nantu à u listessu duminiu di email dispunibule, ligendu li inseme indipindentamente da u codice.
I conti
Quessi sò i conti di l'editori npm chì anu speditu u payload, cù u pacchettu caricatu è per quantu tempu hè statu lasciatu in piedi:
| Contu di l'editore | pacchettu | Dominiu di e-mail | Lasciatu in piedi |
|---|---|---|---|
letol39119 | moidev:1.0.0 | hutdot.com (disponibile) | 5 ore è 58 minuti |
so1d1a7i27 | moidevx:1.0.0 | ogzmail.com (disponibile) | 13 ore è 23 minuti |
lololololol435678 | eyiouss:3.0.21, 3.0.22, 4.0.1 | ogzmail.com (disponibile) | sempre publicatu |
tagadob568 | moidevz:1.0.0 | ebflyai.com (disponibile) | 12 ore è 56 minuti |
tayihim489 | moideva:1.0.0 | prodbits.com (disponibile) | 1 ore è 33 minuti |
sahihai123 | amicat:1.0.0, bmcat:2.0.9, eyevox:1.0.0 | webmail di i cunsumatori | 17 m / 47 m / 21 m |
heytoshan | moidevh:1.0.0 | webmail di i cunsumatori | 47m |
so1d1a7i27 e lololololol435678 sparte a ogzmail.com duminiu di registrazione - u ligame chì cullega u contu chì ospita sempre una copia in diretta à u contu chì hà publicatu sottu à moidev stelu duie settimane prima. sahihai123 hà publicatu è ritiratu trè nomi di pacchetti separati in una sola finestra di 77 minuti u 28 d'aostu. heytoshan registratu, publicatu moidevh, è l'hà ritiratu 47 minuti dopu; ferma l'unica publicazione di quellu contu.
Ognunu di sti conti ùn hà micca verificazione per email, ùn hà micca un ligame di cuntrollu di fonte verificatu è ùn hà publicatu alcun prughjettu senza rapportu. Sei di i sette ùn ospitanu più nunda.
Un pacchettu ùn hè mai statu ritiratu. eyiouss:4.0.1 hè statu publicatu dapoi u 16 d'aostu è era sempre risolubile à u mumentu di a scrittura. Ottu artefatti eranu irrecuperabili; a campagna hè stata ricustruita interamente da quellu chì hè restatu. Un operatore chì cancella per riflessu ne lascerà sempre unu in piedi.
Ciò chì face u strumentu
eyiouss:4.0.1 si descrive nantu à npm cum'è un "Utilità DOM d'altu rendimentu è un ponte di diagnostica per l'applicazioni web muderne". Hè un strumentu di cattura di schermu è di recuperu di risposte custruitu per esse eseguitu sottu a surveglianza remota di l'esame, è a fonte u dice cù e so parolle.
U lanciatore copia u runtime Electron sottu un nome di schedariu falsu prima di eseguisce lu, è nomina ciò chì evita:
// 🛡️ NOME BINARIU STEALTH: ÙN deve micca cullidà si cù u veru Testpad! const STEALTH_NAME = 'SearchApp.exe';
L'intestazione di u listessu schedariu a chjama un Cane di guardia fantasma anti-Proctor è implementa un ciclu di respawn chì si ritira più prestu quandu hè uccisu. In altrò u prucessu aumenta a so propria priorità per luttà contr'à a limitazione di a CPU di surveglianza, spinge l'applicazione d'esame fora di u primu pianu quandu piglia u focu, è termina un prucessu figliolu di Safe Exam Browser cù taskkill /F /T.
A cattura hè eseguita per mezu di un script PowerShell in bundle invucatu cù a pulitica d'esecuzione disattivata è a finestra soppressa, cù u testu in schermu raccoltu in parallelu per mezu di l'automazione di l'interfaccia utente di Windows. L'imagine è u testu in coda sò sottumessi à una sessione di mudellu linguisticu in un navigatore integratu è a risposta hè resa in una sovrapposizione sempre in cima. Questa cunnessione hè differita deliberatamente, è u codice ne dà a ragione: per evità l'esposizione permanente à NETSTAT.
U pacchettu hè ancu speditu chrome_cookies.ps1, in testa ESTRATTORE DI BISCOTTI CROMATI, chì decifra i cookies di Chrome è Edge via DPAPI è leghje a basa di dati di i cookies da un massimu di quattru profili di navigatore. Dichjaratu primacisely: ùn avemu micca trovu quellu script invucatu per nome da alcun schedariu JavaScript speditu. Ciò chì hè presente è accessibile hè a metà cunsumatrice, chì inietta i cookies di sessione almacenati in u navigatore integratu.
A pusizione di e persone chì l'installanu
Nimu ùn installa questu per casu. Ùn hà nisuna funzione fora di un esame monitoratu, è a so uscita hè una sovrapposizione di risposta nantu à u schermu di l'utente. A descrizzione ingannevule di u pacchettu ùn hè micca diretta à l'installatore - hè una copertura diretta à u registru è à chiunque verifichi a macchina dopu. L'installatore sà ciò chì riceve; a descrizzione esiste dunque discugràfica di l'installazione ùn a riflette micca.
E parti dannighjate sò terze parti chì ùn anu mai toccu npm: l'istituzione chì gestisce l'esame, l'altri candidati, è tutti quelli chì sò à valle chì si basanu nantu à u significatu di e credenziali.
Ma l'installatore ùn hè dunque micca sicuru, è questa hè a parte chì vale a pena spiegà, perchè u mudellu di pacchettu chì sparisce stessu hè ciò chì crea l'esposizione.
Stanu eseguendu un binariu senza firma da nimu. uia_extract.exe navi compilate, senza fonte è senza pruvenienza di compilazione, da un contu chì ùn esiste più. U listessu schedariu, per hash, hè statu ripublicatu da letol39119, so1d1a7i27, lololololol435678, tagadob568, tayihim489, sahihai123 e heytoshan in quindici ghjorni. Ùn ci hè micca mantenitore da dumandà, nisun repositoriu da leghje, è nisuna storia da verificà - ogni identità chì l'hà speditu s'hè sguassata da sè stessa.
Li anu cuncessu esattamente e capacità chì u malware hà bisognu. Un prucessu oculatu, chì funziona sottu un nome falsu, chì decifra u magazinu di cookies di u navigatore, leghje u schermu continuamente, termina u software di sicurezza è riappare quandu hè chjusu. Oghje a decifrazione di i cookies hè limitata à i duminii di un venditore è serve a sessione di l'utente. Quellu scopu hè un cambiamentu di una sola linea, è nunda di u mudellu di consegna u farebbe emergere s'ellu cambiassi - un novu nome, un novu contu, un novu caricamentu.
Ùn ponu micca riceve una riparazione. U pacchettu hè statu publicatu in una ora. Ùn ci hè nisun percorsu d'aghjurnamentu, nisun avvisu, è nisun modu per sapè dopu chì a versione ch'elli anu installatu era diversa da quella installata da u so amicu. Tuttu ciò chì hè nantu à a macchina ferma quì.
Ùn ponu micca verificà ciò chì anu eseguitu. U so schedariu di serratura avà face riferimentu à un pacchettu chì ùn si risolve più. S'elli vulianu dopu stabilisce ciò chì era nantu à a so macchina - dopu à un incidente, o una disputa - u registru ùn hà micca registru da dà li.
È ùn ponu micca signalà danni. Un utilizatore cumprumessu da questu strumentu ùn pò micca fà un rapportu d'abusu senza divulgà perchè l'hà stallatu. Questu ùn hè micca incidentale. I rapporti d'abusu di u registru sò un canale principale per mezu di u quale i pacchetti di corta durata sò catturati, è a basa d'utilizatori di questu operatore hè strutturalmente incapace di utilizallu. L'unicu avversariu restante hè a scansione automatizata - contr'à a quale una finestra di diciassette minuti hè calibrata.
A struttura di a vittima è u tempu di permanenza sò u listessu fattu vistu duie volte. Spiega ancu l'anomalia in a cronologia: se u ritiru fussi guidatu da a paura di lagnanze, u pacchettu pupulare di longa durata andaria prima. Ùn hè micca accadutu, perchè e lagnanze ùn ghjunghjenu mai.
U listessu mudellu, un operatore differente
L'operatore di surveglianza ùn hè micca solu in questu, è u parallelu u più chjaru funziona nantu à un payload senza relazione.
Trà u 24 è u 27 d'aostu, sò apparsi quattru pacchetti npm sottu nomi presi in prestitu da strumenti di autentificazione à dui fattori. auth-otp, chjave secreta-2fa, chjave secreta2fa e 2fa-secretkey — purtendu sedici versioni trà di elle. Ognuna hè stata publicata da u so propiu contu appena registratu (beayilol, jeanpaul686g, zzzalipay, dluuuuu), tutti l'indirizzi email ùn sò micca verificati, nimu cù un ligame di cuntrollu di fonte verificatu, nimu ùn publica nunda altru. Ognunu hè statu ritiratu da u so propiu editore.
U payload ùn hà nunda à chì vede cù u software d'esame. Leghje i magazzini di credenziali di u navigatore è i gettoni Discord, è percorre una scala d'autentificazione Xbox Live contr'à u launcher di Minecraft per catturà un token di refresh. Quì l'installatore is a vittima in u sensu ordinariu - chì hè ciò chì rende utile a paragone, perchè u cumpurtamentu di consegna hè identicu in ogni casu.
I quattru cicli sò stati eseguiti in ordine di publicazione à 274.9, 37.8, 37.6 è 35.7 minuti: un primu tentativu longu, dopu cunvergenza nantu à una cifra chì vale. Trè altri pacchetti appartenenu torna à altri operatori è mostranu u listessu cumpurtamentu di ritirata.
| pacchettu | Operator | Lasciatu in piedi |
|---|---|---|
octopus-action | faro di ricunniscenza | 2.5 min Italian |
mt-ts-serverless-starter | faro di ricunniscenza | 9.6 min Italian |
2fa-secretkey | Nomi di copertina 2FA | 35.7 min Italian |
secretkey2fa | Nomi di copertina 2FA | 37.6 min Italian |
secretkey-2fa | Nomi di copertina 2FA | 37.8 min Italian |
auth-otp | Nomi di copertina 2FA | 274.9 min Italian |
hex-encode-utils | lucca | 724.2 min Italian |
Sette pacchetti, mediana 37.8 minuti, nimu di elli ligatu à u software d'esame.
Trè carichi utili senza relazione, trè insemi di conti senza relazione, una tecnica spartuta.
Perchè a finestra si chjude
Qualcosa hè cambiatu in l'ambiente di u registru durante u 2026, è u candidatu ovviu hè chì a scansione hè diventata più rapida.
Finu à pocu tempu fà, i pacchetti maliziosi eranu truvati principalmente dopu u fattu: da un utilizatore chì hà nutatu qualcosa, da un rapportu downstream, o da un scanning periodicu. A latenza di rilevazione era misurata in ghjorni. Questu ùn hè più l'unicu regime. Analisi quasi in tempu reale di i pacchetti publicati di recente - L'avvertimentu precoce di malware di Xygeni trà un inseme crescente di tali sistemi in tuttu u settore - chjude u fossu trà a publicazione è l'ispezione à qualcosa di assai più cortu.
Un operatore chì si trova di fronte à questu hà duie opzioni. Rende u payload più difficiule da ricunnosce, o accurtà u tempu chì hè dispunibule per esse cunsultatu. A seconda hè più economica, ùn richiede micca ingegneria, è u registru furnisce u mecanismu gratuitamente: in a finestra di dispublicazione di 72 ore di npm, un editore pò rimuovere un pacchettu unilateralmente, è u nome pò esse riutilizatu dopu. U ritiru ùn costa nunda à l'operatore.
U tempu currisponde. I dui operatori sopra cunvergenu nantu à una figura è a mantenenu invece di andà à a deriva, chì hè ciò chì pare un parametru sintonizatu piuttostu chè una questione di cunvenienza. È u parametru nantu à u quale anu cunvergutu - decine di minuti - si trova primacisinduve averia bisognu di stà per batte un passu d'ispezione automatizatu mentre lasciava u pacchettu installabile abbastanza longu per ghjunghje à u so publicu.
Questu ferma una ipotesi. I dati di timing ùn ponu micca separà una risposta à a scansione da una risposta à l'applicazione di u registru, o da a maturazione operativa ordinaria cum'è questi operatori amparanu l'uni da l'altri. Ciò chì si pò dì senza inferenza hè più strettu è sempre utile: A finestra di esposizione hè avà abbastanza corta chì qualsiasi cuntrollu chì dipende da l'ispezione di un pacchettu dopu a publicazione corre contr'à un cronometru stabilitu da l'operatore. I cuntrolli chì ùn dipendenu micca da l'ispezione - quarantena per età, script d'installazione disattivati - ùn sò micca affettati da quella razza, chì hè a ragione pratica per preferilli.
Cosa da fà
Quarantena per età. Nunda in a tavula di tempu di permanenza ùn hà sopravvissutu à tredeci ore. Una pulitica chì nisuna versione di dipendenza hè installabile finu à ch'ella sia esistita per 72 ore averia esclusu ognuna di elle senza rilevà nunda.
Disattivate i script d'installazione per difettu. –Ignore-scripts elimina u mecanismu di consegna da u quale dipendenu i pacchetti di furtu di credenziali in questu corpus. Ùn aiuta micca contr'à un strumentu chì l'utente esegue deliberatamente, chì hè precisely a distinzione chì vale a pena di capisce.
Trattate a sparizione cum'è un avvenimentu di sicurezza. Avvisa quandu una dipendenza installata smette di risolve si. U vostru schedariu di serratura, micca u registru, hè induve l'evidenza esiste sempre.
Segui u cuntenutu, micca i nomi. I sei digests sopra currispondenu indipendentemente da u nome di u pacchettu, u contu di l'editore o a stringa di versione - ogni campu chì questu operatore hà dimustratu ch'elli cambieranu. Una regula di u registru chì un contu appena registratu chì ritira u so unicu pacchettu in una ora hè un mudellu segnalabile saria stata attivata nantu à ogni pacchettu quì, solu nantu à i metadati.
È sè vo circate d'installà qualcosa in questa categuria: E pruprietà chì rendenu difficiule a cattura per un registru sò e stesse pruprietà chì ùn vi lascianu micca ricorsu. Ùn ci hè micca editore da tene rispunsevule, nisun percorsu d'aghjurnamentu, è nisuna registrazione di ciò chì avete eseguitu.
francesu
| Type | Value |
|---|---|
| File | bin/kalamasha-tool.js — micca-standard puntu d'entrata di u bidone |
| SHA-256 | 0c293be90c10c8a7618d25f4c4811fa63612b7bc5199b86e10bb31eb36c716dd |
| SHA-256 | e2fda5aa8397799669f29258f69e803cf05d322c1d93269eef6754ca024c3865 |
| prucessu | SearchApp.exe scrittu accantu à un runtime Electron legittimu |
| Behaviour | powershell -ExecutionPolicy Bypass -File cù windowsHide: true |
| Behaviour | taskkill /F /T mira à un prucessu di navigatore d'esame sicuru |
| Metadata | Lista di mantenitori viota accantu à un time.unpublished discugràfica |
| Accounts | letol39119, so1d1a7i27, lololololol435678, tagadob568, tayihim489, sahihai123, heytoshan |
| Scrizzione | ogzmail.com, hutdot.com, ebflyai.com, prodbits.com — duminii di posta dispunibuli |
Vede ancu
- pulitica di dispublicazione di npm — a finestra di 72 ore in a quale un editore pò caccià un pacchettu senza intervenzione.







