PyPI, npm ve RubyGems'i sızan secret'lar için taradım. Microsoft, Automattic, Palo Alto ve daha fazlası
PyPI, npm, NuGet, RubyGems… Geliştiricilerin projelerine taşıdığı paketlerin çoğu buradan geliyor. Bu paketlerin içinde bazen secret da sızıyor: API anahtarları, private key’ler, token’lar. Bir kere yayına çıktı mı veri ihlali ve yetkisiz erişim riski artıyor. Bu yazıda bu depoları nasıl taradığımı, ne bulduğumu ve raporlama sürecini anlatıyorum.
Paket depolarında secret taraması neden önemli?
Paket depoları açık kaynak kütüphanelerin ana kaynağı. Projeye paket ararken ilk bakılan yer burası. Ama paketler zafiyetsiz değil; sızan secret’lar ciddi risk. Bir AWS anahtarı, bir private key pakete girmişse, yetkisiz erişim ve veri sızıntısı kapıda.
Secret derken ne kastediyoruz?
API key, auth token, şifre, encryption key gibi hassas bilgiler. Bunların paket içinde veya public repo’da görünmesi istenmez; bir kere sızdı mı sonuçları ağır olabiliyor.
Ne tür secret’lar çıkıyor:
- AWS access token
- Private key
- Veritabanı şifreleri
- API key
- JWT token
- Webhook URL
Sızan secret’lar neye yol açar?
Pakete yanlışlıkla secret girmesi, kötü niyetli biri için açık kapı bırakır. Örneğin AWS access key ele geçerse yetkisiz erişim, veri ihlali, mali kayıp ve operasyonel sorunlar çıkabilir.
Olası etkiler:
- Veri ihlali
- Mali kayıp
- Servis kesintisi
- Phishing
- Dolandırıcılık
Nasıl taradım? Üç EC2 ile
Her büyük paket deposu için ayrı EC2 kullandım: PyPI, npm, RubyGems, NuGet. Her biri kendi deposundaki güncel paketleri indirip GitLeaks ile tarıyor.
PyPI (Python Package Index)
PyPI’ye özel EC2, en son indirilen paketleri alıyor, içeriği açıyor ve GitLeaks ile secret taraması yapıyor. PyPI Python ekosisteminin merkezi; buradaki sızıntılar doğrudan projelere yansıyor.

PyPI tarama akışı:
- Son paket indirmelerini al
- Paket içeriğini çıkar
- GitLeaks ile tara
- Bulguları raporla
npm (Node Package Manager)
Node.js tarafı için ayrı bir EC2: npm registry’den güncel paketleri indiriyor, çıkarıyor ve yine GitLeaks ile tarıyor. npm JavaScript dünyasının bel kemiği; burada da sızıntı çok.

npm tarama akışı:
- npm registry’den son paketleri indir
- İçeriği analiz et
- GitLeaks ile secret tespiti
- Sonuçları kaydet
RubyGems ve NuGet: tek makinede ikisi
Üçüncü EC2 hem RubyGems hem NuGet için çalışıyor. İki depodan da güncel paketleri alıp GitLeaks ile tarıyor; Ruby ve .NET tarafındaki sızıntıları raporluyor.

RubyGems ve NuGet tarama akışı:
- Her iki depodan paket indir
- İçeriği çıkar
- GitLeaks taraması
- Secret’ları raporla
Otomasyon: disk yönetimi
Çok sayıda paket indirip tararken disk dolabiliyor. Yeterli alan kalmazsa süreç yarıda kalıyor. Bunu engellemek için hem taramayı hem disk kontrolünü yapan bir script yazdım.
Script’e kısa bakış
free.sh kabaca şunu yapıyor: diskte belirli bir eşikten (ör. 2 GB) az alan kaldığında önce GitLeaks taramasını çalıştırıp çıktıyı kaydediyor, sonra indirilen paketleri ve geçici dizinleri siliyor. Böylece sürekli tarama yaparken disk taşmıyor.
#!/bin/bash
# Define the threshold for available disk space in GB
threshold=2
# Check available disk space in GB
available_space=$(df -h / | awk 'NR==2 { print $4 }' | sed 's/G//')
# Convert the available space to a numeric value
available_space_numeric=$(echo $available_space | sed 's/,//')
# Compare available space with the threshold
if [ "$available_space_numeric" -lt "$threshold" ]; then
# Run gitleaks and write the output to a temporary file
tmp_file=$(mktemp)
echo $tmp_file | notify
gitleaks detect --no-git -v downloaded_packages/ --config ~/config.toml -r=$tmp_file
# Check if the downloaded_packages directory exists
if [ -d "downloaded_packages" ]; then
# Delete the downloaded_packages directory
rm -rf downloaded_packages
rm -rf .npm
fi
else
echo "Available disk space is greater than or equal to 2GB."
fi
Özet:
- Eşik: 2 GB (ayarlanabilir)
- Eşik altına inince: GitLeaks çalışıyor, çıktı kaydediliyor,
downloaded_packagesve.npmsiliniyor - Böylece disk dolmadan tarama döngüsü devam ediyor
PackageSpy: açık kaynak secret tarama aracı
PackageSpy, paket depolarında secret, kullanıcı tanımlı anahtar kelime ve pattern aramak için yazdığım açık kaynak bir araç. Kendi projelerinizi veya belirli depoları taramak için kullanabilirsiniz.
Özellikler:
- Birden fazla paket yöneticisi: npm, PyPI, RubyGems ve daha fazlası
- Özelleştirilebilir kurallar: Kendi keyword ve pattern’lerinizi tanımlayabilirsiniz
- CLI: Komut satırından kolayca tetiklenir, CI/CD’ye eklenebilir
- Raporlar: Bulunan secret’lar, konumları ve kısa açıklamalarla raporlanır
Tarama sonuçları: ne çıktı?
npm’de ne buldum?

