Konuyu Okuyanlar: 1 Ziyaretçi

pip --require-hashes: LiteLLM Sonrası Python Tedarik Zincirini Sabitlemek

pip --require-hashes: LiteLLM Sonrası Python Tedarik Zincirini Sabitlemek
[Resim: attachment.php?aid=349]

Selamlar,

LiteLLM 1.107.0 olayından sonra birçok ekip aynı soruyu soruyor: "pip install litellm" gibi yüzen sürümler üretimde nasıl kilitlenir? Cevabın büyük kısmı pip'in resmi Secure installs rehberinde: hash-checking mode ve yalnızca ikili paket (binary) kurulum. Bu yazıda kendi labınızda adım adım uygulayabileceğiniz bir sabitleme düzeni kuruyoruz.

Konuda anlatılacaklar
  1. Hash-checking mode ne yapar, ne yapmaz?
  2. Gereksinim dosyasına hash nasıl eklenir?
  3. --only-binary :all: ile kaynak dağıtımları kapatmak
  4. Sık yapılan hatalar

Hash-checking mode
pip varsayılan olarak uzak müdahaleye karşı kontrol yapmaz ve dağıtımdaki kodu çalıştırır. Hash-checking mode açıldığında requirements.txt içine gömdüğünüz yerel hash'ler hem uzaktan oynama hem ağ sorunlarına karşı koruma sağlar. pip belgelerine göre bu bir "hepsi ya da hiç" düzenidir: herhangi bir gereksinime --hash eklemek modu global olarak etkinleştirir.

Ek kısıtlar:
  • Tüm gereksinimlerin hash'i olmalı (kısmi hashed dosya, hash'siz bir bağımlılıktan kötü kod sokulmasına izin verir).
  • Tüm bağımlılıkların da hash'i olmalı.
  • Gereksinimler sabitlenmeli (==, URL veya dosya yolu); aksi halde yeni bir sürüm yayınlandığında hash uyuşmazlığı sürprizi yaşarsınız.

Lab: hash'li requirements üretmek
Kod:
# Temiz bir venv python3 -m venv /tmp/secpip && source /tmp/secpip/bin/activate python -m pip install -U pip # Once surumleri sabitle cat > /tmp/reqs.in <<'E' requests==2.32.3 urllib3==2.2.3 certifi==2026.10.19 E # Hash'leri bootstrap etmek icin --require-hashes ile deneme; # pip, indirdigi paketlerin hash'ini gosterir python -m pip download -r /tmp/reqs.in -d /tmp/wheels python -m pip hash /tmp/wheels/*.whl

Elde ettiğiniz hash'leri requirements.txt'ye şöyle yazarsınız:
Kod:
requests==2.32.3 \ --hash=sha256:<requests_hash> urllib3==2.2.3 \ --hash=sha256:<urllib3_hash> certifi==2026.10.19 \ --hash=sha256:<certifi_hash>
Kurulum:
Kod:
python -m pip install --require-hashes --only-binary :all: -r requirements.txt
--require-hashes, hash'siz bir requirements dosyasını deploy betiklerinde reddetmek için de kullanılır. --only-binary :all: kaynak dağıtımlarını (sdist) kapatır; saldırganın build sırasında kod enjekte etmesi daha zorlaşır.

LiteLLM bağlamı
LiteLLM olayında zararlı, wheel içindeki .data/purelib/ yoluyla site-packages'e düşmüştü. Hash sabitleme, beklediğiniz wheel'in bayt-bayt aynısı gelmesini sağlar; farklı bir wheel aynı sürüm numarasıyla gelse bile hash uyuşmazlığı kurulumunu durdurur. "latest" Docker etiketinden kaçınmak da aynı disiplinin konteyner karşılığıdır: imajı digest ile çekin.

Sık hatalar
  • Yalnızca üst düzey paketi sabitleyip bağımlılıkları açık bırakmak
  • python setup.py install / easy_install kullanmak (pip'in kontrollerini baypas eder)
  • Hash'i PyPI URL fragment'ındaki uzak hash'e güvenmek; pip bunu indirme bütünlüğü için kullanır ama yerel --require-hashes talebini karşılamaz
  • Geliştirme ortamında hash kullanıp CI/CD'de unutmak

Sizin CI pipeline'ınızda --require-hashes var mı? Yoksa engel nedir?

Yasal uyarı
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.

Kaynaklar


Ek DosyalarEkran Görüntüleri
   
Cevapla



Hızlı Menü: