CircleCI Security
Dowiedz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Dowiedz się i ćwicz Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Podstawowe informacje
CircleCI to platforma do ciągłej integracji, gdzie możesz definiować szablony wskazujące, co chcesz, aby zrobiła z pewnym kodem i kiedy to zrobić. W ten sposób możesz automatyzować testowanie lub wdrożenia bezpośrednio z gałęzi głównej repozytorium na przykład.
Uprawnienia
CircleCI dziedziczy uprawnienia z githuba i bitbucketa związane z kontem, które się loguje. W moich testach sprawdziłem, że o ile masz uprawnienia do zapisu w repozytorium na githubie, będziesz mógł zarządzać ustawieniami projektu w CircleCI (ustawiać nowe klucze ssh, pobierać klucze api projektu, tworzyć nowe gałęzie z nowymi konfiguracjami CircleCI...).
Jednakże, musisz być administratorem repozytorium, aby przekształcić repozytorium w projekt CircleCI.
Zmienne środowiskowe i Sekrety
Zgodnie z dokumentacją istnieją różne sposoby ładowania wartości do zmiennych środowiskowych w ramach przepływu pracy.
Wbudowane zmienne środowiskowe
Każdy kontener uruchomiony przez CircleCI będzie zawsze miał określone zmienne środowiskowe zdefiniowane w dokumentacji takie jak CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
lub CIRCLE_USERNAME
.
Tekst czysty
Możesz je zadeklarować w tekście czystym wewnątrz polecenia:
Możesz je zadeklarować w czystym tekście wewnątrz środowiska uruchomieniowego:
Możesz je zadeklarować w czystym tekście wewnątrz środowiska build-job:
Możesz zadeklarować je w czystym tekście wewnątrz środowiska kontenera:
Tajne projekty
To są sekrety, które będą dostępne tylko dla projektu (dla dowolnej gałęzi). Możesz je zobaczyć zadeklarowane w https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F344535904-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F0FSPLXBcKDEfL2bo2i3t%252Fuploads%252Fgit-blob-77656c0a62f52aa18bdec3fa3f735646c3e46096%252Fimage%2520%28129%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ff90d770&sv=1)
Funkcjonalność "Importuj zmienne" pozwala na importowanie zmiennych z innych projektów do tego.
Tajne kontekstu
To są tajne informacje, które są ogólnodostępne dla organizacji. Domyślnie każde repozytorium będzie miało dostęp do dowolnego tajnego przechowywanego tutaj:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F344535904-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F0FSPLXBcKDEfL2bo2i3t%252Fuploads%252Fgit-blob-3516bc77220219539fd663be367ec141fa8723ed%252Fimage%2520%28123%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=46f12f60&sv=1)
Należy jednak zauważyć, że można wybrać inną grupę (zamiast Wszyscy członkowie), aby udzielić dostępu do tajnych informacji tylko określonym osobom. Obecnie jest to jedna z najlepszych metod zwiększenia bezpieczeństwa tajnych informacji, aby nie pozwalać każdemu na dostęp do nich, ale tylko wybranym osobom.
Ataki
Wyszukiwanie jawnie zapisanych tajemnic
Jeśli masz dostęp do VCS (takiego jak github), sprawdź plik .circleci/config.yml
w każdym repozytorium na każdej gałęzi i szukaj potencjalnych jawnie zapisanych tajemnic przechowywanych tam.
Zmienne środowiskowe tajnych informacji i wyliczanie kontekstu
Sprawdzając kod, możesz znaleźć wszystkie nazwy tajnych informacji, które są używane w każdym pliku .circleci/config.yml
. Możesz także uzyskać nazwy kontekstów z tych plików lub sprawdzić je w konsoli internetowej: https://app.circleci.com/settings/organization/github/<org_name>/contexts.
Wyciek tajnych informacji projektu
Aby wyciec wszystkie tajne informacje projektu i kontekstu, wystarczy mieć uprawnienia DO ZAPISU do tylko 1 repozytorium w całej organizacji github (i twoje konto musi mieć dostęp do kontekstów, ale domyślnie każdy może uzyskać dostęp do każdego kontekstu).
Funkcjonalność "Importuj zmienne" pozwala na importowanie zmiennych z innych projektów do tego. Dlatego atakujący mógłby zaimportować wszystkie zmienne projektowe ze wszystkich repozytoriów a następnie wyciec wszystkie razem.
Wszystkie tajne informacje projektu zawsze są ustawione w środowisku zadań, więc po prostu wywołanie env i zaszyfrowanie go w base64 spowoduje wyciek tajnych informacji w konsoli dziennika prac w interfejsie webowym workflows:
Jeśli nie masz dostępu do konsoli internetowej, ale masz dostęp do repozytorium i wiesz, że jest używany CircleCI, możesz po prostu utworzyć przepływ pracy, który jest uruchamiany co minutę i wyprowadza tajne informacje do zewnętrznego adresu:
Wyciekaj tajemnice kontekstu
Musisz określić nazwę kontekstu (to spowoduje również wyciek projektowych tajemnic):
Jeśli nie masz dostępu do konsoli internetowej, ale masz dostęp do repozytorium i wiesz, że jest używany CircleCI, możesz po prostu zmodyfikować pracę, która jest uruchamiana co minutę i wycieka tajne informacje do zewnętrznego adresu:
Po prostu utworzenie nowego pliku .circleci/config.yml
w repozytorium nie wystarczy, aby uruchomić proces budowania w CircleCI. Musisz włączyć go jako projekt w konsoli CircleCI.
Ucieczka do Chmury
CircleCI daje Ci opcję uruchamiania swoich procesów budowania na ich maszynach lub na Twoich własnych. Domyślnie ich maszyny znajdują się w GCP, i początkowo nie będziesz w stanie znaleźć nic istotnego. Jednak jeśli ofiara uruchamia zadania na swoich własnych maszynach (potencjalnie w środowisku chmurowym), możesz znaleźć punkt końcowy metadanych chmury z ciekawymi informacjami.
Zauważ, że w poprzednich przykładach wszystko było uruchamiane wewnątrz kontenera Docker, ale możesz także poprosić o uruchomienie maszyny wirtualnej VM (która może mieć inne uprawnienia chmurowe):
lub nawet kontener Docker z dostępem do zdalnej usługi Docker:
Wytrwałość
Możliwe jest utworzenie tokenów użytkownika w CircleCI w celu uzyskania dostępu do punktów końcowych API z uprawnieniami użytkownika.
https://app.circleci.com/settings/user/tokens
Możliwe jest utworzenie tokenów projektów w celu uzyskania dostępu do projektu z uprawnieniami nadanymi tokenowi.
https://app.circleci.com/settings/project/github/<org>/<repo>/api
Możliwe jest dodanie kluczy SSH do projektów.
https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
Możliwe jest utworzenie zadania cron w ukrytej gałęzi w nieoczekiwanym projekcie, który wycieka wszystkie zmienne środowiskowe kontekstu codziennie.
Lub nawet utworzenie w gałęzi / zmodyfikowanie znanego zadania, które będzie wyciekać wszystkie konteksty i sekrety projektów codziennie.
Jeśli jesteś właścicielem githuba, możesz zezwolić na niezweryfikowane orby i skonfigurować je w zadaniu jako tylną furtkę
Możesz znaleźć podatność na wstrzykiwanie poleceń w pewnym zadaniu i wstrzyknąć polecenia za pomocą sekretu, zmieniając jego wartość.
Last updated