1 puan yazan GN⁺ 3 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • atool npm hesabı 19 Mayıs 2026’da ele geçirildi ve yaklaşık 22 dakika boyunca 317 pakete 637 kötü amaçlı sürüm otomatik olarak dağıtıldı
  • Yük, SAP ihlalinde kullanılan Mini Shai-Hulud ile aynı tarayıcı yapısını ve düzenli ifadeleri kullanan, 498 KB boyutunda obfuske edilmiş bir Bun betiği
  • Hedeflenen veriler AWS kimlik bilgileri, Kubernetes token’ları, Vault, GitHub PAT, npm token’ları, SSH anahtarları ve yerel gizli değerlere kadar genişliyor
  • CI ortamlarında GitHub Actions OIDC, npm publish token’ına dönüştürülüyor; Sigstore imzalama ve kötü amaçlı workflow enjeksiyonu istismar ediliyor
  • Müdahale için, etkilenen sürümlerin kurulup kurulmadığı doğrulanmalı, erişilmiş olabilecek tüm kimlik bilgileri değiştirilmelidir; ayrıca lockfile·bağımlılık sabitleme ve kurulum öncesi denetim gerekir

Saldırıya genel bakış

  • atool npm hesabı (i@hust.cc) 19 Mayıs 2026’da ele geçirildi ve yaklaşık 22 dakika boyunca 317 pakete 637 kötü amaçlı sürüm yayımlandı
  • Bu hesap 547 paketin bakımını yapıyordu ve saldırganlar bunların en az 314’ünde iki kez sürüm bump işlemi yaptı
  • Etkilenen paketler arasında size-sensor (aylık 4,2 milyon indirme), echarts-for-react (3,8 milyon), @antv/scale (2,2 milyon), timeago.js (1,15 milyon) ve çok sayıda @antv kapsamlı paket yer alıyor
  • Yük, 498 KB boyutunda obfuske edilmiş bir Bun betiği; 3 hafta önceki SAP ihlalinde kullanılan Mini Shai-Hulud toolkit ile aynı tarayıcı yapısını, kimlik bilgisi düzenli ifadelerini ve obfuscation kalıplarını kullanıyor
  • Çalınan veriler ya açık GitHub depolarına Git nesnesi olarak commit ediliyor ya da RSA+AES ile şifrelenmiş HTTPS POST üzerinden t.m-kosche[.]com adresine gönderiliyor

Dağıtım yöntemi ve semver riski

  • İlk dalga 19 Mayıs 2026 01:39–01:56 UTC arasında yaklaşık 317 sürüm yayımladı; ikinci dalga ise 02:05–02:06 UTC arasında aynı paketlerde yaklaşık 314 sürüm bump işlemi gerçekleştirdi
  • Paketlerin büyük çoğunluğu olan 309 paket, her dalgada birer tane olmak üzere tam 2 kötü amaçlı sürüm aldı
  • size-sensor, echarts-for-react, jest-canvas-mock, jest-date-mock olmak üzere 4 paket 3 sürüm aldı; bunun ilk testlerde kullanıldığı görülüyor
  • Saldırganlar çoğu pakette latest dist-tag’ini taşımadı, ancak npm semver çözümlemesi latestten bağımsız olarak aralığa uyan en yüksek sürümü seçer
  • Örneğin echarts-for-react için latest etiketi 3.0.6 üzerinde kalsa bile, "echarts-for-react": "^3.0.6" kullanan bir proje bir sonraki temiz kurulumda kötü amaçlı 3.2.7 sürümüne çözümlenebilir

