Açık kaynak yazılımları hedef alan tedarik zinciri saldırıları, halka açık kod depolarındaki gelişmelerle birlikte bu hafta oldukça yoğun bir dönemden geçti. Birden fazla geliştirici hesabının başarıyla ele geçirilmesiyle, farkında olmayan kullanıcılara kötü amaçlı paketler gönderildi.
Güvenlik firması Socket'e göre, son hedef JavaScript kodlarının yer aldığı npm deposu oldu. Küresel yetenek ajansı Toptal'a ait npm sayfasındaki toplam 10 paket, zararlı yazılım içeriyordu ve tedarik zinciri saldırısı tespit edilmeden önce yaklaşık 5.000 kullanıcı tarafından indirildi. Paketler daha sonra kaldırıldı. Bu, Socket'in geçen hafta npm'de gözlemlediği üçüncü tedarik zinciri saldırısıydı.
Kuyuya Zehir Katmak
Saldırının arkasındaki hackerlar, Toptal'ın GitHub Organizasyonu'nu ele geçirerek bu erişimi kullanarak npm'de kötü amaçlı paketler yayınladılar.
Araştırmacılar, saldırının tam olarak nasıl işlediğini ve GitHub deposu değişiklikleri ile npm'de paket yayınlanması arasındaki kesin ilişkinin ne olduğunu henüz tam olarak bilmiyor. Socket, e-posta yoluyla yaptığı açıklamada, npm'ye paket yüklemenin "muhtemelen GitHub Actions veya depolanan npm belirteçleri aracılığıyla gerçekleştiğini, bu belirteçlere GitHub Organizasyonu ele geçirildikten sonra erişim sağlandığını" belirtti. GitHub ve npm, iş akışlarında sıkça birbirine bağlıdır, bu da bir GitHub organizasyonu ele geçirildiğinde npm paketlerinin yayınlanmasına olanak tanır.
Socket araştırmacıları, "Saldırı, hem depo değişikliklerine hem de npm'de yayınlamaya izin veren ele geçirilmiş bir GitHub erişiminden kaynaklanmış olabilir veya her iki platformu da bağımsız olarak etkileyen ayrı ele geçirme vektörlerinden kaynaklanmış olabilir" diye yazdı. "Ek adli delil olmadan, bu olaylar arasındaki kesin sıra ve ilişkiyi belirlemek zor olmaya devam ediyor."
Toptal, hesabının nasıl ele geçirildiği konusunda henüz bir açıklama yapmadı. Şirket temsilcileri, bu konuda gönderilen bir e-postaya yanıt vermedi.
Paketlere eklenen kötü amaçlı kod, iki aşamalı bir yapıya sahipti. İlk olarak, kod hedef kişinin GitHub kimlik doğrulama jetonunu çıkarıp saldırganın kontrolündeki bir uç noktaya gönderdi. Bu jetonlar, saldırganlara hedef kişinin GitHub depolarına kalıcı erişim sağladı ve bu da daha fazla tedarik zinciri saldırısında kullanılabilecek bir durum yarattı.
Kimlik bilgilerinin çıkarılmasından sonra, zararlı yazılım hedef kişinin cihazındaki tüm dosya sistemini silmeye çalıştı. Komut dosyası, hem Unix benzeri hem de Windows işletim sistemlerinde dosya sistemlerini yok etmek için komutlar içeriyordu. Unix komutu şuydu:
sudo rm -rf --no-preserve-root /
Bu komuttaki `--no-preserve-root` bayrağı, kök dizinin silinmesini normalde engelleyen güvenlik korumalarını geçersiz kılmak için özel olarak tasarlanmıştır.
Windows eşdeğeri yıkıcı bir komutu içeren postinstall komut dosyası ise şuydu:
rm /s /q
Socket, çarşamba günü npm kullanıcılarını ve PyPI kullanıcılarını hedef alan başka tedarik zinciri saldırıları hakkında ayrı bir rapor yayınladı. Çarşamba günü itibarıyla, npm'ye yüklenen dört kötü amaçlı paket (üçü npm'ye, biri PyPI'ye) toplu olarak 56.000'den fazla indirilmişti. Socket, bu paketlerin kaldırılması için çalıştıklarını belirtti.
Paketler yüklendiğinde, "geliştiricinin ortamına gizlice gözetim işlevselliği entegre ederek tuş vuruşlarını kaydetme, ekran görüntüsü alma, parmak izi alma, web kamerası erişimi ve kimlik bilgisi hırsızlığına olanak tanıyordu" şeklinde açıklama yapan Socket araştırmacıları, zararlı yazılımın kullanıcı etkinliğini izleyip yakaladığını ve saldırgan tarafından kontrol edilen altyapıya ilettiğini ekledi. Socket, bu gizli gözlem ve veri kaçırma taktiklerini vurgulamak için "kötü amaçlı bağımlılıklar bağlamında" gözetim zararlı yazılımı terimini kullandı.
Geçen Cuma günü Socket, üçüncü saldırıyı bildirdi. Bu saldırıda, npm'deki bir hesap ele geçirilmiş ve bu erişim kullanılarak sitede bulunan üç pakete kötü amaçlı kod yerleştirilmişti. Ele geçirme, saldırganların siteye kimlik doğrulaması için kullandıkları bir kimlik bilgisi jetonunu başarıyla elde etmesinden sonra gerçekleşti.
Saldırganlar, kimlik bilgilerini Socket'in birkaç saat önce açıkladığı hedeflenmiş bir kimlik avı saldırısı yoluyla elde etmişti. E-posta, alıcıyı npnjs.com adresindeki bir URL üzerinden giriş yapmaya yönlendiriyordu. Bu site, resmi npmjs.com alan adının yanlış yazılmış taklididir. Saldırıyı daha inandırıcı kılmak için, kimlik avı URL'si, npm'nin kimlik doğrulama için kullandığı jetonları taklit eden bir jeton alanı içeriyordu. Kimlik avı URL'si, `https://npnjs.com/login?token=xxxxxx` formatındaydı ve xxxxxx kısmı jetonu temsil ediyordu.
Ayrıca, haftalık yaklaşık 2,8 milyon indirme alan 'is' paketi de ele geçirilmişti.
Yaygın Hasar Potansiyeli
Socket'in işaret ettiği gibi tedarik zinciri saldırıları, yaygın hasara yol açma potansiyeline sahiptir. Depolarda bulunan birçok paket bağımlılıktır, yani bu bağımlılıklar çalışabilmeleri için aşağı akış paketlerine dahil edilmelidir. Birçok geliştirici akışında, yeni bağımlılık sürümleri otomatik olarak indirilir ve aşağı akış paketlerine dahil edilir.
Üç saldırıda işaretlenen paketler şunlardır:
- @toptal/picasso-tailwind
- @toptal/picasso-charts
- @toptal/picasso-shared
- @toptal/picasso-provider
- @toptal/picasso-select
- @toptal/picasso-quote
- @toptal/picasso-forms
- @xene/core
- @toptal/picasso-utils
- @toptal/picasso-typography
- is sürüm 3.3.1, 5.0.0
- got-fetch sürüm 5.1.11, 5.1.12
- eslint-config-prettier, sürümler 8.10.1, 9.1.1, 10.1.6 ve 10.1.7
- eslint-plugin-prettier, sürümler 4.2.2 ve 4.2.3
- synckit, sürüm 0.11.9
- @pkgr/core, sürüm 0.2.8
- napi-postinstall, sürüm 0.3.1
Hedef alınan paketlerle çalışan geliştiriciler, kötü amaçlı sürümlerin herhangi birinin kurulmadığından veya kendi ürünlerine dahil edilmediğinden emin olmalıdır. Açık kaynak paketleriyle çalışan geliştiriciler şunları yapmalıdır:
- Şüpheli veya olağandışı paket yayınlamalarını tespit etmek için depo görünürlüğü değişikliklerini izleyin.
- Bağımlılıkları yüklemeden önce package.json yaşam döngüsü komut dosyalarını inceleyin.
- Sürekli entegrasyon ve sürekli teslimat işlem hatlarında otomatik güvenlik taramaları kullanın.
- Kimlik doğrulama jetonlarını düzenli olarak döndürün.
- Depo hesaplarını güvence altına almak için çok faktörlü kimlik doğrulamayı kullanın.
Ek olarak, henüz MFA'yı zorunlu kılmamış depoların yakın gelecekte bunu yapması gerekmektedir.