Tehdit aktörleri, daha önce silinen paketlerin adlarını kullanarak yeni PyPi projeleri kaydettikleri ve tedarik zinciri saldırıları düzenledikleri “Revival Hijack” adı verilen bir saldırıdan yararlanıyor.
Araştırmacılar, bu tekniğin “mevcut 22 bin PyPI paketini ele geçirmek ve sonrasında yüz binlerce kötü amaçlı paketin indirilmesine yol açmak için kullanılabileceğini” söylüyor.
Popüler projelerin ele geçirilmesi
“Revival Hijack”, PyPI platformundan kaldırılmış bir paketin adıyla yeni bir proje kaydetmeyi içeren bir saldırı vektörüdür. Bunu yaparak, bir tehdit aktörü kötü amaçlı kodu güncellemeleri çeken geliştiricilere gönderebilir.
Saldırının mümkün olabilmesinin sebebi PyPI’nin silinen Python projelerinin isimlerini anında kayda açık hale getirmesidir.
PyPI’dan bir projeyi silmeye karar veren geliştiriciler, yalnızca Revival Hijack saldırı senaryosu da dahil olmak üzere olası sonuçlar hakkında bir uyarı alırlar.
“Bu projeyi silmek, proje adını diğer tüm PyPI kullanıcıları için kullanılabilir hale getirecek” uyarısı iletişim kutusunda yer alıyor.
“Bu kullanıcı, dağıtım dosya adları daha önce yayımlanmış bir dağıtımdaki dosya adlarıyla eşleşmediği sürece bu proje adı altında yeni sürümler yayınlayabilecektir.”
Yazılım tedarik zinciri platformu JFrog’daki araştırmacılara göre, PyPI’da Revival Hijack saldırısına karşı savunmasız 22.000’den fazla silinmiş paket bulunuyor ve bunlardan bazıları oldukça popüler.
Araştırmacılar, PyPI’da silinen paketlerin aylık ortalamasının 309 olduğunu, bunun da saldırganlar için sürekli yeni fırsatlar kaynağı olduğunu gösteriyor.
JFrog, bir geliştiricinin, komut dosyasına artık ihtiyaç duyulmamasından, bir aracı yeniden yazıp yeni bir ad altında yayınlamaya kadar çeşitli nedenlerle paketini kaldırmaya karar verebileceğini söylüyor.
Bazı durumlarda, işlevselliği resmi kütüphanelerde veya yerleşik API’lerde tanıtıldığı için paket gereksiz hale gelir.
“pingdomv3” vakası
Nisan ayının ortasında JFrog, bir tehdit grubunun Pingdom API web sitesi izleme hizmetinin bir uygulaması olan “pingdomv3”ü hedef aldığı Revival Hijack’in vahşi doğada kullanıldığını gözlemledi.
Paket 30 Mart’ta silindi ancak yeni bir geliştirici ismi ele geçirdi ve aynı gün bir güncelleme yayınlayarak saldırganların sorundan haberdar olduğunu gösterdi.
Daha sonraki bir güncellemede pakete, Base64 kullanılarak gizlenmiş ve Jenkins CI/CD ortamlarını hedef alan bir Python Truva atı eklendi.
JFrog kurtarmaya atlıyor
JFrog araştırmacıları, en popüler silinmiş paketlerin adlarını kullanarak yeni Python projeleri oluşturarak Revival Hijack saldırılarının riskini azaltmak için harekete geçti.
JFrog, PyPI’nin yeni projelerde belirli isimlerin kaydedilmesini engelleyen, kamuya açık olmayan bir engelleme listesi tuttuğunu, ancak silinen paketlerin çoğunun bu listeye girmediğini açıklıyor.
Bu durum güvenlik firmasını “Revival Hijack” tehdidini azaltmak için dolaylı bir eylemde bulunmaya yöneltti ve silinen/güvenlik açığı bulunan paketlerin en popülerlerini security_holding adlı bir hesap altında kaydetti.
Terk edilmiş paketler boştur ve araştırmacılar, aktif kullanıcıların güncelleme çekmesini önlemek için sürüm numaralarını 0.0.0.1 olarak değiştirdiler.
Bu eylem esasen paket adlarını ayırır ve kötü niyetli kişilerin bunları kötü amaçlar için ele geçirmesini önler.
Üç ay sonra JFrog, depolarındaki paketlerin otomatik komut dosyaları ve kullanıcı yanlış yazımları nedeniyle yaklaşık 200.000 kez indirildiğini fark etti.
“Revival Hijack” vakası, PyPI’daki standart yazım hatası saldırılarından çok daha tehlikelidir, çünkü kullanıcılar seçtikleri projeler için bir güncellemeyi çekerken hata yapmazlar.
Tehditleri azaltmak için kullanıcılar ve kuruluşlar, güvenilir olduğu bilinen belirli sürümlerde kalmak, paket bütünlüğünü doğrulamak, içeriğini denetlemek ve paket sahipliğindeki değişiklikleri veya atipik güncelleme etkinliğini izlemek için paket sabitlemeyi kullanabilirler.