Çalıştırma yolu ve yük

  • Bozulmuş tüm sürümler package.json içine sürüm bump ve "preinstall": "bun run index.js" ekliyor
  • 637 kötü amaçlı sürümün 630’u, ikinci bir yük kopyasını çekmek için optionalDependencies içine @antv/setup: github:antvis/G2#<commit-sha> ekliyor
  • preinstall kancası, bağımlılık kurulmadan önce çalışır ve Bun çalışma zamanını gerektirir
  • preinstall engellense veya atlanmış olsa bile, GitHub’ı taklit eden commit içindeki prepare betiği ikinci bir çalıştırma yolu olarak kalır
  • index.js, tek satırlık 498 KB obfuske edilmiş bir Bun bundle’ıdır ve SAP ihlalinde kullanılan Mini Shai-Hulud payload ile aynı Bun gereksinimlerine, hex-variable obfuscation’a, 100 KB flush threshold tarayıcı yapısına ve kimlik bilgisi düzenli ifade setine sahiptir
  • CI ortamı tespiti için GitHub Actions, Jenkins, GitLab CI, CircleCI, Travis, Buildkite, Drone, TeamCity, AppVeyor, Bitbucket Pipelines, CodeBuild, Azure DevOps, Netlify, Vercel dahil 20’den fazla platformun ortam değişkenleri kontrol ediliyor

Kimlik bilgisi toplama hedefleri

  • Yük, şifrelenmiş isimlere sahip 80’den fazla ortam değişkenini okur ve dosya içeriklerini düzenli ifadelerle tarar
  • Başlıca hedefler GitHub token, npm token, GitHub Actions JWT, AWS key, Azure key, veritabanı bağlantı dizesi, Stripe key, SSH key, Docker auth, Vault token, Kubernetes token ve URL içine gömülü kimlik bilgileridir
  • Dosya tarayıcısı, ana dizindeki .ssh, .aws/credentials, .npmrc, .docker/config.json, .kube/config gibi standart kimlik bilgisi konumlarını okur
  • AWS credential resolution order’ın tamamını dolaşır; EC2 IMDSv2 ve ECS container credential endpoint’lerinden IAM role credential alır, ayrıca AWS STS GetCallerIdentity ve Secrets Manager erişimini de dener
  • Vault için token dosyası ile VAULT_ADDR, VAULT_TOKEN, VAULT_ROLE gibi değişkenler kontrol edilir; geçerli credential varsa secret listeleme ile AWS·Kubernetes kimlik doğrulaması denenir
  • Kubernetes tarafında service account token ve KUBECONFIG kontrol edilir; Docker socket varsa host üzerindeki konteynerleri listelemeye ve konteyner kaçışına girişilir

C2 ve veri sızdırma

  • GitHub API, C2 gibi kullanılır; çalınan GitHub token’ları GET /user ile doğrulanır ve GET /user/orgs ile organizasyonlar listelenir
  • repo veya public_repo izni yeterli olan token’lar, saldırganın sızdırma deposunu oluşturmak için kullanılır
  • Oluşturulan depo açıklaması ters yazılmış niagA oG eW ereH :duluH-iahS dizesi olarak kaydedilir; düz okunduğunda “Shai-Hulud: Here We Go Again” olur
  • Depo adları harkonnen-melange-742, fremen-sandworm-315, gesserit-navigator-508 gibi iki Dune temalı kelime ve bir sayı birleşiminden oluşur
  • Sızdırılan veriler Git Data API üzerinden blob, tree, commit ve ref update sırasıyla kaydedilir
  • Ayrı HTTPS göndericisi, hxxps://t.m-kosche[.]com/api/public/otel/v1/traces adresini OpenTelemetry OTLP trace ingestion endpoint’i gibi gösterecek şekilde yapılandırılmıştır
  • HTTPS yükü, gzip JSON’u AES-256-GCM ile şifreler ve AES anahtarını gömülü açık anahtarla RSA-OAEP wrapping yapar

