1 puan yazan GN⁺ 2 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş
  • PyPI lightning 2.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ızca pip install lightning komutu bile gizli _runtime dizinini 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.mjs dropper'ı ve router_runtime.js enjekte 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; EveryBoiWeBuildIsAWormyBoi commit ö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.json SessionStart kancasını ve VS Code içindeki .vscode/tasks.json runOn: folderOpen gö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

    • lightning sürüm 2.6.2
    • lightning sürüm 2.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.mjs dropper'ını ve router_runtime.js dosyasını enjekte ediyor
  • Ardından scripts.preinstall değ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ı, EveryBoiWeBuildIsaWormBoi adlı 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
  • 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>.json olarak 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 dependencies kullanılıyor
  • Kurban depolarına doğrudan push

    • Kötü amaçlı yazılım ghs_ GitHub sunucu token'ı elde ederse kurbanın GITHUB_REPOSITORY içindeki tüm dallara çalınan verileri doğrudan push ediyor

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 token komutunu çalıştırıyor
    • process.env içindeki tüm ortam değişkenlerini döküyor
  • GitHub Actions

    • Linux runner'larda yerleşik Python ile Runner.Worker süreç belleğini döküyor
    • "isSecret":true olarak işaretlenmiş tüm sırları ve GITHUB_REPOSITORY, GITHUB_WORKFLOW değerlerini çıkarıyor
  • GitHub organizasyonları

    • repo, workflow token kapsamlarını kontrol ediyor
    • GitHub Actions organizasyon sırlarını dolaşıyor
  • AWS

    • Ortam değişkenlerini, ~/.aws/credentials profillerini, IMDSv2 169.254.169.254 ve ECS 169.254.170.2 uç noktalarını deneyerek sts:GetCallerIdentity çağrısı yapıyor
    • Secrets Manager içindeki tüm değerleri ve SSM parametrelerini listeliyor ve alıyor
  • Azure

    • DefaultAzureCredential kullanarak abonelikleri listeliyor ve Key Vault sırlarına erişiyor
  • GCP

    • GoogleAuth ile 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.json içine matcher: "*" olan bir SessionStart kancası yazıyor
    • Kanca node .vscode/setup.mjs komutunu 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
  • VS Code

    • VS Code kullanıcılarını hedefleyerek .vscode/tasks.json içine runOn: folderOpen görevini yerleştiriyor
    • Proje klasörü her açıldığında node .claude/setup.mjs çalışıyor
  • Dropper setup.mjs

    • Her iki kanca da kendi kendine yeten bir Bun çalışma zamanı önyükleyicisi olan setup.mjs dosyasını çağırıyor
    • Bun kurulu değilse GitHub releases üzerinden bun-v1.3.13 sessizce 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 /tmp içindeki kalıntılar temizleniyor
  • Kötü amaçlı GitHub Actions workflow'u

    • Kötü amaçlı yazılım, yazma yetkisine sahip bir GitHub token'ı varsa kurban depoya Formatter adlı 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-results olarak yüklüyor
    • Actions, normal görünmesi için belirli bir commit SHA'sına sabitleniyor
    • CI içinde enfekte lightning paketini alan ve yazma yetkili token taşıyan depolar bu dosyaları denetlemeli

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.2
    • lightning@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.

Henüz yorum yok.