Son günlerde, NPM topluluğunda bir kez daha büyük ölçekli bir NPM paket zehirleme olayı patlak verdi. Bu olay, 2025 yılının Eylül ayında gerçekleşen Shai-Hulud saldırısı ile yüksek derecede ilişkilidir. Bu NPM paketindeki kötü niyetli kod, geliştirici anahtarlarını, API anahtarlarını ve çevresel değişkenler gibi hassas bilgileri çalmaktadır. Anahtarları kullanarak açık depolar oluşturmakta ve bu çalınan hassas bilgileri yüklemektedir.
SlowMist(, kendi geliştirdiği Web3 tehdit istihbaratı ve dinamik güvenlik izleme aracı MistEye ile, tehdit istihbaratına hızlı bir şekilde yanıt verir ve ilgili tehdit istihbaratını hızla ileterek müşterilere kritik güvenlik sağlamakta.
@asyncapi/php-template@0.1.1 paketini örnek alırsak, eski versiyon @asyncapi/php-template@0.1.0 ile karşılaştırıldığında, 0.1.1 sürümünün 0.1.0 sürümüne göre iki yeni js dosyası eklediği görülebilir; bunlar setup_bun.js ve obfuscate edilmiş bun_environment.js dosyalarıdır.
setup_bun.js dosyasının içinde, önce sistemin Bun'un kurulu olup olmadığını kontrol eder. Eğer kurulu değilse, otomatik olarak resmi siteden indirilip kurulur ve Bun'un çalıştırılabilir dosyasını bulmak için ortam değişkenleri doğru bir şekilde ayarlanır.
Son olarak, bun ile bun_environment.js dosyasını çalıştırın, bu bun_environment.js yüksek derecede gizlenmiş bir kötü amaçlı dosyadır.
Kötü amaçlı bir skriptin bazı kodlarının deşifre edilmesinin ardından, aL0)('in tüm kötü amaçlı skriptin ana giriş fonksiyonu olduğu anlaşılmaktadır. Bu kötü amaçlı skriptin hassas bilgileri çaldığı görülebilmektedir; çalıştırma ortamını NPM veya GitHub gibi kimlik bilgilerini kontrol etmek için inceleyecektir. Bu kimlik bilgileri tespit edilirse, NPM kimlik bilgilerini kullanarak tedarik zinciri yayılımı gerçekleştirecektir ve toplanan tüm sistem bilgileri ve hassas veriler nihayetinde saldırganın kontrolündeki GitHub deposuna paketlenip yüklenecektir, sonraki kullanımlar için.
Belge Hırsızlığı
AWS: Bu kötü niyetli script, runSecrets)( ve listAndRetrieveAllSecrets)( yöntemlerini gerçekleştirir. runSecrets)( yöntemi, bulunabilen tüm bulut erişim kimlik bilgilerini ve tüm olası bölgeleri tarayarak tarama kapsamını maksimize eder; listAndRetrieveAllSecrets)( ise belirli kimlik bilgileri ve bölgelerde “derin madencilik” yaparak tüm Secret'ları tarar ve en son düz metin içeriklerini alır. İkisi birlikte çalıştığında, saldırgan, mağdurun AWS hesabında erişilebilen tüm SecretString ve SecretBinary'yi bir kerede dışa aktarabilir.
enumerateValidCredentials)( yöntemi, kullanılabilir tüm bulut hizmet anahtarlarını toplamak için kullanılır. Ortam değişkenleri, yapılandırma dosyaları, CLI oturum açma gibi çeşitli kaynaklardan tek tek deneyerek, başarıyla doğrulanan tüm kimlik bilgileri kaydedilir ve bulut gizliliğini çalmak için kullanılmak üzere saklanır.
GCP: Bu kötü niyetli scriptte gerçekleştirilen bir diğer listAndRetrieveAllSecrets)( yöntemi esasen GCP modülüne yöneliktir. Bu, belirtilen Proje Kimliğine göre ilgili GCP projesindeki tüm Secret'ları listeleyecek, ardından her Secret'ın en son sürümüne doğrudan erişip accessSecretVersion ile açık metin içeriğini okuyacaktır. Sonuç olarak, elde edilen tüm gizlilikler (örneğin API Anahtarı, veritabanı şifreleri vb.) tek tek toplanacaktır.
Azure: Bu kötü niyetli betikte uygulanan bir diğer listAndRetrieveAllSecrets)( yöntemi esasen Azure modülüne yöneliktir. Öncelikle Azure Resource Manager aracılığıyla tüm aboneliği tarar ve tüm Key Vault'ları bulur; ardından elde edilen kimlik bilgilerini kullanarak her Vault'a tek tek bağlanır; son olarak içindeki tüm Secrets'ı enumerate eder ve her bir sırrın düz metin değerini almak için getSecret çağrısını yapar.
Hassas bilgilerin çalınması sürecinde, kurbanları hedef almak için meşru güvenlik araçları da kullanılmaktadır. extractAndInstall)( yönteminde, TruffleHog'un ikili dosyaları çıkarılıp çıkarılmakta, TruffleHog aslında kod havuzlarında API anahtarları ve kimlik bilgileri gibi sızan gizli bilgileri tespit etmek ve doğrulamak için kullanılmaktadır, ancak kötü niyetli kişiler tarafından kurbanın tüm dosya sistemi taranmak için kullanılmaktadır.
Bu kötü amaçlı script, NPM tedarik zinciri yayılımı için bir updatePackage###( fonksiyonu gerçekleştirmektedir. İlk olarak çalınan NPM Token'ı kullanarak, mağdurun yayınlama yetkisine sahip olduğu yasal NPM paketinin kaynak kodunu indirir, ardından package.json dosyasını değiştirerek scripts alanına kötü amaçlı bir preinstall script komutu ekler. Aynı zamanda kötü amaçlı scripti paketin içine yerleştirir, paketin versiyon numarasını 1 artırarak kullanıcının otomatik güncellemesini tetikler ve kötü amaçlı script içeren NPM paketini NPM resmi deposuna yükler.
Bilgileri çaldıktan sonra, çalınan GitHub Token'ını kullanarak hesabında rastgele bir isimde bir depo oluşturacak ve kayıt token'ını alacak. Kurbanın bilgisayarını bu deponun kendi kendine barındırılan GitHub Actions Runner'ı olarak gizleyecek. Sonrasında, saldırgan deponun içine kötü niyetli iş akışları yerleştirecek, böylece tetiklenen herhangi bir Actions görevi kurban makinesinde çalıştırılacak ve uzaktan kod yürütme sağlanacak.
Ve bu çalınan bilgileri çift katmanlı base64 şifreleme ile oluşturulan depoya yükleyin, bu oluşturulan depoların açıklamaları “Sha1-Hulud: The Second Coming.” şeklindedir.
Bu NPM depo zehirlemesi, solucan ve kendi kendine barındırılan uygulamaların uzun süreli kalıcılığını birleştirir ve saldırı için TruffleHog kullanır. Slow Mist güvenlik ekibi, geliştiricilerin yeni iterasyonlar oluştururken ve yayımlarken bağımlılık paketlerinin sürüm kilitleme stratejisini benimsemelerini önerir. Eğer bağımlılık paketlerinde gerekli güvenlik veya işlevsel güncellemeler varsa, bunların iç denetim süreçleri aracılığıyla güncellenmesi ve kilitli sürümlerin de güncellenmesi gerekmektedir; böylece kör bir şekilde güncelleme yaparak yeni riskler ortaya çıkmasının önüne geçilir.
View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
NPM Zehirleme Analizi — Shai-Hulud Saldırısının Yeniden Üretilmesi
Yazar: Joker & Ccj
Arka Plan
Son günlerde, NPM topluluğunda bir kez daha büyük ölçekli bir NPM paket zehirleme olayı patlak verdi. Bu olay, 2025 yılının Eylül ayında gerçekleşen Shai-Hulud saldırısı ile yüksek derecede ilişkilidir. Bu NPM paketindeki kötü niyetli kod, geliştirici anahtarlarını, API anahtarlarını ve çevresel değişkenler gibi hassas bilgileri çalmaktadır. Anahtarları kullanarak açık depolar oluşturmakta ve bu çalınan hassas bilgileri yüklemektedir.
SlowMist(, kendi geliştirdiği Web3 tehdit istihbaratı ve dinamik güvenlik izleme aracı MistEye ile, tehdit istihbaratına hızlı bir şekilde yanıt verir ve ilgili tehdit istihbaratını hızla ileterek müşterilere kritik güvenlik sağlamakta.
![])https://img-cdn.gateio.im/social/moments-159684ebd67ca55d47335ddbd42018c3(
![])https://img-cdn.gateio.im/social/moments-bd2aba046f0a86aca7e1abd2b72e9eed(
Aynı zamanda, arka planda kötü niyetli örnekler hemen kaydedilecek ve bunların karşılık gelen SHA-256 gibi özellik değerleri hesaplanacaktır.
![])https://img-cdn.gateio.im/webp-social/moments-0c04f20f1376390bdc04bad915d660b6.webp(
Analiz Süreci
@asyncapi/php-template@0.1.1 paketini örnek alırsak, eski versiyon @asyncapi/php-template@0.1.0 ile karşılaştırıldığında, 0.1.1 sürümünün 0.1.0 sürümüne göre iki yeni js dosyası eklediği görülebilir; bunlar setup_bun.js ve obfuscate edilmiş bun_environment.js dosyalarıdır.
![])https://img-cdn.gateio.im/webp-social/moments-45994a147ca5cec569400f4833f14468.webp(
package.json dosyasına preinstall betiği eklendi, böylece bağımlılıklar yüklenmeden önce setup_bun.js otomatik olarak çalıştırılacak.
![])https://img-cdn.gateio.im/webp-social/moments-45e344c5a0d73a61db9f267eae229bc6.webp(
setup_bun.js dosyasının içinde, önce sistemin Bun'un kurulu olup olmadığını kontrol eder. Eğer kurulu değilse, otomatik olarak resmi siteden indirilip kurulur ve Bun'un çalıştırılabilir dosyasını bulmak için ortam değişkenleri doğru bir şekilde ayarlanır.
Son olarak, bun ile bun_environment.js dosyasını çalıştırın, bu bun_environment.js yüksek derecede gizlenmiş bir kötü amaçlı dosyadır.
![])https://img-cdn.gateio.im/webp-social/moments-44505da1b8a0d007a2a0c1cf3b0472ca.webp(
Kötü amaçlı bir skriptin bazı kodlarının deşifre edilmesinin ardından, aL0)('in tüm kötü amaçlı skriptin ana giriş fonksiyonu olduğu anlaşılmaktadır. Bu kötü amaçlı skriptin hassas bilgileri çaldığı görülebilmektedir; çalıştırma ortamını NPM veya GitHub gibi kimlik bilgilerini kontrol etmek için inceleyecektir. Bu kimlik bilgileri tespit edilirse, NPM kimlik bilgilerini kullanarak tedarik zinciri yayılımı gerçekleştirecektir ve toplanan tüm sistem bilgileri ve hassas veriler nihayetinde saldırganın kontrolündeki GitHub deposuna paketlenip yüklenecektir, sonraki kullanımlar için.
Belge Hırsızlığı
AWS: Bu kötü niyetli script, runSecrets)( ve listAndRetrieveAllSecrets)( yöntemlerini gerçekleştirir. runSecrets)( yöntemi, bulunabilen tüm bulut erişim kimlik bilgilerini ve tüm olası bölgeleri tarayarak tarama kapsamını maksimize eder; listAndRetrieveAllSecrets)( ise belirli kimlik bilgileri ve bölgelerde “derin madencilik” yaparak tüm Secret'ları tarar ve en son düz metin içeriklerini alır. İkisi birlikte çalıştığında, saldırgan, mağdurun AWS hesabında erişilebilen tüm SecretString ve SecretBinary'yi bir kerede dışa aktarabilir.
![])https://img-cdn.gateio.im/webp-social/moments-3c33d90aa4bd49b2d8304f07d9cf0c78.webp(
enumerateValidCredentials)( yöntemi, kullanılabilir tüm bulut hizmet anahtarlarını toplamak için kullanılır. Ortam değişkenleri, yapılandırma dosyaları, CLI oturum açma gibi çeşitli kaynaklardan tek tek deneyerek, başarıyla doğrulanan tüm kimlik bilgileri kaydedilir ve bulut gizliliğini çalmak için kullanılmak üzere saklanır.
![])https://img-cdn.gateio.im/webp-social/moments-18502e3837d4a198101e4f71f742d424.webp(
GCP: Bu kötü niyetli scriptte gerçekleştirilen bir diğer listAndRetrieveAllSecrets)( yöntemi esasen GCP modülüne yöneliktir. Bu, belirtilen Proje Kimliğine göre ilgili GCP projesindeki tüm Secret'ları listeleyecek, ardından her Secret'ın en son sürümüne doğrudan erişip accessSecretVersion ile açık metin içeriğini okuyacaktır. Sonuç olarak, elde edilen tüm gizlilikler (örneğin API Anahtarı, veritabanı şifreleri vb.) tek tek toplanacaktır.
![])https://img-cdn.gateio.im/webp-social/moments-bad2067511f01dd442e955c89db61dc9.webp(
Azure: Bu kötü niyetli betikte uygulanan bir diğer listAndRetrieveAllSecrets)( yöntemi esasen Azure modülüne yöneliktir. Öncelikle Azure Resource Manager aracılığıyla tüm aboneliği tarar ve tüm Key Vault'ları bulur; ardından elde edilen kimlik bilgilerini kullanarak her Vault'a tek tek bağlanır; son olarak içindeki tüm Secrets'ı enumerate eder ve her bir sırrın düz metin değerini almak için getSecret çağrısını yapar.
![])https://img-cdn.gateio.im/social/moments-9176712c5d0ed04eeb1ee93411f8af42(
Hassas bilgilerin çalınması sürecinde, kurbanları hedef almak için meşru güvenlik araçları da kullanılmaktadır. extractAndInstall)( yönteminde, TruffleHog'un ikili dosyaları çıkarılıp çıkarılmakta, TruffleHog aslında kod havuzlarında API anahtarları ve kimlik bilgileri gibi sızan gizli bilgileri tespit etmek ve doğrulamak için kullanılmaktadır, ancak kötü niyetli kişiler tarafından kurbanın tüm dosya sistemi taranmak için kullanılmaktadır.
![])https://img-cdn.gateio.im/webp-social/moments-45e2049fa39e4d26acd79661c664ca21.webp(
) NPM tedarik zinciri iletişimi
Bu kötü amaçlı script, NPM tedarik zinciri yayılımı için bir updatePackage###( fonksiyonu gerçekleştirmektedir. İlk olarak çalınan NPM Token'ı kullanarak, mağdurun yayınlama yetkisine sahip olduğu yasal NPM paketinin kaynak kodunu indirir, ardından package.json dosyasını değiştirerek scripts alanına kötü amaçlı bir preinstall script komutu ekler. Aynı zamanda kötü amaçlı scripti paketin içine yerleştirir, paketin versiyon numarasını 1 artırarak kullanıcının otomatik güncellemesini tetikler ve kötü amaçlı script içeren NPM paketini NPM resmi deposuna yükler.
![])https://img-cdn.gateio.im/social/moments-f2c1d619c8b8a125a018a4990e47e144(
) arka kapı ve C2
Bilgileri çaldıktan sonra, çalınan GitHub Token'ını kullanarak hesabında rastgele bir isimde bir depo oluşturacak ve kayıt token'ını alacak. Kurbanın bilgisayarını bu deponun kendi kendine barındırılan GitHub Actions Runner'ı olarak gizleyecek. Sonrasında, saldırgan deponun içine kötü niyetli iş akışları yerleştirecek, böylece tetiklenen herhangi bir Actions görevi kurban makinesinde çalıştırılacak ve uzaktan kod yürütme sağlanacak.
![]###https://img-cdn.gateio.im/webp-social/moments-547cfd5eb9ee4614a975d1f574583495.webp(
Ve bu çalınan bilgileri çift katmanlı base64 şifreleme ile oluşturulan depoya yükleyin, bu oluşturulan depoların açıklamaları “Sha1-Hulud: The Second Coming.” şeklindedir.
![])https://img-cdn.gateio.im/webp-social/moments-6bad80b5f904d7c25fa993600ff2a710.webp(
Şifre çözüldükten sonra kullanıcının sızdırılan hassas verileri görülebilir.
![])https://img-cdn.gateio.im/social/moments-73bf3f27df82dfd50c02ff7c42e746af(
![])https://img-cdn.gateio.im/webp-social/moments-aefb641fee19ee0ad471234e3d5aa081.webp(
![])https://img-cdn.gateio.im/social/moments-ea2062526e3489a6cfd6fcbebd94605c(
Özet
Bu NPM depo zehirlemesi, solucan ve kendi kendine barındırılan uygulamaların uzun süreli kalıcılığını birleştirir ve saldırı için TruffleHog kullanır. Slow Mist güvenlik ekibi, geliştiricilerin yeni iterasyonlar oluştururken ve yayımlarken bağımlılık paketlerinin sürüm kilitleme stratejisini benimsemelerini önerir. Eğer bağımlılık paketlerinde gerekli güvenlik veya işlevsel güncellemeler varsa, bunların iç denetim süreçleri aracılığıyla güncellenmesi ve kilitli sürümlerin de güncellenmesi gerekmektedir; böylece kör bir şekilde güncelleme yaparak yeni riskler ortaya çıkmasının önüne geçilir.