Ne oldu?
LiteLLM, Python’da OpenAI, Anthropic, Google gibi onlarca model sağlayıcısına tek bir arayüzle bağlanmanı sağlayan bir kütüphane. Haftada yaklaşık 23 milyon kez indiriliyor. Birçok şirket onu “AI gateway” olarak, yani bütün model anahtarlarının durduğu bir ara sunucu olarak da çalıştırıyor.
21 Ekim 2026’da PyPI’a litellm 1.107.0 çıktı. Yedi wheel dosyasının hepsi zararlıydı. PyPI’da 11:39 ile 13:23 (UTC) arasında kaldı. Docker Hub ve GHCR’daki v1.107.0, latest, main-latest ve main-stable etiketleri de 11:46’dan itibaren zararlı imajı gösterdi: GHCR’da 13:51’e, Docker Hub’da 14:20’ye kadar. İlginç olan şu: GitHub’daki resmi v1.107.0 etiketi temiz. Paket, tire işaretiyle yazılmış sahte bir depodan (Berri-AI/litellm) derlenmişti.
Zararlı kod ne yapıyordu?
Paket site-packages’a üç dosya bırakıyordu: cook.pth, cook.py ve sitecustomize.py. Python, .pth dosyalarını ve sitecustomize.py’yi her açılışta kendiliğinden çalıştırıyor. Yani import litellm yazmana bile gerek yoktu. O ortamda çalışan her Python komutu, pip dahil, zararlı kodu tekrar tetikliyordu.
- Hırsız: Bulut anahtarlarını (AWS, GCP, Azure), SSH ve GPG anahtarlarını,
.envdosyalarını, Git, npm ve PyPI token’larını, tarayıcı şifrelerini topluyordu. Claude Code, Cursor, Codex gibi kodlama araçlarının ayarlarını ve LiteLLM proxy veritabanındaki sağlayıcı anahtarlarını da alıyordu. Hepsini şifreleyiplitellm.devadlı sahte bir alan adına gönderiyordu. - Yükleyici: Arka planda saatte bir GitHub’daki bir dosyaya bakıp oradan yeni Python kodu indirip çalıştıran bir süreç bırakıyordu. Datadog, bu ikinci aşamada gerçek bir yük görmediğini yazıyor.
Saldırgan nasıl girdi?
LiteLLM’in kendi kök neden analizi uzun bir zincir anlatıyor. Mayıs’ta bir ana anahtar (master key) yanlışlıkla herkese açık bir depoya commit’lenmiş. Commit silinmiş ama anahtar iptal edilmemiş. 10 Ekim’de saldırgan bu anahtarla iç bir servise girip bir organizasyon sahibinin GitHub CLI token’ını almış. Sonra CI’da geçici dallarda iş akışları çalıştırıp iki geliştiricinin daha token’ını sızdırmış. 21 Ekim’de dal korumasını kapatmış, sürüm iş akışını sahte depoya yönlendirmiş ve onay kapısını ikinci bir token’la geçmiş. Kayıtları da silmiş.
Bu, LiteLLM’in bu yılki ikinci vakası. Mart’taki 1.82.7 ve 1.82.8’i Trivy yazımızda anlatmıştık. Arada bağlantı olduğu gösterilmedi.
Etkilendin mi?
pip show litellm1.107.0 diyorsa ortamı ele geçirilmiş say. Öncepipçalıştırma, o da zararlıyı tetikler.- Site-packages’ta
cook.pth,cook.py,litellm-1.107.0.dist-infove/tmp/remote_code_loader.lockdosyasını ara. Bulamaman temiz olduğunu kanıtlamaz. - Dosyaları sil, arka plan sürecini öldür. En iyisi ortamı ya da imajı sıfırdan kur,
litellm==1.106.2’ye sabitle. - O makinenin erişebildiği her şeyi değiştir: bulut rolleri, sağlayıcı anahtarları, LiteLLM master ve sanal anahtarları, veritabanı şifresi.
Neden AI anahtarları?
Çalınan bir model anahtarı doğrudan para demek. Saldırgan senin hesabına binlerce dolarlık model çağrısı yapabiliyor ya da anahtarı satabiliyor. Bir modelin cevaplarını toplu toplayıp başka bir modeli eğitmek (distillation) için de kullanılıyor. Aynı hafta Railway, saldırganın AI sağlayıcı anahtarları için şifreli ortam değişkenlerinin bir kısmını çözdüğünü ve dağıtımları durdurduğunu açıkladı. OpenCode Console da kayıtlı sağlayıcı anahtarlarının sızmış olabileceğini duyurdu ve bunu büyük çaplı bir distillation saldırısına bağladı.
Hızlı mı, yavaş mı güncelleyeceksin?
Videonun sorusu güzel: Sıfırıncı gün açığına yakalanmayacak kadar hızlı, tedarik zinciri saldırısına yakalanmayacak kadar yavaş güncellemek. Pratikte:
- Sabitle ve kilitle: Tam sürüm yaz,
uv.lockgibi hash’li bir kilit dosyası kullan. Docker’dalatestyerine digest kullan. - Yeni sürümü beklet: uv’de
exclude-newer = "7 days", pip’te--uploaded-prior-to P3Dbirkaç günlük sürümleri dışarıda bırakıyor. Bu zararlı sürüm iki saat bile dayanmadı. - İstisnayı bilinçli yap: PHP2Shell gibi bir güvenlik yaması geldiğinde o paketi elle, hemen güncelle.
npm tarafındaki benzer ayarlar bu yazıda.
Düşün
- Projende yeni bir sürüm yayımlandıktan kaç dakika sonra kurulabiliyor?
- Bir makine ele geçirilse hangi anahtarları değiştirmen gerekir? Listesi elinde var mı?
Videoyu izle
Kaynaklar (12, İngilizce)
- Fireship: The most vulnerable week in internet history... (video) (yeni sekmede açılır)
- LiteLLM: Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised (yeni sekmede açılır)
- LiteLLM: The attack chain behind the v1.107.0 LiteLLM release (yeni sekmede açılır)
- GitHub: BerriAI/litellm issue #47826 (litellm 1.107.0 compromised) (yeni sekmede açılır)
- OSV: MAL-2026-2144, malicious code in litellm (PyPI) (yeni sekmede açılır)
- PyPI: litellm (yeni sekmede açılır)
- Datadog Security Labs: LiteLLM compromised on PyPI and Docker (yeni sekmede açılır)
- StepSecurity: litellm 1.107.0 compromised, backdoored wheels with credential stealer (yeni sekmede açılır)
- Railway: Preliminary Report, October security incident (yeni sekmede açılır)
- The Hacker News: OpenCode Console breach may have exposed OpenAI, Anthropic and Google API keys (yeni sekmede açılır)
- uv docs: exclude-newer setting (yeni sekmede açılır)
- pip docs: pip install --uploaded-prior-to (yeni sekmede açılır)
Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.