Miasma ve Phantom Gyp: Tedarik Zinciri Solucanlarının Emniyet Kilidini Kırmak
Siber güvenlikte savunma ve saldırı arasındaki denge her zaman bir fare-kedi oyunudur. Mayıs ve Haziran başındaki Mini Shai-Hulud ve Megalodon dalgalarının ardından kurduğumuz otonom savunma kalkanları, saldırganları durdurmaya yetmedi. Solucan durmadı, sadece evrimleşti.
Haziran 2026’nın ikinci yarısında patlak veren ve araştırmacıların Miasma adını verdiği yeni kampanya, geliştiricilerin kendilerini güvende hissettiği temel emniyet kilitlerini kırmayı başardı.
1. Güvenli Liman İllüzyonu: @redhat-cloud-services İhlali
Haziran ayının ilk gününde, kurumsal ekosistemi sarsan bir haber yayımlandı: Red Hat geliştiricilerinden birinin kimlik bilgilerinin sızdırılmasıyla npm üzerindeki @redhat-cloud-services kapsamındaki 32 adet frontend paketi ele geçirildi.
Saldırganlar, güvenli kabul edilen bu namespace altındaki paketlerin içine Mini Shai-Hulud türevi credential-stealer payload’ları yerleştirdiler. Bu olay, geleneksel olarak “güvenilir kurumsal yayıncılara” koşulsuz güvenmenin ne kadar tehlikeli olduğunu ve tedarik zincirinde sıfır güven (Zero Trust) yaklaşımının bir lüks değil, zorunluluk olduğunu bir kez daha kanıtladı.
2. Kalkanları Delen Teknik: “Phantom Gyp” ve ignore-scripts Bypass’ı
Önceki yazılarımızda, yerel geliştirme ortamlarımızı korumak için pnpm ve shell.nix seviyesinde en kritik savunma hattı olarak ignore-scripts=true (veya NPM_CONFIG_IGNORE_SCRIPTS=true) yapılandırmasını seçtiğimizi belirtmiştik. Bu ayar, zararlı paketlerin kurulum sırasında preinstall veya postinstall script kancalarıyla bilgisayarımızda kod yürütmesini engelliyordu.
Miasma ise bu emniyet kilidini bypass etmek için paket yöneticilerinin kör noktasını kullandı: binding.gyp.
Mekanizma Nasıl Çalışıyor?
binding.gyp, Node.js projelerinde native (C++ tabanlı) eklentileri derlemek için kullanılan standart bir yapılandırma dosyasıdır. Miasma varyantları, package.json dosyalarında hiçbir yükleme scripti tanımlamaz. Bunun yerine projenin içine tamamen normal görünen bir binding.gyp yerleştirirler.
Zararlı binding.gyp dosyası, GYP’in command expansion syntax’ını (<!() biçimi) kullanır. Bu sayede payload, node-gyp’in configure aşamasında — herhangi bir C++ derlemesi başlamadan önce — tetiklenir. Dosyada "type": "none" ayarı gerçek bir derlemenin hiç başlamamasını sağlar; make/msbuild süreçleri devreye girmez.
Çözüm Nedir?
Bu bypass tekniğine karşı standart ignore-scripts artık tek başına yeterli değildir. pnpm 10+ ile gelen katı yapılandırmaları devreye sokmak gerekir:
- Projedeki
.npmrcveya genel pnpm ayarlarında, sadece kesin olarak derlenmesi gereken paketleri (örneğinsharpveyaesbuild) beyaz listeye alanonlyBuiltDependenciesparametresi kullanılmalıdır. - Listede olmayan tüm diğer paketlerin native derleme süreçleri kalıcı olarak bloke edilmelidir.
3. GitHub Actions ve Mutable Tag Korsanlığı (Tag Hijacking)
24 Haziran 2026’da Miasma kampanyası, hedef tahtasına bireysel geliştiricileri değil, doğrudan CI/CD hatlarını koydu. Popüler ve yaygın kullanılan GitHub Action’ı codfish/semantic-release-action projesi ele geçirildi.
Saldırganlar, projenin meşru ve sürüm güncellemeleri için referans gösterilen yedi version tag’ini (v1.6.1’den v2.2.1’e kadar olan tag’ler) kötü niyetli bir commit’e yönlendirdiler.
Bu durum şu anlama geliyordu: Projesinde uses: codfish/semantic-release-action@v2 gibi etkilenen sürüm etiketleri kullanan tüm geliştiriciler ve şirketler, bir sonraki CI tetiklenmesinde farkında olmadan zararlı kodu çalıştırdı.
- Tetiklenen payload, GitHub Actions runner belleğinden geçici OIDC (OpenID Connect) token’larını ve sistemdeki PAT (Personal Access Token) anahtarlarını sızdırdı.
- Ele geçirilen bu anahtarlarla, solucan benzeri bir yayılımla diğer GitHub depolarına sızıp lateral olarak yayılmaya devam etti.
Çözüm Nedir?
CI/CD hatlarında mutable (değiştirilebilir) etiketlere güvenmek artık ölümcüldür. Tek güvenli yöntem, aksiyonları sürüm numaralarıyla değil, kırılmaz SHA hash’leri ile sabitlemektir:
# Güvensiz (Tag hijacking'e açık):
uses: codfish/semantic-release-action@v5
# Güvenli (SHA hash ile kilitli):
uses: codfish/semantic-release-action@8a9f24c25... # SHA-256/SHA-1 commit hash
4. AI Asistanı Kör Noktası (Workspace Trust)
Haziran ortasında Miasma’nın en yaratıcı varyantlarından biri, tek bir Microsoft reposuna (Azure/durabletask) sızarak zararlı çalışma alanı konfigürasyon dosyaları (.vscode/settings.json, .cursor/rules vb.) bıraktı. Olayın ardından GitHub’ın otomatik güvenlik sistemi, koruma amaçlı olarak 73 Microsoft reposunu devre dışı bıraktı.
Amaç; Cursor, VS Code veya Claude Code gibi AI destekli yeni nesil kodlama asistanlarının otomatik dosya okuma, arka plan terminal komutları yürütme veya bağlam toplama özelliklerini suistimal etmekti. AI asistanı, zararlı konfigürasyon içeren projeyi analiz ettiği anda geliştirici makinesindeki hassas SSH ve API token’larını otomatik olarak toplayıp saldırganın sunucusuna sızdırıyordu.
Bu durum, modern AI araçlarını kullanan bizlerin, tanımadığımız veya dışarıdan indirdiğimiz kodları açarken “Workspace Trust” (Çalışma Alanı Güveni) sınırlarına azami düzeyde dikkat etmemiz gerektiğini gösteriyor.
Sonuç: Savunma Disiplini
Miasma dalgası, tedarik zinciri saldırılarının artık statik kontrolleri (imzalı commit’ler, ignore-scripts yapılandırmaları, popüler yayıncı isimleri) aşmak için ne kadar dinamikleştiğini gösteriyor.
NixOS’un read-only /nix/store mimarisi bizi sistem seviyesinde korusa da, kod yazdığımız ve bağımlılık indirdiğimiz yerel projelerimiz (pnpm projeleri, pip venv’ler vb.) her zaman en zayıf halkamızdır.
Savunma hattımızı korumak için pratik kurallarımız net olmalı:
- Beyaz Liste Mantığı:
ignore-scriptsyerine sadece izin verilen paketlerin derlenmesine müsaade edenonlyBuiltDependencieswhitelist’ini kullanın. - SHA Sabitleme: GitHub Actions dosyalarındaki tüm
@vXetiketlerini SHA hash’leri ile sabitleyin. - Körü Körüne Güvenmeyin: AI asistanınızın bilmediğiniz ve doğrulamadığınız repolarda otomatik komut çalıştırmasına izin vermeyin.
Sistemlerimizi korumak, sürekli tetikte olmaktan geçer.
Kaynaklar
- BleepingComputer — New Shai-Hulud attack trojanizes 19 science-focused PyPI packages
- StepSecurity — codfish/semantic-release-action GitHub Action Compromised
- Snyk — Node-gyp Supply Chain Compromise: Self-Propagating npm Worm via binding.gyp
İlgili: Shai Hulud Saldırısı: NixOS Tedarik Zinciri Saldırılarına Ne Kadar Dayanıklı?