CI/CD ve güven zincirinin istismarı

  • Ele geçirilen token’ların erişebildiği GitHub depolarından workflow çalışma geçmişi, artifact’ler, secret adları, branch listeleri ve Claude Code yapılandırması toplanır
  • GitHub API üzerinden secret değerlerine erişilemez, ancak secret adları hangi kimlik bilgilerinin bulunduğunu ortaya çıkarır
  • Kötü amaçlı workflow, .github/workflows/codeql.yml içine enjekte edilir; adı Run Copilot olur ve push ile tetiklenir
  • Workflow, VARIABLE_STORE: ${{ toJSON(secrets) }} ile repository secret’larının tamamını JSON olarak ortam değişkenine koyar, format-results.txt olarak kaydeder ve artifact olarak yükler
  • Tamamlandıktan sonra artifact zip’i indirilir; ardından workflow run silinerek ve branch ref resetlenerek enjeksiyon izleri azaltılır
  • GitHub Actions OIDC bulunan CI ortamlarında, https://registry.npmjs.org/-/npm/…; endpoint’i üzerinden npm publish token değişimi denenir
  • Yük; Fulcio, Rekor ve SLSA provenance formatlarını içeren bir Sigstore signing uygulamasına sahip olduğundan, ele geçirilmiş CI kimliğiyle imzalanmış artifact’ler üretilebilir

Geliştirme ortamı ve yapay zeka kodlama ajanı enfeksiyonu

  • Yük, GitHub API üzerinden uzaktan enjeksiyon ve dosya sistemi yazımı üzerinden yerel enfeksiyonla Claude Code, Codex ve VS Code ortamlarını hedefliyor
  • Ele geçirilen tokenlarla erişilebilen depolara .vscode/tasks.json, .claude/index.js, .claude/settings.json, .claude/setup.mjs, .vscode/setup.mjs commit ediliyor
  • .claude/settings.json, bir SessionStart hook’u kaydederek Claude Code oturumu her başladığında node .claude/setup.mjs çalıştırıyor
  • .vscode/tasks.json, "runOn": "folderOpen" ile proje klasörü açıldığında çalışmayı tetikliyor
  • setup.mjs, GitHub resmi release’lerinden Bun v1.3.14’ü indiriyor, binary’yi çıkarıyor ve ardından yükü çalıştırıyor
  • Yerel enfeksiyon yolu, yükü ~/.claude/package/index.js ve ~/.codex/package/index.js konumlarına kopyalıyor ve mevcut proje yapılandırma dosyalarını tarayarak hook enjekte ediyor
  • Apple Silicon Mac’lerde bu yerel enfeksiyon yolu atlanıyor; Linux, Intel Mac ve Windows’ta ise çalışıyor

Kalıcılık ve GitHub dead-drop C2

  • kitty-monitor kılığına girmiş kalıcı çalışan daemon, Linux’ta bir systemd kullanıcı servisi olarak, macOS’ta ise ~/Library/LaunchAgents/com.user.kitty-monitor.plist olarak kuruluyor
  • Kurucu, oturum kapatıldıktan sonra da kalıcı olması için systemctl --user enable --now ve loginctl enable-linger kullanıyor
  • cat.py daemon’u her 1 saatte bir GitHub Search API’yi poll ediyor ve firedalazer anahtar kelimesini içeren commit’leri arıyor
  • Commit mesajı biçimi firedalazer <base64_url>.<base64_signature> ve sabit kodlanmış 4096 bit RSA açık anahtarıyla RSA-PSS imzasını doğruladıktan sonra URL’deki Python kodunu çalıştırıyor
  • Ayrı bir gh-token-monitor daemon’u, ele geçirilen GitHub tokenlarını 60 saniye aralıklarla poll ediyor ve TTL 24 saat
  • Süreç belleği tarayıcısı, Linux’ta /proc/pid/maps+mem, Windows’ta ReadProcessMemory kullanarak GitHub Actions runner worker süreçlerinin okunabilir bellek bölgelerini dump ediyor

antvis/G2 taklit commit’leri

  • 637 kötü amaçlı sürümün 630’unda, antvis/G2 deposundaki belirli bir commit’i işaret eden bir optionalDependencies girdisi bulunuyor
    {
      "optionalDependencies": {
        "@antv/setup": "github:antvis/G2#1916faa365f2788b6e193514872d51a242876569"
      }
    }
    
  • npm github: bağımlılığını çözdüğünde bu commit’i çekiyor, package.json dosyasını buluyor ve ardından lifecycle script’lerini çalıştırıyor
  • Söz konusu commit’te, @antv/setup tanımını ve prepare script’ini içeren bir package.json ile aynı Shai-Hulud yükünün yeniden obfuscate edilmiş 499KB’lık index.js dosyası yer alıyor
  • prepare script’indeki && exit 1, optional dependency’nin başarısız olmasına yol açıyor; ancak npm optional dependency hatasını ölümcül saymadığı için kurulum devam ediyor
  • Git API, antvis/G2 üzerine push edilmiş üç farklı commit SHA gösteriyor ve bunların hiçbiri herhangi bir branch’e bağlı değil
  • Üç commit de aynı metadata’yı paylaşıyor: author huiyu.zjt <Alexzjt@users.noreply.github.com>, commit message New Package, 0 parent ve GPG imzası yok
  • Saldırgan, antvis/G2 üzerinde yazma yetkisi olmadan, bir fork’ta payload orphan commit’i oluşturup ardından fork’u silerek üst depo namespace’i altında SHA ile fetch edilebilen commit bırakabiliyor
  • Bu yöntem, GitHub Actions’taki taklit commit sorunuyla aynı türden; Chainguard bunu belgeledi, burada ise npm github: bağımlılık çözümlemesine uygulanıyor

Ele geçirilme göstergeleri

  • 2026-05-19 01:44–02:06 UTC arasında atool (i@hust.cc) tarafından yayımlanan paketler doğrulama kapsamına alınmalı
  • preinstall script’i bun run index.js
  • Yükün SHA256 değeri a68dd1e6a6e35ec3771e1f94fe796f55dfe65a2b94560516ff4ac189390dfa1c
  • antvis/G2 taklit commit’leri şunlar
    • 1916faa365f2788b6e193514872d51a242876569 — 626 sürüm
    • 7cb42f57561c321ecb09b4552802ae0ac55b3a7a — 2 sürüm
    • dc3d62a2181beb9f326952a2d212900c94f2e13d — 1 sürüm, garbage collected
  • Ağ IoC’leri arasında hxxps://t.m-kosche[.]com/api/public/otel/v1/traces, 169.254.169.254 EC2 metadata ve 169.254.170.2 ECS container metadata istekleri bulunuyor
  • Depo IoC’leri arasında chore/add-codeql-static-analysis branch’i, Run Copilot workflow’u ve toJSON(secrets) çıktısını format-results.txt dosyasına dump eden .github/workflows/codeql.yml yer alıyor
  • Geliştirme ortamı IoC’leri arasında .claude/settings.json içindeki SessionStart hook’u, .vscode/tasks.json içindeki "runOn": "folderOpen", .claude/setup.mjs, .vscode/setup.mjs bulunuyor
  • Kalıcılık IoC’leri arasında kitty-monitor.service, com.user.kitty-monitor.plist, ~/.local/bin/gh-token-monitor.sh, ~/.local/share/kitty/cat.py, /var/tmp/.gh_update_state bulunuyor

Kontrol edilmesi gereken temsilî paketler

  • compromised-packages.csv tablosunda Package ve Compromised Versions olmak üzere 2 sütun var ve tabloya göre 317 paket gösteriliyor
  • Lockfile içinde bu paketlerin ve 2026-05-19 tarihinde yayımlanan kötü amaçlı sürümlerin bulunup bulunmadığı kontrol edilmeli
  • Temsilî @antv paketleri ve kötü amaçlı sürümler
    • @antv/g2: 5.5.8, 5.6.8
    • @antv/g6: 5.2.1, 5.3.1
    • @antv/g: 6.4.1, 6.5.1
    • @antv/l7: 2.26.10, 2.27.10
    • @antv/x6: 3.2.7, 3.3.7
    • @antv/s2: 2.8.1, 2.9.1
    • @antv/f2: 5.15.0, 5.16.0
  • Genel npm paketleri ve kötü amaçlı sürümler
    • echarts-for-react: 3.0.7, 3.1.7, 3.2.7
    • size-sensor: 1.0.4, 1.1.4, 1.2.4
    • jest-canvas-mock: 2.5.3, 2.6.3, 2.7.3
    • jest-date-mock: 1.0.11, 1.1.11, 1.2.11
    • timeago.js: 4.1.2, 4.2.2
    • timeago-react: 3.1.7, 3.2.7
    • @lint-md/cli: 2.1.0, 2.2.0
    • @lint-md/core: 2.1.0, 2.2.0
    • @lint-md/parser: 0.1.14, 0.2.14

