Gitea Security
Last updated
Last updated
Gitea, Go dilinde yazılmış kendine ait barındırılan topluluk yönetimli hafif kod barındırma çözümüdür.
Yerel bir Gitea örneğini çalıştırmak için sadece bir docker konteyneri çalıştırabilirsiniz:
Web sayfasına erişmek için 3000 numaralı porta bağlanın.
Ayrıca kubernetes ile çalıştırabilirsiniz:
Genel depolar: http://localhost:3000/explore/repos
Kayıtlı kullanıcılar: http://localhost:3000/explore/users
Kayıtlı Organizasyonlar: http://localhost:3000/explore/organizations
Unutmayın ki varsayılan olarak Gitea yeni kullanıcıların kaydolmasına izin verir. Bu, yeni kullanıcılara diğer organizasyonlar/kullanıcılar depoları üzerinde özel erişim sağlamaz, ancak giriş yapmış bir kullanıcı daha fazla depo veya organizasyonu görebilir.
Bu senaryoda, bir github hesabına bazı erişimler elde ettiğinizi varsayacağız.
Eğer bir organizasyon içindeki bir kullanıcının kimlik bilgilerine sahipseniz (veya bir oturum çerezi çaldıysanız), sadece giriş yapabilir ve hangi izinlere sahip olduğunuzu, hangi depolarda olduğunuzu, hangi takımlarda olduğunuzu, diğer kullanıcıları listeyebilir ve depoların nasıl korunduğunu kontrol edebilirsiniz.
Unutmayın ki 2FA kullanılabilir, bu nedenle bu bilgilere erişebilmeniz için bu kontrolü de geçebilmeniz gerekecektir.
Unutmayın ki, i_like_gitea
çereziyi (şu anda SameSite: Lax ile yapılandırılmış) çalmayı başarırsanız, kimlik bilgilerine veya 2FA'ya ihtiyaç duymadan kullanıcıyı tamamen taklit edebilirsiniz.
Gitea, kullanıcıların kimlik doğrulama yöntemi olarak kullanılacak SSH anahtarları belirlemelerine izin verir (2FA uygulanmaz).
Bu anahtarla, kullanıcının bazı ayrıcalıklara sahip olduğu depolarda değişiklikler yapabilirsiniz, ancak gitea api'ye erişmek için kullanamazsınız. Bununla birlikte, erişiminiz olan depolar ve kullanıcı hakkında bilgi almak için yerel ayarları sıralayabilirsiniz:
Eğer kullanıcı kullanıcı adını gitea kullanıcı adı olarak yapılandırdıysa, hesabında ayarladığı genel anahtarları https://github.com/<gitea_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.
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:
Kullanıcı Jetonları hakkında temel bilgilere buradan bakabilirsiniz.
Kullanıcı jetonu, Gitea sunucusuna API aracılığıyla kimlik doğrulaması yapmak için bir şifre yerine kullanılabilir. Kullanıcı üzerinde tam erişime sahip olacaktır.
Gitea Oauth Uygulamaları hakkında temel bilgilere buradan bakabilirsiniz.
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.
Temel bilgilerde açıklandığı gibi, uygulama, kullanıcı hesabı üzerinde tam erişime sahip olacaktır.
Github'da, varsayılan olarak, yazma erişimi olan bir jeton alan github eylemleri bulunur ve bu, şube korumalarını atlatmak için kullanılabilir. Bu durumda, bu tür bir şey yok, bu yüzden atlatmalar daha sınırlıdır. Ancak, neler yapabileceğimize bir göz atalım:
Push Etkinleştir: Yazma erişimi olan herhangi bir kişi şubeye itebilir, sadece itin.
Beyaz Liste Kısıtlı İtme: Aynı şekilde, bu listede yer alıyorsanız, şubeye itin.
Birleştirme Beyaz Listesini Etkinleştir: Bir birleştirme beyaz listesi varsa, içinde olmanız gerekiyor.
Onaylar 0'dan büyük olmalı: O zaman... başka bir kullanıcıyı ele geçirmeniz gerekiyor.
Onayları beyaz listeye al: Sadece beyaz listeye alınan kullanıcılar onay verebilirse... o zaman bu listede olan başka bir kullanıcıyı ele geçirmeniz gerekiyor.
Eski onayları reddet: Onaylar yeni taahhütlerle kaldırılmazsa, zaten onaylanmış bir PR'yi ele geçirerek kodunuzu enjekte edebilir ve PR'yi birleştirebilirsiniz.
Unutmayın ki bir org/repo yöneticisi olarak korumaları atlayabilirsiniz.
Webhook'lar, belirli gitea bilgilerini bazı yerlere gönderebilir. Bu iletişimi sömürmek mümkün olabilir. Ancak genellikle, webhook'ta alınamayan bir gizli ayarlanır ve bu, webhook'un URL'sini bilen ancak gizliyi bilmeyen harici kullanıcıların webhook'u sömürmesini engeller. Ancak bazı durumlarda, insanlar gizliyi yerine URL'de bir parametre olarak ayarlarlar, bu nedenle URL'leri kontrol etmek, daha fazla sömürülebilecek gizli bilgiler ve diğer yerleri bulmanıza olanak sağlayabilir.
Webhook'lar repo ve org düzeyinde ayarlanabilir.
Herhangi bir şekilde gitea'nın çalıştığı sunucuya erişmeyi başarırsanız, gitea yapılandırma dosyasını aramalısınız. Varsayılan olarak /data/gitea/conf/app.ini
konumunda bulunur.
Bu dosyada anahtarlar ve şifreler bulabilirsiniz.
Gitea yolunda (varsayılan olarak: /data/gitea), ayrıca aşağıdaki gibi ilginç bilgiler bulabilirsiniz:
sqlite DB: Gitea, harici bir veritabanı kullanmıyorsa, bir sqlite veritabanı kullanır.
Oturumlar oturumlar klasörü içinde: cat sessions/*/*/*
komutunu çalıştırarak oturum açmış kullanıcıların kullanıcı adlarını görebilirsiniz (gitea oturumları ayrıca DB içinde kaydedebilir).
jwt klasörü içindeki jwt özel anahtarı
Bu klasörde daha fazla hassas bilgi bulunabilir
Sunucu içindeyseniz, bilgilere erişmek/değiştirmek için gitea
ikili dosyasını kullanabilirsiniz:
gitea dump
gitea'yı döker ve bir .zip dosyası oluşturur
gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET
belirtilen türde bir belirteç oluşturur (kalıcılık)
gitea admin user change-password --username admin --password newpassword
Şifreyi değiştirir
gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token
Yeni yönetici kullanıcı oluşturur ve bir erişim belirteci alır