Neyi tarıyor?
Trivy, Aqua Security’nin geliştirdiği açık kaynak bir güvenlik tarayıcısı. Belgelerine göre iki soruya cevap veriyor: Neyi tarayayım ve ne arayayım?
- Hedefler: Container imajı, dosya sistemi, Git deposu, sanal makine imajı, Kubernetes kümesi ve SBOM (yazılımın içindeki bütün paketlerin listesi).
- Tarayıcılar: Bilinen açıklar (CVE), hatalı ayarlar (Dockerfile, Kubernetes, Terraform gibi IaC dosyaları), kodda unutulmuş gizli anahtarlar ve lisanslar.
Videoda kurulum bile yok. Trivy’yi bir Docker container’ı olarak çalıştırıp resmî nginx imajını tarıyor. Sonra kasten kötü yazılmış bir Dockerfile’ı tarayıp root kullanıcısıyla çalışma gibi sorunları gösteriyor. Videoya göre Docker Hub’daki imajların büyük çoğunluğunda yüksek ya da kritik seviyede açık var. GitLab’in container taraması da arka planda Trivy kullanıyor.
Açığı nasıl buluyor?
Trivy imajın içindeki paketlerin listesini çıkarıp bir açık veritabanıyla karşılaştırıyor. Burada iki tür paket var:
- İşletim sistemi paketleri (
apt,apkile gelenler). Trivy bunlar için dağıtımın kendi güvenlik kayıtlarına bakıyor: Debian, Ubuntu, Red Hat, Alpine. - Dil paketleri (npm, pip, Maven, Go). Bunlar için ağırlıklı olarak GitHub Advisory Database kullanılıyor.
Önem seviyesi de bu kaynaktan geliyor. Belgelerdeki örnek güzel: Aynı açık NVD’de “HIGH”, Red Hat’te “Low” görünebiliyor, çünkü dağıtım kendi derlemesindeki gerçek etkiyi biliyor.
Sonucu okumak
Her satırda paket, CVE numarası, önem seviyesi, yüklü sürüm ve düzeltilmiş sürüm (fixed version) var. En işe yarayan sütun sonuncusu: Sana “şu sürüme geç” diyor. Düzeltmesi henüz çıkmamış açıkları --ignore-unfixed ile gizleyebilirsin. Bilerek kabul ettiğin bir açığı .trivyignore dosyasına yazarsın. Oraya bir bitiş tarihi (exp:2026-06-01) koymak iyi bir alışkanlık: Kural sonsuza kadar unutulup kalmaz. Açık sayısını baştan azaltmanın bir yolu sertleştirilmiş temel imajlar: Docker Hardened Images yazımız.
CI’da kullanmak
Asıl değer, taramanın pipeline’ı durdurabilmesi. trivy image --severity HIGH,CRITICAL --exit-code 1 benim-imajim gibi bir komut, kritik bir açık bulursa hata koduyla çıkıyor ve derleme duruyor. GitHub Actions için hazır trivy-action var.
Sınırını da bil: Trivy sadece bilinen ve kayda geçmiş açıkları buluyor. Henüz duyurulmamış bir açığı ya da yeni yayımlanmış zararlı bir paketi göremez. axios saldırısındaki gibi sürümler ilk saatlerde hiçbir veritabanında yoktu.
Sonra ne oldu?
Bu videodan on gün sonra Trivy’nin kendisi hedef oldu. Aqua’nın ve GitHub’daki güvenlik bildiriminin (CVE-2026-33634) anlattığı zincir şöyle:
- 28 Şubat 2026:
hackerbot-clawadlı otomatik bir bot, Trivy deposundakipull_request_targettetikleyicili bir iş akışını kullanıp yetkili bir token çaldı. Depo bir süre gizlendi, v0.27.0 ile v0.69.1 arasındaki GitHub sürüm sayfaları silindi. Aqua 1 Mart’ta anahtarları yeniledi, ama yenileme tek seferde yapılmadı. Saldırgan elindeki erişimi korudu. - 19 Mart: Saldırgan
trivy-action’ın 77 sürüm etiketinden 76’sını vesetup-trivy’nin 7 etiketinin hepsini zararlı koda yönlendirdi. Ayrıca zararlı bir Trivy v0.69.4 yayımladı. Kod, CI makinesinin belleğinden ve diskinden bulut anahtarlarını, SSH anahtarlarını, token’ları topluyor, şifreleyipaquasecurtiydiye yanlış yazılmış bir alan adına gönderiyordu. Action tarafı yaklaşık 12 saat açık kaldı. - 22 Mart: Docker Hub’a ayrıca zararlı 0.69.5 ve 0.69.6 imajları yüklendi.
- 24 Mart: LiteLLM, PyPI’da yaklaşık 40 dakika kalan iki zararlı sürümün, CI’daki güvenlik taramasında kullandıkları Trivy’den kaynaklandığını düşündüğünü yazdı.
Bildirime göre Action’ı Nisan 2025’ten sonraki bir commit SHA’sına sabitleyenler etkilenmedi, çünkü saldırgan etiketleri taşıdı, commit’leri değiştiremedi. Bu yüzden ders aynı: uses: aquasecurity/trivy-action@v0.34.0 yerine tam commit SHA’sını yaz. Tarayıcıya sadece ihtiyacı olan izinleri ver. Aynı pull_request_target tuzağının birkaç ay sonra nasıl tekrarlandığını TanStack yazımızda anlattık. Trivy bugün aktif: Son sürüm 14 Ekim 2026’da çıkan v0.76.0.
Güncelleme: LiteLLM Ekim’de bu kez Trivy’den bağımsız ikinci bir tedarik zinciri saldırısı yaşadı (LiteLLM 1.107.0 yazısı).
Düşün
- CI’ında çalışan üçüncü taraf action’ların kaçı etiketle, kaçı SHA ile sabitli?
- Güvenlik tarayıcın hangi gizli anahtarları görebiliyor? Gerçekten görmesi gerekiyor mu?
Videoyu izle
Kaynaklar (11, İngilizce)
- Better Stack: Don’t Deploy Until You Run This... (video) (yeni sekmede açılır)
- GitHub: aquasecurity/trivy (yeni sekmede açılır)
- Trivy Docs: Guide (yeni sekmede açılır)
- Trivy Docs: Vulnerability scanner (yeni sekmede açılır)
- Trivy Docs: Filtering (yeni sekmede açılır)
- GitLab Docs: Container Scanning (yeni sekmede açılır)
- GitHub Security Advisory GHSA-69fq-xp46-6x23 (CVE-2026-33634) (yeni sekmede açılır)
- Aqua Security: Trivy supply chain attack, what you need to know (yeni sekmede açılır)
- StepSecurity: Trivy compromised a second time, malicious v0.69.4 release (yeni sekmede açılır)
- LiteLLM: Security update, March 2026 (yeni sekmede açılır)
- Trivy: Releases (yeni sekmede açılır)
Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.