Node.js kullananlar npm’e aşina. Taramada npm paketlerinde en çok şunlar çıktı:
npm’de en sık görülen secret’lar:
- AWS access token (%34,3): En yaygın tür. Yanlış ellere geçerse AWS hesabına yetkisiz erişim mümkün.
- HashiCorp Terraform şifreleri (%20,6): Altyapıyı kodla yöneten Terraform; bu şifreler altyapıyı değiştirmeye imkân verir.
- Private key (%12,2): Ciddi risk. Kriptografik iletişimde kullanılıyor.
- Stripe access token (%7,2): Doğrudan finansal risk; ödeme işlemleri yapılabiliyor.
- Slack webhook URL (%25,7): Mesaj göndermek için kullanılabiliyor; phishing için de kullanılabilir.
- Telegram Bot API token (%14,3): Bot hesaplarını ele geçirme riski.
PyPI’de ne buldum?

Python geliştiricileri PyPI’ye güveniyor; ama taramada PyPI paketlerinde de ciddi oranda sızıntı çıktı.
PyPI’de en sık görülen secret’lar:
- AWS access token (%54,6): Açık ara en fazla görülen. Farklı seviyelerde AWS erişimi veriyor.
- HashiCorp Terraform şifreleri (%20,8): İkinci sırada.
- Private key (%10,4): Güvenli iletişimde kullanılan anahtarlar.
- JWT (%9,6): Kimlik doğrulama ve bilgi taşımak için kullanılıyor; sızınca risk büyük.
- Diğerleri: Etsy token, Slack webhook, Telegram Bot API key vb. daha düşük oranlarda.

RubyGems’te ne buldum?

RubyGems, Ruby paketlerinin merkezi. Orada da sızan secret oranı yüksek çıktı.
RubyGems’te en sık görülen secret’lar:
- AWS access token (%66,5): En büyük pay. Diğer depolara göre oran burada daha yüksek.
- HashiCorp Terraform şifreleri (%15,8): Altyapıyı kod olarak yöneten Terraform şifreleri.
- Private key (%9,3): Şifreleme ve güvenli iletişimde kritik.
- JWT (%6,8): Kimlik doğrulama için yaygın.
- Stripe access token (%1,7): Finansal risk.
- Slack webhook, OpenAI API key vb. daha az oranda ama yine de görülüyor.

Bulguları raporlama
Tarama sonucu ortaya çıkan kritik sızıntıları ilgili şirketlere ve proje sahiplerine bildirdim. Etkilenen servislerin sahibi veya yöneticisi olan firmalara ulaşmak için paket metadata’sı ve public iletişim kanallarını kullandım.
İletişime nasıl geçtim?
npm, PyPI, RubyGems, NuGet gibi depolardaki paket bilgilerinden (package.json, METADATA, gemspec, nuspec) ve proje dokümantasyonundan iletişim bilgilerini topladım. Gerekirse mailing list, forum ve paket yöneticisinin kendi mesaj sistemlerini kullandım.
Raporlama adımları:
- Paket metadata’sında (package.json, METADATA, gemspec, nuspec) iletişim bilgisine bak
- Proje / repo ve dokümantasyonda maintainer bilgisi ara
- Mailing list, forum, topluluk kanallarını kontrol et
- npm owner, PyPI maintainer mesajı gibi kanalları kullan
Raporladığım yerler
İletişim bilgilerini bulduğum şirket ve organizasyonlara bulguları ilettim. Raporladığım taraflar arasında Microsoft, Automattic, Mapbox, Keeper Security, Pulumi, Weblate, Palo Alto Networks, Telefonica ve indirme sayısı yüksek birkaç özel proje var (toplamda 7,5M+ indirme).
Kullandığım kanallar:
- E-posta ile detaylı rapor
- HackerOne / Bugcrowd gibi platformlar (şirket programa dahilse)
- Şirketlerin güvenlik açıklama (disclosure) politikalarına uyum
- Güvenlik ekipleriyle takip ve iletişim
Özet
Paket depolarında secret taraması, uygulama güvenliği için önemli bir pratik. Ben üç EC2 ile PyPI, npm, RubyGems ve NuGet’i taradım; GitLeaks ve kendi yazdığım PackageSpy ile sonuçları topladım. AWS token’lar her depoda en sık görülen sızıntı türü. Taramayı sürekli ve ölçekli yapmak için otomasyon ve disk yönetimi şart. Bulduğunuz sızıntıları ilgili taraflara sorumlu şekilde raporlamak da ekosistemi güçlendiriyor.
Kısa çıkarımlar:
- Paket depolarında secret taraması ciddiye alınması gereken bir güvenlik adımı
- En yaygın sızıntı türü AWS token’ları
- Sürekli tarama için otomasyon ve disk yönetimi gerekli
- PackageSpy gibi araçlar kendi taramalarınızı yapmanızı kolaylaştırır
- Sorumlu açıklama (responsible disclosure) güvenlik ekosistemine katkı sağlar