Luka w zabezpieczeniach związana z eskalacją uprawnień

Luka w zabezpieczeniach związana z eskalacją uprawnień CI/CD pipelines

Większość zespołów postrzega lukę w zabezpieczeniach związaną z eskalacją uprawnień jako błąd jądra lub niewłaściwe wykorzystanie sudo na serwerze produkcyjnym. W 2026 roku bardziej niebezpieczna wersja żyje gdzie indziej: w pipeline który buduje i wysyła Twój kod. CI/CD Zadanie rutynowo utrzymuje dostęp do zapisu w repozytoriach, tokenach rejestrów pakietów i poświadczeniach w chmurze. Atakujący, który uruchamia kod w ramach tego zadania, nie musi się zbytnio wysilać. pipeline już to dla nich zrobił.

W tym przewodniku wyjaśniono, jak wygląda luka w zabezpieczeniach związana z eskalacją uprawnień CI/CD pipelinei kontenerów, omawia najpopularniejsze ścieżki wykorzystywane przez atakujących i pokazuje, jak zamknąć każdą z nich.

TL;DR: luka w zabezpieczeniach umożliwiająca eskalację uprawnień CI/CD pipelines

W pipeline, atakujący często nie musi eskalować uprawnień. pipeline już je ma. Luka w zabezpieczeniach umożliwiająca eskalację uprawnień CI/CD jest to zwykle uprawnienie o szerszym zakresie, niż wymaga tego dane zadanie, czekające na uruchomienie niezaufanego kodu.

  • Pipelinesą uprzywilejowane z założenia. Czytają kod źródłowy, przechowują tajemnice, publikują artefakty i wdrażają je w środowisku produkcyjnym, co czyni je jednym z najcenniejszych celów eskalacji w Twojej organizacji.
  • Większość ścieżek eskalacji wynika z błędnej konfiguracji, a nie z exploitów. Szerokie tokeny domyślne, pull_request_target przepływy pracy wykorzystujące kod rozwidlony i długotrwałe klucze chmurowe powodują większe szkody niż jakiekolwiek klucze typu zero-day.
  • Eskalacja uprawnień kontenera zmienia jedno zadanie w całe zadanie. Kontenery uprzywilejowane, użytkownicy root i zamontowane gniazdo Docker sprawiają, że kontener kompilacji jest bramą, a nie granicą.
  • Dzieje się to już na dużą skalę. Robak CHAINDROP wykorzystał podwyższony poziom dostępu w modułach uruchamiających GitHub Actions, aby odczytać dane uwierzytelniające bezpośrednio z pamięci modułu uruchamiającego.
  • Rozwiązaniem jest uzyskanie jak najmniejszego uprawnienia i jego ciągłe egzekwowanie. Sprawdzaj zakres każdego tokena, zabezpieczaj każdy kontener i wykrywaj zmiany uprawnień, zanim atakujący je wykryje.

Co to jest podatność?

Luka w zabezpieczeniach związana z eskalacją uprawnień to każda słabość, która pozwala użytkownikowi, procesowi lub fragmentowi kodu uzyskać uprawnienia wykraczające poza ich przeznaczenie. MITRE ATT&CK śledzi to jako własną taktykę. TA0004: Eskalacja uprawnień, ponieważ to właśnie ten krok zmienia mały punkt zaczepienia w prawdziwą szkodę.

Istnieją dwie klasyczne formy:

  • Eskalacja pionowa: przechodząc na przykład ze zwykłego użytkownika na użytkownika root lub z tokena tylko do odczytu na taki, który może zapisywać.
  • Eskalacja pozioma: poruszanie się na boki, na przykład wykorzystywanie dostępu do jednego zadania w celu dotarcia do repozytorium, sekretów lub środowiska innego zespołu.

Atakujący wykorzystują lukę w zabezpieczeniach związaną z eskalacją uprawnień, wykorzystując trzy rodzaje słabości: błędy w oprogramowaniu, błędne konfiguracje i nadmierne uprawnienia. Na serwerach najwięcej uwagi poświęca się błędom. CI/CD pipelinePrawie całą pracę wykonują błędy w konfiguracji i nadmierne uprawnienia.

Dlaczego jest to tak niebezpieczne w CI/CD pipelines

