Red Hat Cloud Services genelinde kötü amaçlı npm paketleri tespit edildi
(github.com/RedHatInsights)- Konu açık durumda ve metin itibarıyla atanan kişi, kilometre taşı, bağlı branch veya PR bulunmuyor
@redhat-cloud-services/kapsamındaki birden fazla npm sürümünde kötü amaçlı sürümlerin bulunduğuna dair bir güvenlik sorunu olarak kaydedildi- Referans olarak StepSecurity'nin analiz yazısı ve OSS Security Feed arama sonuçları sunuluyor
- Güncellenen etki listesinde
@redhat-cloud-services/chrome,frontend-components,rbac-client,types,vulnerabilities-clientdahil 32 paket yer alıyor - Tabloda yer alan zarar görmüş sürümler çoğu paket için 3 adet;
@redhat-cloud-services/vulnerabilities-clientise yalnızca2.1.9ve2.1.11sürümlerini içeriyor - Tablonun tamamına göre zarar görmüş sürümler 95 adet olarak sayılabiliyor; ayrıca ayrı olarak anılan harici PR başlığı da
95 versionsifadesine işaret ediyor @redhat-cloud-services/frontend-components-*ailesi ve çeşitli*-clientpaketleri birlikte yer aldığından, mesele tek bir paketten değil aynı scope genelindeki sürüm sorunundan oluşuyor- Yorumlarda “What are these?” sorusuna “all that module is pwned” yanıtı verilerek, listedeki her şeyin ihlal edildiği yönünde ortak bir anlayış paylaşılıyor
- DanielRuf, bu olayı supply-chain-incidents listesine eklediğini belirtti
- GitHub etkinliğinde bu issue'ya referans veren içerik özeti ve tespitle ilgili PR'lar görülüyor; ancak metinde Red Hat tarafının teşhisi, azaltma adımları, kaldırma durumu veya düzeltilmiş sürümler henüz sunulmuyor
1 yorum
Hacker News yorumları
cooldown ayarları konusundaki başlığı yeniden canlandırmamda sakınca yoktur umarım. axios, tanstack, @redhat-cloud-services ve yakın dönemdeki birçok npm tedarik zinciri saldırısı, cooldown olsaydı engellenebilirdi
Artifactory/Nexus kullanıyorsanız muhtemelen zaten vardır; yoksa da ayarlaması kolaydır. npm veya PyPI ihlallerinin çoğu birkaç saat içinde kaldırıldığı için, yayımlanmasının üzerinden N gün geçmemiş paketleri yok saymak yeterlidir. 1 gün bile etkilidir, 3 gün iyidir, 7 gün biraz abartılıdır ama işe yarar
En güncel pnpm sürümü varsayılan olarak 1 günlük cooldown ekledi: https://pnpm.io/supply-chain-security
Bunu tek tıkla halletmek isterseniz https://depsguard.com kullanabilirsiniz. npm, pnpm, yarn, bun, uv ve dependabot için cooldown ve önerilen ayarları ekleyen bir CLI; bakımını ben yapıyorum
Cooldown’a daha çok odaklanan https://cooldowns.dev de var; yerel yapılandırmaya yardımcı olan betikler de içeriyor. Hepsi açık kaynak / ücretsiz
~/.npmrcgibi dosyaları elle düzenlemeyi biliyorsanız buna pek gerek yok, ama çevrenizde sadece tek tıkla düzeltmeye ihtiyaç duyan insanlar varsa bir sonraki saldırıdan kaçınmalarına yardımcı olabilirTabii yeni kritik bir CVE’yi yamalamanız gerektiğinde cooldown’ı aşmanız gerekir; her araçta bunu yapmanın bir yolu vardır. Son birkaç aya dair elimde net sayılar yok ama Mythos tarzı açık bulma çağında bile, yeni zero-day CVE’lerden ziyade kötü amaçlı sürüm dağıtımı gibi yazılım tedarik zinciri saldırılarının daha büyük risk oluşturduğu görülüyor
~/.npmrcdosyasını açıp tek satır ekleyebilen biri olsanız bile, tek tıkla düzeltmeye ihtiyaç duyanların oldukça küçük bir grup olduğunu düşünüyorum“Güvenlik düzeltmeleri yalnızca güvenlik düzeltmeleri içermeli, başka özellik taşımamalı” demek gayet makul. Böylece hem güvenlik araştırmacıları hem de araçlar için denetim daha kolay olur
Normal sürümlere cooldown uygulanabilir; güvenlik düzeltmelerinde ise cooldown kaldırılabilir ya da çok daha kısa tutulabilir
Debian gibi çok istikrarlı sunuculara sahip olup unattended upgrades’i yalnızca güvenlik düzeltmelerine uygulayacak şekilde ayarlayabildiğiniz sistemler iyi bir referans. Bu tür yeni paket sürümlerini güvenlik araştırmacılarının denetlemesi de daha kolaydır
Bu tür başlıklarda her seferinde, bu saldırı türü sanki yalnızca npm'de varmış gibi davranan ya da hiçbir önlem alınmamış gibi alay eden çok yorum oluyor; ama bunun adil olduğunu düşünmüyorum
Paket tüketicilerini korumak için delay line ve pnpm gibi araçların getirdiği iyi özelliklerden bahseden yorumlar da çok
Daha az konuşulan kısım ise paket bakımcılarına yönelik araçlar. Yayınlama için MFA: https://docs.npmjs.com/requiring-2fa-for-package-publishing-..., yaklaşık 1 yıl önce sunulan trusted publishers: https://docs.npmjs.com/trusted-publishers
Son dönemde bu iki özelliğin avantajlarını birleştiren staged publishing de çıktı: https://docs.npmjs.com/staged-publishing
Artık statik kimlik bilgileri olmadan CI içinden yayın yapabilir ve kayıt defterinde gerçekten herkese açılmadan önce bakımcının bunu MFA ile onaylamasını zorunlu kılabilirsiniz. İsterseniz GitHub Actions Environments korumasıyla CI tarafında çoklu onay ya da zaman gecikmesi de zorunlu tutulabilir
Topluluğu bu tür yayınlama korumalarını benimsemeye teşvik etmeliyiz; aksi halde bu sorun sürüp gidecek
O halde kötü amaçlı paketler de yeşil yıldızı almış ve kullanıcılara “kaynak kanıtıyla derlenip imzalandı” diye güven vermiş olacaktı
[1] https://lwn.net/Articles/1075742/
Bunu önlemek için çalışma yürütülmesi harika, ama yine de olmaya devam ediyor. “Yine mi başladı” anlamında komik
Dışarıdan bakınca web geliştirme, çılgın bir Vahşi Batı enerjisine sahip. Değişkenlik, dinamik tipler, sürekli değişen standartlar ve framework'ler, sürekli dağıtım, CDN'ler, gerçek zamanlı A/B kampanyaları, çok sayıda bağımlılık ve farklı altyapılara yayılmış hassas kullanıcı verileri var
Bu bakış açısının doğru olduğunu ya da “bakın işte” tavrının yerinde olduğunu söylemiyorum, ama nereden geldiğini anlıyorum
Özellikle bu ikisinin hiçbiri xz-utils arka kapısının paket yayınına girmesini engelleyemezdi. xz-utils, sofistike bir üst kaynak ele geçirilmesinin ölçütü olarak duruyor
Buradaki hata, zaten güvendiğiniz üst kaynağı daha iyi doğrulamanız gerektiği değil; üst kaynağa güvenliğin tek kaynağı olarak güvenememenizdir. Üst kaynak, sağlam sürüm mühendisliğine ne çok ilgi duyan ne de bunda çok iyi olan hackerlardan oluşan bir topluluk
Ama bunu iyi yapan insanlar da var. Linux dünyasının çözümü ve xz-utils olayında bizi kurtaran şey, hackerların ürettiği üst kaynağı kullanıcılar için inceleyen, denetleyen, paketleyen ve özelleştiren ikinci bir insan katmanının varlığıdır
Bu insanlar farklı gözlere, farklı tüketici ihtiyaçlarına ve farklı kalite ölçütlerine sahip; üst kaynağın yakalamaya hazır olmadığı hataları ve kötü niyeti yakalıyorlar
NPM, cargo, PyPI ve benzerleri, bu insan emeği gereksinimini aşabileceklerini düşünmeye devam ediyor, ama aşamazlar. NPM ekosisteminde bu durumun özellikle sık görülmesinin nedeni, çok hızlı sürümler, gevşek uyumluluk beklentileri ve aşırı yeniden kullanıma alışkın çok sayıda web geliştiricisinin bulunması; bu yüzden node paketlerinde bunu Python ya da Rust'a kıyasla daha sık görüyoruz
Şirketimiz yarn 4 kullanıyor ve npm paketi yayımlandıktan sonraki ilk birkaç gün kurulumunu engelleyen bir seçenek var. Bu tür saldırıların çoğu bu süre içinde (1–3 gün) yakalanıyor gibi görünüyor
https://gist.github.com/mcollina/b294a6c39ee700d24073c0e5a4e...
axios paketi ele geçirildi ve yazarın kimlik bilgileri de çalındığı için her düzeltme girişimi yeniden etkisiz hale getirildi: https://www.trendmicro.com/en_us/research/26/c/axios-npm-pac...
xz yardımcı programında 2 ay boyunca bir backdoor vardı: https://gigazine.net/gsc_news/en/20240403-timeline-of-xz-ope...
Bir öğrenci araştırmacı, Python ctx ve PHPass paketlerinin bakım yetkisini devralıp zararlı değişiklikler dağıttı; tespit edilip düzeltilmesi 7 günden fazla sürdü: https://infosecwriteups.com/how-i-hacked-ctx-and-phpass-modu...
Kaspersky, 1 yıldan uzun süre istismar edilen birkaç PyPI paketi tespit etti: https://www.kaspersky.com/about/press-releases/kaspersky-unc...
“LoftyLife” paketi aylar boyunca istismar edildi: https://securelist.com/lofylife-malicious-npm-packages/10701...
Saldırı penceresi 7 güne çıkarsa, bu yeni saldırıların hepsi muhtemelen 8. günde devreye giren bir zaman ayarlı bomba koyacaktır
pnpmde aynı özelliğe sahip vev11ile birlikte varsayılan olarak açık geliyor: https://pnpm.io/settings#minimumreleaseageBirkaç öneri var. Bağımlılık cooldown süresinin 1–2 gün olması, CVE yama kabiliyetine zarar vermeden çok etkili görünüyor
npm install,npm testgibi kodun çalıştırıldığı her yer yetkisiz bir ortamda çalışmalı. GitHub Actions kullanıyorsanız, artifact build/test işleriyle deployment/imzalama gibi işleri ayırmak nispeten kolay. AI kullanıyorsanız, bu deseni zorunlu kılan bir skill/rehber ekleyebilirsinizGitHub Actions kullanıyorsanız, güncel zizmor kurmak güvenlik duruşunu ciddi biçimde iyileştirir
İkinci önlem, bunun artık “worm gibi yayılabilir” olmamasını sağlar ve mevcut sorunun büyük bir kısmını azaltır. Birincisi ise şirketlere saldırıya yanıt vermek için zaman kazandırır. Bu alandaki bazı vendor'ları da değerlendirmeye değer
Yeni paketlerin geciktirilmesi gerektiğini söyledikten hemen sonra bunun söylenmesi komik bir şaka gibiydi
Lokalde bir Maven proxy çalıştırıyorum ve tüm build'leri container içinde yapıyorum. Python, npm ve Go yalnızca herkese açık depolar kullandığı için bu build'ler de container içinde yapılıyor, ancak depo proxy'sine ihtiyaç duymuyor
Red Hat ve IBM'in tedarik zinciri zafiyetlerini tespit etmeye ve düzeltmeye yardımcı olan Project Lightwell'i duyurduğu günle aynı günmüş
https://www.redhat.com/en/lightwell
Birkaç gün önce şu ilginç rant’ı gördüm: https://github.com/uNetworking/uWebSockets.js/blob/master/mi...
Doğru yaklaşımın, kullandığınız tüm bağımlılıkları fork’layıp gerektiğinde upstream’i inceleyip birleştirerek kendi deponuzdan kurmak olduğu yönündeki sözde bir haklılık payı var. Yine de inanılmaz derecede uğraştırıcı görünüyor
Üçüncü taraf bağımlılık barındırma sağlayıcılarına olan bağımlılığı azaltmak veya ortadan kaldırmak, bağımlılıkları kendi code review aracınızın içine almak ve uzun vadede tekrarlanabilir derlemeler sağlamak için iyi
Packj(https://github.com/ossillate-inc/packj) davranış analiziyle kötü amaçlı PyPI/NPM/Ruby/PHP vb. bağımlılıkları tespit ediyor. Statik+dinamik kod analiziyle shell çalıştırma, SSH anahtarı kullanımı, ağ iletişimi, decode+eval kullanımı gibi ihlal göstergelerini tarıyor. Ayrıca typosquatting gibi kötü niyetli aktörleri bulmak için çeşitli metadata özelliklerini de kontrol ediyor
Yaklaşık bir hafta önce dizüstü bilgisayarımdan Node’u sildim ve bu iyi hissettirdi
Şanssız şekilde bir exploit’e yakalansam bile etki alanını küçültmek için her şeyi geliştirme konteynerleri ya da başka sandbox’larda yapmaya çalışıyorum. Saldırgan Claude token’larını alabilir ama konteynerden kolayca çıkıp home dizinimi tarayamaz
Cooldown ve kurulum script’i izin listeleri, özellikle CI’da katmanlı güvenlik için iyi ek önlemler. Ama temelde değişmesi gereken şeyin işletim sisteminin yetki modeli olduğunu düşünüyorum. Üçüncü taraf yazılıma varsayılan olarak tam kullanıcı yetkisiyle güvenmek artık işlemiyor
Sanırım asıl duyuru bağlantısını vermek gerekiyor
https://www.stepsecurity.io/blog/multiple-redhat-cloud-servi...
Paket kurarken artık
--before=2026-05-30bayrağını kullanmayı alışkanlık haline getirdim. Belirtilen tarihten önce yayımlanan bir sürümü seçtiriyor; ben genelde yaklaşık 5 gün öncesini seçiyorumhttps://docs.npmjs.com/cli/v11/using-npm/config#min-release-...
pnpmkullanıyorum ve geniş birminimumReleaseAgeayarlıyorumhttps://pnpm.io/settings#minimumreleaseage
Neyse ki v11’den beri varsayılan olarak açık
.npmrcdosyasına sadecemin-release-age=5eklemeniz yeterliNPM tasarım gereği bozuktu ve toplulukta yaygın olan NIH sendromu yüzünden basit önlemler bile alınamıyor
Kendi geliştirmek yerine dış paketleri çok fazla benimsemek, npm projelerinin büyük ve karmaşık bağımlılık ağaçlarına sahip olma eğiliminde olmasına yol açıyor. https://www.npmjs.com/package/is-windows gibi paketler için, aynı kodu doğrudan yazmak çok kolayken bile potansiyel açıklar ve bakım dertleri yarattığı yönünde uzun süredir şikâyet var
Oysa elbette tüm işlevselliği yeniden oluşturmanız gerekmiyor; sadece ihtiyaç duyduğunuz kısmı yapmanız yeterli
Ayrıca tek bir işlevi kodlarken soyutlama ya da ek fonksiyon arayüzleri oluşturmanız da gerekmiyor. Bu yüzden daha ucuza gelir ve muhtemelen daha iyi entegre olur
Bir başka hata da hata ve açık üreteceğini düşünmek. Kötü bir programcıysanız olabilir ama tam olarak birbiriyle uyumlu olacak şekilde tasarlanmamış iki kütüphanenin entegrasyon sınırında ortaya çıkan açık kategorisinden kaçınabilirsiniz. Böyle durumlar çok oluyor