deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

pin-deep, pin'lenmiş GitHub Actions'ların kendi bağımlılıklarını pin'leyip pin'lemediğini özyinelemeli olarak denetliyor

pin-deep adlı yeni bir Python aracı, SHA ile pin'lenmiş GitHub Actions'ların bağımlılık ağacını geziyor ve tam commit SHA yerine tag'e veya kısa hash'e dayanan her iç içe uses: referansını işaretliyor.

pin-deep, pin'lenmiş GitHub Actions'ların kendi bağımlılıklarını pin'leyip pin'lemediğini özyinelemeli olarak denetliyor

pin-deep adlı yeni bir açık kaynak araç, geleneksel pin'leme önerilerinin kapsamadığı bir GitHub Actions tedarik zinciri güvenliği boşluğuna odaklanıyor: pin'lediğiniz action'ların bağımlılıkları. Bir dev.to yazısında duyurulan ve PyPI'da yayımlanan Python paketi, bir workflow dosyasını özyinelemeli olarak denetliyor ve tam bir commit SHA'ya kilitlenmemiş her iç içe uses: referansını raporluyor.

Standart öneri, uses: satırlarının bir commit SHA'ya pin'lenmesi, böylece ele geçirilmiş bir tag'ün CI'nızı sessizce yeniden yazamamasıdır. Dev.to yazısı, bunun yalnızca ilk adımı güvence altına aldığını savunuyor ve CVE-2025-30066 olarak takip edilen tj-actions ihlalini örnek olay olarak gösteriyor: yazıya göre kurbanlara, ele geçirilen action'a referans veren reviewdog üzerinden ulaşılmıştı. Reviewdog'yu pin'lemek işe yaramadı, çünkü zayıf halka, kurbanların zaten pin'lediği bir şeyin bağımlılığının içindeydi.

Nasıl çalışıyor

pin-deep, bir workflow dosyası ya da tek bir pin'lenmiş uses: değeri alıyor. Tam bir commit SHA'ya pin'lenmiş her action'ın action.yml dosyasını çekiyor, orada bildirilen iç içe uses: girdilerini okuyor ve döngüsel referanslara karşı korumayla, yapılandırılabilir bir derinliğe kadar bu işlemi tekrarlıyor. Bir tag'e, branch'e veya kısaltılmış bir hash'e çözülen her iç içe referans; derinliği, geldiği manifest ve workflow'unuzdan sorunlu girdiye kadar tam zincirle birlikte işaretleniyor. Yazıdaki örnek çıktı, pin'lenmiş bir actions/setup-python SHA'sı üzerinden ulaşılan actions/cache@v3'ün derinlik 2'de yakalandığını gösteriyor.

Tasarım kararları

Birkaç uygulama seçimi, aracın gerçekte neyi garanti ettiğini şekillendiriyor. Özyineleme yalnızca tam SHA'lar üzerinden gerçekleşiyor: yüzen bir tag'in sabit bir içeriği yoktur, bu yüzden alt öğelerini denetlemek, sizin gerçekte gönderdiğiniz şey yerine tag'in bugün işaret ettiği şeyi incelemek olurdu. Pin'lenmemiş referanslar işaretleniyor ama asla takip edilmiyor. Kısa hash'ler geçiş değil uyarı sayılıyor, çünkü yedi karakterlik bir ön ek çözümleniyor ama tam bir 40 veya 64 karakterlik SHA'dan zayıf; --strict bayrağı bu bulguların da run'ı başarısız kılmasını sağlıyor.

Varsayılan derinlik 3; yazı bunu, reviewdog benzeri bir boşluğu yakalayacak kadar derin ama taramayı hızlı tutacak bir değer olarak tanımlıyor. Araç bir şey bulduğunda 1 durum koduyla çıkıyor, dolayısıyla doğrudan CI'ı kapı olarak kullanılabiliyor. GITHUB_TOKEN bir API yedeği olarak hizmet veriyor ve yazıya göre genel depolar için hiçbir kimlik bilgisi gerekmiyor. Paket ayrıca yalnızca Python standart kütüphanesiyle, hiçbir runtime bağımlılığı olmadan yazılmış.

Mevcut linter'larla karşılaştırması

zizmor gibi statik workflow linter'ları kendi workflow dosyalarınızdaki uses: satırlarını inceler. Yazara göre pin-deep'i ayıran özellik, bunun ötesindeki özyinelemeli adım: pin'lediğiniz action'ların kendilerinin geçişli olarak neye bağımlı olduğunu denetlemek. Yazı, başka hiçbir aracın bu iç içe denetimi yapmadığını iddia ediyor ve pin'leme derinliğini kendi başına denetlenebilir bir boyut olarak çerçeveliyor. Bu benzersizlik iddiası projenin kendi duyurusundan geldiği için, alanın doğrulanmış bir incelemesi değil, bir tasarım hedefi olarak okunması en doğrusu.

Neden önemli

tj-actions olayı, bir Actions tedarik zinciri saldırısının adını verdiğiniz action'ı ele geçirmesine gerek olmadığını gösterdi; tek bir dolayım yeterli. Pin'lenmiş bir action yüzen bir tag'e referans veriyorsa, etkin güvenliğiniz o geçişli zincirdeki en zayıf ref kadar güçlüdür; ilk adım pin'leme bunu ifade edemez, hatta ortaya çıkaramaz bile. GitHub Actions, geçişli referansları kilitlemek için yerleşik bir mekanizma sunmuyor, dolayısıyla varsayılan olarak bu katmanın tamamı denetlenmeden kalıyor.

Bu, ucuz ve çıkış kodu güdümlü bir denetleyiciyi mantıklı bir CI eklemesi yapıyor: ya geçiyor ya da size bir bulgunun ardındaki tam action zincirini veriyor ve yalnızca tam SHA'lar üzerinden özyinelediği için, karşılaştığı her yüzme yapan ref, denetimin tam olarak nerede durduğunu işaretliyor. Aracın bağımsız değerlendirmesi, henüz yeni duyurulmuş olması nedeniyle hâlâ sınırlı; ama ortaya çıkardığı risk sınıfı gerçek, daha önce sahada defalarca gösterilmiş ve bugün çoğu pipeline'ın çalıştırdığı linting işlemlerine büyük ölçüde görünmez durumda.

  • #github-actions
  • #supply-chain-security
  • #ci-cd
  • #python
  • #open-source

İlgili yazılar