Shai-Hulud temalı kötü amaçlı yazılım PyTorch Lightning yapay zeka eğitim kütüphanesinde bulundu | Semgrep
(semgrep.dev)- PyPI
lightning2.6.2 ve 2.6.3 sürümleri 30 Nisan 2026'da yayımlandıktan sonra bir tedarik zinciri saldırısında kullanıldı; yalnızcapip install lightningkomutu bile gizli_runtimedizinini ve obfuske edilmiş JavaScript yükünü çalıştırabiliyor - Kötü amaçlı yük, modül içe aktarıldığında otomatik olarak çalışıyor; kimlik bilgilerini, kimlik doğrulama token'larını, ortam değişkenlerini ve bulut sırlarını çalıyor, ayrıca GitHub depolarını kirletmeye de çalışıyor
- Bu saldırıda giriş noktası PyPI olsa da solucan yayılımı npm üzerinden gerçekleşiyor; npm yayımlama kimlik bilgileri bulunursa yayımlama yetkisi olan paketlere
setup.mjsdropper'ı verouter_runtime.jsenjekte edilip yama sürümü yeniden yayımlanıyor - Veri sızdırma, HTTPS POST, GitHub commit arama dead-drop'u, saldırgan kontrolündeki açık GitHub depoları ve kurban depolarına doğrudan push dahil 4 paralel kanal kullanıyor;
EveryBoiWeBuildIsAWormyBoicommit öneki ve"A Mini Shai-Hulud has Appeared"depo açıklaması gösterge olarak kalıyor - Kötü amaçlı yazılım, Claude Code içindeki
.claude/settings.jsonSessionStartkancasını ve VS Code içindeki.vscode/tasks.jsonrunOn: folderOpengörevini yerleştirerek depo her açıldığında dropper'ı çalıştırıyor; etkilenen dönemde kötü amaçlı paketi içe aktaran makineler tamamen ele geçirilmiş kabul edilmeli
Etkilenen paketler ve doğrulama adımları
lightning, görüntü sınıflandırıcı oluşturma, LLM fine-tuning, difüzyon modeli çalıştırma ve zaman serisi tahmincisi geliştiren ekiplerin bağımlılık ağacında sık görülen bir derin öğrenme çerçevesidir-
Etkilenen paketler
lightningsürüm2.6.2lightningsürüm2.6.3
-
Semgrep müşterileri için doğrulama adımları
- Yakın zamanda proje taraması yapılmadıysa yeni bir tarama çalıştırılmalı
- advisories sayfasında projenin ilgili paket sürümlerini yakın zamanda kurup kurmadığı kontrol edilebilir
- dependency filter üzerinden eşleşmeler görülebilir; “No matching dependencies” görünüyorsa proje kötü amaçlı bağımlılığı aktif olarak kullanmıyor demektir
- Eşleşme varsa aşağıdaki ele geçirilme göstergelerinde yer alan
.claude/ve.vscode/dizinlerindeki beklenmedik dosyalar için depo denetlenmeli - Etkilenen ortamlarda bulunmuş olabilecek GitHub token'ları, bulut kimlik bilgileri ve API anahtarları değiştirilmeli
- Tedarik zinciri saldırılarına müdahale ve bekleme süresiyle ilgili genel öneriler $foo compromised in $packagemanager ve Attackers are Still Coming for Security Companies yazılarında ele alınıyor
PyPI'dan npm'e yayılan yapı
- mini Shai-Hulud doğrudan npm'i hedef almışken, bu saldırının giriş noktası PyPI
- Kötü amaçlı yük hâlâ JavaScript ve solucan yayılımı npm üzerinden gerçekleşiyor
- Çalışan kötü amaçlı yazılım npm yayımlama kimlik bilgilerini bulursa, bu token ile yayımlanabilen tüm paketlere
setup.mjsdropper'ını verouter_runtime.jsdosyasını enjekte ediyor - Ardından
scripts.preinstalldeğerini dropper'ı çalıştıracak şekilde ayarlıyor, yama sürümünü artırıyor ve paketi yeniden yayımlıyor - Bu paketleri kuran alt geliştiriciler tam kötü amaçlı kodu kendi makinelerinde çalıştırmış oluyor; bunun ardından token hırsızlığı ve paket solucanı enfeksiyonu geliyor
Veri sızdırma yöntemi
- Hırsızlık işlevi, önceki kampanyadaki Mini Shai-Hulud mekanizması ve tasarımıyla ortaklık taşıyor; tek tek yollar engellense bile verinin dışarı çıkması için 4 paralel kanal kullanıyor
- Saldırı,
EveryBoiWeBuildIsaWormBoiadlı açık depo oluşturulması gibi Shai-Hulud temalı unsurlar içeriyor - Saldırı göstergelerinin yapısı önceki mini Shai-Hulud kampanyasıyla eşleşiyor; kötü amaçlı commit mesajları, özgün Mini Shai-Hulud saldırısından ayrışmak için
EveryBoiWeBuildIsAWormyBoiönekini kullanıyor -
HTTPS POST ile C2 aktarımı
- Çalınan veriler 443 portu üzerinden saldırgan kontrolündeki sunucuya anında POST ediliyor
- Alan adı ve yol, statik analizi zorlaştırmak için yük içinde şifrelenmiş dizgeler olarak saklanıyor
-
GitHub commit arama dead-drop'u
- Kötü amaçlı yazılım, GitHub commit arama API'sini yoklayarak
EveryBoiWeBuildIsAWormyBoiönekine sahip commit mesajlarını arıyor - Commit mesajları
EveryBoiWeBuildIsAWormyBoi:<base64(base64(token))>biçiminde çift Base64 kodlu token taşıyor - Kodu çözülen token daha sonra yapılacak işlemler için Octokit istemcisinin kimlik doğrulamasında kullanılıyor
- Kötü amaçlı yazılım, GitHub commit arama API'sini yoklayarak
-
Saldırgan kontrolündeki açık GitHub depoları
- Rastgele seçilmiş Dune sözcük adları ve
"A Mini Shai-Hulud has Appeared"açıklamasıyla yeni açık depolar oluşturuluyor - Bu açıklama GitHub üzerinde doğrudan aranabiliyor
- Çalınan kimlik bilgileri
results/results-<timestamp>-<n>.jsonolarak commit ediliyor; API üzerinden Base64 kodlanmış olsa da içerik düz JSON - 30MB'ı aşan dosyalar numaralandırılmış parçalara bölünüyor
- Commit mesajı olarak kamuflaj amacıyla
chore: update dependencieskullanılıyor
- Rastgele seçilmiş Dune sözcük adları ve
-
Kurban depolarına doğrudan push
- Kötü amaçlı yazılım
ghs_GitHub sunucu token'ı elde ederse kurbanınGITHUB_REPOSITORYiçindeki tüm dallara çalınan verileri doğrudan push ediyor
- Kötü amaçlı yazılım
Hedeflenen veriler
- Kötü amaçlı yazılım; yerel dosyalar, ortam, CI/CD boru hatları ve bulut sağlayıcılar genelindeki kimlik bilgilerini hedef alıyor
-
Dosya sistemi
ghp_,gho_,npm_token'larını bulmak için 80'den fazla kimlik bilgisi dosyası yolunu tarıyor- Dosya başına en fazla 5MB işliyor
-
Kabuk ve ortam değişkenleri
gh auth tokenkomutunu çalıştırıyorprocess.enviçindeki tüm ortam değişkenlerini döküyor
-
GitHub Actions
- Linux runner'larda yerleşik Python ile
Runner.Workersüreç belleğini döküyor "isSecret":trueolarak işaretlenmiş tüm sırları veGITHUB_REPOSITORY,GITHUB_WORKFLOWdeğerlerini çıkarıyor
- Linux runner'larda yerleşik Python ile
-
GitHub organizasyonları
repo,workflowtoken kapsamlarını kontrol ediyor- GitHub Actions organizasyon sırlarını dolaşıyor
-
AWS
- Ortam değişkenlerini,
~/.aws/credentialsprofillerini, IMDSv2169.254.169.254ve ECS169.254.170.2uç noktalarını deneyereksts:GetCallerIdentityçağrısı yapıyor - Secrets Manager içindeki tüm değerleri ve SSM parametrelerini listeliyor ve alıyor
- Ortam değişkenlerini,
-
Azure
DefaultAzureCredentialkullanarak abonelikleri listeliyor ve Key Vault sırlarına erişiyor
-
GCP
GoogleAuthile kimlik doğruluyor- Secret Manager içindeki tüm sırları listeliyor ve alıyor
- Hedef kapsamı yerel geliştirme ortamlarını, CI runner'larını ve üç büyük bulut sağlayıcısının tamamını içeriyor
- Etkilenen dönemde kötü amaçlı paketi içe aktarmış tüm makineler tamamen ele geçirilmiş kabul edilmeli
Geliştirici araçları üzerinden kalıcılık sağlama
- Depoya girdikten sonra kötü amaçlı yazılım, yaygın geliştirici araçları olan Claude Code ve VS Code'u hedef alarak kalıcılık kancaları yerleştiriyor
-
Claude Code
- Kötü amaçlı yazılım, deponun Claude Code ayar dosyası
.claude/settings.jsoniçinematcher: "*"olan birSessionStartkancası yazıyor - Kanca
node .vscode/setup.mjskomutunu işaret ediyor - Geliştirici enfekte depoda Claude Code'u her açtığında çalışıyor; oturum başlangıcı dışında araç kullanımı veya kullanıcı eylemi gerekmiyor
- Kötü amaçlı yazılım, deponun Claude Code ayar dosyası
-
VS Code
- VS Code kullanıcılarını hedefleyerek
.vscode/tasks.jsoniçinerunOn: folderOpengörevini yerleştiriyor - Proje klasörü her açıldığında
node .claude/setup.mjsçalışıyor
- VS Code kullanıcılarını hedefleyerek
-
Dropper
setup.mjs- Her iki kanca da kendi kendine yeten bir Bun çalışma zamanı önyükleyicisi olan
setup.mjsdosyasını çağırıyor - Bun kurulu değilse GitHub releases üzerinden
bun-v1.3.13sessizce indiriliyor - Linux x64, Linux arm64, Linux musl, macOS x64, macOS arm64, Windows x64, Windows arm64 hedefleniyor
- Ardından 14.8MB boyutundaki tam yük
.claude/router_runtime.jsçalıştırılıyor ve/tmpiçindeki kalıntılar temizleniyor
- Her iki kanca da kendi kendine yeten bir Bun çalışma zamanı önyükleyicisi olan
-
Kötü amaçlı GitHub Actions workflow'u
- Kötü amaçlı yazılım, yazma yetkisine sahip bir GitHub token'ı varsa kurban depoya
Formatteradlı bir workflow push ediyor - Her push'ta
${{ toJSON(secrets) }}ile tüm depo sırlarını döküyor - Sonuçları indirilebilir bir Actions artifact'i olan
format-resultsolarak yüklüyor - Actions, normal görünmesi için belirli bir commit SHA'sına sabitleniyor
- CI içinde enfekte
lightningpaketini alan ve yazma yetkili token taşıyan depolar bu dosyaları denetlemeli
- Kötü amaçlı yazılım, yazma yetkisine sahip bir GitHub token'ı varsa kurban depoya
Ele geçirilme göstergeleri
-
Aranabilir göstergeler
EveryBoiWeBuildIsAWormyBoiönekli commit mesajları dead-drop token taşıyıcısı olarak kullanılıyor ve GitHub commit aramasıyla bulunabiliyor"A Mini Shai-Hulud has Appeared"açıklamasına sahip GitHub depoları saldırganın sızdırma depolarıdır ve doğrudan aranabilir
-
Paketler
lightning@2.6.2lightning@2.6.3
-
Dosyalar ve sistem artefaktları
_runtime/start.py: içe aktarma sırasında yükü başlatan Python yükleyici_runtime/router_runtime.js: obfuske edilmiş JavaScript yükü ve 14.8MB'lık Bun çalışma zamanı_runtime/: kötü amaçlı paket sürümüne eklenen dizin.claude/router_runtime.js: kurban depoya enjekte edilen kötü amaçlı kod kopyası.claude/settings.json: kurban depoya enjekte edilen Claude Code kanca yapılandırması.claude/setup.mjs: kurban depoya enjekte edilen dropper.vscode/tasks.json: kurban depoya enjekte edilen VS Code otomatik çalıştırma görevi.vscode/setup.mjs: kurban depoya enjekte edilen dropper
Henüz yorum yok.