- npm için Bitwarden CLI paketi, devam eden Checkmarx tedarik zinciri saldırısının bir parçası olarak ele geçirildi ve şu anda doğrulanan etki alanı
@bitwarden/cli2026.4.0 derlemesiyle sınırlı - Pakete eklenen
bw1.jszararlı kodu,audit.checkmarx[.]cx/v1/telemetrygibi aynı altyapıyı ve obfuscation yöntemini kullanıyor; ayrıca ele geçirilmiş bir GitHub Action kullanılarak CI/CD ihlali yaşandığına dair bulgularla da örtüşüyor - Hedeflenen veriler yalnızca GitHub tokenları ile sınırlı değil; AWS, Azure, GCP kimlik bilgileri,
.npmrc, SSH anahtarları, ortam değişkenleri ve Claude/MCP yapılandırma dosyalarına kadar genişliyor - Çalınan bilgiler, herkese açık GitHub deposu oluşturma ve commit atma, npm tokenlarıyla yeniden dağıtım yoluyla yayılma ve workflow enjeksiyonuna kadar uzanıyor; ayrıca
~/.bashrcve~/.zshrcdosyalarını değiştirme gibi kalıcılık mekanizmalarını da içeriyor - Bitwarden CLI kullanan kuruluşların bu olayı kimlik bilgisi sızıntısı ve CI/CD ihlali olarak ele alması; CI loglarını incelemesi ve açığa çıkmış olabilecek gizli bilgileri değiştirmesi önemli
Genel Bakış
- Bitwarden CLI npm paketi, devam eden Checkmarx tedarik zinciri saldırısının bir parçası olarak ele geçirildi ve doğrulanan hedef sürüm
@bitwarden/cli2026.4.0- Zararlı kod, pakette bulunan
bw1.jsiçine yerleştirilmişti - Saldırı yolu, Bitwarden'ın CI/CD pipeline'ı içinde ele geçirilmiş bir GitHub Action'ın kullanıldığına işaret eden bulgularla örtüşüyor ve diğer depolarda gözlenen kampanya kalıplarıyla eşleşiyor
- Zararlı kod, pakette bulunan
- Şu ana kadar doğrulanan kapsam Bitwarden CLI derlemesiyle sınırlı ve ele geçirme olayı, daha geniş Checkmarx campaign içinde tanımlanan GitHub Actions tedarik zinciri vektörünü izliyor
- Yalnızca npm için CLI paketi etkilenmiş durumda
- Chrome uzantısı, MCP sunucusu ve diğer resmi dağıtımlarda şu ana kadar etkilenme doğrulanmadı
- Soruşturma sürüyor; tam teknik analiz, etkilenen sürümler, ihlal göstergeleri ve müdahale yönergeleri daha sonra ayrıca paylaşılacak
- Bitwarden CLI kullanılıyorsa CI loglarının incelenmesi ve açığa çıkmış olabilecek gizli bilgilerin değiştirilmesi gerekiyor
Teknik Analiz
- Zararlı yük
bw1.js, önceki gün analiz edilen CheckmarxmcpAddon.jsile temel altyapıyı paylaşıyor- Aynı C2 endpoint'i olan
audit.checkmarx[.]cx/v1/telemetrykullanılıyor ve__decodeScrambledile0x3039seed'i üzerinden obfuscation uygulanıyor - GitHub API üzerinden commit tabanlı veri sızdırma ile npm registry üzerinden token çalma ve yeniden dağıtım da gerçekleştiriliyor
- Aynı C2 endpoint'i olan
- Gömülü payload yapısı da aynı aileye ait
- gzip+base64 yapısı içinde, GitHub Actions
Runner.Workerbelleğini tarayarak GitHub tokenlarını hedefleyen bir Python script'i yer alıyor - Yeniden dağıtılan npm paketleri için
setup.mjsloader'ı, GitHub Actions workflow YAML dosyası, hard-code edilmiş RSA açık anahtarı ve ideolojik manifesto metni de birlikte bulunuyor
- gzip+base64 yapısı içinde, GitHub Actions
- Kimlik bilgisi toplama kapsamı çok geniş
- GitHub tokenları,
Runner.Workerbellek kazıması ve ortam değişkenlerinden toplanıyor - AWS kimlik bilgileri
~/.aws/dosyaları ve ortam değişkenlerinde aranıyor - Azure tokenları
azd, GCP kimlik bilgileri isegcloud config config-helperüzerinden toplanıyor .npmrc, SSH anahtarları, ortam değişkenleri ve Claude/MCP yapılandırma dosyaları da hedefler arasında
- GitHub tokenları,
- GitHub üzerinden veri sızdırma yöntemi de ayrıntılı biçimde doğrulandı
- Kurban hesabı altında, Dune temalı adlandırma kuralı
{word}-{word}-{3digits}izleyen herkese açık depolar oluşturuluyor - Şifrelenmiş çıktılar commit ediliyor ve commit mesajına
LongLiveTheResistanceAgainstMachinesişaretçisiyle birlikte tokenlar ekleniyor
- Kurban hesabı altında, Dune temalı adlandırma kuralı
- Tedarik zinciri üzerinden yayılma mekanizması da buna dahil
- Çalınan npm tokenlarıyla yazma izni olan paketler bulunup, içine preinstall hook eklenmiş şekilde yeniden yayımlanıyor
- GitHub Actions workflow enjeksiyonu yapılarak depo gizli bilgileri ek olarak toplanıyor
- Rusça locale kill switch bulunuyor
- Sistem locale'i
"ru"ile başlıyorsa sessizce çıkıyor Intl.DateTimeFormat().resolvedOptions().localeileLC_ALL,LC_MESSAGES,LANGUAGE,LANGortam değişkenleri kontrol ediliyor
- Sistem locale'i
- Runtime olarak Bun v1.3.13 kullanılıyor ve GitHub Releases'ten indiriliyor
Checkmarx olayıyla farklılaşan noktalar
bw1.js, Checkmarx olay belgelerinde yer almayan ek ihlal göstergeleri içeriyor- Eşzamanlı çalışmayı engellemek için hard-code edilmiş kilit dosyası
/tmp/tmp.987654321.lockkullanılıyor ~/.bashrcve~/.zshrciçine payload enjekte edilerek shell profil kalıcılığı sağlanıyor- Depo açıklaması
Shai-Hulud: The Third Comingolarak ayarlanıyor ve debug string'lerinde"Would be executing butlerian jihad!"ifadesi geçiyor; yani açık bir branding kullanılıyor
- Eşzamanlı çalışmayı engellemek için hard-code edilmiş kilit dosyası
- Paylaşılan araç seti, aynı zararlı yazılım ekosistemine güçlü şekilde işaret etse de operasyonel imzalar atıf yapmayı daha zor hale getiriyor
- Checkmarx saldırısı ortaya çıktıktan sonra TeamPCP,
@pcpcatssosyal hesabı üzerinden bunun kendi eylemleri olduğunu iddia etmişti - Söz konusu zararlı yazılım, meşru görünen açıklamalarla kendini gizlemeye çalışmıştı
- Checkmarx saldırısı ortaya çıktıktan sonra TeamPCP,
- Bu payload ise kamusal tavır açısından farklılık gösteriyor
- Shai-Hulud depo adı,
"Butlerian Jihad"manifestosu ve makinelere karşı direnişi öne çıkaran commit mesajları gibi ideolojik işaretler doğrudan zararlı yazılımın içine yerleştirilmiş - Aynı altyapıyı kullanan farklı bir operatör, daha güçlü ideolojik çizgisi olan bir alt grup ya da kampanyanın kamusal tavrında değişim gibi olasılıkların tümü hâlâ mümkün
- Shai-Hulud depo adı,
Öneriler
- Zararlı Bitwarden npm paketini kurmuş kuruluşlar bu olayı kimlik bilgisi sızıntısı ve CI/CD ihlali olarak değerlendirmeli
- Geliştirici sistemlerinden ve build ortamlarından etkilenen paket derhal kaldırılmalı; bu ortamlarda açığa çıkmış olabilecek tüm kimlik bilgileri değiştirilmeli
- Buna GitHub tokenları, npm tokenları, bulut kimlik bilgileri, SSH anahtarları ve CI/CD gizli bilgileri dahildir
- GitHub tarafında yetkisiz depo oluşturma ve anormal workflow'lar incelenmeli
.github/workflows/altında beklenmeyen dosyalar, şüpheli workflow çalıştırmaları, artifact indirmeleri ve Dune temalı adlandırma kalıbı{word}-{word}-{3digits}taşıyan herkese açık depolar kontrol edilmeli- Etkilenme ihtimali varsa, yeni yayımlanmış depolarda aşağıdaki anahtar kelimeler aranmalı
atreidescogitorfedaykinfremenfutargesseritgholaharkonnenheighlinerkanlykralizeclasgunlazamelangementatnavigatorornithopterphibianpowindahpranaprescientsandwormsardaukarsayyadinasietchsiridarsligstillsuitthumpertleilaxu
- npm tarafında yetkisiz yayımlar denetlenmeli
- Onaylanmamış publish işlemleri, sürüm değişiklikleri ve sonradan eklenen install hook'lar kontrol edilmeli
- Bulut ortamlarında erişim logları yeniden gözden geçirilmeli
- Anormal gizli bilgi erişimi, token kullanımı ve yeni oluşturulmuş kimlik bilgileri izlenmeli
- Endpoint'lerde ve runner'larda gözlenen veri sızdırma altyapısı ve dosya erişim izleri takip edilmeli
audit[.]checkmarx[.]cxadresine yapılan dış bağlantılar aranmalı- Normalde kullanılmayan ortamlarda Bun çalıştırılması olup olmadığı kontrol edilmeli
.npmrc,.git-credentials,.env, bulut kimlik bilgisi depoları,gcloud,az,azderişim izleri incelenmeli/tmp/tmp.987654321.lockdosyasının varlığı ile~/.bashrcve~/.zshrcdeğişiklikleri de kontrol edilmeli
- GitHub Actions tarafında onaysız workflow oluşturma olayları incelenmeli
- Workflow'ların geçici branch'lerde oluşturulup oluşturulmadığı kontrol edilmeli
format-results.txtgibi artifact'lerin oluşturulup oluşturulmadığı veya indirilip indirilmediği de gözden geçirilmeli
- Uzun vadede, gelecekteki tedarik zinciri olaylarında etki alanını küçültmeye odaklanılmalı
- Token yetki kapsamları daraltılmalı ve mümkünse kısa ömürlü kimlik bilgileri kullanılmalı
- Paket oluşturma ve yayımlama yetkileri sınırlandırılmalı, GitHub Actions izinleri sıkılaştırılmalı
- Gereksiz artifact erişimleri devre dışı bırakılmalı; normal release süreci dışında oluşan herkese açık depolar ve workflow değişiklikleri izlenmeli
İhlal Göstergeleri
-
Zararlı paket
-
Ağ göstergeleri
94[.]154[.]172[.]43https://audit.checkmarx[.]cx/v1/telemetry
-
Dosya sistemi göstergeleri
/tmp/tmp.987654321.lock/tmp/_tmp_<Unix Epoch Timestamp>/package-updated.tgz
1 yorum
Hacker News yorumları
Minimum sürüm bekleme süresi koymaktan daha iyi bir savunma olup olmadığını merak ediyorum
.npmrciçine sadecemin-release-age=7eklenmiş olsaydı, yaklaşık 19 saat önce yüklenip sonradan zararlı olduğu ortaya çıkan@bitwarden/cli 2026.4.0sürümünü alan 334 kişi bundan kaçınabilirdi gibi görünüyorBenzer şekilde
axios,ua-parser-js,node-ipcvakalarında da oldukça işe yarıyor veevent-streamgibi uzun süre gizli kalan durumları engelleyemese de, çoğu akut tedarik zinciri saldırısında etkili görünüyorÖrnek yapılandırma olarak npm/pnpm/bun/uv için ayrı ayrı bekleme süresi ekleme yöntemleri var; tek tıkla denetleyip uygulayan bir araç olmadığı için ben de https://depsguard.com aracını yaptım
Benzer fikirde olan https://cooldowns.dev sitesini de az önce gördüm
Sadece minimum sürüm bekleme süresi koymakla kalmıyor; npm/uv gibi araçları saran bir wrapper olarak kurulumdan önce her bağımlılığı ticari zafiyet veritabanı ile karşılaştırıp bilinen sorunları ve şüpheli sinyalleri denetliyor
Gerçekte her zaman birileri anında güncelleyecektir ama bu tür olayların ortaya çıkma sürecinin hızlı güncelleyen kullanıcılara dayanıyor olması da dikkat çekici
Kayıt defterindeki binary'leri doğrudan çekmek zorundaysanız cooldown riski bir miktar azaltabilir
GitHub tarafına kadar sızan uzun kuyruklu vakalarda ise commit/bakımcı heuristikleri ile AI tabanlı kod değişikliği analizi birlikte çalıştırılıp, anormallik varsa insan incelemesine gidilmesi gerekiyor gibi görünüyor
Bu arada burada çalışıyorum
Bu olayın özünde build pipeline'ın ele geçirilmesi ve kirlenmiş paketin dağıtılması var
Yine de iş açısından kritik bir şeyi npm üzerine koyuyorsanız bağımlılıkları mutlaka pinning yapmanın daha iyi olduğunu düşünüyorum
Pek çok geliştirici lockfile'ı yeterli sanıyor ama
^aralığı duruyorsa lockfile güncellenirken açıkça seçmediğim yeni bir sürüm yine gelebilirŞirketin varlığını etkileyebilecek sistemler için bu kadar zahmete değeceğini düşünüyorum
https://github.com/doy/rbw, Bitwarden CLI için Rust tabanlı bir alternatif
Rust ekosistemi de giderek npm gibi büyük ve derin bağımlılık ağaçlarına gidiyor gibi hissettiriyor ama yine de JavaScript'te yaygın olan senaryolara kıyasla güvenmeniz gereken yazar sayısı çok daha az
Yine de en azından sürümler pinlenmiş
rbw + vaultwardenkombinasyonu, self-host edilebilir Rust sürümü bir Bitwarden gibi çalıştığı için oldukça iyiYa da tersine, dil standart kütüphanelerine daha fazla işlev eklenebilir
Bitwarden CLI deneyimi çok kötüydü
bw listkomutunu çalıştırdığımda sadece parola adlarının çıkacağını sanmıştım ama gerçekte parolaların tamamını ve güncel TOTP kodlarını da gösterdiDaha korkuncu, sunucuya ssh ile girip tmux içindeki weechat'i açtığımda,
bwkomutunun tam içeriğine weechat giriş geçmişinden erişilebildiğini gördümNeden olduğunu hiç bilmiyorum; tmux ve weechat oturumlarını aşarak kalmaya devam etti ve ancak sunucuyu yeniden başlatınca kayboldu
Ondan sonra
bwCLI'ı hemen sildim ve yeniden kurmayı da düşünmüyorumBu arada terminal olarak ghostty kullanıyorum
weechat için bir
bwclieklentisi mi var diye merak ediyorum; Bitwarden'ın CLI'ı olduğunu da bu olayla öğrendimBen yerelde keepass kullanıyorum
CLI'ı hiç kullanmadım ama tarayıcı eklentisini kullanıyorum
Bunun da ele geçirilmesi gerçekten felaket olurdu; bunu önlemek için ne yapılabileceğini bilmiyorum
Çözümün doğrulanmış bir eski sürümü kullanmaya devam etmek olup olmadığını düşünüyorum
Hayatımın önemli bir kısmının bu sırların sır olarak kalmasına bağlı olması bir anda çok tuhaf hissettiriyor
Bu yüzden parola yöneticisi tarayıcı eklentileri kullanmıyorum
Geçmişte tarayıcı entegrasyonunda güvenlik sorunu yaşayan ürünler gördükten sonra tamamen kaçınır oldum; iOS entegrasyonuna görece daha çok güveniyorum ama yine de temkinliyim
Buna geliştirme amaçlı paket yöneticileri, OS paket yöneticileri, tarayıcı eklentileri ve bağımsız uygulamaların otomatik güncellemeleri dahil
Socket gibi şirketlerin zararlı güncellemeleri yakalayabilmesi için zaman kazanmak gerekiyor; herkes yayımlandıktan birkaç dakika sonra indirirse bu tür tespitlerin anlamı kalmaz
Bu kurulumu şiddetle tavsiye ederim
Başlığı görünce biraz ürktüm ama paranoya seviyesine çıkmadan makul olarak yapılabilecek her şeyi yaptığımı düşünüyorum
https://cooldowns.dev
https://depsguard.com
İkincisini ben yönetiyorum; birincisini önceden bilseydim muhtemelen bunu yapmazdım
İkisi de neredeyse aynı işi yapıyor, benimki Rust kullandığı için biraz fazla kaçıyor
Buradaki en önemli nokta, sadece npm install çalıştırmanın yeterli olmasıydı
Ele geçirme noktası
preinstallise, kurulumdan sonra inceleme yapma yönündeki yaygın düşünce hemen çöküyorÇünkü o noktada payload zaten çalıştırılma fırsatını elde etmiş oluyor
Bu özellikle agent, CI ve ephemeral sandbox ortamlarında ilginç; maruz kalma süresi kısa olsa bile kurulum otomatik olarak tekrarlanıyorsa yine de etkilenebilirsiniz
Dikkat çekici bir başka nokta da bu payload'un sadece gizli bilgileri değil, AI tooling yapılandırmalarını da hedef alması
Shell profillerinin değiştirilmesi, bir sonraki kodlama asistanının okuyacağı bağlamın kirletilmesine giden gerçekçi bir yol olabilir
Bu bakış açısını AgentSH çalışmasıyla birlikte https://www.canyonroad.ai/blog/the-install-was-the-attack/ yazısında daha uzun anlattım
Sonuçta yine gerçek binary'yi çalıştırıyorsunuz
Hatta işi sıkı tutarsanız kurulumdan önce paketi manuel indirip incelemek de mümkün; kurulum aracının davranış garantilerini ve kapsamını derinlemesine anlamadan, zararlı kodu indirip açma sürecine gelişigüzel güvenmek daha da garip geliyor
Rusça locale kill switch cesur ama aynı zamanda korkakça görünüyor
Discretion is the better part of valorgibi türlü özdeyişleri akla getiriyorKısacası kendi ayağına sıkmama tavrı gibi duruyor
Vault7sızıntılarında NSA ve CIA'in kaynağı gizlemek için bu tür izleri bilerek bıraktıklarına dair şeyler vardı; diğer devlet aktörleri de rahatlıkla böyle teknikler kullanabilirFazla bariz bir şaşırtma izi gibi ama aynı zamanda devlet aktörü müdahalesi izlenimini de güçlü biçimde veriyor
KeePass kullanıcısı olarak yaşayınca bu stres çok daha az oluyor
Son 5 yılda yalnızca yerel altyapıda KeePass kullanarak birkaç güvenlik olayından kaçındım
KeePass erişim aracı için böyle bir şeyin imkânsız olduğunu söyleyemeyiz; farkın tam olarak ne olduğunu ben de bilmiyorum
Şimdiye kadar imkânsız sanıyordum ama açıkçası derinlemesine bakmadım
İki cihaz çevrimdışıyken ayrı ayrı parola ekleyip sonra yeniden çevrimiçi olursa ne oluyor?
Yedeği şifrelerseniz o parolayı nerede tutuyorsunuz, sonra bulut sağlayıcısının parolasını nerede tutuyorsunuz diye düşünüyorum
Bu saldırıda özellikle etkileyici olan şey, saldırganların tam olarak GitHub'ın kapalı olmadığı zamana denk getirmek zorunda olmalarıydı
https://mrshu.github.io/github-statuses/
Bu yüzden ben üçüncü taraf parola yöneticileri hiç kullanmıyorum
Güvenlik, güncellemeler ve yedekleri düzgün yapacaklarına sürekli güvenmek zorunda kalıyorsunuz
Kendi stateless parola üreticimi yaptım; böylece cihazlar arasında veri yedeği ya da senkronizasyon ihtiyacı tamamen ortadan kalktı
Çok uzun ve güçlü bir ana parola ile servis adı ve kullanıcı adını veriyorum; ardından uygun parametrelerle scrypt hash hesaplanıyor ve brute force fiilen imkânsız hale geliyor
Önemli hesaplarda ayrıca 2FA da kullanıyorum