· kaynak dev.to (home feed)
Slopsquatting dedektörü, bir saldırganın sağlayabileceği üç güvenli kararı kaldırdı
Bir slopsquatting takipçisi, bir okurun her birinin saldırganın paketini güvenli işaretleyebileceğini göstermesinin ardından — imzalı derlemeler, ilk görüntüden önceki kayıt tarihleri ve eksik tarihler — paketleri güvenli işaretleyen üç kuralı kaldırdı.

Dil modellerinin uydurduğu paket adlarını takip eden bir araç, bir okurun yorumu her bir kuralın saldırganın paketini düşük riskli işaretleyebileceğini gösterdikten sonra kendi güvenlik kurallarından üçünü kaldırdı. Bakımcı, dev.to'da jj1423 adıyla yazdığı yazıda bu temizliği otomatik risk skorlaması hakkındaki daha geniş bir ders olarak çerçeveliyor: bir paketi temize çıkaran dallar, akıl yürütmenin zayıfladığı yerlerdir.
Dedektör neyi izliyor
Slopsquatting şöyle işliyor: bir dil modelüne hangi paketi kullanması gerektiğini sorun, o da ara sıra var olmayan bir paket adı verir. Biri o adı önce kaydederse, aynı öneriyi izleyen bir sonraki geliştirici — ya da bir sonraki kodlama ajanı — oraya yerleştirilen her neyse onu kurar.
Dedektör bu halüsinasyon adlarını toplar ve puanlar. Hâlâ 404 döndüren bir ad doğrudan bir hedeftir. Çözümlenen adlar için temel ölçüt yaştır: 14 günden kısa yüksek risk, 60 günden kısa orta, daha eskiler düşük sayılır. Bu merdiven denetimden sağlam çıktı. Üzerine eklenen istisnalar çıkamadı.
İmzalı derlemeler yanlış şeyi kanıtladı
İlk istisna npm provenance bildirimlerine ve PyPI'nin PEP 740 attestasyon'larına dayanıyordu; kayıt defteri bu belgeleri yayınlama anında bir artefaktı adı geçen bir depoya ve workflow'a bağlamak için veriyor. Bakımcı başlangıçta geçerli bir attestasyon'u meşruiyetin güçlü kanıtı olarak görüyordu.
Okurun da belirttiği gibi, bildirim artefaktı bir depoya bağlar — güvenilir bir depoya değil. Herkes bir GitHub deposu oluşturabilir, bir Trusted Publisher akışı yapılandırabilir ve birkaç dakikalık CI çalışmasıyla tamamen geçerli bir attestasyon'a sahip bir squatted ad yayınlayabilir. Kural saldırı riskini azaltmadı; tam olarak saldırganın yayınlayacağı paketi önceden temizledi. Okur, çalıştığı ayrı bir sistemden genellemiş ve bunu yazıda şöyle aktarmış: taradıkları bir günlükteki 31 imzalama anahtarından 23'ü, kabul edilmiş işi ve teslimatı olmayan anahtarlar, tüm yetenek bildirimlerinin %91'ini üretmiş. Bedava olan kimlik bilgileri, üretmeleri en ucuz yerde birikir.
Provenance hâlâ kaydediliyor ve okurların tartması için her bulgunun yanında gösteriliyor, ancak artık sınıflandırıcıya hiçbir girdi değil — yanlışlıkla geri bağlanamasın diye bilinçli olarak imzadan çıkarıldı.
Kayıt tarihleri adı değil, toplayıcıyı ölçüyordu
İkinci istisna gerçek bir false positive'den geldi: 30 Ağustos'ta yayınlanmış, bir modelin 4 Eylül'de CycloneDX SBOM'larını ayrıştıracak bir kütüphane olarak önerdiği cd yerine geçen cdx-rs. Paket görüntülenmeden kaydedildiği için kural, ilk kayıtlı halüsinasyonundan önce kaydedilen her adı düşük riskli işaretliyordu.
Kusur şurada: ilk görüntü ilk öneri değildir. Örnekleme yalnızca modellerin zaten ürettiği adları yakalar, dolayısıyla toplamanın başlarında kural fiilen "biz bakmaya başlamadan kaydedilmiş" anlamına geliyordu — bir adı erken kaydedip bekleyen saldırgan bu kuraldan rahatça geçerdi. Dal ayrıca eksik verileri tutarsız biçimde ele alıyordu: görüntülenme tarihi yoksa paket yaş merdivenine düşüyor ve yüksek puan alabiliyordu, erken bir görüntülenme tarihi ise anında düşük puan üretiyordu. İki tür bilinmeyiş, zıt kararlar ve "bilinmiyor" diyen bir dal yoktu.
Bakımcının bulduğu tek bağımsız tarih — üreticilerin belirlediği model eğitim kesim tarihleri — dedektörün kendi 60 günlük penceresinden daha eski, yani kural yaş ile gereksiz biçimde örtüşüyordu. Kural kaldırıldı ve cdx-rs yeniden işaretlendi. Belirtilen ödün: bir saldırı hedefleri listesi şüpheye yönelmelidir, çünkü bir tesadüf ile bir squat yalnızca kayıt tarihinden ayırt edilemez.
Go modülleri hiç tarih taşımıyordu
Üçüncü istisna doğrudan bir şikâyetten değil, okurun çerçevesinden ortaya çıktı. Oluşturma tarihi olmayan bir paket "düşük" döndürüyordu — ve Go module proxy yalnızca bir modülün var olup olmadığını yanıtlar. Modelin önerdiği her Go modülü, bir gün önce gönderilen dahil, hiçbir tarih kontrol edilmeden temizlendi.
Tarihsiz paketler artık orta puan alıyor ve Go tarihleri deps.dev'den alınıyor. Bakımcı bir uyarıya dikkat çekiyor: Go zaman damgaları yazarların kontrolündeki commit zamanlarını yansıtıyor, dolayısıyla geri tarihli bir modül yine eski görünüyor. npm ve PyPI ise kayıt defterinin bir yüklemeyi fiilen aldığı anı kaydeder; yayınlayanlar bunu seçemez. Daha zayıf kanıt, ama hiç yoktan iyidir.
Çalıştırılamayan denetim
Okur ucuz bir kontrol önerdi: kural ikisinin temizlediği her şeyin kayıt tarihlerini toplamanın başladığı güne karşı çizin ve sınırda kümelenme arayın. Bu imkânsızdı, çünkü düşük kararlar saklanmak yerine yalnızca atılıyordu. Artık her düşük karar, onu üreten kuralla, kayıt tarihi ve ilk görüntülenme ile birlikte günlüğe yazılıyor — gelecekteki denetimler için dahili tutuluyor. Önceden geri çekilen bulgular yeniden puanlandı ve ikisi listeye geri döndü.
Neden önemli
Slopsquatting, hem insan geliştiricileri hem de otonom kodlama ajanlarını etkileyen, ortaya çıkan bir supply-chain tehdidi; çünkü ikisi de model önerilerine göre hareket ediyor. dev.to yazısının daha geniş uyarısı her risk skoru için geçerli: bireysel false positive'leri susturmak için yazılan istisnalar, saldırgana değil false positive'e bakarak kaleme alınır — ve bir paketi sorunsuz ilan eden dallar tam olarak saldırganın inceleyeceği dallardır. Bakımcının her güvenli karar için üç sorusu şu: bu girdiyi bir saldırgan ucuza üretebilir mi, dünyayı mı yoksa yalnızca toplayıcıyı mı tarif ediyor ve bu girdi eksik olduğunda ne oluyor. "Bilinmiyor" çözümlenebiliyorsa "güvenli"ye, sonunda — büyük ölçekte, bütün bir ekosistemde — çözümlenecektir.
- #slopsquatting
- #supply-chain-security
- #package-registries
- #llm-hallucination
- #open-source