İçeriğe atla

Rehber

Slopsquatting: yapay zekâ asistanınız var olmayan bir paketi kurduğunda

Kodlama asistanları bazen saldırganların kaydedebileceği paket adları uydurur. Araştırmalar ne gösteriyor ve bir bağımlılığı bir dakikada nasıl kontrol edersiniz?

· 8 dk okuma · Yazan: vetkit ekibi

Bir robot, raftaki birbirinin aynı paketlerin arasına gizlenmiş maskeli, tuhaf bir kutuya uzanıyor; bir geliştirici onu durdurup kutuyu işaret ediyor.Bir robot, raftaki birbirinin aynı paketlerin arasına gizlenmiş maskeli, tuhaf bir kutuya uzanıyor; bir geliştirici onu durdurup kutuyu işaret ediyor.

Bir kodlama asistanından yardım istediğinizde, kodla birlikte çoğu zaman bir kütüphane de önerir. Çoğu zaman bu kütüphane gerçektir. Bazen değildir: model kulağa doğru gelen, ekosistemin adlandırma kurallarına uyan ama npm’de ya da PyPI’da hiç var olmayan bir ad üretir. Kurulum komutunu bakmadan çalıştırırsanız iki şeyden biri olur. Ya kurulum başarısız olur; bu can sıkıcıdır ama zararsızdır. Ya da birisi tam o adla zaten bir paket yayımlamıştır ve az önce onun kodunu çalıştırmışsınızdır.

Slopsquatting nedir

Slopsquatting, bu ikinci durumun adıdır: yapay zekâ modellerinin uydurmaya yatkın olduğu paket adlarını kaydetmek ve insanların onları kurmasını beklemek. Terim genellikle Python Software Foundation’ın security developer-in-residence’ı Seth Larson’a atfedilir ve saldırganların popüler paketlerin yanlış yazılmış adlarını kaydettiği typosquatting’e gönderme yapar. Fark, hatayı kimin yaptığıdır. Typosquatting’de bir insan yanlış yazar. Slopsquatting’de ise bir model yanlış adı kendinden emin bir şekilde önerir ve bir insan ona güvenir.

Risk varsayımsal değil. Geniş yankı uyandıran bir deneyde bir araştırmacı, modellerin sürekli olarak huggingface-cli adlı bir paketi önerdiğini fark etti; oysa gerçek Hugging Face aracı bu şekilde kurulmuyor. Ne olacağını görmek için bu adla boş bir paket yayımladı ve paket on binlerce kez indirildi. Paket zararsızdı. Kötü amaçlı bir paket öyle olmazdı.

Modeller ne sıklıkla paket uyduruyor

Şimdiye kadarki en kapsamlı çalışma, USENIX Security 2025’te sunulan “We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs” makalesi. Yazarlar 16 popüler modelle Python ve JavaScript’te 576.000 kod örneği üretti ve kodun başvurduğu her paketi kontrol etti. Halüsinasyon sonucu uydurulan paketlerin ortalama payının ticari modellerde en az %5,2, açık kaynak modellerde ise %21,7 olduğunu buldular ve var olmayan 205.474 benzersiz paket adı topladılar.

Makaledeki iki ayrıntı, manşetteki rakamlardan daha önemli. Birincisi, uydurulan adlar çoğu zaman tekrarlanabilir: yazarlar halüsinasyona yol açan prompt’ları on kez yeniden çalıştırdığında, bu adların %43’ü her seferinde yeniden ortaya çıktı. Öngörülebilir adlar, bir saldırganın tam olarak ihtiyaç duyduğu şeydir. İkincisi, bu adların çoğu gerçek paketlerin yanlış yazılmış hâllerine yakın değildir; bu yüzden bir yazım hatası kontrolü onları yakalamaz. Yalnızca yaklaşık %13’ü var olan bir addan bir ya da iki karakter uzaktaydı.

Modeller bu deneylerden bu yana gelişti ve bir paketi önermeden önce registry’de arama yapan asistanlar sorunu daha seyrek hâle getiriyor. Ancak daha seyrek, ortadan kalkmış demek değil; özellikle modelin az sayıda gerçek örnek gördüğü niş görevlerde.

Saldırı neden uygulanabilir

npm’e ya da PyPI’a paket yayımlamak ücretsizdir ve dakikalar sürer. Bir saldırganın herhangi bir şeyi ele geçirmesi gerekmez; yalnızca modellerin ürettiği adları tahmin edip onları önce kaydetmesi yeterli. Gerisini kurulum script’leri halleder: npm preinstall ve postinstall script’lerini varsayılan olarak çalıştırır, bir Python paketi de build edildiğinde ya da import edildiğinde kod çalıştırabilir. Bir geliştirici dizüstünde ya da bir CI runner’ında yapılan tek bir kurulum; SSH anahtarlarını, bulut kimlik bilgilerini ve ortam değişkenlerindeki token’ları açığa çıkarabilir.

