Setki aktywnych kluczy GitHub App po wycieku zwiększają ryzyko przejęcia organizacji - Security Bez Tabu

Setki aktywnych kluczy GitHub App po wycieku zwiększają ryzyko przejęcia organizacji

Cybersecurity news

Wprowadzenie do problemu / definicja

Ujawnienie prywatnych kluczy GitHub App to poważny problem bezpieczeństwa, który bezpośrednio dotyka łańcucha dostaw oprogramowania. Tego typu klucze służą do uwierzytelniania aplikacji wobec platformy GitHub i mogą otwierać dostęp do repozytoriów, procesów automatyzacji oraz zasobów organizacyjnych.

Największe zagrożenie polega na tym, że wyciek takiego klucza nie musi oznaczać krótkotrwałego incydentu. Jeśli organizacja nie unieważni go ręcznie, może on pozostać aktywny przez długi czas i nadal umożliwiać atakującemu uzyskanie dostępu zgodnego z uprawnieniami aplikacji.

W skrócie

Badacze przeanalizowali tysiące ujawnionych kluczy prywatnych GitHub App i ustalili, że 474 z 4802 testowanych kluczy nadal działało. Oznacza to możliwość uwierzytelnienia jako 440 odrębnych aplikacji, z których część miała bardzo szerokie uprawnienia.

  • około 10% badanych ujawnionych kluczy pozostało aktywnych,
  • 72% skompromitowanych aplikacji miało dostęp do odczytu prywatnych repozytoriów,
  • 207 aplikacji posiadało uprawnienia zapisu,
  • część aplikacji dysponowała uprawnieniami administracyjnymi na poziomie organizacji.

W praktyce oznacza to realne ryzyko kradzieży kodu, modyfikacji repozytoriów, manipulacji pipeline’ami CI/CD i przygotowania ataków typu supply chain.

Kontekst / historia

Wycieki sekretów do publicznych repozytoriów od lat należą do najczęstszych problemów bezpieczeństwa w środowiskach deweloperskich. Dotyczy to tokenów API, poświadczeń chmurowych, danych dostępowych do systemów CI/CD oraz innych mechanizmów uwierzytelniania używanych przez zespoły inżynierskie.

GitHub App zajmują jednak szczególne miejsce w tym krajobrazie, ponieważ często pełnią rolę zaufanych komponentów automatyzacji. Mogą odpowiadać za skanowanie kodu, zarządzanie pull requestami, integracje z narzędziami zewnętrznymi, a nawet działania wdrożeniowe. W efekcie ich kompromitacja może mieć znacznie szerszy wpływ niż wyciek zwykłego tokenu użytkownika.

W przeciwieństwie do klasycznych kont osobistych aplikacja GitHub App działa jako odrębna tożsamość systemowa. Po zainstalowaniu w organizacji może uzyskać dostęp do wybranych lub wszystkich repozytoriów, zależnie od nadanych jej uprawnień i zakresu instalacji.

Analiza techniczna

Mechanizm uwierzytelniania GitHub App opiera się na prywatnym kluczu RSA. Aplikacja wykorzystuje go do podpisania krótkotrwałego tokenu JWT algorytmem RS256, a następnie używa tego tokenu do uzyskania tokenu instalacyjnego, który pozwala wykonywać operacje w imieniu konkretnej instalacji aplikacji.

Z perspektywy bezpieczeństwa najważniejszy problem polega na tym, że sam token JWT jest krótkotrwały, ale klucz prywatny używany do jego podpisywania nie wygasa automatycznie. Jeżeli taki klucz trafi do publicznego repozytorium, logów pipeline’u, artefaktów buildu albo plików konfiguracyjnych, może pozostać użyteczny przez wiele miesięcy, a nawet lat.

To właśnie ten brak automatycznego wygasania sprawia, że ujawniony klucz GitHub App staje się poświadczeniem o bardzo wysokiej wartości. Atakujący nie musi działać natychmiast po wycieku. W wielu przypadkach może wykorzystać sekret znacznie później, o ile organizacja nie wykryje incydentu i nie przeprowadzi rotacji.

Dodatkowym problemem jest niedoskonałość narzędzi do wykrywania sekretów. Nawet nowoczesne mechanizmy secret scanning mogą pomijać poprawne i nadal aktywne poświadczenia z powodu zbyt restrykcyjnych reguł dopasowania, błędów związanych z kontekstem występowania sekretu albo prób ograniczenia liczby fałszywych alarmów.

