Gitea Security

Naucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Naucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wspieraj HackTricks

Co to jest Gitea

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

Podstawowe Informacje

Basic Gitea Information

Lab

Aby uruchomić instancję Gitea lokalnie, możesz po prostu 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 za pomocą kubernetes:

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

Niezautoryzowana Enumeracja

Należy zauważyć, że domyślnie Gitea pozwala na rejestrację nowych użytkowników. Nie daje to specjalnie interesującego dostępu nowym użytkownikom do repozytoriów innych organizacji/użytkowników, ale zalogowany użytkownik może być w stanie wizualizować więcej repozytoriów lub organizacji.

Wewnętrzna Eksploatacja

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

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

Należy zauważyć, że może być używane 2FA, więc będziesz mógł uzyskać dostęp do tych informacji tylko, jeśli również przejdziesz tę kontrolę.

Należy zauważyć, że jeśli uda ci się ukraść cookie i_like_gitea (obecnie skonfigurowane z SameSite: Lax), możesz całkowicie podszyć się pod użytkownika bez potrzeby posiadania poświadczeń lub 2FA.

Z Kluczem 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 (nie stosuje się 2FA).

Z tym kluczem możesz dokonywać zmian w repozytoriach, w których użytkownik ma pewne uprawnienia, jednak nie możesz go używać do uzyskiwania 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ó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ł na swoim koncie pod adresem https://github.com/<gitea_username>.keys, możesz to sprawdzić, aby potwierdzić, że znaleziony klucz prywatny może być używany.

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ł uruchamiać projekty z repozytorium. Zazwyczaj na serwerze z różnymi kluczami wdrożeniowymi lokalny plik ~/.ssh/config dostarczy informacji o powiązanych kluczach.

Klucze GPG

Jak wyjaśniono tutaj, czasami trzeba podpisać commity, inaczej możesz zostać wykryty.

Sprawdź lokalnie, czy bieżący użytkownik ma jakiekolwiek klucze za pomocą:

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

Z Tokenem Użytkownika

Wprowadzenie do Tokenów Użytkownika znajdziesz w podstawowych informacjach.

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

Z Aplikacją Oauth

Wprowadzenie do Aplikacji Oauth Gitea znajdziesz w podstawowych informacjach.

Atakujący może stworzyć złośliwą aplikację Oauth, aby uzyskać dostęp do uprzywilejowanych danych/działań użytkowników, którzy je zaakceptują, prawdopodobnie w ramach 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 otrzymują token z dostępem do zapisu do repozytorium, co może być użyte do ominięcia ochrony gałęzi. W tym przypadku to nie istnieje, więc obejścia są bardziej ograniczone. Ale spójrzmy, co można zrobić:

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

  • Biała lista ograniczonych pushów: W ten sam sposób, jeśli jesteś na tej liście, pushuj do gałęzi.

  • Włącz białą listę merge: Jeśli istnieje biała lista merge, musisz być na niej.

  • Wymagaj zatwierdzeń większych 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 z tej listy.

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

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

Enumeracja Webhooków

Webhooki mogą wysyłać specyficzne informacje gitea do niektórych miejsc. Możesz być w stanie wykorzystać tę komunikację. Jednak zazwyczaj ustawiany jest sekret, którego nie można odzyskać, w webhooku, co zapobiega zewnętrznym użytkownikom, którzy znają URL webhooka, ale nie sekret, przed wykorzystaniem tego webhooka. Ale czasami ludzie zamiast ustawiać sekret w odpowiednim miejscu, ustawiają go w URL jako parametr, więc sprawdzanie URL może pozwolić na znalezienie sekretów i innych miejsc, które można dalej wykorzystać.

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

Post Exploitation

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żna znaleźć klucze i hasła.

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

  • sqlite DB: Jeśli gitea nie używa zewnętrznej bazy danych, będzie używać bazy sqlite.

  • sesje w folderze sesji: Uruchomienie cat sessions/*/*/* pozwala zobaczyć nazwy użytkowników zalogowanych użytkowników (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ć binarki gitea do dostępu/modyfikacji 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 Zmieni hasło.

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

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wspieraj HackTricks

Last updated