5 puan yazan darjeeling 26 일 전 | 1 yorum | WhatsApp'ta paylaş

🔑 Temel özet

Trivy bağımlılık zafiyeti üzerinden API token'ları ele geçirildi ve bu zemin kullanılarak PyPI'da litellm ve telnyx paketlerinin kötü amaçlı sürümleri dağıtıldı. Kötü amaçlı kod, kurulur kurulmaz çalışarak hassas kimlik bilgilerini ve dosyaları topladı, ardından bunları harici bir sunucuya sızdırdı.


⚠️ Bu kötü amaçlı yazılımı özel kılan ne

Önceki PyPI kötü amaçlı paketlerinin çoğu yeni oluşturulmuş paketlerdi (typosquatting vb.). Bu saldırı farklı. Halihazırda yaygın kullanılan açık kaynak paketlere kötü amaçlı kod enjekte etme yöntemini kullanıyor.

Enjeksiyon yolu iki tane:

  • Güvenliği zayıf depo, release workflow veya kimlik doğrulamaya sahip açık kaynak projeleri doğrudan hedef almak
  • En son sürümü yükleyen geliştirici makinelerinden API token'ları ve anahtarları çalmak

Çalınan PyPI veya GitHub API token'larıyla başka açık kaynak paketleri de ek olarak ihlal eden bir zincirleme saldırı yapısı söz konusu.


📅 Olay zaman çizelgesi

LiteLLM

Kötü amaçlı sürümün erişilebilir olduğu süre boyunca 119.000'den fazla kez indirildi.
PyPI, "kötü amaçlı yazılım bildirimi" özelliği üzerinden 13 bildirim aldı.

Aşama Süre
Yükleme → ilk bildirim 1 saat 19 dakika
İlk bildirim → karantina 1 saat 12 dakika
Toplam maruz kalma süresi 2 saat 32 dakika

LiteLLM haftada yaklaşık 15 ila 20 milyon kez kuruluyor ve dakikada yaklaşık 1.700 kurulum yapılıyor. Bunların yaklaşık %40-50'sinde sürüm sabitlenmemişti ve en son sürüm otomatik olarak alınıyordu.

Telnyx

telnyx paketi, PyPI'nin güvenilir bildirimci havuzu (trusted reporters) sayesinde otomatik olarak karantinaya alındı.

Aşama Süre
Yükleme → ilk bildirim 1 saat 45 dakika
İlk bildirim → karantina 1 saat 57 dakika
Toplam maruz kalma süresi 3 saat 42 dakika

🛡️ Geliştiriciler için güvenlik önerileri

1. Dependency cooldowns

Yakın zamanda yayımlanan paketlerin belirli bir süre boyunca kurulmasını engelleyerek güvenlik araştırmacılarına ve PyPI yöneticilerine müdahale için zaman kazandıran bir stratejidir.

uv — şu anda destekleniyor:

# ~/.config/uv/uv.toml 또는 pyproject.toml  
[tool.uv]  
exclude-newer = "P3D"  # Son 3 gün içinde yayımlanan paketleri hariç tut  

pip v26.1 — Nisan içinde desteklenecek:

# ~/.config/pip/pip.conf  
[install]  
uploaded-prior-to = P3D  

> ⚠️ Cooldown her derde deva değildir. Güvenlik yaması gereken durumlarda paketin hemen kurulması gerekir; bu nedenle Dependabot·Renovate gibi zafiyet tarama araçlarıyla birlikte kullanılmalıdır.

2. Bağımlılık kilitleme (Lock files)

Yalnızca sürümleri kaydeden pip freeze bir lock file değildir. Güvenlik için checksum/hash içeren gerçek bir lock file gerekir.

Önerilen araçlar:

  • uv lock
  • pip-compile --generate-hashes
  • pipenv

🔒 Açık kaynak bakımcıları için güvenlik önerileri

1. Release workflow güvenliğini güçlendirin

  • Güvensiz tetikleyicileri kullanmayın — GitHub Actions'taki pull_request_target özellikle risklidir
  • Parametreleri ve giriş değerlerini zararsız hale getirin — template injection'ı önlemek için bunları ortam değişkenleri üzerinden geçirin
  • Değişken referans kullanmayın — Git etiketi yerine commit SHA kullanın, bağımlılık lock file'larını koruyun
  • İnceleme gerektiren dağıtım ayarları yapın — Trusted Publishers + GitHub Environments birleşimiyle dağıtım sırasında ek onay isteyin

GitHub Actions kullanıyorsanız workflow zafiyetlerini denetlemek için Zizmor aracını kullanmanız önerilir.

2. API token yerine Trusted Publishers kullanın

  • API token'ları uzun ömürlüdür, bu yüzden çalındıklarında hemen tespit edilmeleri zordur
  • Trusted Publishers kısa ömürlü token'lar kullanır; bu nedenle ele geçirilseler bile hemen kullanılmaları gerektiğinden risk daha düşüktür
  • Digital Attestations sayesinde, normal release workflow'undan geçmeyen dağıtımlar alt kullanıcılar tarafından tespit edilebilir

3. 2FA'yı zorunlu uygulayın

PyPI, 2024'ten itibaren paket dağıtımı için 2FA'yı zorunlu hale getirdi. Ancak yalnızca PyPI hesabında değil, GitHub, GitLab, e-posta gibi açık kaynak geliştirmeyle ilişkili tüm hesaplarda da 2FA (mümkünse donanım anahtarıyla) uygulanmalıdır.


💰 Bu faaliyeti desteklemek için

PyPI güvenlik faaliyetleri Python Software Foundation (PSF) desteğiyle yürütülüyor. PSF sponsorluk programı, doğrudan bağış veya sponsors@python.org üzerinden iletişime geçebilirsiniz.

> Mike Fiedler ve Seth Larson'ın PyPI güvenlik mühendisi pozisyonları Alpha-Omega tarafından destekleniyor.

1 yorum

 
yjcho9317 21 일 전

Bir MCP sunucusu oluşturup npm’e yüklemeyi denedim; bu olay raporu ise gerçekten ürkütücüydü.

MCP sunucuları da sonuçta doğrudan npm ve PyPI’a yükleniyor ve sürümü sabitlemeden kurulan epey çok durum var; ayrıca ihbar sistemi ya da trusted publisher gibi şeyler de henüz yok. LiteLLM yalnızca biraz daha fazla 2 saat açıkta kalmış olmasına rağmen indirme sayısı o seviyedeyse, bu tarafta bir kez içeri girildiğinde etkisinin oldukça uzun süre kalacağını düşündürüyor.

Claude Code tarafına da baktığımda, pip install sırasında bu tür koruma ayarlarının düzgün devreye girmediği durumlar olduğunu gördüm; bu yüzden akışta ajan kendi kendine paket kuruyorsa, bunun tam olarak nerede engellenmesi gerektiği belirsizleşiyor.