Skill aslında bir metin
Bir skill, ajana bir işi nasıl yapacağını anlatan küçük bir klasör. Kalbinde bir SKILL.md dosyası var. Ajan iş gelince bu dosyayı okuyup içindekini uyguluyor. Ayrıntıları Agent skill yazısında anlatmıştık.
Bunun güvenlik açısından anlamı şu: Zararlı bir skill’in zararlı kod içermesi gerekmiyor. Düz bir cümle yeterli. VirusTotal’ın 21 Ekim’de yayımladığı yazıya göre, zararlı bulduğu skill’lerin yüzde 62’sinde hiç zararlı kod yok. Yük, ajana verilen düz talimatlar. Buna prompt injection deniyor: Modelin okuduğu metne, onu senin istemediğin bir işe yönlendiren komutlar sokmak.
Üç saklama yöntemi
VirusTotal 35.878 skill’den 6.637’sini zararlı buldu. Bunların 90’ı (yüzde 1,4) işaretlenen talimatı, belgenin görüntülenmiş halinde görünmeyecek bir yere koyuyor. Şirket bunun bir alt sınır olduğunu söylüyor.
- Boş satır dolgusu (56 skill): Belge bitmiş gibi görünüyor, ama altında 78 ile 825 arası boş satır ve en sonda talimat var. Bir soğuk e-posta skill’i 672 boş satırın altında, her e-postanın gizli kopyasını (BCC) dışarıdaki bir adrese göndermeyi istiyor. Uzun metni kırpan tarayıcılar da son satıra hiç ulaşmayabiliyor.
- HTML yorumu (28 skill):
<!-- ... -->arasındaki metni GitHub, mağaza sayfaları ve editörlerin Markdown önizlemesi göstermiyor. Dörtapi-helperskill’i bu şekilde ajandan bütün API anahtarlarını dış bir adrese göndermesini ve bundan kullanıcıya bahsetmemesini istiyor. Bir kod inceleme listesi de yorumun içinecurl ... | bashsaklıyor, yani internetten bir betik indirip çalıştırıyor. - Görünmez Unicode (6 skill): Unicode’un tag bloğundaki karakterler (U+E0000–U+E007F) ekranda hiçbir şey göstermiyor ama birebir ASCII harflerine karşılık geliyor. Sıfır genişlikli karakterler (U+200B–U+200D) de görünmüyor. Bir skill bunlarla ikili kod yazıp gizli bir mesaj saklıyor. Bir başkası “API keys” gibi kelimelerin arasına görünmez boşluk serpip anahtar kelime filtrelerini atlatıyor. Aynı numaranın e-posta tarafını görünmez harfler yazısında anlatmıştık.
Talimatlar ne istiyor?
VirusTotal’ın örneklerinde gizli talimatlar anahtarları, ayar dosyalarını ve ortam değişkenlerini dışarı sızdırmak, uzaktaki bir betiği çalıştırmak ya da veriyi bilerek yanlış raporlamak istiyor. Çoğu da “kullanıcıya söyleme” diye bitiyor. Bir grup daha sinsi: MEMORY.md, AGENTS.md gibi ajanın hafıza ve ayar dosyalarına satır ekletiyor. Böylece skill’i silsen bile etkisi kalabiliyor.
Skill mağazalarının bir tedarik zinciri olduğunu OpenClaw yazısında görmüştük. Burada fark şu: Belgeyi okuyarak kontrol etmek bile yetmiyor, çünkü okuduğun şey ajanın okuduğu şey değil.
Kendini nasıl korursun?
- Ham dosyayı oku. Önizlemeye değil, dosyanın kendisine bak. Sonuna kadar in.
wc -l SKILL.mdbeklenmedik bir satır sayısını hemen gösterir. - Gizli olanı ara.
grep -n '<!--' SKILL.mdyorumları,grep -nP '[\x{200B}-\x{200D}\x{E0000}-\x{E007F}]' SKILL.mdgörünmez karakterleri bulur. Emoji dizilerinde bu karakterler meşru da geçebilir, bulunca satıra bak. - Hafıza dosyalarını koru. Bir skill’in
CLAUDE.md,AGENTS.mdgibi dosyalara senin onayın olmadan yazmasına izin verme. - Kaynağı ve sürümü sabitle. Güvendiğin yazarlardan kur, belirli bir sürümü kullan, güncellemede farkı oku.
- Taramayı yardımcı say. VirusTotal, Code Insight’ın ham skill paketini incelediğini söylüyor. Yine de tarayıcılar her şeyi yakalamıyor, son kontrol sende.
- Ajanı kısıtla. Ajan anahtarlarına ve internete ne kadar az erişirse, kandırıldığında o kadar az zarar verir.
VirusTotal’a göre bu yöntemler bugün nadir, ama uygulaması da kontrol etmesi de çok kolay.
Düşün
- Kurduğun son skill’in ham dosyasını gerçekten sonuna kadar okudun mu?
- Ajanının hafıza dosyalarına en son kim, ne yazdı?
Videoyu izle
Kaynaklar (4, İngilizce)
- Better Stack: AI Skills Are Hiding Instructions From You (short) (yeni sekmede açılır)
- VirusTotal Blog: How Some Malicious AI Skills Hide Instructions from Reviewers (yeni sekmede açılır)
- VirusTotal Blog: From Automation to Infection, How OpenClaw AI Agent Skills Are Being Weaponized (yeni sekmede açılır)
- Unicode: Tags block (U+E0000–U+E007F) code chart (yeni sekmede açılır)
Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.