Bir Güvenlik Aracı İnşa Ettim. Kendi İçinde Kritik Bir Açık Buldu.
Bir kod güvenlik analizörü geliştiriyorum. Adını vibeanalyzer koydum.
Hedef basit. Artık birçok kişi "vibe-code" yapıyor. Yapay zeka ajanlarının kod yazmasına izin veriyorlar. Kod temiz görünüyor. Testler geçiyor. Ancak geliştiricinin projenin içinde gerçekte ne olduğu hakkında hiçbir fikri yok.
Bu işe tamamen girişmeden önce, çok önceden yapmam gereken bir şeyi yaptım. Mevcut araçların bunu halledip halletmediğini kontrol ettim. Halletmişlerdi. Semgrep, CodeQL ve Snyk gibi araçlar benden çok daha iyi.
Kendi projemde Semgrep çalıştırdım. Sonuçlar bir gerçeklik kontrolü oldu.
Semgrep bağımlılıklarımda altı sorun buldu:
• Bir hash seçimiyle ilgili kozmetik bir sorun. • esbuild ve vite'de iki Yüksek (High) seviyeli sorun. • Path traversal içeren üç Orta (Medium) seviyeli sorun. • vitest'te bir Kritik (Critical) sorun.
vitest sorunu bir path traversal zafiyetiydi. Birinin proje dışındaki dosyaları okumasına veya çalıştırmasına olanak tanıyabilirdi. Bu bağımlılığı bizzat ben dahil etmiştim.
Bir güvenlik aracı nasıl kritik bir zafiyete sahip olabilir?
Cevap tedarik zinciri. Kodum dürüst olabilir. Ancak üzerine inşa ettiğim araçlar her zaman güvenli değil. Bir güvenlik aracı geliştirirken bunu gözden kaçırdıysam, sıradan bir geliştiricinin bunu yakalama şansı sıfırdır.
Bu yüzden hala inşa etmeye devam ediyorum.
Semgrep gibi mevcut araçlar tehlike kalıplarını bulur. Bilinen zafiyetleri tespit ederler. Ancak niyeti (intent) anlamazlar. Kodunuzun aslında ne yapması gerektiğini bilmezler.
Bir fonksiyonun güvenli olup olmadığını ama projenizde olmaması gereken bir sorunu çözüp çözmediğini söyleyemezler.
Ben buna "niyet boşluğu" (intent gap) diyorum. Kod ile amacı arasındaki mesafedir.
Vibeanalyzer bu boşluğa odaklanıyor. Araç, sizden projenin niyetini ve niyet dışı hedeflerini (non-goals) istiyor. Koruma bariyerleri (guardrails) belirliyor. Yapay zeka kodu değerlendirdiğinde hedefi biliyor. Nelerin sınırların dışında olduğunu biliyor.
Niyet yükleme kısmını bitirdim. Temel TypeScript analizine ve klasör yapısı grafiklerine sahibim. Sırada yapay zeka katmanını inşa etmek var. Yapay zekanın kodu niyete göre gerçekten değerlendirip değerlendiremeyeceğini bilmiyorum. Sadece yanlış alarmlara yol açabilir. Bunu öğrenmek için süreci açık bir şekilde yürüterek inşa edeceğim.
Bağımlılıklarımı güncelledim ve bilinen hataları temizledim. Ancak bilinmeyen açıklar ve mantık hataları duruyor. Bu yüzden çalışma devam ediyor.
İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi
