Eski Python Paketi Güvenlik Açıkları, Etki Alanının Devralınması Yoluyla PyPI Saldırılarına Olanak Sağlıyor


ReversingLabs araştırmacıları, eski Python paketlerinde gizlenen ve Python Paket Dizini (PyPI) kullanıcılarının alan adı ihlali yoluyla tedarik zinciri saldırılarına maruz kalmasına neden olan bir güvenlik açığı nedeniyle alarma geçti.

Savunmasız kod, modern projelerde nadiren kullanılsa da, eski üretim sistemlerindeki kalıcılığı riski canlı tutuyor.

RL Spectra Assure Topluluğu’nun makine öğrenimi modelleri, çeşitli PyPI paketleri ile dağıtılan, bilinen kötü amaçlı yazılım işaretli riskli önyükleme dosyalarına benzeyen paket davranışlarını tespit etmek üzere eğitildi.

Bu komut dosyaları, özellikle uzun süredir kullanılmayan dağıtım paketinin yükleyicisini doğrudan python-distribute.org etki alanından alarak Python bağımlılıklarının alınmasını ve kurulmasını otomatikleştirir.

Kritik olarak, bu alan adı artık Python topluluğu tarafından yönetilmiyor ve şu anda satışta, reklam geliri için park edilmiş durumda. Bir saldırganın bunu satın alması durumunda, etkilenen önyükleme dosyalarını çalıştıran herhangi bir geliştiriciye kötü amaçlı komut dosyaları barındırabilir ve dağıtabilir.

Bu komut dosyalarına geçmiş veya mevcut bağlantıları içeren popüler paketler arasında Tornado (asenkron ağ iletişimi), pypiserver (özel PyPI sunucuları) ve slapos.core (dağıtılmış işletim sistemi katmanları), roman (sayısal dönüştürme), xlutils (Excel dosyası düzenleme), testfixtures (birim testi) ve diğerleri bulunur.

Pypiserver gibi bazıları komut dosyalarını ancak yakın zamanda kaldırdı; diğerlerinde ise kalıntılar Makefiles gibi otomasyon dosyalarında kalmaya devam edebilir. Tehlike uykudadır ve yalnızca bir kullanıcı veya yapı sistemi eski önyükleme rutinini çalıştırdığında tetiklenir.

Python’un Paketleme Sorununun Kökleri

Rapora göre Paketleme ve bağımlılık çözümü her zaman açık kaynaklı Python geliştirmenin merkezinde yer aldı.

İlk günlerinde Python dağıtımlar sağlıyordu (Python 3.12’den itibaren artık kaldırılmıştır), ancak ihtiyaçlar yeteneklerini aştığında kurulum araçları gibi araçlar ortaya çıktı. Distribute, geliştirme anlaşmazlıkları nedeniyle kurulum araçlarından hızla ayrıldı, ancak 2013’te yeniden katıldı.

Bu arada, terkedilmiş distutils2 gibi modernizasyon girişimleri, ekosistemi, her biri uyumlu olmaya çalışan (ve bazen başarısız olan) bir çözüm karmaşasıyla karşı karşıya bıraktı.

2010'ların başında PyPI topluluğu tarafından kullanılan paketleme araçları.
2010’ların başında PyPI topluluğu tarafından kullanılan paketleme yardımcı programları.

Sonuç? Kurulumu kolaylaştırmak için önyükleme komut dosyaları çoğaldı ve genellikle bağımlılıkları getirmek için URL’ler sabit kodlandı.

Topluluk gözetimi veya zamanında geçiş olmadığında, alan adlarının süresi sonunda doldu. Python-distribute.org alan adı örneği riski gösteriyor: 2014’ten bu yana, hiç kimse onun kullanımını veya sahipliğini resmi olarak denetlemiyor ve ele geçirilmeye hazır durumda.

Etki alanı devralmaları bilinen bir saldırı vektörüdür. Dramatik bir örnek, 2023’te npm fsevents paketinin benzer bir planın kurbanı olmasıyla yaşandı: Bir saldırgan, daha önce 1.0.0 ile 1.2.11 arasındaki sürümlerde sabit kodlanmış, geçersiz bir bulut etki alanını kaydettirdi ve bu, CVE-2023-45311 olarak belgelenen bir güvenlik açığının kötü amaçlı yükleri iletmesine olanak sağladı.

Slapos.core'daki güvenlik açığından yararlanan kavram kanıtlayıcı komut dosyası.
Slapos.core’daki güvenlik açığından yararlanan kavram kanıtlayıcı komut dosyası.

RL araştırmacıları Python senaryosu için özellikle slapos.core’un önyükleme komut dosyasını hedef alan bir kavram kanıtlama istismarı gösterdi.

PyPI artık varsayılan olarak daha güvenli uygulamalara yönelse ve çoğu geliştirici kurulum araçlarına geçiş yapsa da, savunmasız modelin kalıntıları geniş çapta dağılmış durumda ve eski alanın kötü niyetli ellere geçmesi durumunda gerçekçi bir risk oluşturabilir.

Daha Geniş Tedarik Zinciri Riski

Açık kaynak modeli kod paylaşımıyla gelişiyor ancak bu vakanın da gösterdiği gibi, sabit kodlu alanlar gizli bir tuzak olmaya devam ediyor.

Python module imp, kaynağı bir modül olarak yüklemek için kullanılır; önyükleme betiğinin dağıtılmasını sağlamak için çağırmadan önce -d bayrağı ayarlanır.

Bootstrap betiği yeniden çalıştırılıyor.
Bootstrap betiği yeniden çalıştırılıyor.

Eski bağımlılıklar veya araçlar kullanım ömrünün sonuna ulaştığında, ilgili altyapının kullanımdan kaldırılmaması veya geçişin sağlanamaması, kullanıcıları sessiz ancak ciddi tehditlere maruz bırakır.

PyPI için, python-distribute.org için kanıtlanmış bir suiistimal belgelenmemiş olsa da, tarih, özellikle saldırganların tedarik zinciri açıklarından yararlanma konusunda daha fırsatçı hale gelmesi nedeniyle dikkatli olunması gerektiğini gösteriyor.

Eski kod ve terk edilmiş altyapı, yazılım tedarik zincirleri için her zaman mevcut bir tehlike oluşturmaktadır.

Açık kaynak bakımcıları ve kullanıcıları, güncel olmayan etki alanları ve önyükleme rutinleri için bağımlılıkları düzenli olarak denetlemeli ve etki alanından ödün verilmesi saldırılarını önlemek için kullanımdan kaldırılmış uygulamalardan agresif bir şekilde uzaklaşmalıdır.

Python-distribute.org bölümü, modern ekosisteme musallat olan eski kod hayaletlerine karşı korunmak için tüm geliştiricilere yönelik uyarıcı bir hikaye ve harekete geçme çağrısıdır.

Uzlaşma Göstergeleri (IoC’ler)

Paket Adı Sürüm Aralığı
pypi sunucusu >=1.1.1, <2.4.0
slapos.core >=0, <=1.19.0
Roma >=2.0.0, <3.2
xlutils >=1.6.0, <2.0.0
Test fikstürleri >=2.3.4, <3.0.2
imio-pm-yerel >=4.1.18.1, <4.2.20
pyquery >=1.2.10, <2.0.0

Anında Güncellemeler Almak ve GBH’yi Google’da Tercih Edilen Kaynak Olarak Ayarlamak için bizi Google Haberler, LinkedIn ve X’te takip edin.



Source link