Github Security

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Github Nedir

(Buradan alıntıdır) Genel olarak, GitHub, geliştiricilerin kodlarını depolamalarına ve yönetmelerine, kodlarındaki değişiklikleri takip etmelerine ve kontrol etmelerine yardımcı olan bir web sitesi ve bulut tabanlı bir hizmettir.

Temel Bilgiler

Harici Keşif

Github depoları genel, özel ve iç olarak yapılandırılabilir.

  • Özel, sadece kuruluşun üyelerinin erişebileceği anlamına gelir

  • İç, sadece kuruluşun üyelerinin erişebileceği anlamına gelir (bir kuruluşun birden fazla üyesi olabilir)

  • Genel, tüm internetin erişebileceği anlamına gelir.

Hedeflediğiniz kullanıcıyı, depoyu veya kuruluşu biliyorsanız, github dorks kullanarak hedefinizdeki hassas bilgileri bulabilir veya her depoda hassas bilgi sızıntılarını arayabilirsiniz.

Github Dorks

Github, kullanıcıyı, depoyu veya kuruluşu kapsam olarak belirterek bir şey aramaya izin verir. Bu nedenle, hassas bilgilere yakın görünecek dize listesiyle hedefinizdeki potansiyel hassas bilgileri kolayca aramanız mümkündür.

Araçlar (her araç kendi dork listesini içerir):

Github Sızıntıları

Lütfen unutmayın, github dorks ayrıca github arama seçeneklerini kullanarak sızıntıları aramak için de kullanılır. Bu bölüm, bu araçların her depoyu indirip içlerinde hassas bilgileri arayacakları araçlara ayrılmıştır (belirli bir taahhüt derinliğini bile kontrol ederek).

Araçlar (her araç kendi regex listesini içerir):

Bir depoda sızıntı ararken git log -p gibi bir şey çalıştırdığınızda diğer taahhütlerde başka dallar olabileceğini unutmayın ve bu dallarda da gizli bilgiler olabilir!

Harici Forklar

Bir repo, pull isteklerini kötüye kullanarak tehlikeye atılabilir. Bir repo'nun savunmasız olup olmadığını anlamak için genellikle Github Actions yaml yapılandırmalarını okumanız gerekmektedir. Daha fazla bilgi için aşağıdaki bölüme bakın.

Kuruluş Sertleştirme

Üye Yetkileri

Kuruluşun üyelerine atanabilecek bazı varsayılan yetkiler vardır. Bu yetkiler, https://github.com/organizations/<org_name>/settings/member_privileges sayfasından veya Organizations API üzerinden kontrol edilebilir.

  • Temel izinler: Üyeler, org depoları üzerinde Hiçbiri/Oku/Yaz/Admin izinlerine sahip olacaklardır. Önerilen Hiçbiri veya Oku.

  • Repo çatallama: Gerekli değilse, üyelerin kuruluş depolarını çatallamasına izin verilmemesi daha iyidir.

  • Sayfa oluşturma: Gerekli değilse, üyelerin org depolarından sayfa yayınlamasına izin verilmemesi daha iyidir. Gerekliyse, genel veya özel sayfalar oluşturmaya izin verilebilir.

  • Entegrasyon erişim istekleri: Bu etkinleştirildiğinde, dış işbirlikçiler, bu kuruluşa ve kaynaklarına erişmek için GitHub veya OAuth uygulamaları için erişim isteyebilirler. Genellikle gereklidir, ancak gerekmeyen durumlarda 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 admin izinlerine sahip üyeler, görünürlüğünü değiştirebilir. Devre dışı bırakıldığında, yalnızca kuruluş sahipleri repo görünürlüğünü değiştirebilir. İnsanların şeyleri genel yapmasını istemiyorsanız, bunun devre dışı olduğundan emin olun.

  • _Bu bilgiyi API yanıtında bulamadım, bul

Entegrasyonlar

Bu bilgilere erişmek için API uç noktasını biliyorsanız bana bildirin!

  • Üçüncü taraf uygulama erişim politikası: Her uygulamaya erişimi kısıtlamak ve sadece gerekli olanlara izin vermek önerilir (inceledikten sonra).

  • Yüklenmiş GitHub Uygulamaları: İncelendikten sonra sadece gerekli olanlara izin vermek önerilir.

Keşif ve Kimlik Bilgilerini Kötüye Kullanma Saldırıları

Bu senaryoda, bir github hesabına erişim elde ettiğinizi varsayacağız.

Kullanıcı Kimlik Bilgileriyle

Eğer bir kullanıcının kimlik bilgilerine zaten sahipseniz, sadece giriş yapabilirsiniz ve hangi kurumsal ve organizasyon rollerine sahip olduğunuzu, bir üye olarak hangi izinlere sahip olduğunuzu, hangi gruplarda olduğunuzu, hangi repo'lara hangi izinlere sahip olduğunuzu ve repo'ların nasıl korunduğunu kontrol edebilirsiniz.

