Gitea Security

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Co to jest Gitea

Gitea to samodzielnie hostowane lekkie rozwiązanie do hostowania kodu zarządzane przez społeczność, napisane w Go.

Podstawowe informacje

pageBasic Gitea Information

Laboratorium

Aby uruchomić lokalną instancję Gitea, wystarczy uruchomić kontener docker:

docker run -p 3000:3000 gitea/gitea

Połącz się z portem 3000, aby uzyskać dostęp do strony internetowej.

Możesz także uruchomić to przy użyciu kubernetes:

helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea

Nieuwierzytelnione wyliczanie

Zauważ, że domyślnie Gitea pozwala nowym użytkownikom się rejestrować. To nie da nowym użytkownikom specjalnego dostępu do repozytoriów innych organizacji/użytkowników, ale zalogowany użytkownik może zobaczyć więcej repozytoriów lub organizacji.

Wewnętrzne wykorzystanie

W tym scenariuszu założymy, że uzyskałeś dostęp do konta github.

Z danymi uwierzytelniającymi użytkownika/Ciasteczkiem sieciowym

Jeśli w jakiś sposób już masz dane uwierzytelniające użytkownika wewnątrz organizacji (lub ukradłeś ciasteczko sesji), możesz po prostu się zalogować i sprawdzić, jakie uprawnienia masz do repozytoriów, w jakich zespołach jesteś, wyświetlić innych użytkowników i jak są chronione repozytoria.

Zauważ, że może być używane 2FA, więc będziesz mógł uzyskać dostęp do tych informacji tylko jeśli zdasz tę weryfikację.

Zauważ, że jeśli uda ci się ukraść ciasteczko i_like_gitea (obecnie skonfigurowane z SameSite: Lax), możesz całkowicie podać się za użytkownika bez potrzeby posiadania danych uwierzytelniających lub 2FA.

Z kluczem SSH użytkownika

Gitea pozwala użytkownikom ustawić klucze SSH, które będą używane jako metoda uwierzytelniania do wdrażania kodu w ich imieniu (nie stosuje się 2FA).

Z tym kluczem możesz dokonywać zmian w repozytoriach, do których użytkownik ma pewne uprawnienia, jednak nie możesz go użyć do dostępu do interfejsu api gitea w celu wyliczenia środowiska. Możesz jednak wyliczyć ustawienia lokalne, aby uzyskać informacje o repozytoriach i użytkowniku, do których masz dostęp:

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

Jeśli użytkownik skonfigurował swoją nazwę użytkownika jako swoją nazwę użytkownika gitea, możesz uzyskać dostęp do kluczy publicznych, które ustawił w swoim koncie pod adresem https://github.com/<gitea_username>.keys, możesz to sprawdzić, aby potwierdzić, czy znaleziony przez Ciebie klucz prywatny może być użyty.

Klucze SSH mogą również być ustawione w repozytoriach jako klucze deploy. Każdy, kto ma dostęp do tego klucza, będzie mógł uruchamiać projekty z repozytorium. Zazwyczaj na serwerze z różnymi kluczami deploy plik lokalny ~/.ssh/config dostarczy informacje o powiązanym kluczu.

Klucze GPG

Jak wyjaśniono tutaj czasami konieczne jest podpisanie commitów lub możesz zostać odkryty.

Sprawdź lokalnie, czy bieżący użytkownik ma jakiś klucz za pomocą:

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

Z Użyciem Tokena Użytkownika

Dla wprowadzenia do Tokenów Użytkownika sprawdź podstawowe informacje.

Token użytkownika może być użyty zamiast hasła do uwierzytelnienia się na serwerze Gitea poprzez API. Będzie miał pełny dostęp do konta użytkownika.

Z Użyciem Aplikacji Oauth

Dla wprowadzenia do Aplikacji Gitea Oauth sprawdź podstawowe informacje.

Atakujący może stworzyć złośliwą Aplikację Oauth w celu uzyskania dostępu do poufnych danych/akcji użytkowników, którzy akceptują je prawdopodobnie jako część kampanii phishingowej.

Jak wyjaśniono w podstawowych informacjach, aplikacja będzie miała pełny dostęp do konta użytkownika.

Ominięcie Ochrony Gałęzi

W Github mamy działania githubowe, które domyślnie otrzymują token z dostępem do zapisu w repozytorium, który może być użyty do omijania ochrony gałęzi. W tym przypadku to nie istnieje, więc ominięcia są bardziej ograniczone. Ale zobaczmy, co można zrobić:

  • Włącz Push: Jeśli ktoś z dostępem do zapisu może wykonać push do gałęzi, po prostu zrób push.

  • Whitelist Restricted Push: Podobnie, jeśli jesteś częścią tej listy, wykonaj push do gałęzi.

  • Włącz Whitelistę Merge: Jeśli istnieje whitelist merge, musisz być wewnątrz niego.

  • Wymagane zatwierdzenia większe niż 0: W takim przypadku... musisz skompromitować innego użytkownika.

  • Ogranicz zatwierdzenia do użytkowników na białej liście: Jeśli tylko użytkownicy na białej liście mogą zatwierdzać... musisz skompromitować innego użytkownika znajdującego się na tej liście.

  • Odrzuć przeterminowane zatwierdzenia: Jeśli zatwierdzenia nie są usuwane przy nowych commitach, możesz przejąć już zatwierdzony PR, aby wstrzyknąć swój kod i zmergować PR.

Zauważ, że jeśli jesteś administratorem org/repo, możesz ominąć zabezpieczenia.

Wyliczanie Webhooków

Webhooki mogą wysyłać określone informacje z Gitea w różne miejsca. Możesz być w stanie wykorzystać tę komunikację. Jednak zazwyczaj ustawiany jest sekret, którego nie można odzyskać, w webhooku, co zapobiegnie wykorzystaniu tego webhooka przez zewnętrznych użytkowników, którzy znają URL webhooka, ale nie znają sekretu. Ale w niektórych przypadkach ludzie zamiast ustawiać sekret na swoim miejscu, ustawiają go w URL jako parametr, więc sprawdzanie URLi może pozwolić ci odnaleźć sekrety i inne miejsca, które można dalej wykorzystać.

Webhooki mogą być ustawione na poziomie repozytorium i na poziomie org.

Po Wykorzystaniu

Wewnątrz serwera

Jeśli w jakiś sposób udało ci się dostać do serwera, na którym działa Gitea, powinieneś poszukać pliku konfiguracyjnego Gitea. Domyślnie znajduje się on w /data/gitea/conf/app.ini

W tym pliku możesz znaleźć klucze i hasła.

W ścieżce Gitea (domyślnie: /data/gitea) możesz znaleźć również interesujące informacje, takie jak:

  • Baza danych sqlite: Jeśli Gitea nie korzysta z zewnętrznej bazy danych, użyje bazy danych sqlite.

  • Sesje wewnątrz folderu sesji: Uruchomienie cat sessions/*/*/* pozwoli zobaczyć nazwy użytkowników zalogowanych (Gitea może również zapisywać sesje w bazie danych).

  • Prywatny klucz jwt w folderze jwt

  • Więcej wrażliwych informacji można znaleźć w tym folderze

Jeśli jesteś wewnątrz serwera, możesz również użyć binarii gitea do dostępu/modyfikacji informacji:

  • gitea dump spowoduje zrzut Gitea i wygeneruje plik .zip

  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET wygeneruje token wskazanego typu (trwałość)

  • gitea admin user change-password --username admin --password newpassword Zmień hasło

  • gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token Utwórz nowego użytkownika admina i uzyskaj token dostępu

Last updated