Konsekwencje / ryzyko

Skutki kompromitacji klucza GitHub App mogą wykraczać daleko poza pojedyncze repozytorium. Jeśli aplikacja jest zainstalowana szeroko w organizacji, wyciek jednego klucza może otworzyć drogę do równoczesnego dostępu do wielu projektów i procesów automatyzacji.

W najgorszym scenariuszu atakujący uzyskuje trwały punkt wejścia do środowiska deweloperskiego, z którego może prowadzić dalszą eskalację uprawnień, pozyskiwać dodatkowe sekrety i przygotowywać ataki na kolejne etapy cyklu dostarczania oprogramowania.

  • wyciek kodu źródłowego i własności intelektualnej,
  • kradzież sekretów zapisanych w repozytoriach lub workflow,
  • modyfikacja pipeline’ów CI/CD,
  • wstrzyknięcie złośliwego kodu do procesu budowania,
  • nadużycie uprawnień administracyjnych w organizacji,
  • dalsza eskalacja do środowisk chmurowych lub produkcyjnych.

Szczególnie wysokie ryzyko dotyczą aplikacji wewnętrznych, testowych oraz zapomnianych integracji. Takie komponenty często działają poza dojrzałym procesem zarządzania tożsamościami maszynowymi, a jednocześnie posiadają szerokie uprawnienia i rzadko podlegają regularnym przeglądom.

Rekomendacje

Organizacje powinny traktować prywatne klucze GitHub App jak uprzywilejowane poświadczenia produkcyjne. Oznacza to konieczność objęcia ich pełnym cyklem zarządzania: od inwentaryzacji, przez kontrolę ekspozycji, po rotację i monitoring wykorzystania.

  • przeprowadzić pełną inwentaryzację wszystkich GitHub App używanych w organizacji,
  • zweryfikować historię repozytoriów, logi, artefakty buildów i systemy zgłoszeniowe pod kątem ujawnionych kluczy,
  • wprowadzić regularną rotację kluczy prywatnych oraz procedury awaryjnego unieważniania,
  • ograniczyć uprawnienia aplikacji zgodnie z zasadą najmniejszych uprawnień,
  • zawęzić zakres instalacji aplikacji tylko do niezbędnych repozytoriów,
  • monitorować użycie tokenów instalacyjnych i nietypowe operacje na repozytoriach oraz ustawieniach organizacji,
  • stosować wielowarstwowe wykrywanie sekretów, w tym skanowanie pre-commit, kontrole w CI i przeglądy historycznych commitów,
  • usuwać nieużywane, testowe i porzucone aplikacje,
  • uwzględnić tożsamości maszynowe GitHub w procesach IAM, PAM i reagowania na incydenty.

Kluczowe znaczenie ma również analiza blast radius po każdym wykrytym wycieku. Sama rotacja sekretu może nie wystarczyć, jeśli wcześniej doszło już do nieautoryzowanego dostępu, pobrania kodu albo modyfikacji workflow.

Podsumowanie

Aktywne po wycieku klucze prywatne GitHub App stanowią realne zagrożenie dla organizacji rozwijających oprogramowanie i polegających na automatyzacji. Problem nie ogranicza się do pojedynczych sekretów w kodzie, ale może prowadzić do przejęcia repozytoriów, kompromitacji procesów CI/CD i incydentów obejmujących cały łańcuch dostaw.

Najważniejszy wniosek jest prosty: organizacje korzystające z GitHub App powinny pilnie zweryfikować, czy ich klucze nie zostały ujawnione, ograniczyć zakres uprawnień aplikacji i wdrożyć ciągłą kontrolę nad tożsamościami maszynowymi oraz sekretami.

Źródła

  1. https://blog.gitguardian.com/github-app-private-keys-leaked/
  2. https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app
  3. https://docs.github.com/en/enterprise-cloud@latest/apps/creating-github-apps/authenticating-with-a-github-app/managing-private-keys-for-github-apps
  4. https://semgrep.dev/blog/2025/secrets-story-and-prefixed-secrets/
  5. https://www.infosecurity-magazine.com/news/hundreds-leaked-github-app-keys/