2FA kullanılabilir olduğunu unutmayın, bu nedenle bu bilgilere erişebilmeniz için bu kontrolü de geçebilmeniz gerekmektedir.

Eğer user_session çerezini (şu anda SameSite: Lax ile yapılandırılmış) çalmayı başarırsanız, kimlik bilgileri veya 2FA'ya ihtiyaç duymadan kullanıcıyı tamamen taklit edebilirsiniz.

Eğer işe yararsa, şube korumalarını atlatma hakkındaki bölümü kontrol edin.

Kullanıcı SSH Anahtarıyla

Github, kullanıcıların kendi adlarına kod dağıtmak için kimlik doğrulama yöntemi olarak kullanacakları SSH anahtarlarını ayarlamalarına izin verir (2FA uygulanmaz).

Bu anahtarla, kullanıcının bazı ayrıcalıklara sahip olduğu repo'larda değişiklikler yapabilirsiniz, ancak github api'ye erişmek için kullanamazsınız. Bununla birlikte, erişiminiz olan repo'lar ve kullanıcı hakkında bilgi almak için yerel ayarları sıralayabilirsiniz:

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

Eğer kullanıcı kullanıcı adını github kullanıcı adı olarak yapılandırdıysa, hesabında ayarladığı genel anahtarları https://github.com/<github_kullanıcıadı>.keys adresinden erişebilirsiniz, bu şekilde bulduğunuz özel anahtarın kullanılabileceğini doğrulamak için bunu kontrol edebilirsiniz.

SSH anahtarları, dağıtım anahtarları olarak da depolarda ayarlanabilir. Bu anahtara erişimi olan herkes, bir depodan projeleri başlatabilir. Genellikle farklı dağıtım anahtarlarına sahip bir sunucuda, yerel ~/.ssh/config dosyası size hangi anahtarın ilişkili olduğu hakkında bilgi verecektir.

GPG Anahtarları

Burada açıklandığı gibi bazen taahhütleri imzalamak gerekebilir veya keşfedilebilirsiniz.

Mevcut kullanıcının herhangi bir anahtara sahip olup olmadığını yerel olarak kontrol edin:

gpg --list-secret-keys --keyid-format=long

Kullanıcı Token'i ile

Kullanıcı Token'ları hakkında temel bilgilere buradan ulaşabilirsiniz.

Bir kullanıcı token'i, Git üzerinden HTTPS üzerinden şifre yerine kullanılabilir veya API'ye Temel Kimlik Doğrulaması ile kimlik doğrulaması yapmak için kullanılabilir. Bağlı olan ayrıcalıklara bağlı olarak farklı işlemler gerçekleştirebilirsiniz.

Bir Kullanıcı token'i şu şekildedir: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123

Oauth Uygulaması ile

Github Oauth Uygulamaları hakkında temel bilgilere buradan ulaşabilirsiniz.

Bir saldırgan, muhtemelen bir dolandırıcılık kampanyasının bir parçası olarak, kullanıcıların ayrıcalıklı veri/aksiyonlara erişmek için kötü niyetli bir Oauth Uygulaması oluşturabilir.

Bir Oauth uygulaması, isteyebileceği kapsamlar bunlardır. Kabul etmeden önce her zaman istenen kapsamları kontrol etmelisiniz.

Ayrıca, temel bilgilerde açıklandığı gibi, kuruluşlar üçüncü taraf uygulamalara erişimi verme/reddetme yetkisine sahip olabilirler.

Github Uygulaması ile

Github Uygulamaları hakkında temel bilgilere buradan ulaşabilirsiniz.

Bir saldırgan, muhtemelen bir dolandırıcılık kampanyasının bir parçası olarak, kullanıcıların ayrıcalıklı veri/aksiyonlara erişmek için kötü niyetli bir Github Uygulaması oluşturabilir.

Ayrıca, temel bilgilerde açıklandığı gibi, kuruluşlar üçüncü taraf uygulamalara erişimi verme/reddetme yetkisine sahip olabilirler.

Github Eylemini Kompromize Etme ve Kötüye Kullanma

Github Eylemini kompromize etmek ve kötüye kullanmak için çeşitli teknikler vardır, buradan kontrol edebilirsiniz:

