Tl; DR
Isang pakete ng PyPI na pinangalanang kontrol ng gcli Nagpadala ng kumpletong tool para sa remote access ng Windows: keystroke logging, webcam at microphone capture, clipboard monitoring, browser-credential access, screen control, persistence, privilege elevation, at isang self-advertise na "140+ commands." Hindi nito itinago kung ano ito: inilarawan ito ng sariling buod ng PyPI ng package bilang isang "Remote access tool via npoint.io".
Ang detalyeng dapat pag-usapan ay ang pariralang iyon "sa pamamagitan ng npoint.io." Sa halip na tawagin ang tahanan sa isang dedicated server, ang implant na ginamit npoint[.]io (isang libre at lehitimong serbisyo para sa pagho-host ng maliliit na dokumentong JSON) bilang command-and-control relay nito. Nagsusulat ang operator ng mga command sa isang JSON bin; inilalagay nito ang mga poll sa bin na iyon, isinasagawa, at isinusulat ang mga resulta pabalik. Walang domain na pag-aari ng attacker na haharangan, walang bagong IP na ifa-flag: ang trapiko ay napupunta sa serbisyong ginagamit ng mga developer araw-araw.
Anim na bersyon ang nailathala sa loob ng humigit-kumulang labintatlong oras at kalahati, bawat isa ay mas mahusay kaysa sa nauna. Bawat isa sa mga ito ay may marka ml_predicted_safe muling inuri ng isang awtomatikong classifier bago ang manu-manong pagsusuri ang pamilya bilang malisyoso.
Anatomiya ng pag-atake
kontrol ng gcli ini-install ang import package gcli, isang 35-module na Python codebase. Walang oras ng pag-install hooks — walang tumatakbo habang pag-install ng pipAng kakayahan ay nasa mga module mismo, na ginagamit kapag tumakbo na ang tool, at ang layout ng module ay parang isang product spec sheet:
| Lugar ng kakayahan | Module |
|---|---|
| Pagsubaybay sa host | keylog, webcam, audio, clipboard, desktop, monitoring |
| Kredensyal at pag-access sa datos | browser, forensics, fileops, transfer, users |
| Pangungunahan at pagtaas ng antas | persistence, elevator, registry, security |
| Pagsusuri ng host at network | system, processes, network_config, wifi, bluetooth, netutils |
| Utos at kontrol | client, host, session, protocol, npoint, crypto, encrypt |
Ang command channel ang interesante. Karamihan sa mga remote-access tooling ay nakakarating sa isang server na kontrolado ng operator — isang IP, isang domain, isang hosting provider na maaaring iulat at gawing offline. kontrol ng gcli sa halip ay tinatrato ang isang libreng serbisyo ng JSON-bin bilang isang dead-drop. ang npoint Binabasa at isinusulat ng modyul ang maliliit na dokumentong JSON sa npoint[.]io sa pamamagitan ng ordinaryong HTTPS; ang crypto/encrypt Binabalot ng mga module ang mga ipinagpalit na payload upang ang mga nilalaman ng bin ay hindi mga plaintext na utos. Ang epekto ay isang mediated, encrypted relay:
- Naglalagay ang operator ng (naka-encrypt) na instruksyon sa isang JSON bin.
- Ang implant, na tumatakbo sa host ng biktima, ay sinusuri ang bin na iyon, dine-decrypt, isinasagawa ang isa sa mga command handler nito, at isinusulat pabalik ang (naka-encrypt) na resulta.
- Sa isang network monitor, ang biktima ay nakikipag-usap lamang sa npoint[.]io — isang serbisyong may lehitimong dahilan para lumabas sa trapiko ng developer.
Walang pangalawang yugto ng pag-download at walang obfuscated loader dito: ang kakayahan ay nagpapadala nang buo, sa nababasang Python, at ang tanging "nakatatago" ay ang pagpili ng relay at ang pag-encrypt ng mga nai-relay na payload.
Mahalagang ipaliwanag kung bakit kaakit-akit ang isang JSON-bin dead-drop sa operasyon, dahil ipinapaliwanag nito kung bakit inaasahan nating makikita muli ang pattern:
- Walang endpoint na pagmamay-ari ng operator. Walang C2 domain na irerehistro, walang VPS na uupahan, at walang anumang bagay na maaaring kumpiskahin ng isang tagapagtanggol o registrar. Pag-alis ng pakete hindi naaabot ang channel; pagtanggal ng channel ay nangangahulugang paghingi sa isang pangkalahatang-gamit na SaaS na bantayan ang isang dokumento sa milyun-milyon.
- Paglalaba ng reputasyon. Ang outbound HTTPS sa isang kilalang serbisyo ng developer ay walang anumang parusa sa reputasyon na katulad ng sa isang bagong domain o isang raw IP. Maraming egress-filtering setup ang hindi direktang nagpapahintulot nito.
- Asynchrony at deniability. Ang isang polling model — ang implant ay kumukuha ng dokumento sa isang interval sa halip na humawak ng isang bukas na socket — ay lumilikha ng trapiko na mukhang pana-panahong API polling, hindi isang interactive session. Ang pag-encrypt ng mga nilalaman ng dokumento ay nangangahulugan na kahit ang isang analyst na nakakahanap ng bin ay nakakakita ng ciphertext, hindi isang command list.
- Trivial na pag-ikotAng paglipat sa ibang bin, o ibang serbisyo ng note/paste nang buo, ay isang one-line na pagbabago sa configuration para sa operator. Anumang blocklist na naka-key sa partikular na relay ay hindi na ginagamit sa sandaling ipadala ito.
Ang kompromisong tinatanggap ng operator ay ang throughput at latency: ang isang dead-drop relay ay mas mabagal at mas mababa ang bandwidth kaysa sa isang direktang koneksyon. Para sa isang surveillance-and-control implant na kadalasang naglalabas ng maiikling utos at nangongolekta ng mga resulta sa paglipas ng panahon, madaling gawin ang pamalit na iyon.
timeline
Mabilis na lumala ang sitwasyon ng pamilya. Ang mga timestamp ng paggawa ng tiket para sa mga naka-flag na bersyon ay naglalagay sa buong naobserbahang arko sa loob ng humigit-kumulang labintatlong oras at kalahati, at ang bilang ng ebidensya ng scanner mismo ay lumaki kasabay ng code — mula sa ilang naka-flag na site sa unang bersyon hanggang labing-apat sa pinakabago.
| bersyon | Unang nakita (UTC) | nota |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | Paunang pag-upload; minimal na naka-flag na ibabaw |
0.5.0 | 2026-07-21 18:01 | Lumalawak ang kakayahan |
0.2.0 | 2026-07-21 18:03 | (hindi monotoniko ang pagnunumero ng bersyon ayon sa pagkakasunod-sunod ng pag-upload) |
0.6.0 | 2026-07-22 00:44 | Mas malawak na hanay ng modyul |
0.7.0 | 2026-07-22 01:58 | Halos kumpletong toolkit |
0.7.1 | 2026-07-22 02:28 | Pinakabago; 35 na modyul, buong kakayahan |
Ang mga numero ng bersyon ay hindi inilathala nang mahigpit na pagkakasunud-sunod, ngunit malinaw ang direksyon: isang maliit na unang pagbawas, pagkatapos ay mabilis na pag-ulit patungo sa ganap na tampok na 0.7.1. Ito ang hugis ng isang proyektong nasa ilalim ng aktibong pag-unlad na isinusulong sa isang pampublikong rehistro habang ito ay lumalaki, hindi isang biglaang pagbaba.
Mga Tagapagpahiwatig ng Kompromiso
Ang lahat ng mga tagapagpahiwatig sa ibaba ay nakumpirma laban sa mga nilalaman ng pakete na nasa disk at isang deterministic indicator scan ng bersyon 0.7.1; wala sa mga ito ang haka-haka lamang.
| uri | Nagtuturo |
|---|---|
| Pakete (PyPI) | gcli-control, mga bersyon 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 |
| Pakete ng pag-import | gcli |
| C2 relay | npoint[.]io (JSON-bin dead-drop; mga naka-encrypt na payload) |
| Nakasaad na imbakan | github[.]com/gcli-control/gcli |
| Fingerprint ng pag-uugali | Mga modyul ng pagsubaybay na magkakasamang matatagpuan: keylog, webcam, audio, clipboard, browser, kasama ang persistence, elevator, at isang client/host/protocol command layer sa isang pakete |
| I-install hooks | Wala: gumagana ang kakayahan sa oras ng pagpapatakbo ng tool, hindi habang ini-install |
Tala ng tagapagtanggol: ang pinakamatibay na signal ay hindi ang domain (ang relay host ay umiikot nang bahagya) kundi ang hugis: isang pakete na nagbubuklod ng tatlo o higit pang natatanging host-surveillance primitives at nagruruta ng isang command/response loop sa pamamagitan ng isang pampublikong serbisyo sa pagho-host ng nilalaman. Pag-block npoint[.]io Hindi praktikal ang outright para sa karamihan ng mga tindahan; mas matatag ang pag-alerto sa isang hindi inaasahang proseso na parehong kumukuha ng mga input device at nakikipag-usap sa isang serbisyo ng JSON-bin.
Naobserbahang kilos at pag-frame
Dalawang bagay ang nagpapaiba sa halimbawang ito, at pareho itong mga napapansing katotohanan sa halip na mga hinuha tungkol sa motibo.
Inaanunsyo nito ang sarili nito. Inilista ng buod ng pakete na ipinamahagi sa PyPI ang mga kakayahan sa simpleng wika — remote access, desktop control, user management, webcam, audio, keylogger, persistence, browser data, WiFi, registry, “140+ commands.” Walang pagtatangkang ipasa ang code bilang isang build helper, isang CLI wrapper, o isang AI-agent utility, na siyang mas karaniwang pagbabalatkayo na nakikita natin sa mga pampublikong registry. Kung ang pagiging bukas na iyon ay sumasalamin sa isang red-team tool na inilathala nang walang mga access control o iba pa ay isang tanong na ang mga nilalaman lamang ng pakete ay hindi nalutas; ang tiyak ay ang isang gumaganang, pangkalahatang-layunin na remote-access at surveillance toolkit ay maaaring i-install ng sinumang may tuldukan.
Sumandal ito sa tiwala sa isang mabait na serbisyo. paggamit npoint[.]io dahil ang relay ang siyang nagbibigay-kahulugang pamamaraan. Ito ay isang halimbawa ng mas malawak na pattern — ang pagruruta ng C2 sa pamamagitan ng isang lehitimong SaaS (mga paste site, mga JSON bin, chat webhooks, mga dokumento sa cloud) upang ang malisyosong trapiko ay humalo sa normal na aktibidad ng developer at walang endpoint na pagmamay-ari ng operator na maaaring sakupin. Ang mga payload sa relay ay naka-encrypt, kaya ang mga nilalaman ng bin ay hindi mababasa bilang mga utos sa isang kaswal na tagamasid.
Manipis at pangkalahatan ang mga senyales ng publisher. Ang pakete ay nagdeklara ng may-akda ng mga "gcli contributor" at isang lisensya ng MIT, at itinuro ang homepage at mga field ng repository nito sa github[.]com/gcli-control/gcliWala sa mga iyan ang beripikasyon: ang isang string ng awtor ay malayang teksto, ang isang header ng lisensya ng MIT ay walang bayad, at ang isang URL ng repositoryo sa metadata ng pakete ay isang pag-aangkin, hindi isang patunay ng pinagmulan. Ang pattern — isang bagong pangalan, isang generic na kolektibong awtor, at isang self-referential na org/repo na nilikha sa paligid ng pakete — ay kung ano ang hitsura ng isang proyekto kapag ito ay partikular na itinayo upang dalhin ang code, sa halip na isang itinatag na tool na nagkataong nagpaunlad ng isang remote-control na tampok. Itinuturing namin ang mga ito bilang mga obserbasyon; ang mga ito ay naaayon sa, ngunit hindi mismo nagtatatag, ng isang distribusyon na ginawa para sa layunin.
Inilalarawan namin ang disposisyon bilang malisyoso batay sa kakayahan at paghahatid: isang kumpleto, maaaring patakbuhin na remote-access at surveillance implant, na ipinamamahagi sa isang pampublikong package index na may isang covert relay. Wala kaming itinuturong target o motibo.
Epekto, mga uso at kung ano ang magagawa ng mga tagapagtanggol
Isang blind spot para sa disguise-oriented triage. Maraming awtomatikong susi sa triage ng pakete sa magkaila mga senyales ng karaniwang malware sa registry — mga natatakpang blob, oras ng pag-install hooks, mga maikling salita na nakakakuha ng kredensyal. Isang pakete na simple lang lantaran na isang DAGA, na may malinis at madaling basahing code at walang install hook, ay hindi nagpapakita ng alinman sa mga tell na iyon at maaaring makalusot sa heuristics na umaasa sa pagtatago. Ang mga signal na maaasahang nakakahuli sa klase na ito ay istruktural sa halip na nakabatay sa pagbabalatkayo: isang capability census (kung gaano karaming natatanging host-surveillance primitives ang magkakasamang umiiral sa isang package) at C2-shape analysis (isang command/response loop na idinadaan sa isang general-purpose content-hosting service). Gumagana ang mga check na iyon kahit gaano pa katapatan o nahumaling ang balot ay.
Ang kalakaran sa SaaS-as-C2. Hindi na bago ang pag-abuso sa isang lehitimong serbisyo ng hosting bilang isang dead-drop, ngunit patuloy itong gumagana dahil mataas ang depensibong gastos sa pagharang sa serbisyo at halos wala ang opensibong gastos sa paglipat ng serbisyo. Asahan ang mas marami pa nito. Ang mga depensa ng network na naka-key sa mga partikular na masamang domain ay agad na nawawala; ang mga panuntunan sa pag-uugali ("binabasa ng prosesong ito ang clipboard at ang webcam at pagkatapos ay nakikipag-ugnayan sa isang note-hosting API") ay hindi.
Isang sketch ng pagtukoy ng kongkreto. Hindi pinangalanan ng matibay na tuntunin npoint[.]io hindi talaga. Pinagsasama nito ang dalawang obserbasyon na karaniwan ngunit bihira sa isang normal na developer o CI host:
alerto kapag ang isang proseso, sa loob ng isang sesyon, pareho:
(A) ina-access ang isang host-surveillance primitive — input device (keyboard/mouse hook), camera, microphone, screen capture, clipboard read-loop, o isang browser credential store ("Login Datos" / "Lokal na Estado" / DPAPI); AT
(B) gumagawa ng mga outbound request sa isang pampublikong content-hosting / paste / JSON-bin / chat-webhook service at pagkatapos ay naghahain para sa pagsusuri, anuman ang partikular na serbisyo sa (B).
Walang naghihinala sa dalawa: maraming lehitimong tool ang nag-i-screenshot, at marami ang nagpo-post ng JSON sa isang hosting API. Ang ugnayan sa loob ng isang panandaliang proseso ay ang signal, at nakaligtas ito sa anumang pag-ikot ng relay.
Mga praktikal na hakbang para sa mga koponan:
- Ituring ang mga pampublikong pag-install ng package sa mga developer at CI host bilang isang hangganan ng pagpapatupad, hindi isang kaginhawahan — ang isang RAT sa isang build agent ay isang RAT na may mga sikreto.
- Mas gusto ang mga allowlisted internal mirror; ang isang package na literal na ipinangalan sa remote control at naglalarawan ng isang keylogger ay hindi dapat kailanman ma-resolve sa isang corporate index.
- Babala sa kombinasyon — input-device o screen capture kasama ang outbound traffic papunta sa isang content/paste/JSON-bin service — sa halip na sa anumang iisang primitive, na may mga hindi gaanong magandang gamit nang mag-isa.
- Huwag umasa sa isang awtomatikong "ligtas" na marka bilang huling hatol para sa mga pakete na may malawak na kakayahan sa pag-access sa host; iruta ang mga ito sa pagsusuri ng tao.
Ang pamilya ng pakete ay inuri bilang malisyoso at isinangguni para sa pag-alis ng registry. Dahil ang isang relay-based na C2 ay hindi nag-iiwan ng host na pag-aari ng operator sa sinkhole, ang matibay na defensive value ay nasa behavioral fingerprint sa itaas, hindi sa anumang entry sa blocklist.