Müdahale ve savunma

  • Etkilenen sürüm yüklendiyse, build ortamından erişilebilen npm token’ları, GitHub PAT’leri, AWS anahtarları, SSH anahtarları, bulut kimlik bilgileri, veritabanı parolaları, Vault token’ları, Kubernetes service account token’ları ve yerel parola yöneticisi gizli değerleri değiştirilmelidir
  • t.m-kosche[.]com ağ ve DNS düzeyinde engellenmelidir
  • Build ortamında erişilebilir token’lara sahip GitHub hesapları altında yetkisiz herkese açık depo oluşturulup oluşturulmadığı kontrol edilmelidir
  • CI pipeline’larında yetkisiz paket publish işlemleri ve npm OIDC token değişim günlükleri incelenmelidir
  • Ele geçirilmiş CI identity ile üretilen imzalı artifact olup olmadığı Sigstore şeffaflık günlüklerinden kontrol edilmelidir
  • Yerel Node.js projelerinde .claude/settings.json hook’u, .vscode/tasks.json otomatik çalıştırma görevleri, .claude/setup.mjs ve .vscode/setup.mjs dosyaları kontrol edilmelidir
  • kitty-monitor systemd kullanıcı servisi ve com.user.kitty-monitor LaunchAgent kaldırılmalı; ayrıca ~/.local/share/kitty/cat.py, /var/tmp/.gh_update_state, ~/.local/bin/gh-token-monitor.sh dosyalarının varlığı kontrol edilmelidir
  • semver aralığı çözümlemesinin kötü amaçlı sürümlere yönelmemesi için bağımlılıklar pinlenmeli veya lockfile kullanılmalıdır
  • CI/CD pipeline’larında Docker socket açığa çıkması ve EC2 metadata erişimi denetlenmeli, IMDSv2 hop limit kısıtlaması değerlendirilmelidir
  • Package Manager Guard (pmg), preinstall çalıştırılmadan önce paketi threat intelligence ile karşılaştıran açık kaynaklı bir kurulum proxy’sidir
  • dependency cooldown, yapılandırılabilir bir zaman penceresi içinde yayımlanan sürümleri reddederek semver aralıklarının yeni kötü amaçlı sürümlere çözülmesiyle oluşan ani dağıtım dalgalarını azaltabilir
  • vet, beklenmeyen preinstall hook’ları, boyutta ani artış ve maintainer değişikliği gibi anormal paket güncellemelerini CI/CD pipeline’larına ulaşmadan önce tespit edebilir
  • Tek bir hesap altında 547 paket ve tek bir oturumda silahlandırılan 314’ten fazla paketlik etki alanı, npm güven modelindeki yapısal zayıflıkları ortaya koyuyor

Referanslar

