deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

İptal edilmeyen LiteLLM master key, PyPI ve Docker Hub üzerinden kötü niyetli 1.107.0 sürümünün yayınlanmasına izin verdi

Mayıs 2026'da sızan ve 136 gün boyunca geçerli kalan bir LiteLLM master key, saldırganın BerriAI GitHub organizasyonu üzerinde sahip düzeyinde kontrol elde etmesini ve PyPI, Docker Hub ile GHCR üzerinden kötü niyetli bir 1.107.0 sürümü yayınlamasını sağladı.

İptal edilmeyen LiteLLM master key, PyPI ve Docker Hub üzerinden kötü niyetli 1.107.0 sürümünün yayınlanmasına izin verdi

Yakalanan ama iptal edilmeyen bir anahtar

27 Mayıs 2026'da, herkese açık LiteLLM-Labs/lite-harness deposuna commit'lenen bir yapılandırma dosyası, LiteLLM'in ajanları düzenlemek için kullandığı araç olan bir Agent Platform dağıtımının master key'ini içeriyordu. Ekip hatayı fark etti, commit'i branch geçmişinden force-push ile kaldırdı ve açığa çıkan kimlik bilgilerini iptal için işaretledi; ancak master key'in kendisi hiç geçersiz kılınmadı. RedEye'nin de belirttiği gibi, force-push bir commit'i branch'in geçmişinden gizler, ama onu çoktan kopyalamış olan clone'lardan, mirror'lardan ve scraper'lardan gizlemez. Anahtar 136 gün boyunca geçerli kaldı.

Sızan anahtardan organizasyon sahipliğine

10 Ekim 2026'da, 69.48.229[.]143 adresinden bağlanan bir saldırgan bu anahtarı Agent Platform'da kimlik doğrulaması için kullandı ve servisin, self-hosted ajanların pull request açabilmesi için kullandığı bir GitHub CLI OAuth token'ını ele geçirdi. Token'ın kapsamı daraltılmamıştı ve GitHub organizasyon sahibinin hesabına aitti; bu da saldyırgana tüm BerriAI depoları üzerinde sahip düzeyinde haklar verdi. RedEye bunu merkezi hata olarak tanımlıyor: Tek görevi pull request açmak olan bir otomasyon kimlik bilgisi, tam organizasyon sahibi ayrıcalıklarını taşıyordu ve saldırgan ile sürüm çıkarma süreci arasında hiçbir izin sınırı bırakmıyordu.

Hayalet branch'ler kimlik bilgilerini topladı

10 Ekim'de UTC ile akşam 10:11 ile 10:12 arasında, saldırgan dahili BerriAI/litellm ve BerriAI/litellm-auto depolarında kısa ömürlü branch'lere — gözlemlenen adları ci-tmp-a351cc ve ci-tmp-4d8517 — commit'ler push'ladı. Her commit, .github/workflows/cache.yml konumuna, push'ta hemen çalıştırılan ve sıradan bir mesaj taşıyan ("ci: bump cache config") bir workflow dosyası ekledi. Branch'ler ve kısa süre sonra workflow çalıştırmaları silindi, olağan depo geçmişinde neredeyse hiç iz bırakmadı; RedEye, güvenlik firması Socket'in bu iki commit'i aktivite kayıtlarından kurtardığını bildiriyor.

10 Ekim'deki workflow, maintainer ayrıcalıklarına sahip iki mühendise ait GitHub CLI OAuth token'larını ve ayrıca bir Linear çalışma alanı, bir LiteLLM dağıtımı, Together AI ile bir GitHub App tanımlayıcısı ve imzalama anahtarı için kimlik bilgilerini topladı. 12 Ekim'deki ikinci çalıştırma, koleksiyonu Anthropic, OpenAI, AWS Bedrock, Tavily ve bir GitGuardian secret-scanning tenant'ı için API anahtarlarının yanı sıra Playwright storage state, PostgreSQL bağlantı dizeleri ve kimlik bilgileri ile Redis endpoint, port ve parola bilgilerine genişletti. Veriler iki webhook.site endpoint'ine sızdırıldı.

Sürüm hattının ele geçirilmesi

LiteLLM'in normal sürüm süreci, bir yapının yetkili bir mühendis tarafından başlatılmasını ve ofisteki fiziksel bir cihaza bağlı özel bir hesap tarafından onaylanmasını gerektiriyordu. Bildirime göre bu gereklilik, daha hızlı sürüm çıkarma ve hata düzeltme backport'larını desteklemek amacıyla aynı hafta içinde herhangi iki mühendisin sürümleri tetikleyip onaylayabileceği şekilde gevşetilmişti — ve saldırgan elinde tam olarak iki maintainer token'ı bulunduruyordu.

21 Ekim'de UTC ile sabah 10:08 ile 11:08 arasında, saldırgan branch korumasını devre dışı bıraktı ve sürüm hattının kaynağını BerriAI/litellm'den neredeyse aynı olan Berri-Ai/litellm'e yönlendirdi. Saat 11:39'da LiteLLM 1.107.0, çalınan bir token ile tetiklenip diğeriyle onaylanarak PyPI'da yayınlandı; Docker Hub ve GHCR imajları 11:46'da geldi ve üretim ile staging çalıştırma kayıtları 11:53'te silindi. LiteLLM, zaten bir sahip token'ı elinde tutan saldırganın iki kişilik kuralı tamamen kapatabileceğini, ama muhtemelen sürümün prosedür açısından sıradan görünmesi için kuralı yerinde bıraktığını belirtti.

Upwind araştırmacısı Lidor Machluf saldırıyı UTC ile öğleden sonra 12:06'da bildirdi. PyPI, 1.107.0'ı 1:23'te, yayından yaklaşık bir saat 45 dakika sonra karantinaya aldı ve 2:20'de Docker Hub'daki v1.107.0, latest, main-latest ve main-stable etiketleri, zehirli yapılardan yaklaşık iki buçuk saat sonra kaldırıldı ya da doğrulanmış temiz imajlara yönlendirildi.

Giderim ve cevapsız sorular

PyPI karantinası ve container düzeltmelerinin ötesinde, LiteLLM dahili sistemleriyle satıcı platformlarıyla ilişkili tüm token'ları iptal ettiğini söylüyor. Bildirim, 1.107.0 içindeki kodun gerçekte ne yaptığını anlatmıyor; bu nedenle sürümü kuran ya da etkilenen etiketleri çeken organizasyonlar üzerindeki — ve çıkarım anahtarları bir LiteLLM gateway'inden geçen herkes üzerindeki — aşağı yönlü etki hâlâ bilinmiyor.

Neden önemli

RedEye, herhangi birinin tek başına zinciri kırması muhtemel olan üç bağımsız denetimin art arda başarısız olduğunu sayıyor: bilinen bir sızıntıdan sonra iptal, bir otomasyon token'ında en az ayrıcalık ve yalnızca günler önce gevşetilmiş bir sürüm onay kuralı. Olay ayrıca AI gateway'lerinin neden cazip hedefler olduğunu gösteriyor: Bir organizasyonun tamamına ait sağlayıcı API anahtarlarını yoğunlaştırıyorlar ve hem barındırdıkları sırları hem de onları inşa eden hatları değerli varlıklar haline getiriyorlar. LiteLLM çalıştıran ekipler için öncelikler, 21 Ekim'de 1.107.0'ın ya da etkilenen container etiketlerinin çekilip çekilmediğini kontrol etmek ve gateway'den geçen tüm anahtarları döndürmektir.

  • #supply-chain
  • #security
  • #open-source
  • #pypi
  • #github-actions
  • #litellm

İlgili yazılar