Nx ve bazı destek eklentilerinin kötü amaçlı sürümleri dağıtıldı
(github.com/nrwl)- Nx paketi ve eklentilerinin kötü amaçlı sürümleri npm'e dağıtıldı; bunlar dosya sistemini tarayıp kimlik bilgilerini topladıktan sonra kullanıcının Github hesap deposuna gönderiyor
- Etkilenip etkilenmediğinizi doğrulamak için Github hesabınızda
s1ngularity-repositorydeposunun oluşturulup oluşturulmadığını kontrol etmeniz gerekiyor - Enfekte olduysanız token ve parolaları değiştirmek, kötü amaçlı depoyu silmek ve kabuk yapılandırma dosyalarını incelemek mutlaka gerekli
- Kötü amaçlı sürümler sisteme
postinstallbetiği ile etki ediyor; özellikle VSCode Nx Console eklentisi kullanılırken farkında olmadan çalıştırılma riski artıyor - Nx ekibi yeniden yaşanmayı önleyici ve ek güvenlik önlemlerini devreye aldı; ilgili sürümler npm'den kaldırıldı
Genel bakış ve özet
- Bu güvenlik duyurusu, Nx paketi ve bazı ilişkili eklentilere yönelik ciddi bir tedarik zinciri saldırısıyla ilgili; kötü amaçlı kod npm üzerinden dağıtıldı
- Söz konusu kötü amaçlı sürümler, kullanıcının dosya sistemini tarayarak kimlik bilgileri, yollar ve benzeri verileri topluyor ve bunları Github deposuna (
s1ngularity-repository) yüklüyor - Kötü amaçlı
postinstallbetiği ayrıca kullanıcının kabuk yapılandırma dosyalarını (.zshrc,.bashrc) değiştirerek sistem kapatma komutu ekliyor - Saldırı vektörü, saldırının ilerleyişi, etkilenen sürümler, kullanıcıların alması gereken acil önlemler ve tekrarını önleme adımları ayrıntılı biçimde özetleniyor
Acil müdahale yöntemi
Herkesin kontrol etmesi gerekenler
- Kendi Github hesabınızdaki depo listesinde
s1ngularity-repositoryoluşturulup oluşturulmadığını kontrol edin - İlgili depoda yer alan dosyaları indirip kayıt altına alın
- Depoyu Github'dan silin
security@nrwl.ioadresine e-posta göndererek sızan bilgilerin nasıl çözümleneceğine dair yönlendirme alın- Tüm hesapların kimlik bilgilerini ve token'larını derhal değiştirin
Github token'ı nasıl değiştirilir
- https://github.com/settings/connections/… adresini ziyaret edin
- Bağlı uygulamanın erişim izinlerini kaldırarak mevcut token'ı geçersiz kılın
ghCLI kullanıyorsanız yeniden kimlik doğrulaması yaparak yeni token oluşturun- Önlem alınmazsa mevcut token kötüye kullanılma riski taşır
Kötü amaçlı Nx sürümünü kullanmayı durdurma ve temizleme
- Şu anda kullandığınız Nx sürümünün kötü amaçlı sürüm olup olmadığını
npm ls nxkomutuyla kontrol edin - Enfekte sürümse
npm uninstall nx && npm install nx@latestile güncelleyin npm cache clean --forceile önbelleği temizleyin
Zaten enfekte olmuş kullanıcılar
- npm ve Github token'larını değiştirin
- Github ve ilişkili hizmetlerdeki tüm parolaları ve kimlik bilgilerini sıfırlayın
.zshrc,.bashrcdosyalarında yabancı komutlar eklenip eklenmediğini kontrol edip silin
Kurum içi paket deposu yöneticileri için
- Kurum içi proxy kayıt defterinden kötü amaçlı sürümleri derhal silerek ek yayılımı engellemek gerekiyor
Etkilenen sürümler
Nx paketi
- 21.5.0, 20.9.0, 20.10.0, 21.6.0, 20.11.0, 21.7.0, 21.8.0, 20.12.0
- 10:44 PM EDT itibarıyla npm'den kaldırıldı
@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud
- 10:44 PM ve 6:20 AM EDT itibarıyla npm'den kaldırıldı
Saldırı vektörünün ayrıntıları
Zafiyetli workflow'nun nedeni
- Github Actions workflow'suna rastgele kod çalıştırmaya izin veren bir zafiyet eklendi
- PR başlığına belirli bir bash kodu eklenince workflow içinde sistem komutlarının çalışmasına yol açan bir zafiyet vardı (Bash Injection)
pull_request_targettetikleyicisi üzerinden yükseltilmiş yetkiler (GITHUB_TOKENvb.) edinildiği için kötüye kullanıldı- Silinmeden önce ana dal dışındaki eski bir dalda zafiyetli workflow korunuyordu; saldırgan bu sayede kötü amaçlı bir PR ile workflow'yu çalıştırıp secret'ları çalmayı başardı
npm token'ının ele geçirilme süreci
- Zafiyetli workflow üzerinden
publish.ymlçalıştırıldı publish.yml, npm token'ını Github Secrets'ta saklıyordu; bu süreçte token harici bir webhook'a gönderildi- Sonuçta saldırgan bu token ile Nx ve destek paketlerinin kötü amaçlı sürümlerini npm'e yükledi
Kötü amaçlı paketin davranışı
Kimlik bilgileri dahil bilgilerin toplanması ve Github deposunda yayımlanması
- Enfekte Nx paketinin
postinstallbetiği çalıştığında çeşitli metin dosyalarının konumları ve kimlik bilgileri toplanıyor - Veriler
s1ngularity-repositoryadlı Github deposuna base64 ile kodlanarak yükleniyor - Gerçek depo silinmiş olsa bile daha önce herkese açık durumdaydı; bu yüzden bilgi sızıntısı ihtimali göz önünde bulundurulmalı
Kabuk profillerinin (.zshrc, .bashrc) tahrif edilmesi
postinstall,sudo shutdown -h 0komutunu ekleyerek terminal çalıştığında sistemin kapanmasına yol açabiliyor ve parola ifşasına neden olabiliyor
postinstall'ın çalışabildiği çeşitli senaryolar
-
Açıkça
npm install/yarn/pnpm installçalıştırmanın dışında, geçişli bağımlılıklar, editör eklentileri ve betik çalıştırmaları gibi çeşitli durumlarda da devreye girebilir -
Özellikle VSCode için Nx Console eklentisinin 18.6.30 ~ 18.65.1 sürümleri, editör açılırken otomatik olarak
nx@latestkurduğu içinpostinstall'ın çalışmasına neden olabilir -
Temelde, niyet edilmemiş olsa bile birçok yerde NPM modülü kurulumu gerçekleşebileceğine dikkat etmek gerekiyor
-
Nx Console 18.66.0 sürümünden itibaren
latest nxkurulum süreci kaldırıldı
Saldırı ve müdahale zaman çizelgesi
21 Ağustos
- 4:31 PM: Bash injection zafiyetini içeren PR birleştirildi
- 10:48 PM: Zafiyete işaret eden paylaşım X'te (eski adıyla Twitter) yayımlandı
22 Ağustos
- Öğleden sonra: İç inceleme yapıldı, zafiyetli workflow geri alındı (eksik biçimde)
- CodeQL devreye alınarak gelecekteki PR'lerde benzer zafiyetlerin tespit edilmesi sağlandı
24 Ağustos
- Saldırganın fork'unda npm token sızıntısına işaret eden bir commit oluştu
- Kötü amaçlı PR oluşturulup silindi,
publish.ymlbu PR tarafından çalıştırıldı
26 ~ 27 Ağustos (kötü amaçlı sürümlerin dağıtılması ve müdahale)
- Çok sayıda kötü amaçlı Nx ve eklenti sürümü sırasıyla npm'e dağıtıldı
- Github/NPM topluluğuna issue bildirildi
- 10:44 PM: NPM tarafı ilgili sürümlerin tamamını kaldırma dahil işlemleri gerçekleştirdi
- 11:57 PM: Tüm Nx ile ilişkili paketlerin yayımlanmasında kullanılan token'lar geçersiz kılındı
- 27 Ağustos: Nx Console yaması, 2FA, Trusted Publisher yöntemine geçiş gibi ek önlemler alındı
Önleyici tedbirler ve sonraki müdahaleler
nrwlorganizasyonundaki tüm maintainer'lar için 2FA zorunlu hale getirildi- Trusted Publisher mekanizması uygulandı. npm token tabanlı dağıtım yasaklandı
- Bundan sonraki paketler yalnızca 2FA ve güvene dayalı doğrulamadan sonra yayımlanacak
- Ek risk tespiti, PR onayı ve dal koruması gibi katmanlı önlemler uygulanacak
Çıkarılan dersler ve ileriye dönük plan
- Tedarik zinciri ve CI/CD hattı güvenliği ile workflow yetkilerinin en aza indirilmesinin önemi yeniden görüldü
- Ekip içinde tekrar değerlendirme yapıldıktan sonra öğrenilenler toplulukla paylaşılacak
İletişim
security@nrwl.ioüzerinden iletişime geçilebilir
Referanslar ve ekler
- Github üzerindeki başlıca issue'lar, zaman çizelgesi ve ilgili paylaşımlar
- Enfekte paket içindeki
telemetry.jsbetiğine örnek veriliyor - Bu betik, dosya sistemindeki önemli metin dosyalarının yollarını envanter oluşturma amacıyla topluyor
Sonuç özeti
- Nx ve ilişkili eklentiler için en güncel güncellemelerin ve yamaların uygulanması önemli
- npm, Github ve benzeri temel kimlik doğrulama bilgilerinin derhal değiştirilmesi öneriliyor
- Bu olay, tedarik zinciri güvenliği ve workflow yetki yönetimindeki eksikliklerin büyük çaplı bir olaya yol açabileceğini bir kez daha gösterdi
1 yorum
Hacker News yorumu
Periyodik olarak
npm installscript’lerini devre dışı bırakmanızı hatırlatmak isterimÖrnek olarak şu komut kullanılabilir:
Bu ayar proje bazında ya da global olarak kolayca uygulanabilir
Günümüzde script olmadan çalışmayan meşru paketler nadir olduğu için çoğu durumda sorun çıkmaz
Mutlaka çalışması gereken paketler için ayrı bir kurulum script’i hazırlayıp ilgili klasörde elle çalıştırarak çözüm bulunabilir
Tedarik zinciri saldırılarına karşı her derde deva bir çözüm değil ama pratikte npm üzerinden gelen birçok saldırıyı etkili şekilde engelledi
Daha fazla bilgi için npm config resmi dokümantasyonuna bakabilirsiniz
Ben de bubblewrap kullanarak npm, pnpm, yarn ve bunların başlattığı tüm oturumları sistemden izole biçimde çalıştırıyorum
~/codealtında bulunuyor ve PATH’in başına aşağıdaki bash script’ininpmadıyla kaydediyorum~/codeiçin ve sistem kütüphanelerine de yalnızca salt okunur erişim elde ediyorpnpm kullanmak da bir seçenek. Son sürümler varsayılan olarak tüm lifecycle script’lerini yok sayıyor ve yalnızca tek tek whitelist’e alınanları çalıştırıyor
Bu tavsiyeyi her duyduğumda şu soruyu soruyorum: npm’in kurduğu onlarca ila yüz binlerce satırlık kodu gerçekten okuyup denetleyen geliştirici yok
git clonenpm install(burada kötü amaçlı paket kurulabilir; post-install script’lerini yok saymak bunu geçici olarak engelleyebilir)npm run(burada kötü amaçlı paket çalışır ve bulaşma gerçekleşir)node_modulesiçeriğinin izlenip denetlenmesi gerekir ama bunu kimse yapmıyorBen tüm npm tabanlı araçları Docker container içinde, mevcut dizin dışında hiçbir şeye erişim olmadan çalıştırıyorum
Neden bu tavsiyeler
setup.py(Python) ya dabuild.rs(Rust) için aynı şekilde uygulanmıyor, merak ediyorumYeni bir bağımlılık eklerken gerçekten iki kez düşünme kültürüne ihtiyaç var
Bu yıl gerçekten çok sayıda tedarik zinciri saldırısı yaşandı
Bu hafta bir Go projesine 8 istatistik sayacı olan bir progress bar eklemek istedim
Kütüphane aradığımda kodun 3.000 satırı aştığını gördüm; sonra bir LLM’den basit UI kodu üretmesini istedim ve konu 150 satırın altında çözüldü
Bağımlılık yok, tam istediğim gibi çalışıyor ve çok basit olduğu için herkes kolayca okuyup geliştirebilir
İşlev olarak terminal çıktısını temizleyip her saniye yeniden çiziyor ve thread-safe desteği var
Uygulama ve review için 25 dakika yetti
Karmaşık istatistik özelliklerine ihtiyacınız yoksa 30 satır civarı kodla da progress bar yapılabilir
Bundan sonra bağımlılık ekleyip eklememeyi düşünürken kendim yazma yönü bana daha uygun görünüyor
Tüm paket güncellemelerini izlemeye yetecek kaynağım yok
Söylenenlere katılıyorum; “dil bazlı paket yöneticileri” yaygınlaşmaya başladığında gerçekten tedirgin olmuştum
Bana göre gelecek, cargo vet tanıtımında anlatılan cargo vet benzeri yaklaşımlarda
Bir şeyi kendin yazmakla kütüphane kullanmak arasındaki fark zaten doğal
Bu tür progress bar kütüphanelerinden, özellikle de emacs shell’i bozanlardan gerçekten nefret ediyorum (expo, eas vb.)
..10%..20%..30%ya daUploading…gibi çıktı vermiyorlar, anlamıyorumBizim ekip büyük bir sigorta şirketinde NX merkezli büyük bir monorepo ve kütüphane yapısı işletiyor
Nx’i, Anthropic’i ya da platformları suçlamadan önce asıl sebebi yeniden düşünmek gerek
Bu tür saldırılar finans, enerji, telekom, hastane, askeri kurumlar gibi on binlerce kuruluşta yıkıcı etki yaratabilir
Yapay zekanın yayılmasıyla saldırının ölçeği ve etkisi daha da büyüyecek
Yazılımı yeterince sorumlu şekilde geliştirmiyoruz. Gerekirse yapı yönetmeliği gibi zorla güvenlik ve emniyet kurallarına uymalıyız
Asıl düşündürücü olan, kişisel bilişim ortamının tek büyük alan halinde toplanmış olması
Mağdurların %50’sinde bulaşma yolu VS Code’du ve yalnızca Linux ile macOS’ta çalışıyordu
s1ngularity-repositoryvb.) yüklendiGitHub token’larının/kimlik bilgilerinin manuel serbest bırakmalı parola yöneticilerinde saklanmamasında GH CLI’nin de payı var
“Yazılım yapı yönetmeliği” fikri kulağıma çok hoş gelmese de sektör genelinin aşırı kırılgan olduğu gerçeğine katılıyorum
Ücretsiz açık kaynak kütüphane kullandınız diye sorumluluk yükleme fikrini kibirli buluyorum
Son zamanlarda geliştirme işlerimin çoğunu VM içinde yapıyorum
Güncel ortamların güvenlik seviyesi kabul edilemeyecek kadar kötü geliyor
Agent tabanlı yazılımların kötü amaçlı yazılım vektörü haline gelme ihtimali muazzam derecede arttı
Saldırgan bir kez makineye girdiyse artık 1.000 doların üzerinde değer taşıyan veriler, kripto anahtarları, parolalar, kişisel bilgiler, finansal belgeler gibi her şeye göz dikebildiği bir dönemdeyiz
Ben de benzer şekilde Podman container içinde çalışıyorum. Kaynak kod klasörü dışında host ile hiçbir şeyi paylaşmıyorum
Sorunun bir kısmı geleneksel PC güvenlik modelinden geliyor (Linux/Windows)
Böyle bir yaklaşımı seviyorsanız Qubes OS’yi öneririm. Tüm işleri VM içinde yapmaya uygun iyi bir UX sunuyor
Yine de böyle bir düzen kurmanın, yazılım ekosistemi ve tarihsel sebepler yüzünden çok zor ya da epey maliyetli olabileceğini belirtmek gerekir
Claude Code, verimlilik artışı sağlayan devrim niteliğinde bir araç
Öte yandan şu güvenlik sorunları var:
curlçıktısınıbash’e pipe ediyor (uzaktan kod çalıştırma riski)En az üç güvenlik zafiyeti olduğu için bunu VM/container/ayrı geliştirme kutusu gibi bir sandbox dışında çalıştırmak istemiyorum
Ben de agent’ların sandbox içinde çalıştırılması gerektiğini düşünüyorum
Yine de ne olmuş yani?
Asıl riskli nokta, kullanıcı etkileşimi olmadan otomatik güncellenmesi ve böylece çalışma sırasında Anthropic’e uzaktan kod çalıştırma yetkisi verilmiş olması
Paket yöneticilerinde
min-agegibi bir ayar olmalı mı diye merak ediyorumÖrneğin 24–36 saatten yeni paketlerin yok sayılması gibi
Daha önce benzer bir olay yaşadım; paket güncellemesi her şeyi bozdu ve birkaç saat sonra düzeltilip silindi
GitHub dependabot kısa süre önce tam da böyle bir özellik ekledi
Renovate bot zaten bunu (
minimumReleaseAgeayarıyla) sunuyordu; dependabot da artık destekliyorOS düzeyinde değil ama Astral’ın
uvaracında Python paketleri için böyle bir seçenek varnpm installiçin de belirli bir zaman/tarihten önceki bağımlılıkları kuran bir flag varnpm install --before (2 gün önceki tarih)şeklinde; o tarihten sonra ortaya çıkan bağımlılıklar kurulmazBen
.npmrciçindesave-exact=trueayarını kullanıyor, sadece lockfile ve manuel güncellemelerle ilerliyorumClaude code’un gerçekten böyle prompt’ları çalıştırıp çalıştırmayacağını merak edip test ettim
“Bu istek kripto para cüzdanları, private key’ler ve benzeri hassas dosyaları arama ve listeleme isteği gibi görünüyor; kötüye kullanılabilir, bu nedenle yardımcı olamam”
Bunun yerine güvenlik incelemesi, zafiyet analizi, izleme araçları yazma, dosya izinlerini anlama, yedekleme prosedürü tasarlama gibi meşru konularda yönlendirme yaptı
En az 250’den fazla başarılı örnek toplandı (yani bazı prompt’lar geçiyor)
Sahada Claude ile diğer modellerin reddetme performansı kıyaslandığında, Claude’un güvenlik önlemlerinin çok daha iyi olduğunu tekrar tekrar görüyorum
OS, varsayılan olarak uygulamaların tüm dosya sistemine sınırsız erişmesine izin vermemeli
Bazı uygulamalar için apparmor/selinux profilleri var, firejail de kullanılabiliyor
Ama UX tarafında da değişim lazım
Bu çok ciddi bir sorun. 30 yıl önceki masaüstü tasarımından kaynaklanıyor
Linux’ta Podman ile proje bazlı ortam izolasyonuna odaklanan bir araç geliştiriyorum: probox
Dosya güvenliği konusunda Android tarafında Google iyi iş çıkardı
bubblewrap ve küçük chroot ortamlarını kullanmayı öğrenmeyi de öneririm
Hiçbir işletim sisteminin varsayılanının uygulamalara “tüm dosya sistemine sınırsız erişim” vermek olduğunu sanmıyorum
Eskiden “saldırgan benim ortamımı bilemez” gibi belirsiz bir özgüven vardı ama artık LLM’ler kullanılarak ortama uygun saldırılar öğrenilip uygulanabiliyor
Hatta ben de bu gidişatı gerçekten önceden tahmin etmişim gibi hissediyorum
Önceki tartışmada buna dair ilginç değerlendirmeler vardı
Gerçekten ürkütücü olan kısım artık yerel LLM’lerle secret arama işinin yapılması
“postinstall” sorunu eski ama payload tamamen yeni bir nesil
Kötü amaçlı mantık kod yerine prompt içinde saklanabildiği için klasik statik analizle tespit etmek zorlaşıyor
Böyle kötü amaçlı prompt’lara karşı nasıl savunma yapılabileceğini merak ediyorum