1 yorum

 
GN⁺ 3 시간 전
Hacker News yorumları
  • Artık NPM yaşam döngüsü scriptleri varsayılan olarak devre dışı olmalı
    Kolaylık özelliği denilerek keyfi kod çalıştırma gömülmüş durumda ve bu, geçişli bağımlılıklar için de geçerli. Yaygın NPM kurt tarzı saldırıların hepsi bu varsayılan ayar üzerinden yayıldı. Belirli bir komutta bir kez açınca tüm geçişli bağımlılıkların yaşam döngüsü scriptleri çalıştırmasına izin verilmemeli; gerçekten gerekli olan her bağımlılık için açıkça işaretlenmesi gerekir
    NPM paketlerinin ezici çoğunluğu bu tür scriptlere bağlı değil, bu yüzden hâlâ yapmadıysanız küresel olarak kapatmak iyi olur

    • Bununla ilgili bir RFC var: https://github.com/npm/rfcs/pull/868
    • Ya da doğrudan pnpm kullanın
    • Evet. Ya da sandbox içinde çalıştırılmalı. Kurulan paketin kendi bağlamında keyfi komutlar çalıştıran kurulum sonrası scriptler anlaşılabilir ama keyfi scriptler ile kullanıcı yetkilerinin birleşimi felaket tarifidir
      Gerçi paketler, program içinde ilk kez içe aktarıldıklarında da istedikleri çöplüğü çalıştırabilir
  • “Bunu engellemenin yolu yok” sözü, ancak bu tür şeylerin düzenli olarak yaşandığı tek paket yöneticisinde söylenir

    • NPM’in en popüler paket yöneticisi olması dışında, onu bu tür saldırılara özellikle açık yapan başka bir etken var mı?
  • Bir noktadan sonra Dependabot’u kapatıp NPM paketlerini minör/yama sürümleri dahil tamamen sabitlemek, sürekli güncel tutmaktan daha iyi olmayacak mı?
    Özellikle frontend paketlerinde bugünlerde anlamlı güvenlik düzeltmeleri, tedarik zinciri saldırılarından daha nadir görünüyor
    Üzücü bir durum ama frontend’i statik bir BOM’a dönüştürüp NPM’in en azından “önceki sürümü yeniden yayımlayamazsın” kuralını düzgün uyguladığına güvenmemek için bir sebep var mı?

    • O zaman da uyum ekibi, yaması olan bir CVSS 3.1 düzeyinde CVE’nin düzeltilmeden kaldığı için sinirlenir
    • Bekleme süresi zorunlu kılınabilir. Mesela 30 günden daha yeni sürümlerin hiçbir pull request’e girememesi gibi
      Bilinen CVE’leri çözen sürümler için istisna tanınabilir
    • Evet. Diğer ekosistemlerde tedarik zinciri saldırılarının daha az görülmesinin nedenlerinden biri de bu
    • NPM, hash’ler ve sabitlenmiş geçişli bağımlılıklar dahil eksiksiz bir lockfile oluşturmuyor mu?
  • Durum giderek çığırından çıkıyor. Kendi adıma node, python, tüm paket yöneticilerini makinemden zaten kaldırdım; onun yerine sadece devcontainer ya da VM içinde kullanıyorum
    Geliştirici topluluğu çok güçlendirilmiş güvenlik üretse bile, en azından bir yıl kadar sonra modellerin sosyal mühendislik becerilerinin yeterince gelişip bunun yine de kaybedilen bir oyun olmasından endişe ediyorum

    • Modeller sosyal mühendislikte çok iyi olsa bile bunun neden ilkesel olarak bu kadar büyük bir etki yaratacağını pek anlamıyorum. Azalan getiri var ve hedeflerin insan hızında hareket etmesi çok büyük bir darboğaz gibi görünüyor
      Mesela XZ hack’ine giren emek çok büyüktü ve mevcut bakımcıyı zaman içinde yıpratmaya dayandığı için hızlandırılamazdı. Gerekli kötü niyetli mesajları birkaç saniyede üretip gönderebilirsiniz ama onları okuyan insanların hızı artmaz; hepsi bir anda gelirse bu kez daha fazla şüphe çeker
      Girdinin ne kadar ikna edici olabileceğinin de sınırları var. XZ bakımcısına giden rastgele kötü niyetli bir mesajı seçip onu daha sinsi, daha isabetli, bakımcının kişisel zayıflıklarını ve korkularını daha iyi yansıtır hâle getirebilirsiniz ama genel olarak daha etkili olur muydu? Sanmıyorum, olsa olsa çok az
    • Container bu sorunu nasıl çözüyor? İnternete bağlıysa, ki pratikte öyle, ve container kimlik bilgilerini okuyabiliyorsa aynı sorun ortaya çıkmıyor mu?
    • Node olmadan cloud kaynaklarını nasıl yönetiyorsunuz? Cloudflare için wrangler gerekiyor, AWS tarafında da pek çok node CLI var
  • Artık Zed 1.0 olduğuna göre tamamen geçmek istiyorum ama bildiğim kadarıyla güvenlik modeli ya hep ya hiç. Bilmediğim NPM paketlerini kafasına göre indirip kurmasına izin vermek ya da tüm LSP özelliklerini kapatmak zorundayım
    Sonra da sürekli böyle haberler görüyorum

  • npm, paket yüklemelerini otomatik olarak yaklaşık 10 dakika geciktirip bu sırada üçüncü taraf kod denetim şirketleri ekosistemine dağıtarak otomatik kontrolden geçiren bir program işletebilir mi?
    Hatta hangi denetçinin sorunları en hızlı ve güvenilir biçimde yakaladığını gösteren herkese açık bir sıralama ya da para ödülü bile olabilir

  • Bu liste eksik. En az bir paket daha, nx-console VS Code eklentisi, dün bu kurda bulaştı ve 2,2 milyon indirmesi var
    Yetkisi ve bağlantıları olan biri okuyorsa, daha fazlası olup olmadığını görmek için onun bağımlılık zincirini de izlemeye değer. Referans:
    https://github.com/nrwl/nx-console/security/advisories/GHSA-...
    PS: Bulaşmadan hemen sonra insanları uyarmak için bunu HN’e gönderdim ama ne yazık ki neredeyse hiç oy almadı

  • Tüm ekosistem açısından bakınca, TC39’un JS’nin kendisine daha iyi bir standart kütüphane ekleme yollarına bakması gerekiyor. Böylece tek satırlık paketlerin sayısı azaltılabilir
    Katılıyorum. Eskiden Deno ile çalışırken en sevdiğim kısım standart kütüphane[0] ve genel olarak daha tamamlanmış geliştirme ortamıydı. Çalışma zamanına entegre bir test çalıştırıcısı ve assertion kütüphanesi gelmesi çok doğal
    0 - https://docs.deno.com/runtime/reference/std/

    • Adil olmak gerekirse Node da birkaç LTS sürümünden beri varsayılan olarak node:test [0] ve node:assert/strict [1] modüllerini sunuyor. node --test, Mocha’nın yerini kolayca alabilir ve node:assert/strict de fena değil ama chai bazen daha kullanışlı. expect benzeri ergonomi yüzünden. Deno’nun @std’sinde expect tarzı bir assertion kütüphanesi var
      Sorun şu ki Node ekosisteminde çok fazla test çalıştırıcısı var ve bunların önemli bir kısmı Mocha kadar kolay ikame edilemiyor. Bu yüzden yerleşik test harness’i ve assertion kütüphanesine geçiş doğal olarak sancılı ve yavaş olacak. İnsanlar çeşitli nedenlerle Jest ve Vitest’in gereksiz derecede karmaşık yapısını seviyor. Büyük şirketler Karma’nın iyi bir fikir olduğunu düşündü. “Birim testleri için V8 seviyorsunuz değil mi? O zaman mevcut V8 ortamınızın içinde bir tane daha V8 kopyası açalım” hissinden neden daha fazla geliştiricinin nefret etmediğini hâlâ anlamıyorum
      [0] https://nodejs.org/api/test.html
      [1] https://nodejs.org/api/assert.html#strict-assertion-mode
    • Burada geçen paketlerden hangisinin “daha iyi bir standart kütüphane”ye gireceğinden emin değilim
      Hangi dilin standart kütüphanesinde “3 saat önce” biçimlendiricisi var? timeago.js tam olarak bunu yapıyor
      slice.js ise sadece Python tarzı negatif indeksleme sağlıyor. TC39 zaten array.at() ve array.slice() için negatif değer desteği getirdi
    • Node.js standart kütüphanesi de bugünlerde büyümeye devam ediyor; yukarıda söz edilen assertion ve test desteğini içerdiğini belirtmekte fayda var
      https://nodejs.org/api/
  • Söylenene göre payload Docker socket’ini kontrol ediyor ve varsa üç aşamalı yöntemle container escape deniyor
    Yani devcontainer ya da VM içinde çalıştırsanız bile bu tür kurtlar şimdiden dışarı çıkmayı deniyor
    rootless bir VM motoru kullandığınızdan emin olmalısınız. Örneğin Docker yerine podman gibi

    • Bazıları, hatta güvenlik sektöründekiler bile aksini söylese de Docker güçlü bir güvenlik sınırı değildir ve öyle muamele görmemelidir. Çalışan sistem ve kernel paylaşılır
      Bu bana insanların düşük yetkili Linux hesapları dağıtıp kernel’in ayrıcalık yükseltmeyi engelleyeceğine güvendiği günleri hatırlatıyor. Docker kelimenin tam anlamıyla aynı şeyin daha prosedürlü hâli. Özellikle bugünlerde yeni bir kernel yerel ayrıcalık yükseltme açığı sanki her 5 dakikada bir çıkıyor
      Podman, saldırgana root vermemesi açısından biraz daha iyi ama zaten neden hesap veriyorsunuz ki? Düzgün bir VM kullanın
    • Container içine Docker socket mount etmeyin yeter
    • Jails veya zones’a daha yakın bir şeyimiz olsaydı gerçekten güzel olurdu. Hatta daha iyisi, container’ları bir jail ya da zone içine koymak olurdu
      BSD’deki gibi kapsamlı bir sandbox Linux’ta var mı?
    • Neden düzgün bir sanal makine kullanmıyorsunuz?
    • Çoğu kişi en azından Linux’ta Docker’ı rootless çalıştırmıyor mu? podman bunun ötesinde ne yapıyor?
  • Artık Mr Bones' Wild Ride’dan inmek istiyorum ama bunların süreceğinden korkuyorum. Benim gördüğüm kadarıyla ticari tespit stratejilerinin önemli kısmı, paketleri yüklerken ya da kullanırken depo/cihaz/geliştirici düzeyine göre ayarlanıyor
    E-posta spam’i veya genel malware ile başa çıkma biçimine benziyor. Bu yüzden kötü niyetli aktörlerin sürekli denemeye değer bulacağı hedefler neredeyse hep olacak. Ama e-postadan farklı olarak paket yöneticileri merkezi otorite konumunda ve bant dışı sorunların doğal olarak geliştiricinin sorumluluğuna itileceği bir yapı var
    Dışarıdan bakan biri olarak, hızlı sürüm ve gevşek sürümleme kültüründen uzaklaşıp registry’deki daha istikrarlı ve derinlemesine denetlenmiş sürümlere odaklanmak gerekebilir diye düşünüyorum. Hacim ve ölçek etkileri yüzünden yanılıyor olabilirim ama daha oynak dillere daha sık darbe gelmesi yine de düşündürücü
    Keşke mevcut tabloyu kapsamlı biçimde ele alan bir yazı olsa

    • Bunun 1991 yapımı Nothing But Trouble filmine gönderme olup olmadığını merak edip araştırdım; meğer yanlış hatırlıyormuşum
      O filmdeki roller coaster’ın adı Mr Bonestripper’mış: https://www.youtube.com/watch?v=NEZEgd8GjJc
      Bunun yerine Roller Coaster Tycoon 2’den geliyormuş: https://knowyourmeme.com/memes/mr-bones-wild-ride
      Spam benzetmesine dönersek, ticari ve sosyal bilgisayar ağlarının neredeyse tümünde e-posta adreslerini emip spam’i insanların kabul etmek zorunda kaldığı, üzerine de bir meşruiyet cilası çekilmiş bir düzene bir ölçüde yerleşmiş durumdayız. Bu alanda da benzer bir şeyin olması muhtemel. Muhtemelen Oracle lisans denetim ajanı tarzı yazılımlarla otomatik bağımlılık yönetiminin bir birleşimi; yani tedarik zinciri malware’ini “çözmek” için başka malware’leri allowlist’e alan bir yapı