Github Security
Last updated
Last updated
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
(Şuradan buraya) Yüksek seviyede, GitHub, geliştiricilerin kodlarını depolamalarına ve yönetmelerine, ayrıca kodlarındaki değişiklikleri takip etmelerine ve kontrol etmelerine yardımcı olan bir web sitesi ve bulut tabanlı hizmettir.
Github depoları kamu, özel ve dahili olarak yapılandırılabilir.
Özel demek, sadece kuruluşun insanlarının erişebileceği anlamına gelir.
Dahili demek, sadece şirketin (bir şirketin birden fazla kuruluşu olabilir) erişebileceği anlamına gelir.
Kamu demek, tüm internetin erişebileceği anlamına gelir.
Hedef almak istediğiniz kullanıcı, repo veya kuruluşu biliyorsanız, github dorks kullanarak hassas bilgileri bulabilir veya her repo üzerindeki hassas bilgi sızıntılarını arayabilirsiniz.
Github, bir kullanıcı, bir repo veya bir kuruluş belirterek bir şey aramanıza olanak tanır. Bu nedenle, hassas bilgilere yakın görünecek bir dizi dize ile hedefinizdeki potansiyel hassas bilgileri kolayca arama yapabilirsiniz.
Araçlar (her araç kendi dork listesine sahiptir):
Lütfen, github dorklarının aynı zamanda github arama seçeneklerini kullanarak sızıntıları aramak için de tasarlandığını unutmayın. Bu bölüm, her repo'yu indirip içlerinde hassas bilgileri arayacak olan araçlara adanmıştır (belirli bir commit derinliğini kontrol etme dahil).
Araçlar (her araç kendi regex listesine sahiptir):
Bir repoda sızıntı ararken ve git log -p
gibi bir şey çalıştırırken, diğer commit'leri içeren diğer dalların olabileceğini unutmayın!
Pull request'leri kötüye kullanarak repo'ları tehlikeye atmak mümkündür. Bir repo'nun savunmasız olup olmadığını bilmek için çoğunlukla Github Actions yaml yapılandırmalarını okumanız gerekir. Aşağıda bununla ilgili daha fazla bilgi.
Silinmiş veya dahili olsa bile, github depolarının forklarından hassas verileri elde etmek mümkün olabilir. Bunu burada kontrol edin:
Accessible Deleted Data in GithubKuruluşun üye ayrıcıları olarak atanabilecek bazı varsayılan ayrıcalıklar vardır. Bunlar https://github.com/organizations/<org_name>/settings/member_privileges
sayfasından veya Kuruluşlar API'sinden kontrol edilebilir.
Temel izinler: Üyeler, kuruluş depoları üzerinde Hiçbiri/Okuma/yazma/Yönetici izinlerine sahip olacaktır. Tavsiye edilen Hiçbiri veya Okumadır.
Repo fork'lama: Gerekli değilse, üyelerin kuruluş depolarını fork'lamalarına izin vermemek daha iyidir.
Sayfa oluşturma: Gerekli değilse, üyelerin kuruluş depolarından sayfa yayınlamalarına izin vermemek daha iyidir. Gerekliyse, kamu veya özel sayfalar oluşturulmasına izin verebilirsiniz.
Entegrasyon erişim talepleri: Bu etkinleştirildiğinde, dış işbirlikçileri bu kuruluş ve kaynaklarına erişim talep edebilecektir. Genellikle gereklidir, ancak gerek yoksa, devre dışı bırakmak daha iyidir.
Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın
Repo görünürlüğü değişikliği: Etkinleştirildiğinde, repo için yönetici izinlerine sahip üyeler, görünürlüğünü değiştirme yetkisine sahip olacaktır. Devre dışı bırakıldığında, yalnızca kuruluş sahipleri repo görünürlüklerini değiştirebilir. Eğer insanların şeyleri kamuya açık yapmasını istemiyorsanız, bunun devre dışı olduğundan emin olun.
Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın
Repo silme ve transfer: Etkinleştirildiğinde, repo için yönetici izinlerine sahip üyeler, kamu ve özel depoları silme veya transfer etme yetkisine sahip olacaktır.
Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın
Üyelerin ekip oluşturmasına izin verme: Etkinleştirildiğinde, kuruluşun herhangi bir üyesi yeni ekipler oluşturabilecektir. Devre dışı bırakıldığında, yalnızca kuruluş sahipleri yeni ekipler oluşturabilir. Bunun devre dışı bırakılması daha iyidir.
Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın
Bu sayfada daha fazla şey yapılandırılabilir, ancak önceki olanlar daha çok güvenlikle ilgilidir.
Eylemler için birkaç güvenlikle ilgili ayar, https://github.com/organizations/<org_name>/settings/actions
sayfasından yapılandırılabilir.
Tüm bu yapılandırmaların her repo için bağımsız olarak da ayarlanabileceğini unutmayın
Github eylem politikaları: Hangi depoların iş akışlarını çalıştırabileceğini ve hangi iş akışlarının izin verileceğini belirtmenize olanak tanır. Hangi depoların izin verileceğini belirtmek ve tüm eylemlerin çalıştırılmasına izin vermemek tavsiye edilir.
Dış işbirlikçilerden fork pull request iş akışları: Tüm dış işbirlikçileri için onay gerektirmesi tavsiye edilir.
Bu bilgiyle ilgili bir API bulamadım, bulursanız paylaşın
Fork pull request'lerden iş akışlarını çalıştırma: Pull request'lerden iş akışlarını çalıştırmak kesinlikle tavsiye edilmez, çünkü fork kaynağının bakımcıları, kaynak deposunda okuma izinlerine sahip token'ları kullanma yetkisi alacaktır.
Bu bilgiyle ilgili bir API bulamadım, bulursanız paylaşın
İş akışı izinleri: Sadece okuma repo izinleri vermek kesinlikle tavsiye edilir. GITHUB_TOKEN'in kötüye kullanılmasını önlemek için yazma ve pull request oluşturma/onaylama izinleri vermek tavsiye edilmez.
Bu bilgiye erişmek için API uç noktasını biliyorsanız bana bildirin!
Üçüncü taraf uygulama erişim politikası: Her uygulamanın erişimini kısıtlamak ve yalnızca gerekli olanlara izin vermek tavsiye edilir (gözden geçirdikten sonra).
Yüklenmiş GitHub Uygulamaları: Yalnızca gerekli olanların (gözden geçirdikten sonra) izin verilmesi tavsiye edilir.
Bu senaryo için, bir github hesabına erişim elde ettiğinizi varsayacağız.
Bir şekilde bir kuruluş içindeki bir kullanıcı için kimlik bilgilerine sahipseniz, sadece giriş yapabilir ve hangi şirket ve kuruluş rollerine sahip olduğunuzu kontrol edebilirsiniz, eğer sıradan bir üye iseniz, sıradan üyelerin hangi izinlere sahip olduğunu, hangi gruplarda olduğunuzu, hangi repo'lar üzerinde hangi izinlere sahip olduğunuzu ve repo'ların nasıl korunduğunu kontrol edebilirsiniz.
2FA'nın kullanılabileceğini unutmayın, bu nedenle bu bilgilere yalnızca o kontrolü geçebiliyorsanız erişebilirsiniz.
Eğer user_session
çerezini çalmayı başarırsanız (şu anda SameSite: Lax ile yapılandırılmıştır) kullanıcıyı tamamen taklit edebilirsiniz; kimlik bilgilerine veya 2FA'ya ihtiyaç duymadan.
Aşağıdaki bölümdeki dal koruma atlamaları hakkında kontrol edin, faydalı olursa.
Github, kullanıcıların kendi adlarına kod dağıtmak için kimlik doğrulama yöntemi olarak kullanılacak SSH anahtarları ayarlamalarına olanak tanır (2FA uygulanmaz).
Bu anahtar ile, kullanıcının bazı ayrıcalıklara sahip olduğu depolar üzerinde değişiklikler yapabilirsiniz, ancak bunu github api'sine erişmek için kullanamazsınız. Ancak, erişiminiz olan repo ve kullanıcı hakkında bilgi almak için yerel ayarları listeleyebilirsiniz:
Eğer kullanıcı adını github kullanıcı adı olarak yapılandırmışsa, hesabında ayarladığı açık anahtarları https://github.com/<github_username>.keys adresinden erişebilirsiniz, bulduğunuz özel anahtarın kullanılabilir olduğunu doğrulamak için bunu kontrol edebilirsiniz.
SSH anahtarları ayrıca dağıtım anahtarları olarak depolarda ayarlanabilir. Bu anahtara erişimi olan herkes bir depodan projeleri başlatabilecektir. Genellikle farklı dağıtım anahtarlarına sahip bir sunucuda, yerel dosya ~/.ssh/config
hangi anahtarın ilgili olduğuna dair bilgi verecektir.
Açıklandığı gibi burada bazen taahhütleri imzalamak gerekebilir yoksa keşfedilebilirsiniz.
Mevcut kullanıcının herhangi bir anahtara sahip olup olmadığını yerel olarak kontrol edin:
Kullanıcı Tokenleri hakkında temel bilgileri kontrol edin için bir giriş.
Bir kullanıcı tokeni, HTTPS üzerinden Git için şifre yerine kullanılabilir veya API'ye Temel Kimlik Doğrulaması ile kimlik doğrulamak için kullanılabilir. Ekli olan ayrıcalıklara bağlı olarak farklı eylemler gerçekleştirebilirsiniz.
Bir Kullanıcı tokeni şöyle görünür: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123
Github Oauth Uygulamaları hakkında temel bilgileri kontrol edin için bir giriş.
Bir saldırgan, kullanıcıların muhtemelen bir kimlik avı kampanyasının parçası olarak kabul ettiği ayrıcalıklı verilere/eylemlere erişmek için kötü niyetli bir Oauth Uygulaması oluşturabilir.
Bir Oauth uygulamasının talep edebileceği kapsamlar bunlardır. Her zaman kabul etmeden önce talep edilen kapsamları kontrol etmelisiniz.
Ayrıca, temel bilgilerin açıklandığı gibi, kuruluşlar üçüncü taraf uygulamalara kuruluşla ilgili bilgilere/repos/eylemlere erişim verebilir veya reddedebilir.
Github Uygulamaları hakkında temel bilgileri kontrol edin için bir giriş.
Bir saldırgan, kullanıcıların muhtemelen bir kimlik avı kampanyasının parçası olarak kabul ettiği ayrıcalıklı verilere/eylemlere erişmek için kötü niyetli bir Github Uygulaması oluşturabilir.
Ayrıca, temel bilgilerin açıklandığı gibi, kuruluşlar üçüncü taraf uygulamalara kuruluşla ilgili bilgilere/repos/eylemlere erişim verebilir veya reddedebilir.
Bir Github Eylemini ele geçirmek ve kötüye kullanmak için birkaç teknik vardır, burada kontrol edin:
Abusing Github ActionsBir dizi onay gerektir: Eğer birkaç hesabı ele geçirdiyseniz, diğer hesaplardan PR'lerinizi kabul edebilirsiniz. Eğer PR'yi oluşturduğunuz hesaptan başka bir hesabınız yoksa, kendi PR'nizi kabul edemezsiniz. Ancak, eğer repodaki bir Github Eylemi ortamına erişiminiz varsa, GITHUB_TOKEN kullanarak PR'nizi onaylayabilir ve bu şekilde 1 onay alabilirsiniz.
Bu ve Kod Sahipleri kısıtlaması için not: genellikle bir kullanıcı kendi PR'lerini onaylayamaz, ancak eğer onaylayabiliyorsanız, PR'lerinizi kabul etmek için bunu kötüye kullanabilirsiniz.
Yeni commitler gönderildiğinde onayları iptal et: Eğer bu ayarlanmadıysa, geçerli kod gönderebilir, birinin onaylamasını bekleyebilir ve kötü niyetli kod ekleyip korunan dal ile birleştirebilirsiniz.
Kod Sahiplerinden inceleme gerektir: Eğer bu etkinleştirildiyse ve bir Kod Sahibiyseniz, bir Github Eylemi PR'nizi oluşturabilir ve ardından kendiniz onaylayabilirsiniz.
Bir CODEOWNER dosyası yanlış yapılandırıldığında Github şikayet etmez ama kullanmaz. Bu nedenle, yanlış yapılandırıldığında Kod Sahipleri koruması uygulanmaz.
Belirtilen aktörlerin pull request gereksinimlerini atlamasına izin ver: Eğer bu aktörlerden biriyseniz, pull request korumalarını atlayabilirsiniz.
Yönetici dahil et: Eğer bu ayarlanmadıysa ve repoda yöneticiseniz, bu dal korumalarını atlayabilirsiniz.
PR Kaçırma: Başkasının PR'sini kötü niyetli kod ekleyerek değiştirme, sonuçta oluşan PR'yi kendiniz onaylama ve her şeyi birleştirme yeteneğine sahip olabilirsiniz.
Dal Koruma Kaldırma: Eğer bir repo yöneticisiyseniz, korumaları devre dışı bırakabilir, PR'nizi birleştirebilir ve korumaları geri ayarlayabilirsiniz.
Push korumalarını atlama: Eğer bir repo sadece belirli kullanıcıların dallarda push (kod birleştirme) göndermesine izin veriyorsa (dal koruması tüm dalları koruyor olabilir ve joker karakter *
kullanıyor olabilir).
Eğer repo üzerinde yazma erişiminiz varsa ama dal koruması nedeniyle kod göndermeye izin verilmiyorsa, yine de yeni bir dal oluşturabilir ve içinde kod gönderildiğinde tetiklenen bir github eylemi oluşturabilirsiniz. Dal koruması dal oluşturulana kadar koruma sağlamayacağından, bu dal üzerindeki ilk kod gönderimi github eylemini tetikleyecektir.
Github Ortamı hakkında temel bilgileri kontrol edin için bir giriş.
Eğer bir ortam tüm dallardan erişilebiliyorsa, korunmuyor demektir ve ortam içindeki gizli bilgilere kolayca erişebilirsiniz. Tüm dalların korunduğu repolar bulabileceğinizi unutmayın (isimlerini belirterek veya *
kullanarak) bu senaryoda, kod gönderebileceğiniz bir dal bulun ve yeni bir github eylemi oluşturarak gizli bilgileri sızdırabilirsiniz (veya birini değiştirebilirsiniz).
Tüm dalların korunduğu (joker karakter *
ile) bir kenar durumu bulabileceğinizi unutmayın, dallara kimin kod gönderebileceği belirtilmiştir (bunu dal korumasında belirtebilirsiniz) ve kullanıcınıza izin verilmemiştir. Yine de özel bir github eylemi çalıştırabilirsiniz çünkü bir dal oluşturabilir ve kendisi üzerinde push tetikleyicisini kullanabilirsiniz. Dal koruması yeni bir dalda push'a izin verir, bu nedenle github eylemi tetiklenecektir.
Not edin ki dal oluşturulduktan sonra dal koruması yeni dala uygulanacaktır ve bunu değiştiremeyeceksiniz, ancak o zamana kadar sırları zaten ele geçirmiş olacaksınız.
Kullanıcı token'ı oluştur
Sırların içinden github token'larını çal
İş akışı sonuçlarının ve dalların silinmesi
Tüm org'a daha fazla izin ver
Bilgi sızdırmak için webhook'lar oluştur
Dış işbirlikçileri davet et
SIEM tarafından kullanılan webhook'ları kaldır
Arka kapı ile Github Action oluştur/değiştir
Sır değeri değişikliği yoluyla komut enjeksiyonu için savunmasız Github Action bul
Github'da bir fork'tan bir repo için PR oluşturmak mümkündür. PR kabul edilse bile, orijinal repoda bir taahhüt kimliği, kodun fork versiyonu için oluşturulacaktır. Bu nedenle, bir saldırgan görünüşte meşru bir repodan, repo sahibinin oluşturmadığı belirli bir taahhütü kullanmak için sabitleyebilir.
şu gibi:
Daha fazla bilgi için https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd adresini kontrol edin.
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)