- Kanada’daki bir geliştirici, sahte bir VC görüşmesi kılığına sokulmuş arka kapı kurma saldırısına maruz kaldı; saldırı akışı, crates.io paket yöneticisini hedeflediğinden şüphelenilecek kadar geliştirici iş akışına uyarlanmıştı
- Yem depo “Ticket Harbor” adlı bir TypeScript uygulaması gibi görünüyordu, ancak
patch-packagevetypescript+5.9.2.patchile TypeScript çalıştırma yoluna kötü amaçlı kod gizlenmişti - Enjekte edilen stub, base64 ve XOR obfuscation’ını çözüp
new Function(...)ile çalışıyor;operators/3.pngiçindeki gizli chunk ve bir WASM stub’ı üzerinden 1,68 MB’lık ikinci aşama payload’u ayrı bir Node süreci olarak başlatıyordu - Nihai payload “PinpinRAT”, RSA-2048 anahtar çifti ve AES-256-CBC oturum anahtarı oluşturuyor; host parmak izi toplama, dosya yükleme·indirme, süreç çalıştırma, dosya sistemi işlemleri, DNS sorgusu ve kendini kaldırmayı destekliyor
- Depoyu çalıştırdıysanız hemen ağı kesin ve kimlik bilgilerinizi başka bir cihazdan değiştirin; çerezlerin ve parola korumalı sırların dahi çalınmış olabileceği varsayımıyla müdahale edin
Sahte görüşmeyle başlayan geliştirici hedefli saldırı
- Saldırgan, “Lua Ventures” mensubu olduğunu iddia eden sahte bir kişi olarak yaklaştı
- Lua Ventures, Singapur merkezli DeFi alanında bir VC olarak tanıtıldı; ancak gerçekte faaliyetlerini zaten durdurmuştu
- Kişi adı, aynı ada sahip gerçek kişilerle karıştırılabileceği için açıklanmadı
- E-posta inandırıcıydı ve sıradan ama normal görünen bir LinkedIn profili bağlantısı da içeriyordu
- Danışman arayan yatırım şirketleri olarak Lyrasing ve Roadpay’den söz edildi
- İki şirketin de temel düzeyde web varlığı vardı; sahte olmaktan çok erken aşama şirketler gibi görünüyorlardı
- Roadpay sitesinin archive.org anlık görüntüsü de mevcut
- E-posta yazışmalarının ardından Google Meet görüşmesine kadar ilerlendi
- Görüşmedeki kişi Alman aksanlı bir erkekti ve yolda olduğunu söyledi
- Görüşmenin kendisinde belirgin biçimde tuhaf bir şey yoktu
“Test görevi” kılığına sokulmuş çalıştırma tetikleyicisi
- Görüşmeden sonra saldırgan bir “test” önerdi ve bir depo gönderdi
- Depo, “Ticket Harbor” adlı bir feribot biletleme uygulaması gibi tasarlanmıştı
- İçindeki
task.txt, sıkıcı ama inandırıcı bir görev listesi içeriyor; en sonda çalıştırma talimatı yer alıyordu- Deponun typecheck’ini, test suite’ini ve ilgili desktop/server build komutlarını çalıştırma talimatı veriliyordu
- Bu talimat gerçek enfeksiyon tetikleyicisiydi
npm run typecheck,build,devgibi TypeScript’in çalıştırıldığı veyatypescript.js’in import edildiği anda payload çalışabiliyordu
TypeScript patch’ine gizlenmiş çalıştırma zinciri
- İlk uyarı işareti, deponun TypeScript görevi gibi görünmesiydi
- İstenen şey, mimari analizden çok TypeScript işe alım görevine yakındı
- Depoyu hızlıca kontrol etmek için Claude’a verince
patch-packageile ilgili anormallikler ortaya çıktı
patches/dizini olağandışı derecede kalabalıktı- Bazı patch’ler normal görünerek asıl payload’u gizleyen gürültü işlevi görüyordu
- Örneğin
sumchecker+3.0.1.patch,@electron+get+2.0.3.patch,extract-zip+2.0.1.patchiçeriliyordu
- Asıl kötü amaçlı kod
typescript+5.9.2.patchiçindeyditypescript.jsve_tsc.jsdosyalarının en üstüne hemen çalışan bir stub enjekte ediyordu- Stub bir base64 dizgesini decode ediyor, her baytı
73anahtarıyla XOR ile decrypt ediyor, ardındannew Function(...)ile çalıştırıyordu - Çalıştırma fonksiyonuna
require,Buffer,WebAssembly,process,__dirnameaktarılıyordu
- Çalıştırma zinciri birkaç aşamadan geçiyordu
- Dört
postinstallhook’upatch-packageçalıştırıyordu - Bunlardan biri, patch dosyasını
git statusiçinde gizlemek için onagit update-index --skip-worktreeuyguluyordu - Loader,
operators/3.pngdosyasının arkasına eklenmiş gizli chunk’ı okuyordu - Özel
wAsmchunk’ındaki küçük WASM stub’ını çalıştırıyordu - 1,68 MB’lık obfuscate edilmiş ikinci aşama payload’u sessiz, ayrı bir Node süreci olarak çalıştırıyordu
- Dört
- Saldırı kodu, çalıştıktan sonra izleri azaltacak şekilde tasarlanmıştı
git skip-worktreeile patch’i gizliyordu- Dropper, ilk çalıştırmadan sonra patch dosyasından kendi enjekte ettiği satırları siliyordu
- İkinci aşama geçici dizini çalıştırma sırasında kendini siliyordu
PinpinRAT’in yetenekleri
- Nihai payload “PinpinRAT” olarak adlandırılıyor
- Ad, iç dizgeler nedeniyle verilmiş; başka bir adla biliniyor olma olasılığı dışlanmıyor
- Çevrim içinde başka referans bulunamadı
- Payload birkaç obfuscation katmanının içindeydi
- obfuscator.io
- İki ek base64 katmanı
- RAT, başlangıçta host parmak izini toplayıp dışarı sızdırıyor
- Birincil IP adresi ve tam IP listesi
os.userInfo().usernameiçindeki kullanıcı adı- Host adı
- OS type, release, platform, architecture
- Süreç PID’si ve tam
process.argv - Node sürümü
- Şifreleme yapısı da içeriyor
- Yerelde RSA-2048 anahtar çifti oluşturma
- Rastgele AES-256 oturum anahtarı
aes_pskoluşturma - Sonraki trafik AES-256-CBC ile şifreleniyor ve HMAC-SHA256 bütünlük etiketi ekleniyor
- Desteklenen komutlar uzaktan erişim truva atı düzeyinde işlevler sunuyor
env:process.env’i JSON dizgesine dönüştürüp göndermeupload: Rastgele bir dosya yolunu okuyup dışarı sızdırmadownload: Saldırganın sağladığı baytları yazılabilir bir yola kaydetmespawn: İsteğe bağlı shell genişletmesiyle rastgele süreç çalıştırmals,cd,pwd,cp,mv: Genel dosya sistemi işlemleridns: Belirtilen resolver üzerinden rastgele ad çözümlemedismantle: Kendini kaldırma
İhlal göstergeleri ve acil müdahale
- Payload içeren görüntü, VirusTotal üzerinde hiçbir AV motoru tarafından tespit edilmedi
- Çalıştırdıysanız sistemi hemen ağdan ayırmalısınız
- Kimlik bilgileri başka bir cihazdan değiştirilmelidir
- Çerezlerin ve parolayla korunan sırların da ihlal edildiği varsayılmalıdır
- PinpinRAT ile ilgili ihlal göstergeleri şunlardır
- C2:
89.124.107.161:80 - Windows zamanlanmış görevi:
PinpinWrappedJs - macOS süreç kılığı:
com.apple.WebKit.Networking - Ortam değişkenleri:
NODT_PAYLOAD_PATH,NODT_PAYLOAD_ARGS - PNG chunk guard’ı:
WASMPACK(wAsm) PINPIN_NO_AUTOSTART=1: persistence’ı durdururmutex.jsiçeren cronjob: Yalnızca RAT yetkisi olduğunda var olabilir ve macOS’ta bulunmayabilirtypescript.jsanchor dizgesi:12ff4b51,ticket-harbor-tsc-shim-anchor- Payload içeren
typescript+5.9.2.patch - Artifact dizinleri:
- macOS:
~/Library/Caches/runtime-cache/.cache-<randomhex>/ - Linux:
/tmp/.cache-<randomhex>/ - Windows:
%TEMP%\.cache-<randomhex>\ - İçinde
payload.jsvemutex.jsbulunur
- macOS:
- C2:
Sonradan fark edilen uyarı işaretleri
- Mesajlarda dikkatli bakınca LLM izleri gibi görünen ifadeler vardı
- LinkedIn profili ilk bakışta normal görünüyordu; ancak derece·sertifika sıralaması tuhaftı ve gerçek etkinlik de yoktu
- Web sitesindeki sosyal medya bağlantılarının gerçek geçmişi vardı, ancak ad Kasım 2025’te değiştirilmişti
- Paylaşımlar düşük özgüllükteydi ve şirketlere yönelik belirsiz övgülere yakındı
- Şirket web siteleri gösterişliydi ama gerçek varlıkları neredeyse yoktu
- Saldırgan resmi takvim daveti göndermedi; yalnızca saat ve Google Meet bağlantısı iletti
- Görüşme boyunca kamera kapalıydı ve yolda olduğunu söyledi
- Singapur merkezli VC, CEST saat diliminde faaliyet, Kanadalı geliştiriciyi hedefleme ve ABD’li müşterileri hedefleyen
.ccdomain’i birlikte ortaya çıktı- Uzaktaki bir kuruluşun güvenilirliğini doğrulamak daha zordu
- Tek tek işaretler net değildi; ancak birden çok sarı ışık bir araya geldiğinde kırmızı ışık sayılabilecek bir örüntüydü
Saldırının arkasındaki aktör ve kapsam
- Arkadaki aktör kesin olarak belirlenemiyor
- Saldırı geliştiriciyi hedefliyordu ve sahte kişi, ikna edici kapak hikâyesi, birden çok sahte web sitesi, sabırlı bir zaman çizelgesi ve incelikli
gittuzakları içeriyordu - 2026’da çeşitli aktörlerin kullandığı “sahte görüşme dolandırıcılığı” akışıyla örtüşüyor
- Reddit’teki Rust topluluğunda da benzer şekilde hedef alındığı belirtilen bir vaka anıldı
- Aynı yöntem Rust deposunda tuzak bir
build.rsbetiğiyle kurulmuş olsaydı, geliştirici iş akışına bu kadar yakın olduğu için kandırıcı olabilirdi
1 yorum
Lobste.rs yorumları
Başlıkta bunun devlet destekli bir saldırgan olabileceğinin varsayılması kafa karıştırıcı. Burada o düzeyde bir hazırlık ya da karmaşıklık gerektiriyor gibi görünen bir şey yok.
Olasılığı hayal edebilirim, ama diğer senaryolar kadar makul görünüyor ancak.
Yine de neredeyse kesinlikle devlet destekli bir saldırgan olmadığını düşünüyorum. Bu tür saldırılar artık o kadar zor değil.
Bir hafta önce blog yazımda anlattığım varsayımsal örnekle bu saldırının benzer olması gerçekten tesadüf: the hypothetical I describe in my blog post from a week ago
Teknolojiden anlayan uzmanların bile kandırılabileceğine örnek olarak, makul görünen birkaç saldırıdan birini seçmiştim sadece. İnsanları hedef alan çeşitli sofistike dolandırıcılıkların arttığını görmüştüm, ama mülakat dolandırıcılığı diye bir akımın sürdüğünü bilmiyordum. Bu yüzden bu saldırıyı öğrenince biraz ürperdim.
Geçen hafta Lua Ventures’tan D____ S_____ tarafından bana da aynı türden bir mülakat teklifi geldi. Çoğu işe alımcı spam’i gibi yok saydım; iyi ki de öyle yapmışım.
Birkaç gün ya da birkaç hafta önce buna benzer bir gönderi vardı sanki.
Benzer birkaç yazı varmış gibi geliyor.
“Gerçek bir e-posta gibi görünüyordu” denmesine şaşırdım. O kadar bariz LLM tarafından üretilmiş cümleler ki ikinci cümleden itibaren şüphelenirdim.