- Dependabot'un aşırı bildirimleri, gerçek güvenlik sorunlarını çözmekten çok geliştiricilerin zamanını boşa harcatabiliyor
- Go ekosisteminde yaşanan örnekte olduğu gibi, etkilenmeyen depolarda bile binlerce PR ve uyarı üretilerek karmaşa yaratılıyor
- govulncheck tabanlı GitHub Action kullanıldığında yalnızca gerçekten savunmasız kod tespit edilebiliyor ve gereksiz uyarılar ortadan kaldırılabiliyor
- Bağımlılık güncellemelerini otomatik PR'lerle değil, periyodik testler ve güncel sürüm doğrulamasıyla yönetmek daha güvenli ve verimli
- Bu yaklaşım, uyarı yorgunluğunu (alert fatigue) azaltmak ve açık kaynak bakımcılarının yükünü hafifletmek açısından önemli
Dependabot'un sorunları
- Dependabot, çok sayıda güvenlik uyarısı ve otomatik PR üreterek geliştiricilerin gerçekten önemli sorunları ayırt etmesini zorlaştırıyor
- Go paketi
filippo.io/edwards25519 içindeki küçük bir değişiklik bile binlerce PR oluşmasına yol açtı
- Etkilenmeyen depolara da (Wycheproof vb.) yanlış güvenlik uyarıları gönderildi
- Uyarılar, yanlış CVSS puanları ve düşük uyumluluk göstergeleri içererek gereksiz kaygı yaratıyor
- Bu aşırı bildirimler, güvenlik müdahalesinin güvenilirliğini ve verimliliğini düşüren bir etken olarak gösteriliyor
govulncheck ile alternatif
- Go Vulnerability Database, sürüm, paket ve sembol düzeyinde ayrıntılı meta veri sağlıyor
- Örneğin
GO-2026-4503 açığı yalnızca Point.MultiScalarMult sembolünü etkiliyor
- govulncheck, statik analizle yalnızca gerçekten çağrılabilir savunmasız kodu tespit ediyor
go mod why ile birlikte kullanıldığında dolaylı bağımlılıkların etkisini doğru biçimde değerlendirmek mümkün
- İnceleme sonucunda, açık mevcut olsa bile kod ilgili sembolü çağırmıyorsa uyarı vermiyor
- CLI (
govulncheck -json) ya da Go API'si (golang.org/x/vuln/scan) üzerinden kolayca entegre edilebiliyor
GitHub Actions ile ikame
- Dependabot yerine govulncheck GitHub Action kurularak her gün otomatik tarama yapılabiliyor
- Yalnızca gerçek bir açık bulunduğunda bildirim gönderiliyor
- Otomatik PR oluşturulmadığı için geliştiriciler önemli güvenlik sorunlarına odaklanabiliyor
- Yanlış uyarıları azaltmak, güvenlik uyarısı yorgunluğunu (alert fatigue) hafifletip müdahale kalitesini artırabiliyor
- Açık kaynak bakımcılarına gereksiz PR gönderilmesi sorunu da ortadan kalkıyor
Bağımlılık güncellemelerini yönetme yöntemi
- Bağımlılıklar, her projenin geliştirme döngüsüne uygun şekilde toplu olarak yönetilmeli
- Her gün en güncel sürümlerle test yapılabilir, ancak gerçek güncellemeler yalnızca ihtiyaç duyulduğunda gerçekleştirilir
- Go'da
go get -u -t ./..., npm'de npm update komutlarıyla en güncel sürümler test edilebilir
- Bu yöntem, güvenlik açıklarına yanıt hızını ve kararlılığı birlikte sağlar
- En güncel sürümlerle test ederek uyumluluk sorunları erkenden tespit edilebilir
- Zararlı kod içeren bağımlılıkların hemen dağıtıma alınması engellenebilir
- geomys/sandboxed-step kullanıldığında CI ortamında gVisor ile yalıtılmış çalıştırma mümkün
Sonuç ve destek arka planı
- Dependabot'un otomasyonu çoğu zaman güvenlikten çok gürültü (noise) üretiyor
- govulncheck ve periyodik test temelli yaklaşım, daha doğru ve sürdürülebilir bir güvenlik yönetimi yöntemi
- Yazının yazarının açık kaynak bakımı, Geomys organizasyonu üzerinden Ava Labs, Teleport, Tailscale, Sentry gibi destekçiler sayesinde sürdürülüyor
- Bu model, açık kaynak ekosisteminin istikrarlı biçimde sürdürülmesine ve güvenlik kalitesinin artmasına katkı sağlıyor
1 yorum
Hacker News görüşleri
Ancak yalnızca sürüm numaralarını ve zafiyet veritabanını karşılaştıran araçlar, kodun gerçekten o zafiyete maruz olup olmadığını anlayamadığı için çok fazla gürültü üretiyor
Son dönemde beni etkileyen araç CodeQL oldu. GitHub Advanced Security içinde çalıştırılabiliyor ve kodun gerçek akışını izleyerek girdilerin tehlikeli bir kullanıma nasıl ulaştığını gösteren tam yolu görsel olarak sunuyor
Bu sayede gerçekten düzeltme yapılabilecek bilgi sağlıyor ve yanlış pozitif oranı düşük oluyor. Elbette Python gibi dinamik dillerde tespitten kaçabilecek kodlar olabilir ama çoğu durumda yeterince faydalı
Sırf CodeQL uyarılarından kaçınmak için işe yaramayan ara değişkenler ekleme gibi yorumlar çıkıyor. Veriye aşırı uyarlanmış bir araç gibi hissettiriyor
debugpaketinin bakımını yapıyorum ve saçma ReDoS raporları çok fazla geliyor. Hatta CVE kaydı açılanlar bile var; bu yüzden JS ekosisteminden tamamen uzaklaşmak istiyorumPR içinde zafiyetli bir çağrı eklendiğinde bildirim veren bir GitHub Action hazırlayıp kullanıyorum.
Dependabot otomatik birleştirme ile birlikte kullanınca JS kod tabanını yönetmek için de iyi bir kombinasyon oluyor
Testler yeterliyse yeni sürümlerde hataları da yakalayabiliyorsunuz ama bu süreç bazen açık kaynak katkısına da dönüşüyor. Uğraştırıcı ama iyi alışkanlık kazandırıyor
E-posta bildirimleri can sıkıyor ve PR'ların birikmesini de sevmiyorum. Sadece belli zamanlarda topluca ilgilenmek istiyorum
dependabot.ymlayarlarıyla çalışma sıklığını ve PR sayısını ayarlayabilirsinizresmî belgeler
Doğrudan kendin düzeltip issue sayısını azaltma yöntemi de var
Ben şahsen Renovate öneririm. Daha fazla dili ve otomatik birleştirme seçeneğini destekliyor
Dependabot'un temel sorunu, bağımlılık yönetimini güvenlik sorunu sanması.
Çağrılmayan bir fonksiyondaki zafiyet güvenlik meselesi değil, gürültüdür
Python tarafında
pip-audit --desc, Dependabot'tan daha iyi hissettiriyor.Kusursuz statik analiz gelene kadar üç ayda bir yapılan manuel kontroller daha güvenli bile olabilir
Gerçek güvenlikle güvenlik uygulamaları arasındaki kopukluk burada ortaya çıkıyor
CVE'lerin çoğu gerçekte etkili değil ama şirketler konteyner imajlarındaki zafiyet sayısını sıfıra indirmeye çalışıyor
Üstelik bağımlılıkları güncellediğinizde yeni CVE'ler çıkması da kaçınılmaz. Çünkü çoğu yazılım backport düzeltmesi yapmıyor
Depo sayısı fazla ve diller çeşitliyse kusursuz bir CI iş akışı eklemek gerçekçi değil
Mükemmel olmasa da hiçbir şey yapmamaktan çok daha iyi olduğunu düşünüyorum
CVE'leri otomatik mi oluşturuyor?
GitHub'ın zafiyet veritabanı kaliteden çok niceliğe odaklanıyor ve Dependabot akılsız bir spam uyarı sistemi gibi çalışıyor
Sorun sadece fonksiyon yanlış şekilde çağrıldığında ortaya çıkıyorsa, büyük ihtimalle kod zaten düzgün çalışmıyordu
GCP konteyner imaj taraması, Vanta'ya tonla CVE uyarısı gönderiyor ama bunların çoğu ya düzeltilemez durumda ya da gerçekte kullanılmayan yollarla ilgili
Böyle bağlama dayalı filtreleme yapan bir araç var mı diye merak ediyorum
Sonuçlar genel olarak olumlu ama kod tabanı büyük ve bağımlılıklar çok olduğunda CVE sayısını azaltmak hâlâ zor