Geri Dön
SafeDep, npm matematik kütüphanesi mathmain içinde şifreli yükleyici buldu
SiTech AI Team2 წთ. საკითხავი

SafeDep, npm matematik kütüphanesi mathmain içinde şifreli yükleyici buldu

SafeDep araştırmacıları npm paketi mathmain içinde şifreli kod yükleyen bir bileşen buldu. Yükleyici parolayı çözücüye verilen verilerden alıyor ve dosyayı yazıp çalıştırabiliyor.

Güvenlik şirketi SafeDep'in araştırmacıları, kendisini matematik kütüphanesi olarak tanıtan npm paketi mathmain içinde şifreli kod yükleyen bir bileşen buldu. Yükleyici parolasını kütüphanenin matris çözücüsüne verilen verilerden alıyor; doğru girdi sağlandığında içindeki kodu çözüp çalıştırabiliyor. Analiz 17 Eylül 2026'da yayımlandı; şifreli kodun kendisi çözülemedi.

Çözücünün içindeki gizli çağrı

Araştırma, mathmain'in yaygın mathjs kütüphanesinin adı değiştirilmiş ve kodları gizlenmiş kopyası gibi görünmesiyle başladı. İpucu, CommonJS derlemesinde lusolve() fonksiyonunun sonundaki tek fazladan çağrıydı: çözücü sonucu hesapladıktan sonra alt üçgen matrisin verilerini removeSolveValidation()-a aktarıyor ve dönen değeri bir daha kullanmıyor.

Bu çağrı lib/cjs/utils/is.js dosyasındaki isGraph() fonksiyonuna uzanıyor. isGraph() girdisini JSON metnine çevirip parola olarak kullanıyor, base64 bloğundan bir dosya adı çözüyor ve bulunan yolu parolayla birlikte event() yardımcı fonksiyonuna veriyor; çıktısı Node'un require() çağrısına gidiyor.

scrypt, AES-GCM ve diske yazma

lib/cjs/utils/event.js içindeki rutinler scrypt ile 256 bitlik anahtar türetiyor ve AES-GCM ile çözüyor; her blokta 16 baytlık tuz, 12 baytlık başlangıç vektörü, 16 baytlık kimlik doğrulama etiketi ve şifreli metin base64 olarak duruyor.

Yardımcı fonksiyon çözülen baytları diske yazıp yolu döndürüyor ve dosya ardından yükleniyor, yani kod sürecin kendi izinleriyle çalışıyor. Dosya adındaki enc_ öneki yazmadan önce silindiği için bu öneke sahip olmayan bir yük kendi şifreli kaynak dosyasının üzerine yazıyor. lib/cjs/utils/ altındaki üç dosya JavaScript yerine base64 veri tutuyor: graph.js (20.918 bayt), fraction.js (9.084) ve bignumber/type.js (1.179.416).

İki paket daha, tetikleyici yok

Kayıt defterindeki arama mathsbase ve math-universe paketlerini ortaya çıkardı; beş sürüm boyunca yükleyici dosyaları, tetikleyici kod ve çözücü değişiklikleri aynı. [email protected] 27 Ağustos 2026'da, [email protected] ise 17 Eylül'de yayımlandı; npm o gün varsayılan olarak yükleyicisiz eski [email protected] sürümünü sunuyordu.

İki paketin listelediği GitHub depolarında, incelenen commit'lerde bu fazladan çağrı yok; yani açık kaynak kod yayımlanan derlemeyi açıklamıyor. Ekip şifreli dosya adına karşı 16.922 olası parolayı, beş farklı bloğa karşı ise 533 parolayı daha denedi ve hiçbiri kimlik doğrulama denetimini geçemedi. Çalışma varsayımı, paketlerin ileride bir saldırı için yük sakladığı, tetikleyicinin ise ayrı bir paketten geleceği yönünde; böyle bir paket bulunamadı ve kodun veri çaldığı ya da bir sunucuya bağlandığı gösterilmedi.

SSiTech

SiTech — AI destekli web geliştirme

Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.