İşi on üç ajan arasında paylaştınız. Paperclip anahtarı paylaşmadı.
71.000 yıldızlı bir ajan çerçevesinde yapılan bir tarama, on üç ajanın on ikisinin aynı düz metin belirteci taşıdığını ortaya çıkardı. Bir kez bir ajan filosu çalıştırdığınızda, "sır config dosyasında yaşar" ifadesi bir kısayol olmaktan çıkar ve bir çarpana dönüşür.
Siz de modern olanı yaptınız. Tek büyük bir ajan yerine bir filo kurdunuz — biri destek taleplerini sınıflandırsın, biri metin yazsın, biri tasarım hattını çalıştırsın, bir düzine kadar ajan, her biri kendi işi ve kendi config dosyasıyla. Bu şekilde daha güvenli hissettiriyor. Daha küçük etki alanı. Daha fazla en az yetki ilkesi.
Sonra bir güvenlik taraması, Paperclip adlı 71.000 yıldızlı bir ajan çerçevesinin config dosyalarını inceledi ve on üç ajanın on ikisinin aynı kimlik bilgilerini taşıdığını buldu — her ajanın config dosyasına düz metin olarak yapıştırılmış özdeş bir belirteç [1]. Bir Anthropic API anahtarı, bir tasarım ajanının config dosyasında açık şekilde sabit kodlanmıştı. Tek bir ajan için tasarlanmış bir bot belirteci, onunla hiçbir ilgisi olmayan ajanlar tarafından okunabiliyordu.
On üç kapı. Tek bir anahtar, on ikisine kopyalanmış. En zayıf ajanı ele geçirin, diğer on birine sahip olun.
Aslında ne oldu
Paperclip her ajana bir MCP sunucu config dosyası verir — ajanın hangi araçlara ve hizmetlere erişebileceğini ve bunlara nasıl kimlik doğrulaması yapacağını söyleyen dosya. Bir noktada sırlar bu dosyalara doğrudan düz metin olarak girdi: bir n8n JWT'si, bir bearer belirteci, bir Anthropic API anahtarı. Referans olarak değil. Çalışma zamanında enjekte edilerek değil. Doğrudan yazıldı — ve sonra, bir sonraki ajanı kurmak bir kopyala-yapıştır işlemi olduğu için, filo genelinde çoğaltıldı.
Tarama üç şeyi işaretledi. On iki ajan arasında paylaşılan düz metin belirteçler (YÜKSEK olarak derecelendirildi). Bir tasarım ajanının config dosyasında açık şekilde duran Anthropic anahtarı (KRİTİK olarak derecelendirildi). Ve hiç amaçlanmadığı ajanlara verilmiş bir bot belirteci — basit bir en az yetki ihlali [1]. Haklarını teslim edelim, Paperclip ekibi hızlı hareket etti: kimlik bilgisi referanslarına geçtiler, ajanlar arası okumalarda config içeriğini maskelerle gizlediler ve bağlama senkronizasyonunu zorunlu kılmaya başladılar [2]. Doğru yönde.
Bu, Paperclip'in dikkatsizliği değil
Üzerinde düşünmeye değer kısım şu: Paperclip, neredeyse her çerçevenin yaptığını yaptı. Bir sırrı config dosyasına koymak, yazılımın otuz yıldır kimlik doğrulaması yapma biçimidir. İşe yaradı, çünkü tek bir uygulama, tek bir config ve anahtarın nerede olduğunu bilen tek bir operatör vardı.
Bu alışkanlığın altında çağ değişti. Çok ajanlı bir sistem, tek config'li tek bir uygulama değildir — her biri bir dosyaya sahip, her biri bir öncekinin kopyası olan bir düzine süreçtir. Config içinde düz metin, sızdırılacak tek bir yer varken katlanılabilir bir kısayoldu. On üç tane olduğunda, aynı kısayol bir sızıntının on üç sızıntı anlamına gelmesi demektir — ve "bunu hangi ajan yaptı?" sorusunun yanıtı yoktur, çünkü logdaki belirteç hepsine aitti.
Paperclip'in yayınladığı düzeltme olan kimlik bilgisi referansları gerçekten daha iyi. Ama neyi değiştirip neyi değiştirmediğine dikkat edin. Bir referans, ajanın çalıştığı yerde hâlâ gerçek bir sırra karşılık gelir; ajan ya da onu ele geçiren herhangi bir şey, çözümlenmiş değeri okumaya devam edebilir. Ve çerçevenin kendi hata takipçisi zaten bir sonraki arıza modunu gösteriyor: bir referansın bağlamından kopması, böylece config dolu görünürken doğrulamanın sessizce başarısız olması [3]. Sır bir katman geriye taşındı. Binadan çıkmadı.
Sadece Paperclip değil
Aynı hafta, aynı kök neden, farklı depolar. Yaygın kullanılan bir kodlama ajanı, ham .env değerlerini — parolaları, belirteçleri, API anahtarlarını — doğrudan sohbet çıktısına yazdığı için raporlandı. Başka bir ajan çalıştırıcısının, tüm üst ortamını alt süreçlere aktardığı ve böylece her sağlayıcı anahtarının bir alt süreç tarafından görülebildiği tespit edildi [4]. Bir ses kancası, yazımları kimlik bilgileriyle birlikte herkesin okuyabileceği /tmp dizinine yazıyordu [5]. Bağımsız ekipler, bağımsız tehdit modelleri, tek bir ortak varsayım: sırrın ajanın görebileceği yerde yaşamasının sorun olmadığı. Saldırganın yapması gereken tek argüman bunun sorunlu olduğunu göstermektir.
Kasıtlı olarak bunun için tasarlandı
Clavitor tam tersi varsayımdan başlar: ajan kimlik bilgisini hiç taşımaz. Bir eylem ister; istek yakalanır, ajanın okuyamadığı bir sıra karşı kimlik doğrulanır ve yerine getirilir. Bir belirteç yapıştırılacak bir config yoktur, çünkü config'de belirteç yoktur. On üç ajan arasında kopyalanacak hiçbir şey yoktur, çünkü ajanın ortamı çalmaya değer olan şeyi hiç barındırmaz.
Her ajan yalnızca adlandırıldığı şeye erişir — tüm depoya değil — böylece bir bot belirteci, hiç istememiş bir ajan tarafından okunabilir hale gelemez. Ve her eylem, onu gerçekleştiren belirli eylemciye kaydedilir; on iki ajanın ortak paylaştığı ortak bir belirtece asla kaydedilmez — böylece "bunu hangisi yaptı?" sorusunun bir yanıtı olur.
Dürüst sınır: bu, bir ajanı hacklenemez yapmaz. Ele geçirilmiş bir ajan, o anda yetkilendirildiği şeyleri yapmaya devam edebilir. Yapamayacağı şey, anahtarı alıp gitmek ve diğer on ikisi olmaktır — çünkü elinden alabileceği bir anahtar yoktur.
Ders "belirteci döndürün" değil
Paperclip belirteçleri döndürecek, geçişi tamamlayacak ve sorunları kapatacak. İyi — yapmalılar. Ama döndürme ders değil. Ders şu: tek bir uygulama yerine bir ajan filonuz olduğu anda, "sır config'de yaşar" ifadesi bir kısayol olmaktan çıkar ve bir çarpana dönüşür. Bir çarpanı, sırrı biraz daha okunması zor hale getirerek düzeltemezsiniz. Sırrın baştan itibaren ajanın elinde olmadığından emin olarak düzeltirsiniz.
Bir kimlik bilgisi aracının ajan çağında uyması gerektiğini düşündüğümüz kuralları yazdık — bunlar arasında, sırrın kodun çalıştığı yerde hiç yaşamaması ve bir ajanın yalnızca adlandırıldığı şeye erişmesi. Kendi aracınızı bu kurallara karşı test edin: clavitor.ai/rules.
Clavitor (@clavitorai), AI ajanları için ve onlara karşı tasarlanmış kimlik bilgisi kasasıdır. clavitor.ai
Kaynaklar
[1] Paperclip ajan çerçevesi — kimlik bilgisi hijyeni bulguları (CFG-H1 paylaşılan düz metin belirteçler, CFG-C1 sabit kodlanmış Anthropic anahtarı, CFG-H2 yanlış kapsamlı bot belirteci): https://github.com/paperclipai/paperclip
[2] Paperclip — yaşam döngüsü akışlarında ajan sırrı bağlama senkronizasyonunu zorunlu kılma (birleştirildi): https://github.com/paperclipai/paperclip/pull/8307
[3] Paperclip — secret_ref ortam girdileri secret_bindings satırlarından kopabilir, config dolu görünür ancak doğrulama sessizce başarısız olur (#8309): https://github.com/paperclipai/paperclip/issues/8309
[4] Chetter — runBatchAgent tüm çalıştırıcı ortamını devralır ve sağlayıcı API anahtarlarını alt sürece açar (#56): https://github.com/flatout-works/chetter/issues/56
[5] Claude Code ses kancası — tüm yazımlar (kimlik bilgileri dahil) herkesin okuyabileceği /tmp dizinine yazılır (#58): https://github.com/rodlaneedu-hash/claude-code-voice-hook/issues/58