
Co znajdziesz w tym artykule?
Wprowadzenie do problemu / definicja
GitHub wprowadził ważną zmianę w komponencie actions/checkout, aby ograniczyć ryzyko jednej z najczęściej spotykanych klas błędów bezpieczeństwa w GitHub Actions. Chodzi o ataki określane jako „pwn request”, w których nieufny kod pochodzący z forka zostaje uruchomiony w uprzywilejowanym workflow i uzyskuje dostęp do tokenów, sekretów lub uprawnień zapisu.
To zagrożenie dotyczy przede wszystkim źle zaprojektowanych pipeline’ów CI/CD, gdzie automatyzacja przeznaczona do obsługi pull requestów wykonuje kod dostarczony przez zewnętrznego autora w kontekście repozytorium bazowego.
W skrócie
Od 18 czerwca 2026 r. actions/checkout domyślnie odmawia pobrania kodu z pull requestów pochodzących z forków w określonych ryzykownych scenariuszach. Zmiana obejmuje głównie workflow korzystające ze zdarzenia pull_request_target, a w wybranych przypadkach również workflow_run, jeśli źródłem uruchomienia jest pull request.
- blokowane są popularne wzorce prowadzące do wykonania nieufnego kodu z pełnymi uprawnieniami workflow,
- organizacje mogą jawnie dopuścić takie zachowanie, ale wymaga to ustawienia trybu niebezpiecznego,
- celem zmiany jest ograniczenie ryzyka przejęcia pipeline’u i wycieku sekretów.
Kontekst / historia
Problem błędnej obsługi pull requestów z forków nie jest nowy, ale w ostatnich latach zyskał szczególne znaczenie w kontekście ataków na łańcuch dostaw oprogramowania. W wielu incydentach źródłem ryzyka była niewłaściwa konstrukcja workflow GitHub Actions, zwłaszcza łączenie zdarzeń o podwyższonych uprawnieniach z checkoutem kodu pochodzącego od nieufnego autora.
Mechanizm pull_request_target został zaprojektowany z myślą o zaufanej automatyzacji wokół pull requestów, takiej jak etykietowanie, komentowanie czy obsługa metadanych. Problem pojawia się wtedy, gdy workflow nie ogranicza się do pracy na danych zdarzenia, lecz pobiera i uruchamia kod z gałęzi kontrolowanej przez autora zewnętrznego.
W takiej sytuacji runner może wykonać polecenia atakującego już w kontekście repozytorium bazowego. To właśnie ten wzorzec stał się jednym z najczęściej opisywanych problemów bezpieczeństwa w nowoczesnych środowiskach CI/CD.
Analiza techniczna
Nowe zachowanie actions/checkout polega na blokowaniu checkoutu kodu z forka, jeśli workflow spełnia warunki charakterystyczne dla ataku „pwn request”. Dotyczy to przede wszystkim sytuacji, w których pobierane są referencje pull requesta, takie jak refs/pull/<numer>/head lub refs/pull/<numer>/merge, albo gdy wskazywane repozytorium źródłowe należy do forka.
W praktyce oznacza to, że workflow uruchomiony przez pull_request_target nie powinien już bezpośrednio pobierać i wykonywać niezweryfikowanego kodu z zewnętrznego PR-a w najczęściej spotykanych konfiguracjach. Jeśli zespół świadomie potrzebuje takiego modelu działania, musi jawnie włączyć opcję allow-unsafe-pr-checkout: true, co wymusza akceptację ryzyka na poziomie konfiguracji.
Ryzyko związane z pull_request_target wynika z faktu, że workflow działa w kontekście domyślnej gałęzi repozytorium bazowego. Może to oznaczać dostęp do wrażliwych zasobów i mechanizmów automatyzacji.
- sekrety repozytorium,
- token
GITHUB_TOKENz uprawnieniami zapisu, - cache workflow,
- artefakty buildów i procesy wdrożeniowe,
- mechanizmy federacji tożsamości, takie jak OIDC.
Jeżeli w takim kontekście zostanie uruchomiony kod dostarczony przez nieautoryzowanego autora, możliwe staje się przejęcie tokenów, eksport sekretów, zatrucie cache, manipulacja artefaktami lub wpływ na dalsze etapy pipeline’u. Nowa ochrona nie eliminuje całego problemu, ale usuwa jeden z najczęstszych i najłatwiejszych do popełnienia błędów konfiguracyjnych.
Warto jednak pamiętać o ograniczeniach. Mechanizm dotyczy checkoutu realizowanego przez actions/checkout i nie blokuje wszystkich metod pobierania nieufnego kodu. Jeśli workflow używa własnych poleceń git, GitHub CLI lub innych sposobów klonowania repozytoriów, zagrożenie nadal może występować.
Konsekwencje / ryzyko
Dla zespołów bezpieczeństwa i DevSecOps zmiana ma podwójne znaczenie. Z jednej strony obniża prawdopodobieństwo kompromitacji wynikającej z błędnej konfiguracji workflow. Z drugiej strony może powodować awarie istniejących procesów CI/CD, które dotąd opierały się na checkoutcie kodu z forków w ramach pull_request_target.
Skutki skutecznego ataku mogą być bardzo poważne i obejmować zarówno naruszenie integralności procesu wytwarzania oprogramowania, jak i realne straty operacyjne.
- wyciek sekretów CI/CD,
- przejęcie tokenów z uprawnieniami zapisu,
- modyfikację kodu lub procesu release,
- publikację złośliwych pakietów,
- skażenie cache i artefaktów,
- dalszą kompromitację systemów zintegrowanych z pipeline’em.
Szczególnie narażone pozostają projekty open source przyjmujące wkład od szerokiego grona zewnętrznych współautorów, ale problem dotyczy również organizacji komercyjnych korzystających z repozytoriów publicznych lub hybrydowych modeli współpracy.
Rekomendacje
Zmiana wprowadzona przez GitHub powinna stać się impulsem do pełnego przeglądu bezpieczeństwa workflow. Same bezpieczniejsze ustawienia domyślne nie zastąpią poprawnej architektury pipeline’ów.
- zidentyfikować wszystkie workflow korzystające z
pull_request_target, - sprawdzić, czy wykonywany jest checkout kodu z forka lub uruchamiane są dane kontrolowane przez użytkownika,
- tam, gdzie nie są potrzebne sekrety ani podwyższone uprawnienia, zastąpić
pull_request_targetzdarzeniempull_request, - ograniczyć uprawnienia
GITHUB_TOKENdo absolutnego minimum, - rozdzielić analizę nieufnego kodu od zadań wymagających sekretów lub publikacji,
- przejrzeć użycie cache, artefaktów i danych wejściowych z PR-ów pod kątem zatruwania lub eskalacji,
- nie włączać
allow-unsafe-pr-checkout: truebez bardzo silnego uzasadnienia i zabezpieczeń kompensacyjnych, - wprowadzić dodatkową kontrolę zmian w plikach
.github/workflows/, - monitorować błędy po aktualizacji
actions/checkout, bo mogą wskazywać na niebezpieczną logikę workflow.
Dobrą praktyką pozostaje również pinowanie akcji do konkretnych rewizji, segmentacja etapów build i release oraz egzekwowanie polityk bezpieczeństwa dla repozytoriów przyjmujących zewnętrzne wkłady kodu.
Podsumowanie
Aktualizacja actions/checkout to istotny krok w stronę bezpieczniejszych domyślnych ustawień GitHub Actions. Choć mechanizm nie rozwiązuje wszystkich problemów związanych z wykonywaniem nieufnego kodu, skutecznie ogranicza jeden z najczęstszych scenariuszy prowadzących do przejęcia pipeline’u przez złośliwy pull request z forka.
Dla organizacji oznacza to jednocześnie poprawę ochrony bazowej i konieczność przeglądu istniejących procesów CI/CD. Najważniejsza zasada pozostaje niezmienna: nieufny kod nie powinien być wykonywany w uprzywilejowanym kontekście.
Źródła
- https://thehackernews.com/2026/06/github-updates-actionscheckout-to-block.html
- https://github.blog/changelog/2026-06-18-safer-pull_request_target-defaults-for-github-actions-checkout/
- https://docs.github.com/en/actions/reference/security/securely-using-pull_request_target
- https://github.com/actions/checkout
- https://securitylabs.datadoghq.com/articles/case-for-github-actions-security/