Hayali paket, yapay zekanın ürettiği kodun adını andığı ama gerçekte var olmayan bir yazılım bağımlılığıdır. Tehlike, bir saldırganın bu adı npm ya da PyPI gibi herkese açık bir kayıt defterinde (registry) alması, yani slopsquatting denen yöntemle başlar: önerilen paketi kuran bir sonraki geliştirici saldırganın kodunu çalıştırır.
- USENIX Security 2025'te sunulan bir çalışmada, 576.000 üretilmiş kod örneğinde başvurulan paketlerin yüzde 19,7'si var olmayan paketlerdi.
- Uydurulan adlar tekrar eder: aynı istemin on kez yeniden çalıştırılmasında adların yüzde 43'ü hepsinde geri geldi; bu da onları öngörülebilir hedefler yapar.
- Çoğu, gerçek adların yazım hatası değildir; bu yüzden yalnızca yazım hatası kontrolleri bunları yakalamaz.
- Savunma bir alışkanlıktır: yeni her bağımlılığın var olduğunu, kastettiğin paket olduğunu ve gerçek bir geçmişi bulunduğunu kurmadan önce doğrula.
- Kilit dosyaları, imza kontrolleri ve insan incelemesi saldırının fırsat penceresini daraltır; paketleri kendi başına kuran ajanlar ise genişletir.
- Barındırılan uygulama oluşturucular kurulumları kendi makinenden uzak tutar, ama uygulamanın ne yaptığını test etmek yine senin işin.
Hayali paket nedir?
Hayali paket, kod üreten bir modelin yayımlanmamış bir paketi gerçekmiş gibi sunmasıdır. Araştırmacılar bu davranışa paket halüsinasyonu diyor. Model hiçbir tereddüt belirtisi vermez: içe aktarma satırı, kurulum komutu ve fonksiyon çağrıları gerçek bir kütüphanenin satırlarıyla birebir aynı görünür; çünkü model bir kayıt defterine bakmaz, olası metni tahmin eder.
Uydurulan adların makul görünmesinin bir nedeni var. Modellerin öğrendiği kodda ve tartışmalarda paket adları tanınabilir kalıplar izler: bir üretici ya da konu, sonra bir işlev, sonra -utils, -client ya da -cli gibi bir ek. Niş bir iş için yardım istendiğinde model kalıba kusursuz uyan ama hiçbir şeye karşılık gelmeyen bir ad üretebilir. Yeniden adlandırılmış, emekliye ayrılmış ya da yalnızca sorun kayıtlarında anılmış kütüphaneler, gerçek gibi görünen daha fazla ad ekler.
Hayali bir ad kendi başına yalnızca bir hatadır. Kurulum başarısız olur, geliştirici yoluna devam eder. Biri boş adı doldurduğunda tedarik zinciri riskine dönüşür. npm ve PyPI gibi kayıt defterleri, sahiplenilmemiş bir adın altında herkesin yayın yapmasına izin verir; modellerin hangi adları uydurduğunu bilen bir saldırgan onları kaydedip bekleyebilir. O andan sonra kurulum başarılı olur ve çalışan kod saldırganın kodudur.
Bunu ilgili saldırılardan ayırmak yararlı, çünkü her biri farklı bir savunma ister:
| Saldırı | Saldırganın istismar ettiği şey | Örnek | Ana savunma |
|---|---|---|---|
| Slopsquatting | Bir yapay zeka modelinin uydurduğu ad | Bir modelin sürekli önerdiği makul bir kütüphane adını kaydetmek | Kurmadan önce varlığı ve geçmişi doğrula |
| Typosquatting | Bir insanın yazım hatası | Popüler bir paketten tek harf uzakta bir paket | Adları resmî belgelerden kopyala; farkları incele |
| Bağımlılık karışıklığı (dependency confusion) | Herkese açık yayımlanmış bir iç paket adı | Özel bir paketin gölgesini düşüren herkese açık bir paket | Kapsamlı adlar ve özel bir kayıt defteri |
| Hesap ele geçirme | Gerçek bir paketin bakımcı hesabı | Güvenilen bir kütüphaneye kötü amaçlı bir güncelleme | Kilit dosyaları, imzalar ve köken kontrolleri |
Yapay zeka paket adlarını ne sıklıkla uyduruyor?
Şimdiye kadarki en büyük çalışma, Joseph Spracklen ve arkadaşlarının 2025 USENIX Security Symposium'unda sunduğu “We Have a Package for You!”. Ekip 16 kod modeliyle 576.000 Python ve JavaScript kod örneği üretti ve başvurulan her paketi kayıt defterlerinde kontrol etti. Paket başvurularının yüzde 19,7'si var olmayan paketlere işaret ediyordu; bu da 205.474 benzersiz uydurma ad demek.
Oranlar modele göre çok değişti. Ticari modeller ortalama en az yüzde 5,2 oranında, açık kaynak modeller yüzde 21,7 oranında halüsinasyon gördü; en iyi performansı gösteren GPT-4 Turbo ise yüzde 3,59'da kaldı. Bunlar 2024 başında sıralamada öne çıkan modellerdi; daha yeni modeller daha iyi olabilir ve rakamları güncel bir puan tablosu olarak değil, riskin bir tarifi olarak görmelisin.
Bir ayrıntı, manşetteki orandan daha önemli. Araştırmacılar her uydurma adın en yakın gerçek paketten ne kadar uzak olduğunu ölçtü. Yalnızca yüzde 13,4'ü bir ya da iki karakter uzaktaydı, yüzde 48,6'sı ise altı karakter ya da daha fazla farklıydı. Yazarlar, halüsinasyonların çoğunun basit yazım hatası olmadığı sonucuna varıyor. Yalnızca popüler paketlerin yakın yazımlarını işaretleyen bir araç, hayali adların çoğunu kaçırır.
Tekrar eden hayali adlar neden hedefe dönüşür?
Uydurulan her ad rastgele olsaydı, saldırganın nişan alacağı pek bir şey olmazdı. Rastgele değiller. Araştırmacılar aynı istemleri on kez yeniden çalıştırdığında, halüsinasyonlu paketlerin yüzde 43'ü on çalıştırmanın hepsinde göründü, yüzde 58'i birden fazla göründü. Modeller olasılığı izler; bu yüzden benzer sorular benzer yanlış cevaplar üretir. Bu tutarlılık, tek seferlik bir hatayı öngörülebilir bir adrese çevirir.
Fikir herkesin gözü önünde gösterildi. Lasso Security'den güvenlik araştırmacısı Bar Lanyado, 2024'te modellerin sürekli huggingface-cli adlı bir paket önerdiğini fark etti; bu ad, resmî aracın kurulum komutuna karşılık gelmiyordu. PyPI'a bu adla boş, zararsız bir paket yükledi ve The Register'ın Mart 2024'te aktardığına göre üç ayda 15.000'den fazla indirme saydı. Alibaba'nın bir araştırma deposundaki bir README bile okurlara bunu kurmalarını söylüyordu. Yöntemin kötü amaçla kullanıldığına dair bir bulguya rastlamadığını bildirdi, ama deney bunun ne kadar az çaba gerektirdiğini gösterdi.
Güvenlik topluluğu artık bunu bilinen bir risk sayıyor. Büyük Dil Modeli Uygulamaları için OWASP İlk 10 (2025 sürümü), güvensiz kod üretimi başlığı altında “insecure or non-existent code libraries” (güvensiz ya da var olmayan kod kütüphaneleri) maddesini sayıyor ve örnek saldırı senaryolarından biri tam olarak bu: saldırganlar sık halüsinasyonla üretilen paket adlarını bulur, bu adlarla kötü amaçlı paketler yayımlar ve geliştiricilerin kurmasını bekler.
Slopsquatting saldırısı nasıl işler?
Saldırı kurbanın sistemlerine erişim gerektirmez, yalnızca sabır ister. OWASP'ın anlattığı senaryoyu izleyen saldırı dört adımda ilerler:
- Adları topla. Saldırgan popüler kodlama asistanlarına yaygın programlama soruları sorar ve kayıt defterinde bulunmayan her paket adını kaydeder.
- Tekrar edenleri ayır. Birçok çalıştırmada ve ifadede geri dönen adlar değerlidir, çünkü gerçek kullanıcılara da aynıları gösterilecektir.
- Kaydet ve gizle. Saldırgan bu adlarla paketler yayımlar. Makul bir açıklama, hatta çalışan bir kod, hızlı bir bakışta yanlış bir şey bulunmasını engeller.
- Bekle. Geliştiriciler ya da onlar adına çalışan ajanlar önerilen paketi kurar. Kötü amaçlı kod kurulum betikleriyle ya da ilk içe aktarmada çalışabilir ve o makinenin ya da derleme ortamının eriştiği her şeye ulaşabilir: belirteçler, ortam değişkenleri, dosyalar.
İki özellik bunu sonradan fark etmeyi zorlaştırır. Paketi kurban seçmiştir; bu yüzden hiçbir şey saldırı gibi hissettirmez. Ve ad hiçbir zaman meşru bir projeye ait olmadığı için karşılaştırılacak bir orijinal yoktur: bakımcı değişikliği yok, tanıdık bir kütüphanenin şüpheli yeni sürümü yok. Tespitin kurulumdan önce, adın kabul edildiği anda yapılması gerekir.
Üretilen koda duyulan güven nerede kayıyor?
Kayma, bir şey kurulmadan çok önce, kod okunurken olur. Akıcı, iyi biçimlendirilmiş çıktı doğrulanmış gibi hissettirir. İnsanlar kendinden emin bir kaynağa daha az soru sorar; üretilen kod ise neredeyse hiç tereddüt ifade etmez. Böylece inceleme, en çok gerektiği yerde en zayıf kalır.
Ölçek durumu kötüleştirir. Önerilen tek bir paketi kontrol etmek kolaydır; 400 satırlık üretilmiş kodun içindeki tanıdık olmayan tek bir ad göze çarpmaz. İnceleme pahalı hissettirdiğinde atlanan ilk adım odur. Miras üçüncü bir kaymayı ekler: doğrulanmamış bir bağımlılık projeye girdiğinde, sonraki üretim onu yerleşik sayar ve üzerine kurar.
Dördüncü kayma en yenisi. Kodlama ajanları artık kurulum komutları dahil kendi başlarına komut çalıştırabiliyor ve araya adı okuyan kimse girmiyor. Araç kullanan ajanların sohbet asistanlarından daha sıkı korkuluklara ihtiyaç duymasının büyük bir nedeni bu. Modelin ürettiği her şeyi kabul etmek de, ki vibe coding'in disiplini ve sınırları yazımızda tartıştığımız risk budur, en tehlikeli hâlini bağımlılık satırında alır.
Bir bağımlılık kurmadan önce nasıl kontrol edilir?
Doğrulama, bir paketin gerçekliğini varsaymak yerine sınamaktır. Çoğu proje için kısa, sabit bir rutin yeter:
- Yeni bağımlılıkları ayrı listele. Herhangi bir şey çalıştırmadan önce üretilen koddaki her paket adını çıkar; böylece hiçbiri hacmin içinde saklanamaz.
- Resmî kaynağı bul. Kütüphanenin kendi belgelerini ya da deposunu aç ve paket adını ve kurulum komutunu oradan kopyala.
- Kayıt defteri sayfasını kontrol et. Tam adı, gerçek bir geçmişi olan bağlı bir kaynak deposunu, zaman içinde çıkmış birkaç sürümü, adı belli bakımcıları ve inandırıcı indirme sayılarını doğrula.
- Kırmızı bayraklarda dur. Birkaç gün önce ilk kez yayımlanmış, tek sürümü olan, deposu bulunmayan ya da açıklaması adıyla uyuşmayan bir paket, bir insanın kararına bırakılır.
- Kabul ettiğini sabitle. Kilit dosyasını kaydet ve
npm ciile kur; bu komut mevcut bir kilit dosyası gerektirir ve ona asla yazmaz, böylece derlemeler sürprizlere yakalanmaz. - İmzaları doğrula. İndirilen paketlerin kayıt defteri imzalarını ve köken kanıtlarını denetleyen
npm audit signatureskomutunu ya da kendi ekosisteminin karşılığını çalıştır.
Bu adımların hiçbiri gerçek işi pek yavaşlatmaz. Birlikte, güveni çıktının tonundan paket hakkındaki kanıta taşırlar.
Hayali adları dışarıda tutan ekip alışkanlıkları
Kontrol listeleri varsayılan hâle geldiğinde işe yarar. Bunu iyi yapan ekipler güvenli yolu kolay yol yapar:
- Kayda geçmiş bir inceleme olmadan yeni bir bağımlılık göründüğünde derlemeyi başarısız kıl; böylece paket eklemek hep bilinçli bir eylem olur.
- Onaylı bir liste ya da denetlenmiş paketlerin iç bir yansısını tut ve araçları ile ajanları oraya yönlendir.
- Modele hangi kütüphaneleri kullanabileceğini söyle ya da standart kütüphaneyi tercih etmesini iste; böylece daha az yeni ad ortaya çıkar.
- Kodlama ajanlarına kurulum önerme izni ver, ama gözetimsiz çalıştırma izni verme.
- Reddedilen bir bağımlılığı boşa giden zaman olarak değil, paylaşmaya değer iyi bir yakalama olarak gör.
- Paket halüsinasyonu
- Bir modelin hiç yayımlanmamış bir pakete başvurması.
- Kilit dosyası (lockfile)
- Kurulan tam sürümleri kaydeden dosya; sonraki her kurulum onları yeniden üretir.
- Köken (provenance)
- Bir paketin nerede ve nasıl derlenip yayımlandığına dair doğrulanabilir bilgi.
Bağımlılık kontrolleri, üretileni doğrulamaya dair daha geniş bir alışkanlığın parçasıdır; eval disiplini yazımızın konusu da bu. İncelenmemiş bağımlılıklar da, üretilen kod anlamayı geride bıraktığında biriken niyet borcunun ders kitabı örneklerinden biridir.
Kod yazmıyorsan WisyLink nerede devreye giriyor?
Kod odaklı bir yapay zeka aracı kullanıyorsan kurulumları çalıştıran sensin; yani yukarıdakilerin hepsi doğrudan senin için geçerli. Vibe coding araçları ile yapay zeka uygulama oluşturucuları karşılaştırmamız, her yaklaşımın sana neyi yönetmek için bıraktığını, paketler dahil, anlatıyor.
WisyLink'te uygulamayı bir sohbette anlatırsın ve kendi bilgisayarında hiçbir kurulum komutu çalıştırmazsın. Uygulamayı izole bir oluşturma ajanı yazar. Bu ajanın hesabına, kimlik bilgilerine ya da diğer sitelere kalıcı bir erişimi yoktur ve her site kendi işlem kaynağında çalışır. Bu, bir sorunun ne kadar uzağa ulaşabileceğini sınırlar.
Herhangi bir yapay zeka aracına sorulacak iyi bir soru şu: kurulumu kim çalıştırıyor, nerede çalışıyor ve o kod nelere ulaşabilir? Kod odaklı bir araçta cevap genellikle sensin, kendi dizüstü bilgisayarında, içindeki her şeye erişimle. WisyLink gibi barındırılan bir oluşturucuda ise platform, ayrı bir oluşturma ortamında. İki cevap da senin payına düşen işin yerini almaz: yayından önce uygulamanın ne yaptığını test et, ödeme ve e-posta anahtarlarını sohbette değil Entegrasyonlar altında tut ve davranışın istediğinle uyuştuğunu kontrol et.
Sitelerin nasıl yalıtılıp yayınlandığını ürün sayfası anlatıyor. Bağımlılıkları kendin yönetmeden oluşturmak istediğinde ücretsiz başla ve ilk uygulamanı anlat.
S.S.S.