Ajanlar bunu daha da keskinleştirir. Bir asistan npm install ya da pip install komutunu kendisi çalıştırabildiğinde, paket adına bakan hiçbir insan olmayabilir.

Bir paketi bir dakikada kontrol edin

Kendi seçmediğiniz bir bağımlılığı eklemeden önce onu registry’de arayın:

bash
# npm: does it exist, who publishes it, when was it first released?npm view some-package name version time.created repository.url # PyPI: same questions, from the JSON APIcurl -s https://pypi.org/pypi/some-package/json | jq '.info | {name, version, home_page, project_urls}'

Ardından birkaç hızlı soru sorun:

  • Hiç var mı? 404 dönüyorsa ad uydurulmuştur. Onu siz oluşturmayın ve “yeterince yakın” bir alternatifi de onu kontrol etmeden kurmayın.
  • Yepyeni mi? Son birkaç hafta içinde ilk kez yayımlanmış, tek sürümü olan ve geçmişi bulunmayan bir paket, özellikle adı asistanınızın önerdiğiyle eşleşiyorsa, ikinci bir bakışı hak eder.
  • Gerçek bir projeye işaret ediyor mu? Commit’leri, issue’ları ve başka kullanıcıları olan bağlantılı bir depo iyi bir işarettir. Boş ya da hiç olmayan bir depo değildir.
  • Dokümantasyonun kurmanızı söylediği paket bu mu? Doğru ad için en iyi kaynak, gerçek aracın kendi dokümantasyonudur. huggingface-cli ile dokümante edilen kurulum komutu arasındaki fark, bunun neden böyle olduğunun iyi bir örneği.

Anlamak için kurulumu çalıştırmayın

Saldırı zaten paketi kurmanızla işler. Önce registry’yi kontrol edin, sonra kurun.

İşe yarayan alışkanlıklar

  • Lockfile kullanın ve CI’da kurulumu onlardan yapın (npm ci, sabitlenmiş sürümler ve hash’lerle pip install -r); böylece build sırasında yeni bir ad içeri sızamaz.
  • Pull request’lerdeki bağımlılık değişikliklerini kod değişiklikleri kadar dikkatle inceleyin. Üç paket ekleyen bir diff, üç kez kontrol etmeyi hak eder.
  • Asistanınız yeni bir şey önerdiğinde, paketin registry sayfasının ya da resmî dokümantasyonunun bağlantısını vermesini isteyin. Uydurulmuş bir adı ortaya çıkarmanın ucuz bir yolu.
  • Ajanınız kurulumları kendi başına çalıştırabiliyorsa, ona bir izin listesi verin ya da yeni bağımlılıklar için onay şartı koyun.
  • Kurulum script’lerini varsayılan olarak devre dışı bırakmayı (npm config set ignore-scripts true) ve yalnızca ihtiyaç duyan paketler için açmayı düşünün. Bazı paketleri bozar, bu yüzden önce test edin.

Sıkıcı kısmı otomatikleştirin

Elle arama tek bir paket için işe yarar. Yüzlerce bağımlılığı olan bir depoya ya da bir asistanın geçen hafta ürettiği kodun derinliklerine gömülmüş import’lara ölçeklenmez. Bu, araçlara bırakılacak bir iş.

vetkit’in yapay zekâ kodu riskleri paketi, manifest dosyalarınızdaki bağımlılıkları ve import’ları npm ve PyPI gibi herkese açık registry’lerde arar. Var olmayan adları, hiç yayımlanmamış sürümleri ve son 30 gün içinde ilk kez yayımlanmış paketleri işaretler. Registry’lere asla kaynak kodunuz değil, yalnızca paket adları ve sürümleri gönderilir; özel registry’lerden ya da kendi workspace’lerinizden gelen paketler aranmaz. vetkit MCP sunucusu da bir paket kontrolü sunar; böylece bir asistan herhangi bir şeyi kurmadan önce bir adı doğrulayabilir.

Ne kullanırsanız kullanın ilke aynı: bir modelden gelen paket adı bir iddiadır ve iddiaları çalıştırmadan önce doğrulamak ucuzdur.

Erken erişim talep edin

Ekibinizden ve denetlemek istediğiniz depolardan kısaca bahsedin. Ekipleri küçük gruplar halinde aramıza alıyoruz; size e-postayla dönüş yapacağız.

Bu bilgileri yalnızca talebinize yanıt vermek için kullanırız. Gizlilik politikası