A pipeline to nie tylko narzędzie do tworzenia. To zautomatyzowana tożsamość z jednym z najszerszych dostępów w Twojej firmie. Typowe zadanie może:

  • Sprawdź i zmodyfikuj kod źródłowy
  • Odczytuj sekrety ze zmiennych środowiskowych, sejfów i usług metadanych w chmurze
  • Publikuj pakiety, obrazy i udostępniaj artefakty
  • Wdrażanie na etapie przygotowawczym i produkcyjnym

OWASP Top 10 CI/CD Zagrożenia bezpieczeństwa bezpośrednio nazywa ten problem. Jego ryzyko CICD-SEC-5: Niewystarczające PipelineKontrola dostępu oparta na opisuje, w jaki sposób atakujący uruchamiają złośliwy kod w pipeline nadużywać udzielonych mu uprawnień do poruszania się w sposób boczny, wewnątrz lub na zewnątrz CI/CD pomimo napiętego harmonogramu

To nie jest teoria. Podczas kampanii CHAINDROP w sierpniu 2026 r. złośliwe oprogramowanie wyodrębniono tymczasowe dane uwierzytelniające z pamięci programu uruchamiającego GitHub Actions i wykorzystał skradzione tokeny publikacji do zainfekowania kolejnych pakietów. W systemach Linux ładunek uruchomił swój kolektor przez sudo aby odczytać pamięć procesu wykonawczego. To jest eskalacja uprawnień w CI/CD pipelines w najczystszej postaci: zatruta zależność, zwiększony dostęp do biegacza i każdy sekret, którego praca mogła dotknąć. To ten sam schemat, który widzimy w naszych cotygodniowych ustaleniach dotyczących złośliwe pakiety npm.

Gdzie w systemie ukrywa się luka w zabezpieczeniach umożliwiająca eskalację uprawnień? pipeline?

Sześć popularnych ścieżek, co każda z nich odblokowuje dla atakującego i kontrola, która ją zamyka.

Ścieżka eskalacjiJak to się dziejeCo otrzymuje atakującyJak to zamknąć
Uprzywilejowany pipeline jako unikalny cyfrowy, niezmienny certyfikat, któryPrzepływy pracy działają z szerokimi domyślnymi zakresami tokenów, ponieważ nie permissions blok jest ustawionyDostęp do kodu, wydań i innych przepływów pracyUstaw domyślne ustawienia tylko do odczytu i udziel dostępu do zapisu dla każdego zadania, tylko tam, gdzie jest to konieczne
Zatrute pipeline egzekucjapull_request_target lub podobne wyzwalacze sprawdzają i uruchamiają kod z niezaufanego forkaSekrety repozytorium i token zapisu z jednego pull requestNigdy nie uruchamiaj kodu fork w kontekście uprzywilejowanym; rozdziel zadania zaufane i niezaufane
Eskalacja uprawnień konteneraKontenery kompilacji uruchamiane jako root, w trybie uprzywilejowanym lub z zamontowanym gniazdem DockerUzyskaj dostęp do roota na hoście wykonawczym i każdego uruchomionego przez niego zadaniaUruchom jako użytkownik inny niż root, usuń możliwości i zablokuj eskalację uprawnień w specyfikacji kontenera
Długotrwałe dane uwierzytelniające w chmurzeStatyczne klucze chmury przechowywane jako sekrety lub zmienne środowiskoweStały dostęp do kont w chmurze, długo po zakończeniu zadaniaUżyj krótkotrwałych, federacyjnych poświadczeń i automatyczne unieważnianie ujawnionych sekretów
Uporczywi, samodzielnie hostowani biegaczeRunnery są ponownie wykorzystywane w różnych zadaniach i repozytoriach bez konieczności ich ponownego tworzeniaWytrwałość i umiejętność manipulowania konfiguracjami innych zespołówUżyj efemerycznych biegaczy i izoluj ich według poziomu zaufania
Nadmiernie uprzywilejowane konta ludzkieNieaktywni administratorzy, zewnętrzni współpracownicy i nieprzejrzane zmiany uprawnień kumulują sięWażne konto, które można zmienić pipelinei ochrony gałęziCiągły przegląd dostępu i powiadamianie o nietypowych zmianach uprawnień

Eskalacja uprawnień kontenera: gdy kontener kompilacji nie jest granicą

Kontenery dają poczucie izolacji, dlatego zespoły często traktują je jako granicę bezpieczeństwa. CI/CD, często nie są one jednym. Eskalacja uprawnień kontenera ma miejsce, gdy kod w kontenerze kompilacji przejmuje kontrolę nad hostem, a wraz z nim nad każdym innym zadaniem tam uruchomionym.

W większości przypadków można wyróżnić trzy ustawienia:

  1. Uruchamiam jako root. Jeśli procesem wewnątrz kontenera jest proces root, każde wyłamanie rozpocznie się od najsilniejszej możliwej pozycji.
  2. Tryb uprzywilejowany. Uprzywilejowany kontener ma niemal taki sam dostęp do hosta, jak proces działający bezpośrednio na nim.
  3. Zamontowane gniazdo Docker. Montowanie /var/run/docker.sock do zadania, dzięki czemu może skutecznie tworzyć obrazy, przekazuje zadanie główne hostowi, ponieważ może uruchamiać nowe uprzywilejowane kontenery.

Badacze bezpieczeństwa pokazali, jak to się dzieje w rzeczywistych systemach CI. W jednym dobrze udokumentowanym przypadku badacze przeszli od skryptów kompilacji uruchamianych w kontenerze CI do pełna ucieczka kontenera na hostach kompilacji Cloudflare Pages, dlaciswyłącznie dlatego, że kontener był traktowany jako granica bezpieczeństwa.

Oto jak wygląda utwardzona specyfikacja zadania Kubernetes. Kluczowe ustawienie to allowPrivilegeEscalation: false, który zapobiega uzyskaniu przez proces większych uprawnień niż jego proces nadrzędnyna przykład poprzez pliki binarne setuid.

ci-build-pod.yamlKubernetes
# Wzmocniony kontener kompilacji: blokuje najczęstsze ścieżki eskalacji uprawnień kontenera
Wersja api: v1
uprzejmy: Strąk
metadanych:
  Nazwa: ci-build
specyfikacja:
  kontekst bezpieczeństwa:
    uruchomJakoNieRoot: prawdziwy
    uruchom jako użytkownik: 10001
    Profil seccomp:
      rodzaj: Domyślny czas wykonania
  Pojemniki: - Nazwa: budować
      obraz: registry.example.com/build-image@sha256:
      kontekst bezpieczeństwa:
        zezwól na eskalację uprawnień: fałszywy
        uprzywilejowany: fałszywy
        readOnlyRootFilesystem: prawdziwy
        możliwości:				

Ta sama zasada dotyczy samego pliku Dockerfile. Dodaj użytkownika innego niż root i przełącz się na niego przed punktem wejścia:

DockerfileDoker
# Uruchom kontener jako użytkownik inny niż root
OD węzeł:22-slim
BIEGAĆ użytkownikradd --uid 10001 --utwórz-dom budowniczy
KIERUNEK ROBOCZY / app
KOPIA --chown=budowniczy:budowniczy , ,
USER budowniczy
CMD ["węzeł", "index.js"]
Dlaczego jest to ważne: bez USER Po wykonaniu instrukcji kontener działa jako root. Przełączenie na dedykowanego użytkownika przed punktem wejścia oznacza, że ​​zainfekowany proces uruchamia się z najmniejszymi możliwymi uprawnieniami.

Dokumentacja Kubernetesa na temat konfigurowanie kontekstu zabezpieczeń omawia szczegółowo każde z tych ustawień.

GitHub Actions: luka w zabezpieczeniach umożliwiająca eskalację, która jest widoczna gołym okiem

GitHub Actions to miejsce, w którym wiele zespołów po raz pierwszy spotyka się z eskalacją uprawnień CI/CD pipelines, ponieważ niebezpieczne wzory wyglądają zupełnie zwyczajnie. Dwa z nich warto sprawdzić w każdym repozytorium już dziś.

Zakres tokena. Każdy przepływ pracy otrzymuje GITHUB_TOKENWłasne wytyczne GitHub dotyczące automatyczne uwierzytelnianie tokenem Jest jasne: akcja może dotrzeć do tego tokena, nawet jeśli nie zostanie on przekazany jawnie, dlatego zawsze należy ograniczać jego uprawnienia do minimum. Ustawienie uprawnień tylko do odczytu na początku przepływu pracy i przyznanie dostępu do zapisu dla każdego zadania eliminuje najczęstszą ścieżkę eskalacji w jednym kroku:

.github/workflows/build.ymlAkcje GitHub
Nazwa: budować
on: [naciskać]

