← Tüm gündem

Rehber · 31 Eki 2026

npm ve GitHub Actions: hardening checklist'i

1.500+ paketi riske atan açık sonrası GitHub npm trusted publishing'i sıkılaştırdı. Workflow ve publish ayarlarınız için kısa bir checklist.

Son doğrulama
31 Eki 2026
Durum
GitHub, npm trusted publishing'i 2 Ekim 2026'da sıkılaştırdı.

Ne değişti?

Bloom Security araştırmacıları, npm trusted publishing’in ilk başarılı publish’e kadar bir repository’yi owner/repo gibi isim yoluyla tanımladığını buldu. Bir saldırgan terk edilmiş ya da yeniden adlandırılmış bir repository adını sahiplenip bir publish workflow’u çalıştırabiliyor ve kurbanın paketi için publish token’ı alabiliyordu. Çalıntı credential gerekmiyordu. Saldırıya SlugFest adını verdiler ve 10 milyonun üzerinde indirmesi olan 1.500’den fazla savunmasız paket saydılar. Bunu 6 Haziran 2026’da bildirdiler.

GitHub yanıtını 2 Ekim 2026’da duyurdu:

  • Doğrulanmamış trusted publisher ayarları artık oluşturulduktan 48 saat sonra sona eriyor.
  • Bir ayar, ilk başarılı publish’ten sonra bu süreden muaf oluyor.
  • Repository ya da proje kimliğini değiştirmek yeni bir güven ilişkisi ve yeni bir 48 saatlik pencere gerektiriyor.
  • npm, issue_comment event’lerinden gelen trusted publishing token’larını reddediyor. pull_request_target için mevcut kısıtlama devam ediyor.

Checklist

1. Trusted publisher ayarlarınızı denetleyin. Publish ettiğiniz her paketi açın ve listelenen repository’nin hâlâ sizin olduğunu doğrulayın. Bir repository yeniden adlandırıldıysa, transfer edildiyse ya da silindiyse binding’i kaldırıp yeniden oluşturun.

2. Workflow token’ına en az yetkiyi verin. Varsayılanı read only yapın, yetkiyi job bazında artırın.

permissions:
  contents: read

jobs:
  publish:
    permissions:
      contents: read
      id-token: write   # yalnızca publish job'unun buna ihtiyacı var

3. Üçüncü taraf action’ları tam commit SHA’sına sabitleyin. Tag’ler taşınabilir. Commit SHA taşınamaz. SHA’yı fork’tan değil, action’ın kendi repository’sinden alın ve güncellemesini Dependabot’a bırakın.

- uses: actions/checkout@<full-length-commit-sha>

4. Güvenilmeyen metni asla doğrudan script’e koymayın. Pull request başlıkları, branch isimleri ve issue gövdeleri shell içerebilir. Bunları environment variable üzerinden geçirin ve tırnak içine alın.

- name: Use the title safely
  env:
    TITLE: ${{ github.event.pull_request.title }}
  run: echo "$TITLE"

5. pull_request_target ve workflow_run konusunda dikkatli olun. Normal bir pull request’ten daha yüksek yetkiyle çalışırlar. Secret’ları olan bir workflow’da fork’tan gelen kodu checkout etmeyin.

6. Saklanan cloud key’leri yerine OIDC kullanın. Workflow, AWS, Azure veya Google Cloud’dan kısa ömürlü credential alsın. Böylece repository ayarlarından çalınacak uzun ömürlü bir key kalmaz.

7. Bir şey şüpheli görünürse secret’ları rotate edin. Bir secret log’da göründüyse log’u silin ve secret’ı rotate edin. O andan itibaren sızmış kabul edin.

8. Publish event’lerini izleyin. Beklenmedik paket release’leri için alarm açın. Ne kadar erken öğrenirseniz hasar o kadar küçük olur.

Nasıl yardımcı olabiliriz?

CI/CD pipeline’larını bu listeye göre inceler ve OIDC’ye, sabitlenmiş action’lara ve en az yetkili token’lara taşırız. Genelde kısa bir çalışma yeter. Aşağıdaki butondan bir görüşme ayarlayın.

Kaynaklar

  1. The Hacker News: GitHub tightens npm publishing after flaw left 1,500+ packages vulnerable
  2. GitHub Docs: Security hardening for GitHub Actions

Sizi yavaşlatan ne?

Senior bir mühendisle 30 dakikalık görüşme. Sonraki adım biz olsak da olmasak da, net bir yol haritasıyla ayrılırsınız.

Görüşme planla