TL; DR
PyPI-pakaĵo nomita gcli-kontrolo liveris kompletan ilon por fora aliro al Vindozo: registradon de klavopremoj, kapton de retkamerao kaj mikrofono, monitoradon de tondujoj, aliron per retumiloj, ekranan kontrolon, persiston, privilegian aligon, kaj mem-reklamitajn "pli ol 140 komandojn". Ĝi ne kaŝis, kio ĝi estis: la propra PyPI-resumo de la pakaĵo priskribis ĝin kiel "ilo por fora aliro per npoint.io".
La detalo, pri kiu valoras paŭzi, estas tiu frazo "per npoint.io." Anstataŭ telefoni hejme al dediĉita servilo, la uzata enplantaĵo npunkto[.]io (senpaga, legitima servo por gastigi malgrandajn JSON-dokumentojn) kiel sian komando-kaj-kontrolan relajson. La funkciigisto skribas komandojn en JSON-ujon; la enplantaĵo prienketas tiun ujon, efektivigas, kaj skribas rezultojn reen. Neniu atakanto-posedata domajno por bloki, neniu freŝa IP-adreso por marki: la trafiko iras al servo, kiun programistoj uzas ĉiutage.
Ses versioj estis publikigitaj en proksimume dek tri horoj kaj duono, ĉiu pli kapabla ol la antaŭa. Ĉiu el ili estis muzikigita. ml_antaŭdirita_sekura per aŭtomata klasifikilo antaŭ ol mana revizio reklasifikis la familion kiel malican.
Atako-anatomio
gcli-kontrolo instalas la importpakaĵon gcli, 35-modula Python-kodbazo. Ne estas instaltempaj limoj hooks — nenio funkcias dum pip instaliLa kapablo troviĝas en la moduloj mem, alvokata post kiam la ilo funkcias, kaj la modula aranĝo legiĝas kiel produkta speciffolio:
| Kapabla areo | moduloj |
|---|---|
| Gastiganta gvatado | keylog, webcam, audio, clipboard, desktop, monitoring |
| Aliro al datumoj kaj akreditaĵoj | browser, forensics, fileops, transfer, users |
| Piedtenejo kaj eskalado | persistence, elevator, registry, security |
| Gastiganto kaj reto-rekono | system, processes, network_config, wifi, bluetooth, netutils |
| Komando kaj kontrolo | client, host, session, protocol, npoint, crypto, encrypt |
La komandkanalo estas la interesa parto. Plej multaj iloj por fora aliro atingas servilon, kiun la funkciigisto kontrolas — IP-adreson, domajnon, retprovizanton, kiu povas esti raportita kaj malkonektita. gcli-kontrolo anstataŭe traktas senpaga JSON-bin servo kiel senpaga kliento. la n-punkto modulo legas kaj skribas malgrandajn JSON-dokumentojn sur npunkto[.]io per ordinara HTTPS; la kripto/ĉifri moduloj envolvas la interŝanĝitajn utilajn ŝarĝojn tiel ke la enhavo de la ujo ne estas klartekstaj komandoj. La efiko estas mediaciita, ĉifrita relajso:
- La funkciigisto faligas (ĉifritan) instrukcion en JSON-ujon.
- La enplantaĵo, funkcianta sur la viktima gastiganto, prienketas tiun ujon, malĉifras, efektivigas unu el siaj komandmanipuliloj, kaj skribas la (ĉifritan) rezulton reen.
- Por retmonitoro, la viktimo simple parolas al npunkto[.]io — servo kun legitima kialo aperi en la trafiko de programistoj.
Ne estas duaŝtupa elŝuto kaj neniu malklarigita ŝargilo ĉi tie: la kapablo estas liverata tuta, en legebla Python, kaj la sola "kaŝejo" estas la elekto de relajso kaj la ĉifrado de la relajitaj utilaj ŝarĝoj.
Kial JSON-bin dead-drop estas funkcie alloga valoras klarigi, ĉar ĝi klarigas kial ni atendas vidi la ŝablonon denove:
- Neniu funkciigisto-posedata finpunkto. Ne estas C2-domajno por registri, neniu VPS por lui, kaj nenio por defendanto aŭ registristo konfiski. Forigo de la pakaĵo ne tuŝas la kanalon; malkonstruo de la kanalo signifas peti ĝeneraluzeblan SaaS-on kontroli unu dokumenton el milionoj.
- Reputacia lavado. Eliranta HTTPS al konata programista servo portas neniun el la reputaciaj punoj, kiujn havus freŝa domajno aŭ kruda IP-adreso. Multaj eliraj filtraj aranĝoj implicite permesas tion.
- Asinkroneco kaj neeblo. Enketa modelo — la enplantaĵo prenas dokumenton je intervalo anstataŭ teni malfermitan ingon — produktas trafikon, kiu aspektas kiel perioda API-enketado, ne interaga sesio. Ĉifri la dokumentan enhavon signifas, ke eĉ analizisto, kiu trovas la ujon, vidas ĉifritan tekston, ne komandliston.
- Triviala rotacioŜanĝi al alia ujo, aŭ tute alia noto/algluoservo, estas unu-linia agorda ŝanĝo por la funkciigisto. Ĉiu bloklisto ligita al la specifa relajso estas malfreŝa en la momento kiam ĝi estas sendita.
La kompromiso, kiun la funkciigisto akceptas, estas trairo kaj latenteco: senfina relajso estas pli malrapida kaj havas malpli da bendlarĝo ol rekta konekto. Por gvato-kaj-kontrola enplantaĵo, kiu plejparte eldonas mallongajn komandojn kaj kolektas rezultojn laŭlonge de la tempo, tiu interŝanĝo estas facile farebla.
templinio
La familio rapide eskaladis. La tempostampoj por la markitaj versioj metas la tutan observitan arkon ene de ĉirkaŭ dek tri horoj kaj duono, kaj la nombro de pruvoj de la skanilo mem kreskis kune kun la kodo — de kelkaj markitaj retejoj en la unua versio ĝis dek kvar en la plej nova.
| versio | Unue vidita (UTC) | noto |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | Komenca alŝuto; minimuma flagita surfaco |
0.5.0 | 2026-07-21 18:01 | Kapablo vastiĝas |
0.2.0 | 2026-07-21 18:03 | (versinumerado ne monotona kun alŝuta ordo) |
0.6.0 | 2026-07-22 00:44 | Pli larĝa modularo |
0.7.0 | 2026-07-22 01:58 | Preskaŭ kompleta ilaro |
0.7.1 | 2026-07-22 02:28 | Plej nova; 35 moduloj, plena kapablo |
La versinumeroj ne estis publikigitaj strikte laŭorde, sed la direkto estas klara: malgranda unua tranĉo, poste rapida ripeto al la plene funkcianta versio 0.7.1. Jen la formo de projekto sub aktiva disvolviĝo, kiu estas puŝata al publika registro dum ĝi kreskas, ne unufoja falo.
Indikiloj de Kompromiso
Ĉiuj indikiloj sube estis konfirmitaj kontraŭ la surdiska pakaĵenhavo kaj determinisma indikilskanado de versio 0.7.1; neniuj estas konjektaj.
| tipo | indikilo |
|---|---|
| Pakaĵo (PyPI) | gcli-control, versioj 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 |
| Importi pakaĵon | gcli |
| C2-relajso | npoint[.]io (JSON-bin dead-drop; ĉifritaj utilaj ŝarĝoj) |
| Deklarita deponejo | github[.]com/gcli-control/gcli |
| Kondutisma fingrospuro | Kunlokigitaj gvatmoduloj: keylog, webcam, audio, clipboard, browser, plus persisto, lifto, kaj kliento/gastiganto/protokola komandtavolo en unu pakaĵo |
| instali hooks | Neniu: kapablo funkcias dum la rultempo de la ilo, ne dum la instalado |
Noto de la defendanto: la plej forta daŭra signalo ne estas la domajno (relajsa gastiganto rotacias triviale) sed la formo: ununura pakaĵo kiu faskas tri aŭ pli apartajn gastiganto-gvatajn primitivojn kaj sendas komando-respondo-buklon tra publika enhavo-gastiga servo. Blokado npunkto[.]io tute senproblema estas nepraktika por plej multaj butikoj; atentigi pri neatendita procezo kiu kaj kaptas enigajn aparatojn kaj komunikas kun JSON-bin-servo estas multe pli fortika.
Observita konduto kaj enkadrigo
Du aferoj igas ĉi tiun specimenon nekutima, kaj ambaŭ estas observeblaj faktoj prefere ol inferencoj pri motivo.
Ĝi reklamis sin mem. La pakaĵa resumo distribuita ĉe PyPI listigis la kapablojn en simpla lingvo — malproksima aliro, labortabla kontrolo, uzanta administrado, retkamerao, aŭdio, klavregistrilo, persisto, retumilaj datumoj, WiFi, registro, "pli ol 140 komandoj." Ne estis provo prezenti la kodon kiel konstruhelpilon, CLI-envolvaĵon aŭ AI-agentan ilon, kio estas la pli ofta alivestiĝo, kiun ni vidas ĉe publikaj registroj. Ĉu tiu malfermiteco reflektas ruĝteam-ilon publikigitan sen alirkontroloj aŭ ion alian estas demando, kiun la pakaĵa enhavo sole ne solvas; kio estas certa estas, ke funkcianta, ĝeneraluzebla malproksima aliro kaj gvata ilaro estis instalebla de iu ajn kun... pip.
Ĝi baziĝis sur fido je bonkora servo. uzante npunkto[.]io ĉar la relajso estas la difina tekniko. Ĝi estas ekzemplo de pli larĝa ŝablono — direktado de C2 tra legitima SaaS (alglui retejojn, JSON-ujojn, babilejonhooks, nubaj dokumentoj) tiel ke la malica trafiko miksiĝas en normalan programistan agadon kaj ne ekzistas funkciigist-posedata finpunkto por kapti. La utilaj ŝarĝoj sur la relajso estis ĉifritaj, do la enhavo de la ujo ne estus legita kiel komandoj por hazarda observanto.
La eldonistaj signaloj estas maldikaj kaj ĝeneralaj. La pakaĵo deklaris Aŭtoro de "gcli-kontribuantoj" kaj MIT-licenco, kaj direktis sian hejmpaĝon kaj deponejajn kampojn al github[.]com/gcli-control/gcliNenio el tio estas konfirmo: aŭtora ĉeno estas libera teksto, MIT-licenca kaplinio kostas nenion, kaj deponeja URL en pakaĵaj metadatenoj estas aserto, ne pruvo de deveno. La ŝablono — tute nova nomo, ĝenerala kolektiva aŭtoro, kaj mem-referenca organizo/deponejo kreita ĉirkaŭ la pakaĵo — estas kiel aspektas projekto kiam ĝi estas starigita specife por porti la kodon, anstataŭ establita ilo kiu hazarde evoluigis teleregan funkcion. Ni notas ĉi tiujn kiel observojn; ili estas kongruaj kun, sed ne per si mem establas, speciale konstruitan distribuon.
Ni priskribas la aranĝon kiel malican surbaze de kapablo kaj livero: kompleta, funkciigebla malproksima aliro kaj gvata enplantaĵo, distribuita sur publika pakaĵindekso kun sekreta relajso. Ni ne atribuas celon aŭ motivon.
Efiko, tendencoj kaj kion defendantoj povas fari
Blinda makulo por alivestiĝ-orientita selektado. Multe da aŭtomataj pakaĵaj selektadŝlosiloj sur la maskovesti signaloj de tipa registro-malware — malklarigitaj iometoj, instaltempo hooks, mallongaj ŝercoj pri rikoltado de akreditaĵoj. Pakaĵo kiu estas simple malkaŝe RAT, kun pura legebla kodo kaj sen instala hoko, prezentas neniun el tiuj indikoj kaj povas preterpasi heŭristikojn, kiuj atendas kaŝadon. La signaloj, kiuj fidinde kaptas ĉi tiun klason, estas strukturaj prefere ol alivestiĝ-bazitaj: kapabla censo (kiom da apartaj gastiganto-gvataj primitivoj kunekzistas en unu pakaĵo) kaj C2-forma analizo (komando/respondo-buklo sendita tra ĝeneraluzebla enhavo-gastiga servo). Tiuj kontroloj ekfunkcias sendepende de kiom honestaj aŭ... obusado la pakaĵo estas.
La tendenco SaaS-kiel-C2. Misuzi legitiman gastigan servon kiel atakan ilon ne estas nova, sed ĝi daŭre funkcias ĉar la defenda kosto de blokado de la servo estas alta kaj la ofensiva kosto de ŝanĝado de servoj estas preskaŭ nula. Atendu pli da tio. Retaj defendoj ligitaj al specifaj malbonaj domajnoj tuj eksvalidiĝas; kondutaj reguloj ("ĉi tiu procezo legas la tondejon kaj retkameraon kaj poste komunikas kun noto-gastiga API") ne.
Skizo pri konkreta detekto. La daŭra regulo ne nomas npunkto[.]io tute ne. Ĝi kombinas du observojn, kiuj estas individue oftaj sed komune maloftaj ĉe normala programisto aŭ CI-gastiganto:
alarmo kiam unuopa procezo, ene de unu sesio, ambaŭ:
(A) aliras primitivon de gastiga gvatado — enigilon (klavaro/muso-hoko), fotilon, mikrofonon, ekrankopion, tondilan legbuklon, aŭ retumilan akreditaĵan stokejon ("Login "Datumoj" / "Loka Ŝtato" / DPAPI); KAJ
(B) faras eksterenajn petojn al publika enhavo-gastiga / pasti / JSON-bin / babileja-rethook servo kaj poste levas ilin por revizio, sendepende de la specifa servo en (B).
Nek duono estas suspektinda sola: amaso da legitimaj iloj ekranfotoj, kaj amaso da JSON-afiŝoj al gastiga API. La konjunkcio ene de unu mallongdaŭra procezo estas la signalo, kaj ĝi postvivas ajnan relajso-rotacion.
Praktikaj paŝoj por teamoj:
- Traktu publikajn pakaĵinstalaĵojn sur programistoj kaj CI-gastigantoj kiel ekzekutivan limon, ne kiel oportunon — RAT sur konstruagento estas RAT kun viaj sekretoj.
- Preferu permesitlistigitajn internajn spegulojn; pakaĵo laŭvorte nomita laŭ teleregilo kaj priskribanta klavregistrilon neniam devus solvi sur entreprena indekso.
- Averto pri la kombinaĵo — enigaparato aŭ ekrankopio plus eliranta trafiko al servo content/paste/JSON-bin — anstataŭ sur iu ajn unuopa primitivo, kiu havas bonkorajn uzojn izole.
- Ne fidu aŭtomatan "sekuran" poentaron kiel finan verdikton por pakaĵoj kun larĝa kapablo de gastiga aliro; direktu ilin al homa revizio.
La pakaĵfamilio estis klasifikita kiel malica kaj plusendita por registroforigo. Ĉar relajso-bazita C2 lasas neniun funkciigist-posedatan gastiganton al sinktruo, la daŭra defensiva valoro estas en la konduta fingrospuro supre, ne en iu ajn unuopa bloklisto.





