Kod, secret ve bağımlılıklar için GitHub güvenlik taraması
RepoVerse'e bir GitHub reposu ver; kodu bir güvenlik incelemecisi gibi okusun: istekten gelen veriyi tehlikeli hale geldiği çağrıya kadar izlesin, kilitli her bağımlılığı bilinen zafiyetlere karşı kontrol etsin ve repoya hiç girmemesi gereken kimlik bilgilerini bulsun.
Neleri kontrol eder
Üç tür sorun, her birinin kendi kanıtıyla. Kod açıkları, JavaScript ve TypeScript'i TypeScript derleyicisiyle ayrıştıran ve değerleri atamalar, closure'lar, fonksiyon çağrıları ve dosyalar arasında izleyen bir veri akışı motoruyla bulunur. Satır kuralları Python, Go, Ruby, PHP, Java ve yapılandırma dosyalarındaki örüntüleri kapsar. Bağımlılıklar lockfile'dan okunur; kontrol edilen sürüm aralığın tabanı değil, gerçekten kurulu olandır.
- Injection: SQL, shell komutları, eval, MongoDB $where ve operatör injection'ı, şablon injection'ı
- SSRF, dizin gezinme (path traversal), açık yönlendirme, düzenli ifade kaynaklı servis dışı bırakma (ReDoS)
- Kırık erişim kontrolü: sahiplik kontrolü olmadan istekten gelen ID ile arama, tanımlı ama hiç kullanılmayan admin kontrolleri
- Oturum ve kimlik doğrulama: düz metin parolalar, eksik CSRF koruması, güvensiz oturum cookie'leri, session fixation
- Secret'lar: repoya eklenmiş bulut anahtarları, token'lar ve özel anahtarlar
- npm, yarn, pnpm, Pipfile, poetry, Cargo, composer ve Gemfile lockfile'larından zafiyetli bağımlılıklar
Bulgu nasıl raporlanır
Her bulgu dosyayı ve satırı, CWE'yi, ne kadar kötü olacağını ve — ayrı olarak — motorun ne kadar emin olduğunu söyler. İzlenmiş bir bulgu kaynaktan hedefe yolla birlikte gelir: başladığı istek alanı, geçtiği fonksiyon çağrıları ve veritabanı sorgusuna ya da shell'e ulaştığı satır. Birkaç satır arayla tekrar eden aynı hata, tüm konumları listelenmiş tek bulgu olarak gruplanır; böylece en üstteki sayı bir anlam taşır.
Her bulgu, bir saldırganın ne elde edeceğini ve neyin değişmesi gerektiğini söyler. Bağımlılıklarda rapor, kurulu sürümü manifest'in istediği aralığın yanında, paketin doğrudan mı yoksa başka bir paket üzerinden mi geldiğini ve onu düzelten sürümü gösterir.
İddia değil, ölçüm
Motor, tek bir commit'e sabitlenmiş ve bilerek zafiyetli bırakılmış bir Node.js uygulaması olan OWASP NodeGoat'a karşı test edilir. Etiketlenmiş her açık — sunucu tarafı JavaScript injection, NoSQL injection, IDOR, eksik erişim kontrolü, açık yönlendirme, ReDoS, SSRF, güvensiz oturumlar — bulunmalıdır; eski yanlış alarmlar geri gelmemeli, hâlâ kaçırılan açıklar ise saklanmak yerine listelenir. RepoVerse'ün kendi front-end kodunda çalıştırıldığında hiç yanlış alarm vermez.
Neleri yapmaz
Bu statik analizdir: kodu okur, asla çalıştırmaz. İzlenmiş bir akış, yolun kaynak kodda var olduğu anlamına gelir; çalışan bir exploit gösterildiği anlamına gelmez. Uygulamana özgü iş mantığı hataları hâlâ bir insan gerektirir. Herkese açık bir repoyu taramak ve 3D şehrini gezmek ücretsizdir; güvenlik incelemesi Pro planın parçasıdır çünkü her inceleme zafiyet veritabanını istek anında sorgular.
Neleri kontrol eder
- Kritikİstek girdisi kod olarak çalıştırılıyor
İsteği gönderen, sunucuda hangi JavaScript'in çalışacağını seçer — sürecin yetkileriyle dosya okur, veritabanına ulaşır, shell açar.
veri akışı · CWE-95
- Yüksekİstek girdisi SQL sorgusunun içine yazılıyor
Çağıran sorguyu yeniden yazabilir: başka kullanıcıların satırlarını okur, giriş kontrolünü atlar veya veriyi değiştirir.
veri akışı · CWE-89
- Kritikİstek girdisi bir shell komutuna ulaşıyor
Girdideki bir `;` veya `$(…)` sunucuda ikinci bir komut çalıştırır.
veri akışı · CWE-78
- Yüksekİstek girdisi MongoDB `$where` ifadesinin içinde çalışıyor
`$where`, veritabanının çalıştırdığı JavaScript'tir. Özel bir değer tüm belgeleri döndürebilir (`1'; return true; '`) veya sunucuyu kilitleyebilir (`';while(true){}'`).
veri akışı · CWE-943
- Yüksekİstek girdisi sunucunun HTTP isteğini nereye atacağını seçiyor
Uygun ağ koşullarında sunucu iç servisleri veya bulut metadata uç noktasını (169.254.169.254) çağırmaya ve yanıtı geri vermeye zorlanabilir.
veri akışı · CWE-918
- Yüksekİstek girdisi bir dosya yoluna dönüşüyor
`../` dizileri hedeflenen klasörün dışına çıkar ve sürecin erişebildiği her dosyayı okur veya üzerine yazar.
veri akışı · CWE-22
- Yüksekİstek girdisi sayfaya HTML olarak yazılıyor
Girdideki script, kurbanın tarayıcısında senin origin'inde ve onun oturumuyla çalışır.
veri akışı · CWE-79
- Yüksekİstek girdisi geri izlemeye açık bir düzenli ifadeyle eşleştiriliyor
İç içe niceleyiciler üstel geri izleme yapar. Birkaç düzine özel karakter CPU'yu kilitler; Node'un tek event loop'unda bu, sunucudaki her isteği durdurur.
veri akışı · CWE-1333
- YüksekKayıt istekten gelen ID ile aranıyor, sahiplik kontrolü yok
URL'deki ID'yi değiştirmek başka bir kullanıcının verisini gösterir veya değiştirir (IDOR / BOLA).
veri akışı · CWE-639
- YüksekParola hash'lenmeden saklanıyor
Veritabanını okuyabilen herkes — bir yedek, bir injection, bir içeriden kişi — tüm kullanıcıların parolalarını, onlarla da diğer sitelerdeki hesaplarını ele geçirir.
veri akışı · CWE-256
- OrtaCSRF koruması olmayan cookie oturumları
Başka bir site, giriş yapmış kullanıcı adına durum değiştiren route'lara form gönderebilir — tarayıcı oturum cookie'sini kendiliğinden ekler.
veri akışı · CWE-352
- YüksekKimlik bilgisi düz metin olarak atanmış
Bir parola, secret, token veya API anahtarı yapılandırmadan okunmak yerine doğrudan string olarak atanmış.
örüntü
Sorular
- GitHub güvenlik taraması hangi dilleri destekliyor?
- Veri akışı analizi Express, Next.js ve Node.js kodu dahil JavaScript ve TypeScript'i kapsar. Satır kuralları Python, Go, Ruby, PHP, Java, Kotlin, C#, Dockerfile'lar, GitHub Actions workflow'ları ve yaygın yapılandırma dosyalarını kapsar. Bağımlılık kontrolleri npm, PyPI, crates.io, Packagist, RubyGems ve Go modüllerini kapsar.
- Repoya eklenmiş secret'ları bulur mu?
- Evet. Sağlayıcı formatındaki anahtarlar (AWS, GitHub, Stripe, Slack, OpenAI ve diğerleri), özel anahtarlar ve secret adlı değişkenlere atanmış yüksek entropili kimlik bilgileri, değer rapordan silinerek raporlanır. Placeholder değerler ve test klasörlerindeki fixture'lar tanınır ve dışarıda bırakılır.
- npm audit'ten farkı ne?
- npm audit yalnızca bağımlılıkları kontrol eder. RepoVerse ayrıca kendi kodunu injection, erişim kontrolü ve oturum açıkları için okur, veriyi dosyalar arasında izler ve aynı raporda birden fazla ekosistemi lockfile'larından kapsar.
- Kodum saklanıyor veya bir yere gönderiliyor mu?
- Herkese açık repolar anonim olarak okunur. Yalnızca oluşturulan şehir ve inceleme saklanır. Özel repolar GitHub ile giriş yapmayı gerektirir ve token yalnızca istediğin repoyu çekmek için kullanılır.
İlgili
- Lockfile'ını okuyan bağımlılık zafiyet taramasınpm, yarn, pnpm, PyPI, Cargo, Composer ve RubyGems lockfile'larını OSV zafiyet veritabanına karşı kontrol et. Kurulu kesin sürümler, dolaylı yollar ve düzeltilmiş sürümler.
- SQL injection: nedir ve nasıl düzeltilirSQL injection (CWE-89) nedir, zafiyetli bir sorgunun yanında düzeltilmiş hali ve kodundaki string ile kurulan SQL'i veri akışı analiziyle nasıl bulursun.
- Koda gömülü secret'lar: kodda, commit'lerde ve paketlerde API anahtarlarıRepoya eklenmiş veya sitenin JavaScript'inde açıkta kalan API anahtarlarını ve token'ları bul (CWE-798); dosyayı silmek neden yetmez, nasıl yenilenir.
- SSRF: sunucunun nereye bağlanacağına istek karar verdiğindeSSRF (CWE-918) isteğin sunucunun nereye bağlanacağını seçmesine nasıl izin verir — iç servisler, bulut metadata'sı — ve URL'ler nasıl güvenle kurulur.
- Kanıtını gösteren web sitesi güvenlik taramasıPasif web sitesi güvenlik taraması: HTTPS ve HSTS, CSP, cookie'ler, karışık içerik, açıkta kalan anahtarlar ve eski JavaScript kütüphaneleri — kanıtıyla birlikte.
Güncellendi 2026-10-11