deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Zod 4.6.6'ya taşınan commit'ler Ethereum kontrollü npm malware yükleyicisi içeriyordu; registry temiz kaldı

Zod deposuna gönderilen kötü niyetli commit'ler, bir Ethereum akıllı sözleşmesi aracılığıyla sonraki payload'ları çeken bir preinstall yükleyicisi ekledi; trusted publishing ve npm taraması bunun registry'ye ulaşmasını engelledi.

Zod 4.6.6'ya taşınan commit'ler Ethereum kontrollü npm malware yükleyicisi içeriyordu; registry temiz kaldı

Kötü niyetli commit'ler Zod deposuna sızdı

Hacker News ana sayfasında öne çıkan, colinhacks/zod deposuna gönderilen bir commit rutin bir bakım gibi görünüyordu: "Hataları düzelt ve performansı iyileştir" mesajıyla zod, @zod/mini ve @zod/zod paketlerinde sürümleri 4.6.5'ten 4.6.6'ya yükseltiyordu. Diff, commit'in üç şey daha yaptığını gösteriyor. zod ve mini paketlerine yeni bir dosya olan meta.test.mjs'i ekledi. Paket manifest'larına node meta.test.mjs çalıştıran bir preinstall hook'u yerleştirdi. Ve release workflow'unu, bu package dosyalarına dokunan bir main push'unun publish etmesini sağlayacak şekilde yeniden yazdı; önceki düzende bir maintainer release'i manuel olarak tetiklemek ve özel bir npm ortamını onaylamak zorundaydı.

Payload'unu nereden çekeceğini bir blockchain'e soran bir yükleyici

Diff'i okuduğunuzda meta.test.mjs'in gizlenmiş bir yükleyici olduğunu görürsünüz. Genel Ethereum RPC endpoint'leri arasında döngü yapar, sabit kodlanmış bir contract adresine karşı bir eth_call gerçekleştirir ve dönen veriyi bir hostname listesine çözer. Her hostname için bir /loader endpoint'i ister; isabet halinde base64 ile teslim edilen bir payload'u geçici bir dizine yazar, bir data: URL'sinden bir kurulum script'i import eder, bir tamamlanma bayrağını bekler ve ardından geçici dizini siler.

GitHub'ın güvenlik danışma belgesine atıfta bulunan bir dev.to yazısına göre, yükleyici deseni bootstrap için preinstall ve postinstall lifecycle hook'larını kullanıyor, sonra uzak JavaScript indirip çalıştırıyor ve ardından kendi izlerini temizliyor. Danışma belgesinin göstergeleri arasında SHA-256 hash'i 5ed518aaff5aebc729545b8eb223ec31927cd1bfa53169517f09cdbcc9fd5a0b ve teslimat domaini dsakldjklsaj33112[.]com yer alıyor; diff'in kendisi ise 0xe236330379d0c54aD5b2ef06aC714CEbdd4Ce523 contract adresini gömülü olarak içeriyor.

Blockchain adımı dikkat çekici tasarım tercihi. Yayınlanan kod ikinci bir aşfa taşımıyor, yalnızca bir işaretçi taşıyor: teslimat domainleri contract state güncellenerek değiştirilebilir, payload hiçbir zaman depoda veya registry metadata'sında görünmez ve kapatılacak klasik bir domain yoktur.

npm'ye kötü niyetli hiçbir şey ulaşmadı

dev.to'ya göre kötü niyetli bir Zod sürümü yayınlanmadı — zod değişiklikleri ve standard-schema/standard-schema'yı hedefleyen benzer commit'ler registry'ye hiç ulaşmadı. Aynı commit deseni nubjs/nub'ı da hedefledi ve kampanya kapsamında gerçekten gönderilen tek kötü niyetli paket sürümü olan @nubjs/[email protected], GitHub'ın danışma belgesine göre kurulabilir hale gelmeden önce npm'nin yayın anındaki taraması tarafından durduruldu.

Yazı, Zod'un yayın yapılandırmasına — uzun ömürlü npm token'ları olmayan OIDC tabanlı trusted publishing ve onay gerektiren korumalı bir GitHub ortamı — bir depo ihlalinin registry ihlaline dönüşmesini engelleme noktasında itibar ediyor. Maintainer commit'i geri aldı ve bir Hacker News yorumcusu, preinstall girişinin package dosyasının en üst seviyesinde, scripts objesinin içinde değil, durduğuna dikkat çekti; bu da onun hiç çalışmasını engellemiş olabilir. Bu bir savunma değil, biçimsel bir kazadır.

Daha geniş bir kalıbın parçası

dev.to, girişimi önceki olaylar arasında konumlandırıyor: @tanstack/zod-adapter'ın 1.166.12 ve 1.166.15 sürümleri, bir npm hesap ele geçirmesinin ardından malware taşıdı; bu, bir GitLab danışma belgesine göre 314 paketi etkileyen "Mini Shai-Hulud" kampanyasına bağlandı ve 2025'te phishing'e kurulan bir maintainer saldırganlara chalk ve debug paketlerini teslim etti.

Pratik adımlar

dev.to makalesinin önerileri herhangi bir TypeScript ekibi için geçerlidir:

  • .npmrc dosyasında ignore-scripts=true ayarlayın ve npm ci --ignore-scripts çalıştırın; yalnızca ihtiyaç duyan native modülleri yeniden derleyin.

  • npm 11.16.0 veya sonrasına yükselin; npm'nin bağımlılık kurulum script'lerini opt-in çalıştırmaya geçmesi bekleniyor.

  • Yeni yayınlara temkinli yaklaşın; dakikalar önce yayınlanmış bir sürümü benimsemeyi geciktirin.

  • package dosyasındaki yeni "hasInstallScript": true girişlerini insan incelemesi gerektiren bir CI hatası haline getirin.

  • node_modules ve lockfile'da yukarıdaki teslimat domainini arayın; isabet varsa o makinedeki tüm credential'ları rotate edin.

  • Maintainer'lar Zod'un kurulumunu kopyalamalı: trusted publishing, korumalı release ortamları ve CI'nın atlayamayacağı 2FA.

Makalenin dile getirdiği bir uyarı: script'leri devre dışı bırakmak, kötü niyetli bin girişlerini etkisiz hale getirmez; bunlar kullanıcı komutu ilk kez çağırdığında çalışır.

Neden önemli

Zod, TypeScript'te neredeyse varsayılan bir bağımlılık niteliğinde, bu yüzden kötü niyetli bir yayın saatler içinde yayılırdı. Bu commit'in her parçası hazırdı — sürüm yükseltme, install hook'u, workflow değişikliği — ve zararsız sonuç, birkaç bağımsız denetimin tamamının dayanmasına bağlıydı. Bir install script'i geliştiricinin kendi ayrıcalıklarıyla, SSH anahtarlarına, cloud credential'larına, npm token'larına ve shell ortam değişkenlerine erişimle çalışır. Ethereum tabanlı teslimat ayrıca paket içeriklerini denetlemenin kodun yarın ne çekeceğini söyleyemeyeceği anlamına geliyor. Burada işe yarayan her denetim sıradan maintainer'lar ve ekipler tarafından kullanılabilir ve çoğu tek satırlık bir yapılandırma değişikliğinden ibarettir.

  • #npm
  • #typescript
  • #security
  • #supply-chain
  • #zod

İlgili yazılar