# Domyślnie dla każdego zadania: tylko do odczytu
uprawnienia:
  treść: czytać

Oferty pracy:
  test:
    biegnie dalej: ubuntu-najnowsze
    kroki:
      # Przypnij działania stron trzecich do pełnego commit SHA, nie jest tagiem zmiennym
      - zastosowania: działania/kasa@commit-sha>
      - biegać: npm ci && test npm

  zwolnić:
    wymagania: test
    biegnie dalej: ubuntu-najnowsze
    # Tylko ta praca może pisać i tylko to, co jest potrzebne
    uprawnienia:
      treść: napisać
    kroki: - zastosowania: działania/kasa@commit-sha>
      - biegać: ./scripts/release.sh
Dlaczego jest to ważne: Każde zadanie rozpoczyna się w trybie tylko do odczytu, a tylko zadanie wydania może zapisywać. Jeśli zależność w zadaniu testowym zostanie naruszona, token, do którego zadanie to może dotrzeć, nie będzie miał dostępu do zapisu w repozytorium.

Niepewne wyzwalacze. Przepływy pracy wyzwalane przez pull_request_target uruchomić z sekretami docelowego repozytorium i tokenem z możliwością zapisu, nawet gdy pull request pochodzi z forka. Jeśli ten przepływ pracy następnie wyewidencjonuje i uruchomi kod forka, każdy może otworzyć pull request i wykonaj kod z uprawnieniami. To luka w zabezpieczeniach umożliwiająca eskalację uprawnień, która nie wymaga żadnego exploita, wystarczy pull request. Wykonuj kroki z uprawnieniami do zaufanego kodu i uruchamiaj niezaufany kod w osobnym przepływie pracy bez poufnych informacji.

Jeśli chcesz zobaczyć te wzory w bezpiecznym miejscu, koza-xygeni repozytorium gromadzi celowo niezabezpieczone dane pipeline oraz IaC konfiguracje do szkolenia. Aby uzyskać szerszy przegląd konfiguracji GitHub, zapoznaj się z naszym przewodnikiem jak sprawdzić, czy aplikacja lub repozytorium GitHub jest bezpieczne.

Jak zapobiegać podatności na eskalację uprawnień w CI/CD pipelines

Zamykanie eskalacji uprawnień w CI/CD pipelineSprowadza się to do jednej zasady: najmniejszego uprzywilejowania, stosowanego na każdej warstwie i sprawdzanego w sposób ciągły, a nie jednorazowo. Praktyczna lista kontrolna:

  1. Zakres każdego tokena. Tylko do odczytu domyślnie, dostęp do zapisu dla każdego zadania i brak tokenów obejmujących całą organizację w przepływach pracy w repozytorium.
  2. Oddziel kod zaufany od niezaufanego. Nigdy nie uruchamiaj kodu pochodzącego z forków lub od zewnętrznych współpracowników w zadaniu, które zawiera tajemnice.
  3. Utwardź każdy kontener konstrukcyjny. Użytkownicy bez uprawnień root, brak trybu uprzywilejowanego, brak gniazda Docker, pominięte możliwości, allowPrivilegeEscalation: false.
  4. Zastąp długotrwałe sekrety. Preferuj krótkotrwałe poświadczenia federacyjne i natychmiast cofaj wszystkie ujawnione informacje.
  5. Przypnij to, co biegasz. Odnośniki do działań i obrazów osób trzecich commit SHA lub digest, więc zagrożony tag nie może zmienić Twojego pipeline.
  6. Uważaj na dryf. Uprawnienia rozszerzają się z czasem. Powiadomienia o nowych administratorach, osłabionych zabezpieczeniach gałęzi i nieoczekiwanych zmianach w przepływie pracy.
  7. Brama pipeline. Zakończ kompilację niepowodzeniem, gdy pojawi się krytyczny błąd konfiguracji, zanim zostanie ona scalona.

Trudność polega nie na znajomości tych zasad. Trudność polega na ich egzekwowaniu w setkach repozytoriów i przepływach pracy, które zmieniają się każdego dnia.

W jaki sposób Xygeni zatrzymuje lukę w zabezpieczeniach związaną z eskalacją uprawnień? CI/CD?

Każda ścieżka eskalacji jest dopasowana do możliwości Xygeni, która ją wykrywa lub blokuje.

