- 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_commentevent’lerinden gelen trusted publishing token’larını reddediyor.pull_request_targetiç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.