Przejdź do treści
INDEKS ANALIZ BREACHROAD / NOTA TECHNICZNA

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.

MATERIAŁ PUBLICZNY
AUTOR
/ CEO Breachroad · OSCP · PNPT
PUBLIKACJA
12 sierpnia 2026
CZAS CZYTANIA
12 min czytania
TEMAT
Łańcuch dostaw
Cloudflare Pages Action CVE-2026-11325: RCE w pipeline GitHub Actions

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.

  1. Utwórz listę wszystkich wywołań cloudflare/pages-action, również w workflow współdzielonych.
  2. Dla każdego zanotuj triggery, checkoutowany ref, środowisko GitHub, runner i udostępnione sekrety.
  3. Zastąp akcję wspieraną wersją cloudflare/wrangler-action@v4 oraz poleceniem pages deploy właściwym dla projektu.
  4. Ustaw minimalne permissions, zwykle zaczynając od contents: read; dodaj deployments: write tylko jeśli funkcja go wymaga.
  5. Przenieś produkcyjne sekrety do chronionego GitHub Environment z wymaganym zatwierdzeniem i ograniczeniem branchy.
  6. Nadaj tokenowi Cloudflare prawa tylko do jednego konta i funkcji Pages potrzebnych temu workflow.
  7. 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.

UDOSTĘPNIJ / KOPIUJ