RyzykoCo robi Xygeni
Pipeline błędne konfiguracjeDetektory błędnej konfiguracji skanuj definicje zadań CI, twórz skrypty i pliki konfiguracyjne w serwisach GitHub, GitLab, Azure DevOps, Bitbucket, CircleCI i Jenkins oraz flaguj uprawnienia w szerszym zakresie niż pozwala na to najlepsza praktyka
Eskalacja uprawnień konteneraIaC i kontrole kontenerów obejmuje pliki Dockerfile, pliki docker-compose, manifesty Kubernetes i wykresy Helm, w tym kontenery uruchamiane jako root
Użytkownicy z nadmierną liczbą uprawnień i nieaktywniAnaliza najmniejszych uprawnień identyfikuje nieaktywnych i nadmiernie uprzywilejowanych użytkowników, a także Health Check zamienia każde znalezisko w bilet
Dryf uprawnieńAlerty wykrywania anomalii dotyczące nietypowych zmian uprawnień, nietypowych połączeń i nieoczekiwanych instalacji wtyczek
Ujawnione dane uwierzytelniająceWykrywanie sekretów obejmuje kod, pipelineobrazy kontenerów i s z automatycznym unieważnianiem dla obsługiwanych typów tajnych
Złośliwy kod w pipelineBlokuje odwrotne powłoki i pobieranie złośliwego oprogramowania pipelinew czasie rzeczywistym, a MEW wykrywa złośliwe pakiety jeszcze przed powstaniem podpisu
EgzekwowaniePre-commit hooks i CI guardrails nie udaj kompilacji w przypadku problemów krytycznych, korzystając z niestandardowych zasad YAML dla własnych reguł

Kontrole są zgodne z OWASP Top 10 CI/CD Zagrożenia bezpieczeństwa oraz standardtakie jak CIS, NIST i OpenSSF. Każde odkrycie wpływa do Xygeni ASPM, gdzie jest ono traktowane priorytetowo, obok ustaleń dotyczących kodu, zależności i sekretów, tak aby luka w zabezpieczeniach związana z eskalacją uprawnień, która faktycznie dociera do środowiska produkcyjnego, została naprawiona w pierwszej kolejności.

Największe zwiększenie uprawnień w CI/CD pipelines już znajduje się w plikach przepływu pracy i czeka na uruchomienie niezaufanego kodu. 

FAQ

Czym jest luka w zabezpieczeniach związana z eskalacją uprawnień? CI/CD?

To każda słabość, która pozwala na uruchomienie kodu w pipeline uzyskać szerszy dostęp, niż jest to wymagane w danym zadaniu, np. token z nadmierną liczbą uprawnień, przepływ pracy, który uruchamia niezaufany kod z sekretami lub kontener kompilacji, który może dotrzeć do hosta.

Czym jest eskalacja uprawnień kontenera?

Eskalacja uprawnień kontenera ma miejsce, gdy proces wewnątrz kontenera uzyskuje wyższe uprawnienia, często uprawnienia roota na hoście. Typowe przyczyny to działanie jako root, w trybie uprzywilejowanym oraz zamontowane gniazdo Dockera.

Czy allowPrivilegeEscalation: false zatrzymać ucieczkę kontenerów?

Blokuje jedną ważną ścieżkę: proces uzyskujący większe uprawnienia niż jego element nadrzędny, na przykład poprzez pliki binarne z identyfikatorem setuid. Działa najlepiej w połączeniu z użytkownikiem innym niż root, z ograniczonymi uprawnieniami i bez trybu uprzywilejowanego.

Is pull_request_target zawsze niebezpieczne?

Nie samo w sobie. Staje się to luką w zabezpieczeniach związaną z eskalacją uprawnień, gdy przepływ pracy wyewidencjonowuje i uruchamia kod z pull request, ponieważ kod ten jest następnie uruchamiany z użyciem Twoich sekretów i tokena z możliwością zapisu.

Jak znaleźć ścieżki eskalacji uprawnień w wielu repozytoriach?

Ręczne recenzje nie są skalowalne. Zautomatyzowane CI/CD Narzędzie bezpieczeństwa stale skanuje każdy przepływ pracy, specyfikację kontenera i zestaw uprawnień i wysyła alerty, gdy coś się rozszerza.

sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz rozwój i dostarczanie oprogramowania

z pakietem produktów Xygeni