NPM (Düğüm Paket Yöneticisi) kayıt defteri, paketlerin güvenilirliğini baltalayan ve saldırganların bağımlılıklardaki kötü amaçlı yazılımları gizlemesine veya kurulum sırasında kötü amaçlı komut dosyası yürütmesine olanak tanıyan “açık karışıklık” adı verilen bir güvenlik açığından muzdariptir.
NPM, JavaScript programlama dili için bir paket yöneticisidir ve yaygın olarak kullanılan Node.js ortamı için varsayılandır. Paket yöneticisi, proje sahiplerinin npmjs.com adresindeki “npm kayıt defteri” veritabanında barındırılan yazılım paketlerinin kurulumunu, yükseltmesini ve yapılandırmasını otomatikleştirmesine yardımcı olur.
Platform, 2020’de GitHub aracılığıyla Microsoft tarafından satın alındı ve bugün dünya çapında 17 milyondan fazla yazılım geliştiricinin onu kullandığı ve ayda 208 milyar paket indirdiği tahmin ediliyor.
Eski bir GitHub mühendisi olan Darcy Clarke, blogundaki bir yazısında bariz kafa karışıklığı sorununu vurguladı ve eski işvereninin sorunu en az Kasım 2022’den beri bilmesine rağmen ilgili riskleri ele almak için çok az şey yapıldığını açıkladı.
NPM kaydı, ek geliştirme çalışması gerektirmeden bir uygulamanın özelliklerini genişletmek için kullanılabilecek çok çeşitli paketler içerdiğinden, geliştiriciler arasında da son derece popülerdir.
Bununla birlikte, popülaritesi, geliştiricilerin bilgisayarlarını ele geçirmek, kimlik bilgilerini çalmak ve hatta fidye yazılımı dağıtmak için kötü amaçlı paketler dağıtmak için onu tehdit aktörleri için birincil hedef haline getiriyor.
Açık kafa karışıklığı
Bir paketin npm kayıt defterinde sunulan bildirim bilgileri ile paket kurulduğunda kullanılan yayınlanan npm paketinin tarball’ındaki gerçek ‘package.json’ dosyası arasında bir tutarsızlık olduğunda bariz bir karışıklık meydana gelir.
Bir paket yayınlanırken NPM’ye gönderilen bildirim verileri ve package.json, paket adı, sürüm ve dağıtımda kullanılan betikler, yapı bağımlılıkları vb. gibi diğer meta veriler hakkında bilgiler içerir.
İkisi ayrı ayrı npm kayıt defterine gönderilir ve platform eşleşip eşleşmediklerini doğrulamaz, bu nedenle verileri farklı olabilir ve içeriklerini incelemedikçe kimse bilemez.
Bu, bir tehdit aktörünün, bağımlılıkları ve betikleri NPM kayıt defterinde görünmeyecek şekilde kaldırmak için yeni bir paketle gönderilen bildirim verilerini değiştirmesine olanak tanır. Ancak, bu betikler ve bağımlılıklar hala paket.json dosya ve paket yüklendiğinde yürütülecektir.
Bu “açık kafa karışıklığı”, package.json’da listelenen bağımlılıklar olmasına rağmen, Clarke’ın kavram kanıtı paketi için NPM’de sıfır bağımlılık olduğunu gösteren aşağıdaki resimde gösterilmektedir.
“Belirgin karışıklık” tutarsızlığından kaynaklanan riskler arasında önbellek zehirlenmesi, bilinmeyen bağımlılıkların yüklenmesi, bilinmeyen komut dosyalarının yürütülmesi ve potansiyel olarak sürüm düşürme saldırıları yer alır.
Araçların bu sorundan etkilenmediğini söyleyen BleepingComputer’a Socket CEO’su Feross Aboukhadijeh, “Ve açık olmak gerekirse, bu sadece gizli bağımlılıklar değil” uyarısında bulundu.
“Belirgin bir kafa karışıklığı, bir saldırganın gizli yükleme betiklerini de dahil etmesine olanak tanır. Bu gizli betikler ve bağımlılıklar, npm CLI tarafından kurulacak olsalar bile, npm web sitesinde veya çoğu güvenlik aracında görünmez.”
Ne yazık ki, npm topluluğu ve npm@6, npm@9, yarn@1 ve pnpm@7 dahil olmak üzere tüm büyük paket yöneticileri bu sorundan etkileniyor.
Ne yazık ki bu, bağımlılıklar, sürüm numaraları ve hatta paket adları doğru olmayabileceğinden NPM Kayıt Defterine güven eksikliğine yol açar.
Bunun yerine geliştiriciler, sürüm numaralarını, hangi bağımlılıkların kurulacağını ve hangi betiklerin yürütüleceğini belirlemek için package.json dosyasını manuel olarak okumalıdır.
Sorun hala çözülmedi
Clarke, GitHub’ın en az 2022’den beri bariz kafa karışıklığı sorunlarını bildiğini ve npm CLI’nin GitHub deposunda dosyalanan bir hata raporu olduğunu söylüyor. node-canvas
paket bunu onaylıyor gibi görünüyor.
Mühendis, 9 Mart 2023’te sorunun örneklerini sunan ayrıntılı bir HackerOne raporu gönderdi.
21 Mart 2023’te GitHub, sorunla dahili olarak ilgilendiklerini söyleyerek bileti kapattı. Yine de, riskleri henüz düzeltmediler ve bunları npm topluluğuna iletmediler.
Clarke, npm’nin boyutu ve bu güvensiz uygulamayı yıllardır takip etmesi nedeniyle, bu sorunu ele almanın önemsiz olmaktan çok uzak olduğundan bahseder.
GitHub, npm’deki açık kafa karışıklığıyla başa çıkmak için bir plan oluşturana kadar, Clarke, paket yazarlarının ve koruyucularının, bildirim verilerine olan güveni ortadan kaldırmalarını ve bunun yerine ad ve sürüm dışındaki tüm meta verileri, daha az eğilimli olan ‘package.json’ dosyalarından almalarını önerir. manipülasyon.
Başka bir koruma önlemi, paket veri tabanı ile npm istemcisi arasında, bildirim verileri ile paketin tarball’ındaki bilgiler arasındaki tutarlılığı sağlamak için ek kontroller ve doğrulamalar uygulayabilen bir kayıt proxy’si kullanmak olacaktır.
BleepingComputer, sorunla ilgili olarak GitHub ile iletişime geçti ve bir yanıt alır almaz bu gönderiyi güncelleyeceğiz.