Cloudflare Pages Action CVE-2026-11325: RCE w pipeline GitHub Actions
Archiwalna akcja cloudflare/pages-action jest podatna we wszystkich wersjach i nie dostanie poprawki. Migracja do wrangler-action wymaga też ograniczenia tokenów.
- AUTOR
- Karol Rapacz / CEO Breachroad · OSCP · PNPT
- PUBLIKACJA
- 12 sierpnia 2026
- CZAS CZYTANIA
- 12 min czytania
- TEMAT
- Łańcuch dostaw
12 sierpnia 2026 roku opublikowano CVE-2026-11325 w cloudflare/pages-action, popularnej wcześniej akcji GitHub Actions wdrażającej serwisy do Cloudflare Pages. W określonych konfiguracjach workflow dane kontrolowane przez napastnika mogą doprowadzić do zdalnego wykonania kodu w runnerze. Skutkiem może być dostęp do CLOUDFLARE_API_TOKEN, GITHUB_TOKEN i innych sekretów udostępnionych danemu zadaniu.
Problem obejmuje wszystkie opublikowane wersje, także ruchomy tag v1. Repozytorium jest archiwalne i przestarzałe od 2024 roku, a poprawka nie zostanie wydana. Cloudflare wskazuje migrację do cloudflare/wrangler-action; użytkownicy, którzy już ją wykonali, nie są dotknięci tą podatnością. Stara akcja ma zostać usunięta 18 września 2026 roku, więc pozostanie przy niej grozi jednocześnie bezpieczeństwem i awarią pipeline’u.
Dlaczego workflow jest częścią łańcucha dostaw
GitHub Actions nie jest tylko automatem uruchamiającym build. Runner pobiera kod, instaluje zależności, buduje artefakt, podpisuje lub publikuje go i uwierzytelnia się do repozytorium oraz platformy hostingowej. Kod wykonany w tym miejscu może zmienić wynik wdrożenia, odczytać tokeny dostępne dla joba albo wykorzystać GITHUB_TOKEN do działań dozwolonych przez sekcję permissions.
To sprawia, że błąd w akcji ma inny profil niż błąd w statycznej stronie. Nawet jeżeli złośliwy kod działa tylko przez czas joba, może opublikować zmieniony artefakt lub wykraść długowieczny token Cloudflare. Jeśli ten token ma uprawnienia do wielu stref i projektów, blast radius wykracza poza pojedynczy branch.
CVE-2026-11325 ma ocenę 8,8 w CVSS 3.1. Wektor zakłada interakcję użytkownika, ponieważ złośliwa zmiana musi wejść w przepływ uruchamiający workflow. Konkretna osiągalność zależy od triggerów, zasad pull requestów i tego, czy sekrety są udostępniane dla kodu pochodzącego z niezaufanego źródła.
Które workflow są najbardziej narażone
Najwyższe ryzyko mają joby uruchamiane na treści, którą może zmienić osoba z zewnątrz, oraz takie, które jednocześnie otrzymują token wdrożeniowy. Szczególnej uwagi wymagają pull_request_target, komentarze sterujące wdrożeniem, ręczne akcje moderatora na cudzym branchu, automatyczne preview i repozytoria przyjmujące wkład od forków.
Samo użycie pull_request nie oznacza automatycznie wycieku, ponieważ GitHub ogranicza sekrety dla forków. Ryzyko wraca jednak przez niestandardowe warunki, self-hosted runner, checkout nieufnego commitu w uprzywilejowanym kontekście lub późniejszy workflow uruchamiany przez artefakt. Dlatego analiza musi obejmować cały graf zdarzeń, nie jedną linijkę uses.
Wyszukaj cloudflare/pages-action we wszystkich gałęziach, reusable workflows, szablonach organizacji i repozytoriach archiwalnych, które nadal mogą wdrażać. Ruchomy tag nie jest ochroną: wszystkie opublikowane wersje starej akcji są objęte rekordem. Nie ma wersji, do której można ją bezpiecznie podnieść.
Jak przeprowadzić migrację
Nowy workflow powinien użyć cloudflare/wrangler-action@v4 i jawnego polecenia Pages, na przykład pages deploy wskazującego katalog oraz nazwę projektu. Dokładna składnia, wymagane sekrety i opcje są opisane w repozytorium akcji. Migracja to nie tylko zamiana nazwy uses, ponieważ parametry starej i nowej akcji nie są identyczne.
- Utwórz listę wszystkich wywołań
cloudflare/pages-action, również w workflow współdzielonych. - Dla każdego zanotuj triggery, checkoutowany ref, środowisko GitHub, runner i udostępnione sekrety.
- Zastąp akcję wspieraną wersją
cloudflare/wrangler-action@v4oraz poleceniempages deploywłaściwym dla projektu. - Ustaw minimalne
permissions, zwykle zaczynając odcontents: read; dodajdeployments: writetylko jeśli funkcja go wymaga. - Przenieś produkcyjne sekrety do chronionego GitHub Environment z wymaganym zatwierdzeniem i ograniczeniem branchy.
- Nadaj tokenowi Cloudflare prawa tylko do jednego konta i funkcji Pages potrzebnych temu workflow.
- Przetestuj preview na nieprodukcyjnym projekcie, a produkcję uruchom z zatwierdzonego commitu i sprawdź publiczny digest.
W krytycznym pipeline warto przypiąć akcję do pełnego SHA commitu, a aktualizacje wykonywać botem po przeglądzie zmian. Tag v4 jest wygodniejszy i wskazany w przykładach, lecz ruchomy tag zwiększa zaufanie do procesu wydawania maintenera. Organizacja powinna świadomie wybrać politykę pinowania i utrzymywać narzędzie do aktualizacji SHA.
Tokeny: minimalne prawa i rotacja
Token Cloudflare dla Pages nie powinien mieć globalnych praw administracyjnych do DNS, Workers, kont i billing. Utwórz oddzielny token dla konkretnego pipeline’u i ogranicz go do wymaganych zasobów. W GitHub ustaw jawne permissions, ponieważ domyślne prawa GITHUB_TOKEN zależą od konfiguracji organizacji i mogą być szersze, niż zakłada autor pliku YAML.
Jeżeli podatny workflow uruchamiał się na nieufnym kodzie albo nie można tego wykluczyć, rotuj token Cloudflare po migracji i przejrzyj audit logi. Sprawdź wdrożenia Pages, zmiany projektu, użycie tokenu z nowych adresów, akcje w repozytorium i modyfikacje workflow. Samo usunięcie starego sekretu z GitHub nie unieważnia go u dostawcy; trzeba go odwołać po stronie Cloudflare.
W przypadku GITHUB_TOKEN jego ważność jest zwykle krótka, ale działania wykonane podczas joba pozostają. Przejrzyj commity, release’y, artefakty, statusy wdrożeń i zmiany ustawień. Inne długowieczne sekrety obecne w jobie — klucze npm, podpisu czy komunikatora — wymagają osobnej oceny.
Detekcja i weryfikacja po migracji
Zbuduj mapę: zdarzenie GitHub → workflow → commit → artefakt → deployment Cloudflare. Dla każdego produkcyjnego wdrożenia powinno dać się wskazać zatwierdzony commit i digest plików. Nietypowe uruchomienie z forka, zmiana YAML tuż przed deploymentem, nowe polecenia w logu albo nieoczekiwany rozmiar artefaktu są wartościowymi sygnałami.
Logi runnera mogą zawierać sekrety przypadkowo wypisane przez proces, więc dostęp do nich również jest wrażliwy. Włącz maskowanie, nie uruchamiaj trybu debug z sekretami i ogranicz okres przechowywania zgodnie z potrzebami dochodzeniowymi. Self-hosted runner po jobie z niezaufanym kodem powinien być efemeryczny; stały host może zachować trwałość i dane między zadaniami.
Po migracji uruchom kontrolę negatywną na repozytorium testowym: wkład z forka nie powinien otrzymać produkcyjnego sekretu ani wdrożyć się do produkcyjnego środowiska. Zatwierdzenie ma dotyczyć konkretnego commitu, aby po review nie można było podmienić kodu. Branch protection i CODEOWNERS dla .github/workflows/ zmniejszają ryzyko cichej zmiany ścieżki dostaw.
Co jest faktem, a co rekomendacją
Faktem z advisory jest podatność wszystkich wersji pages-action, możliwość RCE w określonych workflow, brak planowanej poprawki i konieczność migracji. Potencjalny dostęp do tokenów wynika z ich obecności w środowisku joba. Nie ma podstaw, by każdą historyczną instalację uznać za naruszoną.
Właściciel repozytorium powinien zachować wynik przeglądu jako dowód: usunięte odwołania do starej akcji, nowy przypięty komponent, zakres tokenu, deklarowane uprawnienia i pomyślny test produkcyjnej trasy. Taki zapis ułatwia późniejszą odpowiedź na pytanie, czy wszystkie projekty objęto migracją. Automatyczna reguła repozytoryjna może dodatkowo blokować ponowne dodanie cloudflare/pages-action w przyszłym pull requeście.
Rekomendacją Breachroad jest potraktowanie migracji jako przeglądu granic zaufania, a nie jednowierszowej zmiany. Akcje, triggery, runner, uprawnienia i tokeny tworzą jeden system. Zespoły uczą się takich modeli na szkoleniach cyberbezpieczeństwa dla organizacji, a ekspozycję CI/CD, chmury i sekretów można zweryfikować przez audyt bezpieczeństwa chmury.