Şube Koruma Atlama

  • Birkaç onay gerektir: Birkaç hesabı ele geçirdiyseniz, diğer hesaplardan PR'lerinizi kabul edebilirsiniz. PR'yi oluşturduğunuz hesaba sahipseniz kendi PR'nizi kabul edemezsiniz. Ancak, repo içinde bir Github Eylemi ortamına erişiminiz varsa, GITHUB_TOKEN kullanarak PR'nizi onaylayabilir ve bu şekilde 1 onay alabilirsiniz.

  • Bu ve Code Sahipleri kısıtlaması için genellikle bir kullanıcının kendi PR'lerini onaylayamayacağını unutmayın, ancak onaylayabiliyorsanız, PR'lerinizi kabul etmek için bunu kötüye kullanabilirsiniz.

  • Yeni taahhütler gönderildiğinde onayları reddet: Bu ayarlanmamışsa, meşru kodu gönderebilir, birinin onaylamasını bekleyebilir ve kötü amaçlı kodu ekleyebilir ve korumalı şubeye birleştirebilirsiniz.

  • Code Sahiplerinden incelemeler gerektir: Bu etkinleştirildiyse ve bir Code Sahibiyseniz, bir Github Eylemi oluşturarak PR'nizi oluşturabilir ve ardından kendiniz onaylayabilirsiniz.

  • Bir CODEOWNER dosyası yanlış yapılandırıldığında Github şikayet etmez, ancak kullanmaz. Bu nedenle, yanlış yapılandırılmışsa, Code Sahipleri koruması uygulanmaz.

  • Belirli aktörlerin çekme isteği gereksinimlerini atlamasına izin ver: Bu aktörlerden biriyseniz, çekme isteği korumalarını atlayabilirsiniz.

  • Yöneticileri dahil et: Bu ayarlanmamışsa ve repo yöneticisiyseniz, bu şube korumalarını atlayabilirsiniz.

  • PR Kaçırma: Başka birinin PR'sini değiştirerek kötü amaçlı kod ekleyebilir, sonuçta oluşan PR'yi kendiniz onaylayabilir ve her şeyi birleştirebilirsiniz.

  • Şube Korumalarını Kaldırma: Repo yöneticisiyseniz, korumaları devre dışı bırakabilir, PR'nizi birleştirebilir ve korumaları tekrar ayarlayabilirsiniz.

  • İtme korumalarını atlamak: Bir repo, belirli kullanıcılara (kod birleştirme) itme yapmalarına izin veriyorsa (şube koruması tüm şubeleri * joker karakterini kullanarak koruyor olabilir).

  • Repo üzerinde kod gönderme izniniz olsa da şube koruması nedeniyle kod göndermeye izin verilmiyorsanız, yine de yeni bir şube oluşturabilir ve içinde kod gönderildiğinde tetiklenen bir github eylemi oluşturabilirsiniz. Şube oluşturulana kadar şube koruması şubeyi korumayacağından, şubeye ilk kod gönderimi github eylemini çalıştıracaktır.

Ortam Korumalarını Atlama

Github Ortamı hakkında temel bilgilere buradan ulaşabilirsiniz.

Bir ortamın tüm şubelerden erişilebilir olması durumunda, korunmamıştır ve ortamdaki gizli bilgilere kolayca erişebilirsiniz. Tüm şubelerin korunduğu (isimlerini belirterek veya * kullanarak) bir senaryoda, kod gönderebileceğiniz bir şube bulun ve yeni bir github eylemi oluşturarak gizli bilgileri dışarı çıkarabilirsiniz (veya mevcut birini değiştirerek).

Unutmayın, tüm şubelerin korunduğu (joker karakteri * ile) ve hangi kullanıcıların şubelere kod gönderebileceği belirtildiği (şube korumasında bunu belirtebilirsiniz) ve kullanıcınızın izin verilmediği bir kenar durumu bulabilirsiniz. Yine de özel bir github eylemi çalıştırabilirsiniz çünkü bir şube oluşturabilir ve kendisi üzerinde itme tetikleyicisini kullanabilirsiniz. Şube koruması yeni bir şubeye itme izin verir, bu nedenle github eylemi tetiklenecektir.

push: # Run it when a push is made to a branch
branches:
- current_branch_name #Use '**' to run when a push is made to any branch

Not: Dallanma oluşturulduktan sonra, dallanma koruması yeni dala uygulanacak ve değiştiremeyeceksiniz, ancak o zamana kadar zaten sırları sızdırmış olacaksınız.

Süreklilik

  • Kullanıcı belirteci oluşturun

  • Sırlardan github belirteçleri çalın

  • İş akışı sonuçlarını ve dalları silme

  • Tüm orga daha fazla izin verme

  • Bilgi sızdırmak için web kancaları oluşturun

  • Dış işbirlikçileri davet edin

  • SIEM tarafından kullanılan web kancalarını kaldırma

  • Arka kapı ile Github Eylemi oluşturma/değiştirme

  • Gizli değer değiştirme yoluyla komut enjeksiyonu için zayıf Github Eylemi bulma

Sahte Taahhütler - Repo taahhütleri aracılığıyla arka kapı

Github'da bir repo için bir çataldan bir PR oluşturmak mümkündür. PR kabul edilmese bile, çatal sürümü için orijinal repo içinde bir taahhüt kimliği oluşturulur. Bu nedenle, bir saldırgan, repo sahibi tarafından oluşturulmayan görünüşte meşru bir repo'dan belirli bir taahhüdü kullanmayı hedefleyebilir.

Böyle gibi:

name: example
on: [push]
jobs:
commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e
- shell: bash
run: |
echo 'hello world!'

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 hacklemeyi sıfırdan kahraman olacak şekilde öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

Last updated