2026, PyPI için yoğun bir yıl oldu. Özellikle yapay zekâ altyapısında kullanılan paketler hedefteydi. İki olayı ve Python projelerinde alınabilecek somut önlemleri özetliyorum.
LiteLLM (24 Mart 2026)
- TeamPCP olarak izlenen grup, LiteLLM'in yayın sürecini ele geçirip 1.82.7 ve 1.82.8 sürümlerini zararlı içerikle yayımladı. Paket ayda yaklaşık 95 milyon kez indiriliyor.
- Zararlı kod bir
.pthdosyası ile çalışıyordu.site-packagesiçindeki.pthdosyaları yorumlayıcı her başladığında işlenir; paketin import edilmesine bile gerek yoktur. - Zscaler ThreatLabz'a göre zararlı sürümler karantinaya alınmadan önce yaklaşık üç saat yayında kaldı.
- Aynı grup, daha önce Trivy ve Checkmarx KICS gibi güvenlik araçlarını da hedef almıştı.
PyTorch Lightning (Nisan 2026 sonu)
2.6.2 ve 2.6.3 sürümleri, import sırasında çalışan kimlik bilgisi hırsızı içeriyordu. Kök neden, CI/CD sırlarına erişen tek bir zararlı GitHub Actions iş akışı dosyasıydı.
Yeni risk: "slopsquatting"
Yaklaşık 200 bin Python istemi üzerinde yapılan bir çalışmada, tüm büyük dil modellerinin PyPI'de var olmayan paket adları ürettiği görüldü. Saldırganlar bu uydurma adları kaydedip, yapay zekânın önerdiği pip install komutunu körü körüne çalıştıranları bekleyebiliyor. Asistanın önerdiği her paketin PyPI sayfasına, yayın geçmişine ve indirme sayısına bakın.
Önlemler
- Hash ile sabitleme: Sürüm sabitlemek yetmez; hash doğrulaması zararlı yeniden yayımlamayı engeller.
# requirements.in dosyasından hash'li kilit dosyası üret pip-compile --generate-hashes requirements.in pip install --require-hashes -r requirements.txt # uv kullanıyorsanız uv lock uv sync --locked - Yeni sürümleri hemen almayın: LiteLLM'deki zararlı sürümler birkaç saat yayında kaldı. Otomatik güncelleme araçlarında yeni sürümler için birkaç günlük bekleme süresi tanımlayın.
.pthdosyalarını denetleyin: Ortamınızdaki beklenmedik.pthdosyalarını listeleyin:
İçindepython -c "import site,glob; [print(p) for d in site.getsitepackages() for p in glob.glob(d+'/*.pth')]"importile başlayan satır olan ve tanımadığınız her dosya incelenmeli.- Geliştirme ortamı da üretim gibidir: Geliştiricinin makinesinde ve CI'da bulut anahtarları bulunur. Paket kurulumunu izole bir ortamda (container) yapın, CI çalıştırıcılarının internete çıkışını kısıtlayın.
- Kendi paketinizi yayımlıyorsanız: Uzun ömürlü API token yerine PyPI'nin trusted publishing (OIDC) özelliğini kullanın, GitHub Actions iş akışlarında
pull_request_targetkullanımını ve sırların hangi adımlara verildiğini gözden geçirin. - Olay sonrası: Etkilenen sürüm kurulduysa, o ortamdan erişilebilen tüm anahtarları (bulut, Git, PyPI, veritabanı) yenileyin ve bulut denetim kayıtlarını inceleyin.
Siz projelerinizde bağımlılık güvenliği için hangi araçları kullanıyorsunuz? (pip-audit, uv, Socket, Dependabot…)
