Snyk güvenlik araştırmacıları, Cursor.com’u hedef alan kötü amaçlı NPM paketleri yayımladı
(sourcecodered.com)- npm’e yüklenen birden fazla paket, Cursor.com’u hedef aldığı düşünülen kurulum betikleri içeriyordu ve kurulum sırasında sistem bilgilerini harici bir web servisine gönderiyordu
- Dağıtımı yapan kişi npm kullanıcısı sn4k-s3c idi ve
cursor-retreival,cursor-always-local,cursor-shadow-workspacegibi Cursor iç paketlerini çağrıştıran adlar kullandı - Paketlerin topladığı
envçıktısında AWS anahtarları, npm token’ları, GitHub kimlik bilgileri gibi hassas ortam değişkenleri bulunabileceğinden etkinin kapsamı büyüyebilir - OpenSSF package analysis scanner paketleri kötü amaçlı olarak tanımladı ve OSV, MAL-2025-27, MAL-2025-28, MAL-2025-29 olmak üzere 3 uyarı oluşturdu
- npm meta verilerinde, yayımlayıcı olarak Snyk Security Labs’in snyk.io e-posta adresi görünüyordu; daha sonra bir Snyk araştırmacısı paketleri kaldırdı ve Snyk bir blog yazısıyla yanıt verdi
Cursor’u hedef aldığı düşünülen npm paketleri
- SourceCodeRed’in kötü amaçlı paket tespit sürecinde npm’e yüklenen birden fazla paket belirlendi
- Paket adları, Cursor ile ilişkili iç paketleri akla getiren bir biçimdeydi
cursor-retreivalcursor-always-localcursor-shadow-workspace
- Dağıtıcı, npm kullanıcısı sn4k-s3c olarak görünüyordu
- Paket listesine
https://www.npmjs.com/~sn4k-s3cadresinden bakılabileceği belirtildi
Kurulum sırasında gerçekleştirilen işlemler
- Paketler kurulduğunda sistem verilerini toplayıp saldırganın kontrolündeki bir web servisine gönderiyordu
- Ekran görüntüsüne göre paketler
envkomutunun çıktısını alıyordu envçıktısı, sistem ayarlarıyla birlikte hassas ortam değişkenlerini de içerebilir- AWS anahtarları
- npm token’ları
- GitHub kimlik bilgileri
- Diğer hassas ortam değişkenleri
- Sonuç olarak yalnızca kurulumla birlikte yerel ortam bilgileri harici tarafa sızdırılabilir
Bağımlılık karışıklığı olasılığı ve tespit sonuçları
- Bu tür paketler, belirli bir şirketi hedef alan dependency confusion saldırılarında sık görülür
- Cursor.com’un bir bug bounty programı olup olmadığı veya somut arka plan doğrulanmadı
- SourceCodeRed, Cursor’un
cursor-always-local,cursor-retrieval,cursor-shadow-workspacegibi özel npm paketlerine sahip olabileceğinden şüphelendi - Saldırgan, bir Cursor çalışanının yanlışlıkla herkese açık paketi kurup verileri göndermesini ummuş olabilir
- OpenSSF package analysis scanner bu paketleri kötü amaçlı olarak tanımladı ve OSV 3 kötü amaçlı yazılım uyarısı oluşturdu
-
MAL-2025-27
-
MAL-2025-28
- MAL-2025-29
- İlgili OSV listesi
https://osv.dev/list?q=cursor&ecosystem=npmadresinde yer alıyor
-
Yayımlayıcı meta verileri
- npm paket meta verilerine göre yayımlayıcı, Snyk Security Labs ekibine ait snyk.io e-posta adresini kullanıyordu
- Bu yayımlayıcı e-posta meta verisinin taklit edilemeyen bir alan olduğu belirtildi
authoralanı belirli bir Snyk çalışanından söz ediyorduauthoralanı taklit edilebilir olsa da, yayımlayıcının doğrulanmış bir Snyk e-postası olması nedeniyle bunun gerçekten Snyk kaynaklı olduğu yönünde bir çıkarım yapıldı
Kullanıcıların alabileceği önlemler ve sonraki güncellemeler
- SourceCodeRed npm’i bilgilendirdi ancak o sırada paketlerin henüz kötü amaçlı olarak işaretlenmediği aktarıldı
- Pek çok yazılım tedarik zinciri güvenlik aracı, bir paketin kötü amaçlı olduğunu bilmeden engelleme yapamaz
- npm paketlerinin gelişigüzel kurulmamasi tavsiye ediliyor
- Söz konusu paketler yalnızca
package.jsonileindex.jsveyamain.jsolmak üzere iki dosya içeriyordu; bu da şüphe işaretlerinden biri sayılabilir - 15 Ocak 2025 güncellemesine göre bir Snyk araştırmacısı, blog yazısının yayımlanmasından sonraki gün Cursor ile ilgili paketleri kaldırdı
- 14 Ocak 2025’te The Register konuyla ilgili bir haber yayımladı:
https://www.theregister.com/2025/01/14/snyk_npm_deployment_removed/ - Aynı gün Snyk de blogunda bir yanıt yayımladı ve özünde kendilerinin bir hatası olmadığını savundu:
https://snyk.io/blog/snyk-security-labs-testing-update-cursor-com-ai-code-editor/
1 yorum
Hacker News görüşleri
[Düzeltme: Aşağıdaki Cursor geliştiricisinin yanıtına bakınca bunun Cursor tarafından onaylanmış olmadığı anlaşılıyor] Cursor içinde söz konusu paketlerin bulunduğu özel bir NPM registry var ve NPM’in çalışma biçimi nedeniyle saldırganın aynı paketleri genel registry’den çektirmesi kolaymış gibi görünüyor
Muhtemelen bir Snyk çalışanı, Cursor build’inin bir bölümünün bu şekilde yanlış yapılandırıldığını buldu ya da bundan şüphelendi ve bir kavram kanıtı olarak paketi yayımladı. Paket açıklamasında “for Cursor” yazdığını görünce bunun için tutulduklarını sanmıştım
Eğer durum buysa burada çok büyük bir şey yok; asıl mesele özel registry’yi atlayan bir yanlış yapılandırmayı göstermekse, güvenlik araştırmacısı kavram kanıtı için özel NPM registry kullanamazdı
Özellikle birçok proxy, en güncel paket sürümü daha yüksekse özel registry yerine genel registry’yi seçer: https://snyk.io/blog/detect-prevent-dependency-confusion-att...
Bunu VS Code ile aynı şekilde ele alıyoruz: https://github.com/microsoft/vscode/tree/main/extensions
Snyk’yı biz tutmadık; bunu gördükten sonra onlarla iletişime geçtik ve özür aldık. Tam olarak ne yapmaya çalıştıkları doğrulanmadı ama birinin dependency confusion zafiyeti olduğundan şüphelenmiş olması kulağa mantıklı geliyor. Yine de genel NPM üzerinden gerçekten ortam değişkenlerini göndertmiş olmaları bana oldukça sorumsuzca geliyor
envkomutunun çıktısının tamamına erişim vermek, çoğu kişi için büyük bir sorun olurduİlginç olan, Snyk kurucu ortaklarından biri Cursor’a rakip bir şirket kurdu
https://www.tessl.io/ https://techcrunch.com/2024/11/14/tessl-raises-125m-at-at-50...
Umarım ortada bir usulsüzlük yoktur
Artık tüm geliştirmeyi sanal makine içinde ciddi ciddi yapmam gerekecek gibi geliyor. Proje başına bir VM. Ben fark etmeden hata yapıp güvenliği bozmanın çok fazla sinsi yolu var. Tek tesellim, çalınacak sırları ya da serveti olmayan isimsiz biri olmam
IDE, eklentiler, geliştirme yardımcı araçları, dil kütüphaneleri, işletim sistemi paketleri gibi fazlasıyla çok koda körü körüne güveniyoruz
Birkaç yıl önce çalıştığım bir yerde dizüstünde web tarayıcısı ve geliştirme araçları yasaktı. Tarayıcı gerekirse Citrix üzerinden kullanmak gerekiyordu; kod yazmak gerekirse ya VDI kullanılıyor ya da araçlar bir VM içinde çalıştırılıyordu
O zamanlar bu yaklaşım neredeyse delilik gibi görünüyordu ama giderek daha iyi anlıyorum
NVIDIA sanallaştırılmış GPU özelliklerini kurumsal kartların arkasına kilitlediği için, etkisiz komut çevirilerine bel bağlamak zorunda kalıyorsunuz
Diğer VM ek yüklerinin neredeyse hepsine katlanabiliyorum ama takılan, tepki vermeyen GUI ergonomi açısından beklenenden daha kötü etki yapıyor ve garip şekilde diğer performansı da aşağı çekiyor
En azından Linux üzerinde Linux sanallaştırırken bu sorun çözülse, her şeyi sanallaştırma seçeneği çok daha gerçekçi olurdu
Daha somut söylersem, eski bir Mac’ten M1’deki Asahi Linux’a Go ve Zig geliştirme ortamını taşıyorum; daha TrueCrypt ve Little Snitch alternatifleri bulmakta zorlanıyorum. Bu VM araçları şifrelenmiş VM’leri ve güvenlik duvarı kurallarını destekliyor mu? Burada Vagrant’tan bahsedilmiş ve ağ yalıtımını bir ölçüde çözecek gibi duruyor ama onun dışında ne önerilebilir?
VM beni koruyabilir ama ürettiğim yazılımın kullanıcılarını korumaz. Ben ancak koruyucu kıyafet giyince dokunabildiğim bir ürünü müşteriye gönderip onların korumasız şekilde güvenle kullanmasını nasıl bekleyebilirim?
Benim istediğim ortam bu değil
Şu anki çözümüm bağımlılıkları aşırı seçici davranarak belirlemek. Daha açık söylemek gerekirse, projelere ya da şirketlere değil yalnızca insanlara güvenmek gerektiğini düşünüyorum. Kolay değil ama şimdilik daha iyi bir alternatif göremiyorum
Proje başına basit bir dot dosyasına dosya sistemi bind’lerini yazıyorum; çalışırken yeni bir terminal açıldığında o dot dosyasına göre otomatik olarak yalıtılıyor. Zihinsel yükü çok düşük ve neredeyse kusursuz biçimde entegre oluyor. Birçok geliştiricinin benzer script’leri vardır diye düşünüyorum. Geçmişte böyle bir proje aradım ama bulamadım; ya fazla basit olduğu için projeye dönüşmemiştir ya da başkalarının buna ne dediğini bilmiyorumdur. Başvurulacak bir şey olsa iyi olurdu
Ağ erişimini kısıtlamıyorum. Tüm trafiği kaydedip otomatik bir man-in-the-middle proxy kuran denemeler yaptım ama sıradan kullanıcı kullanımı için yeterince rahat değildi. Elbette çekirdek saldırı yüzeyi hâlâ duruyor. Yine de asıl kaygım dosyaların okunması ya da yok edilmesi
Yazıda katılmadığım nokta, “NPM paketlerini körü körüne kurmamak iyi olur ve paketin şüpheli olup olmadığını gösteren sinyaller vardır. Bu paketlerde yalnızca
package.jsonileindex.jsveyamain.jsadlı iki dosya bulunuyor; bu da normal olup olmadığını anlamaya yarayan işaretlerden biridir” kısmıBu, üst düzey paketler için bir ölçüde geçerli olabilir ama geçişli bağımlılıkların tamamını incelemek neredeyse imkânsız
400 bağımlılığı olan bir paket alıyorsan, bunun yüzey alanının %10’unu bile nasıl düzgün kontrol edeceksin? https://gist.github.com/anvaka/8e8fa57c7ee1350e3491#top-1000...
id_rsadosyasına erişememesi meselesini — gayet iyi çözersinSnyk, açık anahtarları değiştirmeden önce duyuru yapmadan doğrudan değiştiren bir şirket aynı zamanda: https://github.com/snyk/cli/pull/5649
Proje GitHub dışı bir kod barındırma hizmetine taşınırsa “abandoned” olarak işaretliyorlar ve npm/PyPI’de yeni sürümler çıksa bile proje terk edilmiş olarak kalıyor
Bence yetkinlikleri itibarları kadar yüksek değil
Ayrıca bir Snyk satış temsilcisi beni e-postayla aşağıladı. Görünüşe göre ürünlerini satın almakla ilgilenmemen, yalnızca güvenlik açığı dolu yazılım kullanabilen beceriksiz bir geliştirici olduğun anlamına geliyor
Sigorta şirketleri güvenlik kontrol listesi maddeleri doldurulsun diye baskı yaptığı için şirketlerin satın aldığı, tamamen tersine dönmüş bir yazılım gibi görünüyor
Codeberg ilginç görünüyor; bakım yükünü kaldırabiliyorsan Forejo gibi self-hosted seçenekler de iyi duruyor
Snyk hakkında kibirli oldukları dışında pek bir şey duymamıştım; oldukça ilginç bir bakış açısı
Daha fazla bağlam yoksa, bu Snyk açısından da iyi görünmüyor. Ya bir çalışan NPM ile kendi hizmetlerini gerçek ortamda test etti ya da Cursor’a yönelik meşru bir denetim yürütürken herkese açık kaynakları kullanmamak için gerekli kontrol ve prosedürler eksikti
Snyk testine bir white hat denetimi gibi görünüyor.
oastify.com, Burp Collaborator’ın varsayılan sunucusu olduğu için tespit edilmiş gibi duruyorTest için özel bir npm deposu kullanılmalıydı ve yerelde üzerine yazmak zor değil. Kendi Collaborator sunucuları da kullanılmalıydı
console.logyazdırmak,npm installişlemini başarısız kılmak ya da payload’u dışarı çıkarmayan bir yöntem kullanmak yeterli olurduGörünüşe göre NPM, güvenlik sektöründe iş yaratıyor. Düzeltilemeyecek kadar dağınık bir karmaşa ve umarım JSR gibi rakipler kurumlar üzerinde yeterli baskıyı kurar
Aslında DORA ve NSIS gibi düzenlemelerin giderek daha fazla üçüncü taraf paket denetimi gerektirmesi daha olası. Bu, kritik sektörlerde yazılım geliştirme biçimini değiştirmeye zorlayacak. Ayrıca LLM çağında dış paket kullanımının çok daha azalacağını düşünüyorum. OpenAPI tanımı üretmek gibi işler için neden dış paket getiresiniz? Bir LLM, bir iki saatlik kurulumla ihtiyaç duyduğunuz CLI script’ini yazabilir. Aynı şekilde, kodun sıkıcı kısımlarını doğrudan otomatik üretmek için LLM kullanmak zorunda da değilsiniz; bunun yerine bu işleri yapan CLI araçları yazdırabilirsiniz. Böylece dış etkenlere bağımlı olmazsınız ve bu CLI araçlarının berbat kovboy kodu olma ihtimali neredeyse garantidir, ama çıktıyı aracı törpüleyerek istediğiniz şekle sokabilirsiniz
Go gibi gerekli şeyleri standart pakete dahil eden dillere bakınca, sadece standart kütüphaneyle çok kolay şekilde pek çok şey yapabildiğiniz bir dünya görüyorsunuz
Konudan biraz sapıyor ama, Snyk’in kendi araç ve hizmetleri için düzgün bir SBOM alan oldu mu? Bunu sormamın nedeni, şirketimize SBOM oluşturan bir çözüm satmaya çalışmaları
Para verseler bile kuracağımı sanmıyorum. Unit 8200 sürekli kurucu çıkarıp fon sağladığı için, tıpkı NSA gibi daha en baştan kapıdan içeri ayağını sokmuş bir yapı hissi veriyor
Snyk Research Labs, yaygın yazılım paketlerini test edip araştırarak topluluğa düzenli katkı sağlıyor. Cursor üzerine yapılan bu araştırma kötü niyetli değildi ve paketin içinde Snyk Research Labs ile araştırmacının iletişim bilgileri bulunuyordu. Bazı VS Code uzantılarındaki dependency confusion durumunu çok spesifik olarak inceliyorduk ve söz konusu paketler geliştiricilerin doğrudan kurması gereken türden değildi
Snyk, sorumlu ifşa politikasını izliyor. Bu paketi kimse çekmedi ama biri çekmiş olsaydı hemen gerekli takibi yapardık
Buna verdikleri yanıt, vurulan kişinin cenazesine özür mektubu göndereceklerini söylemeye benziyor. “İyi niyetli” olsa bile kimlik bilgileri ihlal edilmişse, o kişi zaten ihlal edilmiştir ve kötü niyetli bir saldırgana maruz kalmış gibi aynı şekilde müdahale etmek gerekir
Bu, kötü niyetten ayırt etmenin zor olduğu kadar ona yakın
Ayrıca, bir Snyk paydaşının şu anda Cursor’a rakip bir ürün çıkarmaya çalıştığını da herkes hatırlamalı. Bu da iyi niyet varsaymayı çok daha zorlaştırıyor
envçıktımı almasını istememÜstelik Cursor’a rakip bir ürünle çıkar çatışması varken çok daha dikkatli olmaları gerekirdi. Hem karar alma süreci hem de verdikleri yanıt berbattı