Gitea Security
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Co to jest Gitea
Gitea to rozwiązanie do hostingu kodu zarządzane przez społeczność, samodzielnie hostowane, lekkie, napisane w Go.
.png)
Podstawowe informacje
Laboratorium
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
- Publiczne repozytoria: http://localhost:3000/explore/repos
- Zarejestrowani użytkownicy: http://localhost:3000/explore/users
- Zarejestrowane organizacje: http://localhost:3000/explore/organizations
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ś, wymienić innych użytkowników oraz 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 wtedy, gdy również przejdziesz tę kontrolę.
Note
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 (brak zastosowania 2FA).
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 publicznych kluczy, które ustawił na swoim koncie w 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ż ustawiane w repozytoriach jako klucze wdrożeniowe. Każdy, kto ma dostęp do tego klucza, będzie mógł uruchamiać 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 na temat 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 użytkownika.
Z aplikacją Oauth
Aby uzyskać wprowadzenie na temat 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 to nie istnieje, więc obejś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 połączyć PR.
Zauważ, że jeśli jesteś administratorem org/repo, możesz obejść zabezpieczenia.
Wyliczanie Webhooków
Webhooki mogą 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żesz 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 ustawiać 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ć ustawiane 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 uzyskiwania/modyfikowania informacji:
gitea dumpzrzuci gitea i wygeneruje plik .zip.gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRETwygeneruje token wskazanego typu (trwałość).gitea admin user change-password --username admin --password newpasswordZmień hasło.gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-tokenUtwórz nowego użytkownika administratora i uzyskaj token dostępu.
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

