Gitea to lekka, samodzielnie hostowana alternatywa dla GitHuba — popularna w małych firmach, agencjach i u administratorów, którzy nie chcą trzymać kodu w cudzej chmurze. Właśnie ta popularność stała się problemem. Organizacja Shadowserver poinformowała 28 sierpnia 2026 roku, że 8393 wystawione do internetu instancje Gitea wciąż nie mają załatanej krytycznej luki CVE-2026-60004, mimo że poprawka ukazała się 27 lipca. Amerykańska agencja CISA dopisała podatność do katalogu aktywnie wykorzystywanych błędów i nakazała urzędom federalnym załatać serwery w trzy dni.
Na czym polega luka
Błąd znajduje się w endpoincie diffpatch, który służy do nanoszenia poprawek na repozytorium. Odpowiednio spreparowana treść pozwala zainstalować i uruchomić hook Gita, a więc wykonać dowolne polecenia powłoki z uprawnieniami konta systemowego, na którym działa Gitea.
Teoretycznie atakujący musi mieć prawo zapisu do jakiegoś repozytorium. W praktyce to żadna bariera, bo Gitea domyślnie ma włączoną otwartą rejestrację. Wystarczy więc założyć konto, utworzyć własne repozytorium i uruchomić exploit — bez znajomości jakichkolwiek firmowych haseł. Podatność zgłosił badacz Shai Rod z Salesforce, ale opublikowane ogłoszenie bezpieczeństwa zawierało też działający kod dowodowy, co znacznie ułatwiło zadanie skanerom.
Jak wygląda prawdziwy atak
Jeden z poszkodowanych opisał publicznie przebieg włamania i to najbardziej pouczająca część całej sprawy. O incydencie dowiedział się nie od systemu monitoringu, tylko od hostingodawcy, który zwrócił uwagę na długo utrzymujące się wysokie obciążenie procesora.
Serwer działał na przestarzałej wersji Gitea, z otwartą rejestracją, bez potwierdzania adresu e-mail i bez CAPTCHA. Automatyczny skaner założył konto, utworzył repozytorium i uruchomił łańcuch exploita. Kod zapisał najpierw „dowód” wykonania do gałęzi Gita, następnie pobrał uniwersalny loader, a na końcu program przypominający koparkę kryptowalut. Cała aktywna faza ataku zajęła około jedenastu sekund.
Gitea działała w Dockerze i to uratowało sytuację — kontener nie był uprzywilejowany, a proces koparki nie przetrwał restartu. Śledztwo nie wykazało śladów trwałego zagnieżdżenia przez cron, systemd ani nowe klucze SSH. Przy mniej szczelnej konfiguracji skutki byłyby dużo poważniejsze: w zasięgu napastnika jest plik konfiguracyjny Gitea, zmienne środowiskowe, dane logowania do bazy oraz tokeny OAuth i integracji z innymi systemami.
Co zrobić już teraz
Podstawą jest aktualizacja do wersji 1.27.2. To pojedyncze polecenie, a chroni przed atakiem, który dzieje się automatycznie i masowo.
Zaraz po niej warto wyłączyć otwartą rejestrację, jeśli instancja służy tylko zespołowi, oraz usunąć zbędne metody logowania. Jeżeli rejestracja z jakiegoś powodu musi zostać, trzeba dołożyć potwierdzanie adresu e-mail i CAPTCHA — to spowalnia skanery na tyle, że przestają być opłacalne.
Osobne pytanie brzmi, czy Gitea w ogóle musi być widoczna z całego internetu. W większości firm odpowiedź brzmi „nie”: wystarczy dostęp przez VPN albo ograniczenie po adresach IP. Poza tym warto trzymać usługę w nieuprzywilejowanym kontenerze, odciąć mu ruch wychodzący do sieci i rozdzielić sieci Dockera. Poszkodowany z opisanego przypadku zrobił dokładnie to, dodatkowo rotując wszystkie sekrety i tokeny.
Sama aktualizacja nie wystarczy, jeśli serwer był podatny przez ostatni miesiąc. Trzeba sprawdzić, czy nie pojawiły się nieznane konta i repozytoria, przejrzeć hooki w istniejących projektach, przeanalizować obciążenie procesora oraz połączenia wychodzące, a w razie wątpliwości wymienić dane logowania do bazy i tokeny integracji.
Podsumowanie
Ta historia nie dotyczy wyrafinowanego ataku państwowego, tylko zwykłej zaległości. Łatka istniała miesiąc wcześniej, luka jest banalnie prosta w wykorzystaniu, a mimo to ponad osiem tysięcy serwerów wciąż czeka na swoją kolej. Samodzielny hosting narzędzi deweloperskich to wygoda i niezależność, ale oznacza również, że nikt nie zaktualizuje ich za nas. Warto potraktować ten przypadek jako pretekst do przeglądu wszystkich własnych usług wystawionych na świat — nie tylko Gitea.