Gitea Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gitea to rozwiązanie do hostowania kodu, zarządzane przez społeczność, które można hostować samodzielnie, lekkie napisane w Go.
Aby uruchomić instancję Gitea lokalnie, wystarczy uruchomić kontener docker:
Połącz się z portem 3000, aby uzyskać dostęp do strony internetowej.
Możesz również uruchomić to z kubernetes:
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.
W tym scenariuszu zakładamy, że uzyskałeś dostęp do konta github.
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.
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:
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.
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ą:
Aby uzyskać wprowadzenie na temat tokenów użytkownika, sprawdź podstawowe informacje.
Token użytkownika może być używany zamiast hasła do uwierzytelniania w serwerze Gitea za pomocą API. Będzie miał pełny dostęp do konta użytkownika.
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ą ją jako część kampanii phishingowej.
Jak wyjaśniono w podstawowych informacjach, aplikacja będzie miała pełny dostęp do konta użytkownika.
W Github mamy github actions, które domyślnie uzyskują token z dostępem do zapisu w 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 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 obejść te zabezpieczenia.
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ż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.
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/modifikacji 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.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)