Gitea Security

Support HackTricks

What is Gitea

Gitea to rozwiązanie do hostowania kodu, zarządzane przez społeczność, które można zainstalować samodzielnie, lekkie napisane w Go.

Basic Information

Basic Gitea Information

Lab

Aby uruchomić instancję Gitea lokalnie, 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 również uruchomić to z kubernetes:

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

Nieużytkownikowa Enumeracja

Zauważ, że domyślnie Gitea pozwala nowym użytkownikom na rejestrację. To nie da szczególnie interesującego dostępu nowym użytkownikom do repozytoriów innych organizacji/użytkowników, ale zalogowany użytkownik może być w stanie zobaczyć więcej repozytoriów lub organizacji.

Wewnętrzna Eksploatacja

W tym scenariuszu zakładamy, że uzyskałeś dostęp do konta github.

Z Danymi Użytkownika/Ciastkiem Webowym

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

Zauważ, że 2FA może być używane, więc będziesz mógł uzyskać dostęp do tych informacji tylko wtedy, gdy również przejdziesz tę kontrolę.

Zauważ, że jeśli uda ci się ukraść ciastko i_like_gitea (aktualnie skonfigurowane z SameSite: Lax), możesz całkowicie podszyć się pod użytkownika bez potrzeby posiadania danych logowania lub 2FA.

Z Klucza SSH Użytkownika

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

Z tym kluczem możesz wprowadzać zmiany w repozytoriach, w których użytkownik ma pewne uprawnienia, jednak nie możesz go użyć do uzyskania dostępu do API gitea w celu enumeracji środowiska. Możesz jednak enumerować lokalne ustawienia, aby uzyskać informacje o repozytoriach i użytkowniku, do którego 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ć, że znaleziony klucz prywatny może być użyty.

Klucze SSH mogą być również ustawione w repozytoriach jako klucze wdrożeniowe. Każdy, kto ma dostęp do tego klucza, będzie mógł uruchomić projekty z repozytorium. Zwykle na serwerze z różnymi kluczami wdrożeniowymi lokalny plik ~/.ssh/config dostarczy informacji o tym, do którego klucza się odnosi.

Klucze GPG

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

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

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

Z tokenem użytkownika

Aby uzyskać wprowadzenie do Tokenów Użytkownika sprawdź podstawowe informacje.

Token użytkownika może być używany zamiast hasła do uwierzytelnienia w serwerze Gitea za pomocą API. Będzie miał pełny dostęp do konta użytkownika.

Z aplikacją Oauth

Aby uzyskać wprowadzenie do Aplikacji Oauth Gitea sprawdź podstawowe informacje.

Atakujący może stworzyć złośliwą aplikację Oauth, aby uzyskać dostęp do uprzywilejowanych danych/akcji użytkowników, którzy prawdopodobnie zaakceptują je 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 github actions, które domyślnie uzyskują token z dostępem do zapisu w repozytorium, który może być użyty do ominięcia ochrony gałęzi. W tym przypadku nie istnieje, więc możliwości ominięcia są bardziej ograniczone. Ale przyjrzyjmy się, co można zrobić:

  • Włącz Push: Jeśli ktokolwiek z dostępem do zapisu może wypchnąć do gałęzi, po prostu wypchnij do niej.

  • Biała lista ograniczonych Push: W ten sam sposób, jeśli jesteś częścią tej listy, wypchnij do gałęzi.

  • Włącz białą listę scalania: Jeśli istnieje biała lista scalania, musisz być w jej obrębie.

  • Wymagaj, aby zatwierdzenia były większe niż 0: Wtedy... musisz skompromitować innego użytkownika.

  • Ogranicz zatwierdzenia do białej listy: Jeśli tylko użytkownicy z białej listy mogą zatwierdzać... musisz skompromitować innego użytkownika, który jest na tej liście.

  • Odrzuć przestarzałe zatwierdzenia: Jeśli zatwierdzenia nie są usuwane z nowymi commitami, możesz przejąć już zatwierdzone PR, aby wstrzyknąć swój kod i scalić PR.

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

Wyliczanie Webhooków

Webhooki są w stanie wysyłać konkretne informacje gitea do niektórych miejsc. Możesz być w stanie wykorzystać tę komunikację. Jednak zazwyczaj w webhooku ustawiony jest sekret, którego nie można odzyskać, co zapobiega zewnętrznym użytkownikom, którzy znają URL webhooka, ale nie znają sekretu, aby wykorzystać ten webhook. Jednak w niektórych przypadkach, ludzie zamiast ustawić sekret w jego miejscu, ustawiają go w URL jako parametr, więc sprawdzanie URL może pozwolić ci znaleźć sekrety i inne miejsca, które możesz dalej wykorzystać.

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

Po eksploatacji

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 również znaleźć interesujące informacje, takie jak:

  • baza danych sqlite: Jeśli gitea nie używa zewnętrznej bazy danych, użyje bazy danych sqlite.

  • sesje w folderze sesji: Uruchamiając cat sessions/*/*/*, możesz zobaczyć nazwy użytkowników zalogowanych użytkowników (gitea może również zapisywać sesje w bazie danych).

  • klucz prywatny 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ć binarnego pliku gitea do uzyskania/dostosowania informacji:

  • gitea dump zrzuci 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 zmienia hasło.

  • gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token tworzy nowego użytkownika administratora i uzyskuje token dostępu.

Wsparcie HackTricks

Last updated