Kodlama Ajanında İstem Enjeksiyonu: Bir Yetkilendirme Gösterimi
Forever Security, 22 Ekim 2026 tarihinde, müşterinin İndirilenler klasöründe bulunan bir AGENTS.md dosyasını izleyen kodlama ajanının bilinen kötü amaçlı bir paketi kurmasını engellediğini bildirdi. Araştırmacılar dosyanın makineye ilk nasıl geldiğini belirleyemedi. Kaynak: Forever Security’nin olay raporu.
Şirket sonrasında yerleştirilmiş talimat dosyaları ve ajan yapılandırması değişiklikleri içeren kontrollü yeniden üretimleri anlattı. Bu gösterimler özgün olaydan ayrılmalı: müşterinin ilk ele geçirilme yolunun kanıtı değil, olası saldırı yollarının örnekleridir. Kaynak: Forever Security’nin kontrollü gösterimleri.
Bulguları bağımsız olarak yeniden üretmedim. Kaygım, ajanın okuduğu bilgiyle eyleme geçme yetkisi arasındaki açığa çıkardıkları sınır.
Güven sınırı nerede aşılır?
Araştırmacıların yeniden kurduğu senaryolarda yerleştirilen talimatlar, ajan açılışında yürütmeyi tetikleyen, saldırgan kontrollü bir araç sunucusunu kaydedecek kalıcı yapılandırma değişiklikleri istiyordu. Bu yeniden kurma, her aşamanın müşterinin makinesinde gerçekleştiğinin kanıtı değil. Kaynak: Forever Security’nin yeniden kurduğu senaryo.
Zinciri üç karara ayırıyorum: dosyayı okumak, yapılandırma değişikliğini yetkilendirmek ve ortaya çıkan entegrasyonu yürütmek. Son ikisi ilkinden izin devralmamalı. Bu, bildirilen mekanizmaya dair yorumum; ek olay bulgusu değil.
Talimat okumak izin vermemeli
OWASP dolaylı istem enjeksiyonunu, dosyalar ve siteler dahil dış içeriğin model davranışını istenmeyen biçimde değiştirmesi olarak tanımlar. Rehberi; güvenilmeyen içeriği ayırmayı, yetkileri kısıtlamayı ve yüksek riskli işlemlerde insan onayı istemeyi önerir. Kaynak: OWASP istem enjeksiyonu rehberi.
Benim görüşüm, proje talimatlarının yetkilendirilmiş görevin nasıl yapılacağını açıklayabileceği. Yeni yazılımı, kimlik bilgilerine erişimi veya ajan ortamındaki kalıcı değişiklikleri bağımsız olarak yetkilendirmemeliler.
Tanıdık dosya adı bu karar için yeterli temel değildir.
Öncelik vereceğim önlemler
İçeriği almayı yürütmeden ayırın. Bir ajanın harekete geçmesine izin vermeden önce bilinmeyen depoları ve talimat dosyalarını incelerdim. Güvenilmeyen projelerde günlük oturumum yerine yalıtılmış, kısıtlı ortamı tercih ederdim. Bu, rapora karşı pratik önerimdir; dosyaları İndirilenler’den taşımanın saldırıyı önlediği iddiası değil. Bağlam: Forever Security raporu.
Erişimi sınırlayın. OWASP’nin araçları ve izinleri en aza indirme önerisini izleyerek yalnızca görev için gereken dosya ve yetenekleri sunardım. Kaynak: en az ayrıcalık.
Hassas eylemleri ayrı onaylayın. OWASP’nin yüksek etkili eylemlerde insan onayı önerisini uygulayarak kurulumlar ve kalıcı yapılandırma değişiklikleri için özel karar isterdim. Kaynak: onay rehberi.
Yetkilendirmeyi model dışında uygulayın. OWASP’nin tam aracılık rehberini izlerdim: sonraki sistemler modelin izin yargısına güvenmek yerine istekleri politikaya göre kontrol etmeli. Kaynak: yetkilendirme rehberi.
Yürütme kayıtlarını tutun. Araç etkinliğini ve ilgili yapılandırma değişikliklerini kaydederdim. OWASP izlemeyi önleme değil, zararı sınırlama olarak ele alıyor. Kaynak: izleme rehberi.
Tekrarlanabilir bir yetkilendirme gösterimi
Bu yazı için bir küçük Node.js gösterimi ve yeniden üretim talimatları ve sınırlamalar (Markdown) ekledim. Kurgusal belge ve açıkça betiklenmiş istekler kullanır. Hiçbir model belgeyi okumaz, hiçbir gerçek ajan yapılandırmasına erişilmez.
Karşılaştırma bilerek dardır. Kısıtsız sahte yürütücü, görüntülenen bağlam ayrı onay gerektiğini söylese de yardımcı kaydı isteğini kabul eder. Kısıtlı yürütücü, bellek içi durumuna dokunmadan önce yetkilendirmeyi isteğin dışında kontrol eder. Uyarı değerlendirilmiş bir istem savunması değildir; burada uyumu test edilen bir model yoktur.
Çalıştırılan gösterim sekiz betiklenmiş kontrolden geçti. Tam JSON dökümü şu sonuçları kaydeder:
| Betiklenmiş durum | Karar | Bellek içi yazmalar |
|---|---|---|
| Yalnızca uyarı, yetkilendirme kontrolü yok | İzin verildi | 1 |
| Politika uygulanıyor, onay yok | Engellendi | 0 |
| İstek, onaylı olduğunu iddia ediyor | Engellendi | 0 |
| Önceden onaylanmış taslak düzenlemesi | İzin verildi | 1 |
| Onay istenen değerle eşleşmiyor | Engellendi | 0 |
| Güvenilir sürücüden eşleşen onay | İzin verildi | 1 |
| Tüketilmiş onayın yeniden kullanımı | Engellendi | 0 |
| Bilinmeyen araç | Engellendi | 0 |
Güvenilir sürücü, meşru yolu göstermek için kurgusal bir yardımcı değişikliğini bilerek onaylar. Bu, şüpheli kurulum talimatlarını onaylama önerisi değildir. Bu uygulamada izin araca, hedefe ve değere bağlıdır, bir kez tüketilir. Kendi onayını iddia eden istek yetki veremez.
Yeniden oynatma kontrolü yazmaları da sayar: aynı değeri yeniden ayarlamak, yetkisiz işlem gerçekleştirirken son durumu değiştirmeyebilir. Yalnızca son değeri kontrol etmek bu farkı kaçırır.
Sitenin deposunun bir kopyasından yeniden üretmek için şunu çalıştırın:
node assets/examples/agent-authorization-demo.mjs
Dökümü yazdırır ve bir doğrulama başarısızsa başarısız çıkış yapar. Betik yalnızca Node’un yerleşik doğrulama modülünü kullanır; paket kurmaz, kabuk komutu yürütmez, dosya okuyup yazmaz, ağ isteği yapmaz veya gerçek kimlik bilgisi kullanmaz.
Bu sonuçlar istem enjeksiyonuna direnci değil, oyuncak bir yetkilendirme kapısının belirtilen davranışını doğrular. Saldırı başarı oranını ölçmez, işletim sistemi korumalı alanını test etmez veya Forever Security olayını yeniden üretmez. Bağımsız katkısı, bir kodlama ajanının güvenceye alındığı iddiası değil, incelenebilir sınır ve kontrolleridir.
Güveni varsaymak yerine özerkliği sınırlayın
OWASP istem enjeksiyonu için kusursuz önleme yöntemi tanımlamaz; önerileri azaltım ve etki sınırlamaya odaklanır. Bu yüzden önlemleri garanti değil, birbirini tamamlayan katmanlar olarak ele alırdım. Kaynak: OWASP azaltım rehberi.
Kodlama ajanlarının yararlı işler yapmasını istiyorum, ama izin karşılaştıkları içerikten ayrı kalmalı. Bir belge bağlam sağlayabilir. Sırf ajan okudu diye makinem üzerinde yetki kazanmamalı.