Konuyu Okuyanlar: 1 Ziyaretçi

Python site-packages Tuzağı: .pth import Satırları ve sitecustomize

Python site-packages Tuzağı: .pth import Satırları ve sitecustomize
[Resim: attachment.php?aid=350]

Selamlar,

LiteLLM 1.107.0'ın zararlısı neden "litellm import etmeden" çalıştı? Cevap Python'un site başlangıç mekanizmasında. Bu yazıda resmi site modülü belgelerine dayanarak .pth dosyaları, sitecustomize ve yeni .start dosyalarının nasıl çalıştığını, neden tedarik zinciri saldırılarında bu kadar sevildiğini anlatıyorum.

Konuda anlatılacaklar
  1. site modülü ne zaman yüklenir?
  2. .pth dosyalarında "import" satırları
  3. sitecustomize ve usercustomize
  4. Python 3.15+ .start dosyaları
  5. Savunma: kendi ortamınızda nasıl tararsınız?

site modülü ne zaman yüklenir?
Python belgelerine göre site modülü yorumlayıcı başlatılırken otomatik içe aktarılır. -S seçeneğiyle bu otomatik içe aktarma bastırılabilir. Modül, sys.prefix / sys.exec_prefix altındaki site-packages dizinlerini sys.path'e ekler ve o dizinlerdeki yapılandırma dosyalarını işler.

.pth dosyaları
name.pth dosyaları site-packages içinde bulunur. Her satır normalde sys.path'e eklenecek bir yoldur. Ama geriye dönük uyumluluk için "import" ile başlayan satırlar exec() ile çalıştırılır. LiteLLM olayındaki cook.pth dosyası yalnızca şunu içeriyordu: import cook. Yani her Python başlangıcında cook.py çalışıyordu.

Belgeler ayrıca diyor ki: yürütülebilir satırlar (pth içindeki import satırları ve .start giriş noktaları), belirli bir modülün gerçekten kullanılıp kullanılmayacağından bağımsız olarak başlangıçta her zaman çalışır; -S verilmedikçe.

Python 3.15'te pth içindeki import satırları kullanımdan kaldırıldı (deprecated); 3.20'de kaldırılacak. Yerine .start dosyaları geliyor.

sitecustomize
Yol manipülasyonlarından sonra site modülü sitecustomize adlı bir modülü içe aktarmaya çalışır. Bu dosya tipik olarak sistem yöneticisi tarafından site-packages'e konur ve keyfi özelleştirme yapabilir. ImportError (name='sitecustomize') sessizce yok sayılır. LiteLLM olayında saldırgan sitecustomize.py'yi wheel'in .data/purelib/ dizinine koyarak pip'in onu site-packages köküne kopyalamasını sağladı; böylece her başlangıçta arka plan yükleyici ayağa kalkıyordu.

Lab: zararsız bir gösterim
Kod:
# Yalnızca kendi venv'inizde deneyin python3 -m venv /tmp/sitedemo && source /tmp/sitedemo/bin/activate SP=$(python -c "import site; print(site.getsitepackages()[0])") # Zararsız bir isaretleyici cat > "$SP/demo_hook.py" <<'E' print("[demo_hook] calisti - bu satiri uretimde GORMEK istemezsiniz") E echo "import demo_hook" > "$SP/demo_hook.pth" python -c "print('merhaba')" # Temizlik rm -f "$SP/demo_hook.py" "$SP/demo_hook.pth"
python -c "print('merhaba')" satırı demo_hook'u hiç import etmez; yine de pth yüzünden çalışır.

Savunma taraması
Kod:
# Tum site-packages icinde supheli pth / sitecustomize python - <<'PY' import site, pathlib paths = list(site.getsitepackages()) if site.ENABLE_USER_SITE and site.USER_SITE: paths.append(site.USER_SITE) for p in paths: root = pathlib.Path(p) if not root.is_dir(): continue for f in root.glob("*.pth"): text = f.read_text(errors="replace") if any(ln.lstrip().startswith("import ") for ln in text.splitlines()): print("PTH_IMPORT", f) for name in ("sitecustomize.py", "usercustomize.py"): t = root / name if t.exists(): print("CUSTOMIZE", t) PY
CI imajlarınızda ve üretim venv'lerinizde bu taramayı düzenli çalıştırın. pip uninstall litellm demek ekstra dosyaları temizlemez; LiteLLM'in de vurguladığı gibi cook.pth ve sitecustomize.py elle silinmelidir.

Üretim imajlarınızda pth/sitecustomize taraması var mı? Script'inizi paylaşırsanız herkes faydalanır.

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ü: