Translated ['src/pentesting-cloud/azure-security/az-services/az-cosmosDB

This commit is contained in:
Translator
2025-01-22 23:09:41 +00:00
parent 1f0099ad3d
commit a9b2c65e4f
5 changed files with 61 additions and 93 deletions

View File

@@ -398,7 +398,8 @@
- [Az - Enumeration Tools](pentesting-cloud/azure-security/az-enumeration-tools.md)
- [Az - Unauthenticated Enum & Initial Entry](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md)
- [Az - OAuth Apps Phishing](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-oauth-apps-phishing.md)
- [Az - VMs Unath](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unath.md)
- [Az - Storage Unath](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-storage-unauth.md)
- [Az - VMs Unath](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md)
- [Az - Device Code Authentication Phishing](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- [Az - Password Spraying](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
- [Az - Services](pentesting-cloud/azure-security/az-services/README.md)

View File

@@ -17,7 +17,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).p
## Azure CosmosDB
**Azure Cosmos DB** je potpuno **upravljana NoSQL, relacijska i vektorska baza podataka** koja nudi vreme odziva u milisekundama, automatsku skalabilnost i dostupnost podržanu SLA-om uz sigurnost na nivou preduzeća. Omogućava brži razvoj aplikacija kroz ključne višeregionalne distribucije podataka, open-source API-je, SDK-ove za popularne jezike i AI funkcije baze podataka kao što su integrisana podrška za vektore i besprekorno Azure AI integrisanje.
**Azure Cosmos DB** je potpuno **upravljana NoSQL, relacijska i vektorska baza podataka** koja nudi vreme odziva u milisekundama, automatsku skalabilnost i dostupnost podržanu SLA-om uz sigurnost na nivou preduzeća. Omogućava brži razvoj aplikacija kroz ključne višeregionalne distribucije podataka, open-source API-je, SDK-ove za popularne jezike i AI funkcije baze podataka kao što su integrisana podrška za vektore i besprekorno Azure AI integraciju.
Azure Cosmos DB pruža više API-ja za baze podataka kako bi modelovao stvarne podatke koristeći dokumente, relacione, ključ-vrednost, grafičke i kolone porodične modele podataka, a ovi API-ji su NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin i Table.
@@ -212,10 +212,10 @@ mongodb://<hostname>:<port>/<database>
{% endcode %}
#### Baze podataka
U MongoDB-u možete kreirati jednu ili više baza podataka unutar instance. Svaka baza podataka služi kao logička grupa kolekcija i pruža granicu za organizaciju i upravljanje resursima. Baze podataka pomažu u logičkom razdvajanju i upravljanju podacima, kao što su za različite aplikacije ili projekte.
U MongoDB-u, možete kreirati jednu ili više baza podataka unutar instance. Svaka baza podataka služi kao logička grupa kolekcija i pruža granicu za organizaciju i upravljanje resursima. Baze podataka pomažu u logičkom razdvajanju i upravljanju podacima, kao što su za različite aplikacije ili projekte.
#### Kolekcije
Osnovna jedinica skladištenja podataka u MongoDB-u je kolekcija, koja sadrži dokumente i dizajnirana je za efikasno pretraživanje i fleksibilan dizajn šeme. Kolekcije su elastično skalabilne i mogu podržati operacije visokog protoka preko više čvorova u distribuiranom okruženju.
Osnovna jedinica skladištenja podataka u MongoDB-u je kolekcija, koja sadrži dokumente i dizajnirana je za efikasno pretraživanje i fleksibilan dizajn šeme. Kolekcije su elastično skalabilne i mogu podržati operacije sa visokim protokom preko više čvorova u distribuiranom okruženju.
#### Enumeracija
@@ -352,6 +352,8 @@ print(f"Inserted document with ID: {result.inserted_id}")
* Pogledajte post eksploataciju "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" i definicije uloga jer ovde može biti privesc
* Pogledajte restoracije
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)

View File

@@ -1,37 +0,0 @@
# Az - VMs Unath
{{#include ../../../banners/hacktricks-training.md}}
## Virtuelne mašine
Za više informacija o Azure virtuelnim mašinama pogledajte:
{{#ref}}
../az-services/vms/
{{#endref}}
### Izložena ranjiva usluga
Mrežna usluga koja je ranjiva na neki RCE.
### Javne galerijske slike
Javna slika može sadržati tajne unutra:
```bash
# List all community galleries
az sig list-community --output table
# Search by publisherUri
az sig list-community --output json --query "[?communityMetadata.publisherUri=='https://3nets.io']"
```
### Javni Ekstenzije
Ovo bi bilo čudnije, ali ne i nemoguće. Velika kompanija bi mogla staviti ekstenziju sa osetljivim podacima unutar nje:
```bash
# It takes some mins to run
az vm extension image list --output table
# Get extensions by publisher
az vm extension image list --publisher "Site24x7" --output table
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -5,19 +5,19 @@
Ovde možete pronaći neke potencijalno opasne konfiguracije Roles i ClusterRoles.\
Zapamtite da možete dobiti sve podržane resurse sa `kubectl api-resources`
## **Povećanje privilegija**
## **Privilege Escalation**
Odnosi se na veštinu dobijanja **pristupa različitom principalu** unutar klastera **sa različitim privilegijama** (unutar kubernetes klastera ili prema spoljnim cloud-ovima) od onih koje već imate, u Kubernetes-u postoje osnovno **4 glavne tehnike za povećanje privilegija**:
Ovo se odnosi na veštinu dobijanja **pristupa različitom principalu** unutar klastera **sa različitim privilegijama** (unutar kubernetes klastera ili prema spoljnim cloud-ovima) od onih koje već imate. U Kubernetes-u postoje osnovno **4 glavne tehnike za eskalaciju privilegija**:
- Možete **imitirati** druge korisnike/grupe/SAs sa boljim privilegijama unutar kubernetes klastera ili prema spoljnim cloud-ovima
- Možete **kreirati/patch/exec pods** gde možete **pronaći ili povezati SAs** sa boljim privilegijama unutar kubernetes klastera ili prema spoljnim cloud-ovima
- Možete **čitati tajne** jer su SAs tokeni pohranjeni kao tajne
- Možete **pobeći na čvor** iz kontejnera, gde možete ukrasti sve tajne kontejnera koji se izvršavaju na čvoru, kredencijale čvora i dozvole čvora unutar clouda u kojem se izvršava (ako ih ima)
- Peta tehnika koja zaslužuje pominjanje je sposobnost da **pokrenete port-forward** u podu, jer možda možete pristupiti zanimljivim resursima unutar tog poda.
- Mogućnost da **imituješ** druge korisnike/grupe/SAs sa boljim privilegijama unutar kubernetes klastera ili prema spoljnim cloud-ovima
- Mogućnost da **kreiraš/patch-uješ/izvršavaš podove** gde možeš **pronaći ili povezati SAs** sa boljim privilegijama unutar kubernetes klastera ili prema spoljnim cloud-ovima
- Mogućnost da **čitaš tajne** jer su SAs tokeni pohranjeni kao tajne
- Mogućnost da **pobegneš na čvor** iz kontejnera, gde možeš ukrasti sve tajne kontejnera koji se izvršavaju na čvoru, kredencijale čvora i dozvole čvora unutar clouda u kojem se izvršava (ako ih ima)
- Peta tehnika koja zaslužuje pominjanje je sposobnost da **pokreneš port-forward** u podu, jer možeš imati pristup zanimljivim resursima unutar tog poda.
### Pristup bilo kojem resursu ili glagolu (Wildcard)
### Access Any Resource or Verb (Wildcard)
**wildcard (\*) daje dozvolu za bilo koji resurs sa bilo kojim glagolom**. Koriste ga administratori. Unutar ClusterRole to znači da bi napadač mogao da zloupotrebi bilo koji namespace u klasteru
**wildcard (\*) daje dozvolu za bilo koji resurs sa bilo kojim glagolom**. Koriste ga administratori. Unutar ClusterRole to znači da bi napadač mogao da zloupotrebi anynamespace u klasteru
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -49,9 +49,9 @@ verbs: ["create", "list", "get"]
```
### Pod Create - Steal Token
Napadač sa dozvolama za kreiranje poda može prikačiti privilegovani servisni nalog u pod i ukrasti token kako bi se pretvarao da je taj servisni nalog. Efektivno povećavajući privilegije.
Napadač sa dozvolama za kreiranje poda može da prikači privilegovani Service Account u pod i ukrade token kako bi se pretvarao da je Service Account. Efektivno povećavajući privilegije.
Primer poda koji će ukrasti token servisnog naloga `bootstrap-signer` i poslati ga napadaču:
Primer poda koji će ukrasti token `bootstrap-signer` service account-a i poslati ga napadaču:
```yaml
apiVersion: v1
kind: Pod
@@ -153,7 +153,7 @@ pod-escape-privileges.md
Moguće je iskoristiti ove dozvole da **kreirate novi pod** i uspostavite privilegije kao u prethodnom primeru.
Sledeći yaml **kreira daemonset i eksfiltrira token SA** unutar poda:
Sledeći yaml **kreira daemonset i exfiltrira token SA** unutar poda:
```yaml
apiVersion: apps/v1
kind: DaemonSet
@@ -199,19 +199,19 @@ kubectl exec -it <POD_NAME> -n <NAMESPACE> -- sh
```
### port-forward
Ova dozvola omogućava da se **preusmeri jedan lokalni port na jedan port u specificiranom podu**. Ovo je namenjeno da se olakša debagovanje aplikacija koje rade unutar poda, ali napadač bi to mogao zloupotrebiti da dobije pristup zanimljivim (kao što su DB-ovi) ili ranjivim aplikacijama (web?) unutar poda:
Ova dozvola omogućava **prosleđivanje jednog lokalnog porta na jedan port u specificiranom podu**. Ovo je namenjeno da se olakša debagovanje aplikacija koje rade unutar poda, ali napadač bi to mogao zloupotrebiti da dobije pristup zanimljivim (kao što su DB-ovi) ili ranjivim aplikacijama (web?) unutar poda:
```
kubectl port-forward pod/mypod 5000:5000
```
### Hosts Writable /var/log/ Escape
Kao [**što je naznačeno u ovom istraživanju**](https://jackleadford.github.io/containers/2020/03/06/pvpost.html), ako možete pristupiti ili kreirati pod sa **montiranim direktorijumom `/var/log/`** na njemu, možete **pobeći iz kontejnera**.\
To je u suštini zato što kada **Kube-API pokušava da dobije logove** kontejnera (koristeći `kubectl logs <pod>`), **zahteva `0.log`** datoteku pod-a koristeći `/logs/` endpoint **Kubelet** servisa.\
To je u suštini zato što kada **Kube-API pokušava da dobije logove** kontejnera (koristeći `kubectl logs <pod>`), on **zahteva `0.log`** datoteku pod-a koristeći `/logs/` endpoint **Kubelet** servisa.\
Kubelet servis izlaže `/logs/` endpoint koji u suštini **izlaže `/var/log` datotečni sistem kontejnera**.
Stoga, napadač sa **pristupom za pisanje u /var/log/ folder** kontejnera mogao bi da zloupotrebi ovo ponašanje na 2 načina:
- Modifikovanjem `0.log` datoteke svog kontejnera (obično se nalazi u `/var/logs/pods/namespace_pod_uid/container/0.log`) da bude **simbolička veza koja pokazuje na `/etc/shadow`** na primer. Tada ćete moći da exfiltrirate hosts shadow datoteku koristeći:
- Modifikovanjem `0.log` datoteke svog kontejnera (obično se nalazi u `/var/logs/pods/namespace_pod_uid/container/0.log`) da bude **simbolička veza koja pokazuje na `/etc/shadow`** na primer. Tada ćete moći da exfiltrirate hosts shadow datoteku radeći:
```bash
kubectl logs escaper
failed to get parse function: unsupported log format: "root::::::::\n"
@@ -247,7 +247,7 @@ allowedHostPaths:
- pathPrefix: "/foo"
readOnly: true
```
Koji je bio zamišljen da spreči eskape poput prethodnih, tako što umesto korišćenja hostPath montaže, koristi PersistentVolume i PersistentVolumeClaim za montiranje foldera domaćina u kontejner sa pristupom za pisanje:
Koji je bio zamišljen da spreči eskape poput prethodnih, tako što će umesto korišćenja hostPath montaže, koristiti PersistentVolume i PersistentVolumeClaim za montiranje foldera domaćina u kontejner sa pristupom za pisanje:
```yaml
apiVersion: v1
kind: PersistentVolume
@@ -379,11 +379,11 @@ $ kubectl get secret stolen-admin-sa-token --token=$SECRETS_MANAGER_TOKEN -o jso
```
Napomena da, ako vam je dozvoljeno da kreirate i čitate tajne u određenom namespace-u, žrtvinska serviceaccount takođe mora biti u tom istom namespace-u.
### Čitanje tajne brute-forcing token ID-ova
### Čitanje tajne brute-forcing token ID-eva
Dok napadač u posedu tokena sa pravima čitanja zahteva tačno ime tajne da bi je koristio, za razliku od šireg _**listing secrets**_ privilegija, i dalje postoje ranjivosti. Podrazumevane service accounts u sistemu mogu se enumerisati, svaka povezana sa tajnom. Ove tajne imaju strukturu imena: statički prefiks praćen nasumičnim peto-znakovnim alfanumeričkim tokenom (izuzimajući određene karaktere) prema [izvornom kodu](https://github.com/kubernetes/kubernetes/blob/8418cccaf6a7307479f1dfeafb0d2823c1c37802/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go#L83).
Dok napadač u posedu tokena sa pravima čitanja zahteva tačno ime tajne da bi je koristio, za razliku od šireg _**listing secrets**_ privilegije, i dalje postoje ranjivosti. Podrazumevane service accounts u sistemu mogu se enumerisati, svaka povezana sa tajnom. Ove tajne imaju strukturu imena: statički prefiks praćen nasumičnim peto-znamenkastim alfanumeričkim tokenom (izuzimajući određene karaktere) prema [izvornom kodu](https://github.com/kubernetes/kubernetes/blob/8418cccaf6a7307479f1dfeafb0d2823c1c37802/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go#L83).
Token se generiše iz ograničenog skupa od 27 karaktera (`bcdfghjklmnpqrstvwxz2456789`), umesto iz punog alfanumeričkog opsega. Ova ograničenja smanjuju ukupan broj mogućih kombinacija na 14,348,907 (27^5). Kao rezultat, napadač bi mogao izvesti brute-force napad da bi dedukovao token u roku od nekoliko sati, što bi potencijalno dovelo do eskalacije privilegija pristupom osetljivim service accounts.
Token se generiše iz ograničenog skupa od 27 karaktera (`bcdfghjklmnpqrstvwxz2456789`), umesto iz celog alfanumeričkog opsega. Ova ograničenja smanjuju ukupan broj mogućih kombinacija na 14,348,907 (27^5). Kao rezultat, napadač bi mogao izvesti brute-force napad da bi dedukovao token u roku od nekoliko sati, što bi potencijalno dovelo do eskalacije privilegija pristupom osetljivim service accounts.
### Zahtevi za potpisivanje sertifikata
@@ -433,7 +433,7 @@ Način da se to zaobiđe je jednostavno **napraviti kredencijale nod-a za ime no
```
### AWS EKS aws-auth configmaps
Principali koji mogu da modifikuju **`configmaps`** u kube-system imenskom prostoru na EKS (moraju biti u AWS) klasterima mogu dobiti privilegije klaster admina prepisivanjem **aws-auth** configmap-a.\
Principali koji mogu da modifikuju **`configmaps`** u kube-system imenu prostoru na EKS (moraju biti u AWS) klasterima mogu dobiti privilegije klaster admina prepisivanjem **aws-auth** configmap-a.\
Potrebni glagoli su **`update`** i **`patch`**, ili **`create`** ako configmap nije kreiran:
```bash
# Check if config map exists
@@ -477,15 +477,15 @@ groups:
> Možete koristiti **`aws-auth`** za **persistence** dajući pristup korisnicima iz **drugih naloga**.
>
> Međutim, `aws --profile other_account eks update-kubeconfig --name <cluster-name>` **ne funkcioniše iz drugog naloga**. Ali zapravo `aws --profile other_account eks get-token --cluster-name arn:aws:eks:us-east-1:123456789098:cluster/Testing` funkcioniše ako stavite ARN klastera umesto samo imena.\
> Da bi `kubectl` radio, samo se pobrinite da **konfigurišete** **kubeconfig žrtve** i u aws exec argumentima dodajte `--profile other_account_role` tako da kubectl koristi profil drugog naloga za dobijanje tokena i kontaktiranje AWS-a.
> Da bi `kubectl` radio, samo se pobrinite da **konfigurišete** **kubeconfig žrtve** i u aws exec args dodajte `--profile other_account_role` tako da kubectl koristi profil drugog naloga za dobijanje tokena i kontaktiranje AWS-a.
### Eskalacija u GKE
Postoje **2 načina da se dodele K8s dozvole GCP principima**. U svakom slučaju, princip takođe treba dozvolu **`container.clusters.get`** da bi mogao da prikupi kredencijale za pristup klasteru, ili ćete morati da **generišete svoj vlastiti kubectl config fajl** (pratite sledeći link).
> [!WARNING]
> Kada komunicirate sa K8s API krajnjom tačkom, **GCP auth token će biti poslat**. Tada će GCP, preko K8s API krajnje tačke, prvo **proveriti da li princip** (prema emailu) **ima bilo kakav pristup unutar klastera**, zatim će proveriti da li ima **bilo kakav pristup putem GCP IAM**.\
> Ako je **bilo koja** od tih stvari **tačna**, biće mu **odgovoreno**. Ako **nije**, biće data **greška** koja sugeriše da se **dozvole dodele putem GCP IAM**.
> Kada komunicirate sa K8s api krajnjom tačkom, **GCP auth token će biti poslat**. Tada će GCP, preko K8s api krajnje tačke, prvo **proveriti da li princip** (prema emailu) **ima bilo kakav pristup unutar klastera**, zatim će proveriti da li ima **bilo kakav pristup putem GCP IAM**.\
> Ako je **bilo koja** od ovih **tačna**, biće mu **odgovoreno**. Ako **nije**, biće data **greška** koja sugeriše da se **dozvole dodele putem GCP IAM**.
Prvi metod je korišćenje **GCP IAM**, K8s dozvole imaju svoje **ekvivalentne GCP IAM dozvole**, i ako princip to ima, moći će da ga koristi.
@@ -497,7 +497,7 @@ Drugi metod je **dodeljivanje K8s dozvola unutar klastera** identifikovanjem kor
### Kreiranje tokena za servisne naloge
Principi koji mogu **kreirati TokenRequests** (`serviceaccounts/token`) kada komuniciraju sa K8s API krajnjom tačkom SAs (informacije iz [**ovde**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/token_request.rego)).
Principi koji mogu **kreirati TokenRequests** (`serviceaccounts/token`) kada komuniciraju sa K8s api krajnjom tačkom SAs (informacije iz [**ovde**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/token_request.rego)).
### ephemeralcontainers
@@ -505,14 +505,14 @@ Principi koji mogu **`update`** ili **`patch`** **`pods/ephemeralcontainers`** m
### ValidatingWebhookConfigurations ili MutatingWebhookConfigurations
Principi sa bilo kojim od glagola `create`, `update` ili `patch` nad `validatingwebhookconfigurations` ili `mutatingwebhookconfigurations` mogli bi biti u mogućnosti da **kreiraju jednu od takvih webhook konfiguracija** kako bi mogli da **eskaliraju privilegije**.
Principi sa bilo kojim od glagola `create`, `update` ili `patch` nad `validatingwebhookconfigurations` ili `mutatingwebhookconfigurations` mogli bi biti u mogućnosti da **kreiraju jednu od takvih webhookconfigurations** kako bi mogli da **eskaliraju privilegije**.
Za [`mutatingwebhookconfigurations` primer proverite ovu sekciju ovog posta](#malicious-admission-controller).
### Eskalacija
### Eskaliraj
Kao što možete pročitati u sledećoj sekciji: [**Ugrađena prevencija privilegovane eskalacije**](#built-in-privileged-escalation-prevention), princip ne može da ažurira niti kreira uloge ili clusterrole bez da sam ima te nove dozvole. Osim ako ima **glagol `escalate`** nad **`roles`** ili **`clusterroles`**.\
Tada može ažurirati/kreati nove uloge, clusterrole sa boljim dozvolama od onih koje ima.
Kao što možete pročitati u sledećoj sekciji: [**Ugrađena prevencija privilegovanih eskalacija**](#built-in-privileged-escalation-prevention), princip ne može da ažurira niti kreira uloge ili clusterroles bez da sam ima te nove dozvole. Osim ako ima **glagol `escalate`** nad **`roles`** ili **`clusterroles`**.\
Tada može ažurirati/kreati nove uloge, clusterroles sa boljim dozvolama od onih koje ima.
### Nodes proxy
@@ -526,7 +526,7 @@ Imate primer kako dobiti [**RCE razgovarajući autorizovano sa Kubelet API ovde*
### Brisanje podova + neschedulabilni čvorovi
Principi koji mogu **brisati podove** (`delete` glagol nad `pods` resursom), ili **izbacivati podove** (`create` glagol nad `pods/eviction` resursom), ili **menjati status podova** (pristup `pods/status`) i mogu **učiniti druge čvorove neschedulabilnim** (pristup `nodes/status`) ili **brisati čvorove** (`delete` glagol nad `nodes` resursom) i imaju kontrolu nad podom, mogli bi **ukrasti podove sa drugih čvorova** tako da se **izvršavaju** u **kompromitovanom** **čvoru** i napadač može **ukrasti tokene** iz tih podova.
Principi koji mogu **brisati podove** (`delete` glagol nad `pods` resursom), ili **izbacivati podove** (`create` glagol nad `pods/eviction` resursom), ili **menjati status podova** (pristup `pods/status`) i mogu **učiniti druge čvorove neschedulabilnim** (pristup `nodes/status`) ili **brisati čvorove** (`delete` glagol nad `nodes` resursom) i imaju kontrolu nad podom, mogli bi **ukrasti podove sa drugih čvorova** tako da se **izvršavaju** na **kompromitovanom** **čvoru** i napadač može **ukrasti tokene** iz tih podova.
```bash
patch_node_capacity(){
curl -s -X PATCH 127.0.0.1:8001/api/v1/nodes/$1/status -H "Content-Type: json-patch+json" -d '[{"op": "replace", "path":"/status/allocatable/pods", "value": "0"}]'
@@ -543,7 +543,7 @@ Principali koji mogu **modifikovati** **`services/status`** mogu postaviti polje
### Status čvorova i podova
Principali sa **`update`** ili **`patch`** dozvolama nad `nodes/status` ili `pods/status`, mogli bi modifikovati oznake kako bi uticali na primenjene ograničenja raspoređivanja.
Principali sa **`update`** ili **`patch`** dozvolama nad `nodes/status` ili `pods/status`, mogli bi modifikovati oznake kako bi uticali na ograničenja raspoređivanja.
## Ugrađena prevencija eskalacije privilegija
@@ -561,9 +561,9 @@ Pravilo nalaže da **korisnik može kreirati ili ažurirati ulogu samo ako posed
> [!CAUTION]
> **Očigledno je da je ova tehnika ranije radila, ali prema mojim testovima više ne funkcioniše iz istog razloga objašnjenog u prethodnom odeljku. Ne možete kreirati/modifikovati rolebinding da biste sebi ili drugom SA dali neke privilegije ako ih već nemate.**
Privilegija za kreiranje Rolebindings omogućava korisniku da **veže uloge za servisni nalog**. Ova privilegija može potencijalno dovesti do eskalacije privilegija jer **omogućava korisniku da veže admin privilegije za kompromitovani servisni nalog.**
Privilegija za kreiranje Rolebindings omogućava korisniku da **veže uloge za servisni nalog**. Ova privilegija može potencijalno dovesti do eskalacije privilegija jer **omogućava korisniku da veže administratorske privilegije za kompromitovani servisni nalog.**
## Drugi napadi
## Ostali napadi
### Sidecar proxy aplikacija
@@ -617,7 +617,7 @@ Više informacija na: [https://kubernetes.io/docs/tasks/configure-pod-container/
Admission controller **presreće zahteve ka Kubernetes API serveru** pre nego što dođe do trajanja objekta, ali **nakon što je zahtev autentifikovan** **i autorizovan**.
Ako napadač nekako uspe da **ubaci Mutationg Admission Controller**, moći će da **modifikuje već autentifikovane zahteve**. To može potencijalno omogućiti privesc, a obično i trajno prisustvo u klasteru.
Ako napadač nekako uspe da **ubaci Mutationg Admission Controller**, moći će da **modifikuje već autentifikovane zahteve**. To može potencijalno omogućiti privesc, a obično i trajanje u klasteru.
**Primer iz** [**https://blog.rewanthtammana.com/creating-malicious-admission-controllers**](https://blog.rewanthtammana.com/creating-malicious-admission-controllers):
```bash
@@ -657,7 +657,7 @@ Path: "/spec/containers/0/image",
Value: "rewanthtammana/malicious-image",
})
```
Gore navedeni deo zamenjuje prvu sliku kontejnera u svakom podu sa `rewanthtammana/malicious-image`.
Gore navedeni isječak zamenjuje prvu sliku kontejnera u svakom podu sa `rewanthtammana/malicious-image`.
## OPA Gatekeeper zaobilaženje
@@ -674,7 +674,7 @@ Gore navedeni deo zamenjuje prvu sliku kontejnera u svakom podu sa `rewanthtamma
### **Restriktivno dodeljivanje korisnika u RoleBindings/ClusterRoleBindings**
- **Selektivno uključivanje**: Osigurajte da su u RoleBindings ili ClusterRoleBindings uključeni samo neophodni korisnici. Redovno vršite reviziju i uklanjajte irelevantne korisnike kako biste održali visoku sigurnost.
- **Selektivno uključivanje**: Osigurajte da su samo neophodni korisnici uključeni u RoleBindings ili ClusterRoleBindings. Redovno vršite reviziju i uklanjajte irelevantne korisnike kako biste održali visoku sigurnost.
### **Uloge specifične za namespace umesto uloga na nivou klastera**

View File

@@ -8,7 +8,7 @@ Ako imate kompromitovan pristup mašini, korisnik može imati pristup nekoj Kube
U ovoj fascikli možete pronaći konfiguracione datoteke sa **tokenima i konfiguracijama za povezivanje sa API serverom**. U ovoj fascikli takođe možete pronaći fasciklu sa kešom sa informacijama prethodno preuzetim.
Ako ste kompromitovali pod unutar kubernetes okruženja, postoje druga mesta gde možete pronaći tokene i informacije o trenutnom K8 okruženju:
Ako ste kompromitovali pod unutar kubernetes okruženja, postoje i druga mesta gde možete pronaći tokene i informacije o trenutnom K8 okruženju:
### Service Account Tokens
@@ -47,7 +47,7 @@ Podrazumevana lokacija na **Minikube**:
### Hot Pods
_**Hot pods su**_ podovi koji sadrže privilegovan servisni nalog token. Privilegovani servisni nalog token je token koji ima dozvolu za obavljanje privilegovanih zadataka kao što su listanje tajni, kreiranje podova, itd.
_**Hot pods su**_ podovi koji sadrže privilegovani token servisnog naloga. Privilegovani token servisnog naloga je token koji ima dozvolu za obavljanje privilegovanih zadataka kao što su listanje tajni, kreiranje podova, itd.
## RBAC
@@ -64,7 +64,7 @@ Da biste enumerisali K8s okruženje, potrebni su vam neki od ovih:
- **validan autentifikacioni token**. U prethodnom odeljku smo videli gde da tražimo korisnički token i token servisnog naloga.
- **adresa (**_**https://host:port**_**) Kubernetes API**. Ovo se obično može pronaći u promenljivim okruženja i/ili u kube konfiguracionoj datoteci.
- **Opcionalno**: **ca.crt za verifikaciju API servera**. Ovo se može pronaći na istim mestima gde se može pronaći token. Ovo je korisno za verifikaciju sertifikata API servera, ali korišćenjem `--insecure-skip-tls-verify` sa `kubectl` ili `-k` sa `curl` vam neće biti potrebno.
- **Opcionalno**: **ca.crt za verifikaciju API servera**. Ovo se može pronaći na istim mestima gde se može pronaći token. Ovo je korisno za verifikaciju sertifikata API servera, ali korišćenjem `--insecure-skip-tls-verify` sa `kubectl` ili `-k` sa `curl` vam to neće biti potrebno.
Sa tim detaljima možete **enumerisati kubernetes**. Ako je **API** iz nekog razloga **dostupan** putem **Interneta**, možete jednostavno preuzeti te informacije i enumerisati platformu sa vaše mašine.
@@ -91,7 +91,7 @@ GET /apis/apps/v1/watch/namespaces/{namespace}/deployments/{name} [DEPRECATED]
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments [DEPRECATED]
GET /apis/apps/v1/watch/deployments [DEPRECATED]
```
Oni otvaraju streaming vezu koja vam vraća puni manifest jednog Deployment-a kada god se promeni (ili kada se kreira novi).
Oni otvaraju streaming vezu koja vam vraća puni manifest jednog Deployment-a svaki put kada se promeni (ili kada se kreira novi).
> [!CAUTION]
> Sledeće `kubectl` komande pokazuju samo kako da se navedu objekti. Ako želite da pristupite podacima, treba da koristite `describe` umesto `get`
@@ -109,19 +109,19 @@ alias kurl="curl --cacert ${CACERT} --header \"Authorization: Bearer ${TOKEN}\""
# if kurl is still got cert Error, using -k option to solve this.
```
> [!WARNING]
> Pod može **pristupiti** **kube-api serveru** na imenu domena **`kubernetes.default.svc`** i možete videti kube mrežu u **`/etc/resolv.config`** jer ćete ovde pronaći adresu kubernetes DNS servera (".1" iste opsega je kube-api krajnja tačka).
> Pod može **pristupiti** **kube-api serveru** u imenskom prostoru **`kubernetes.default.svc`** i možete videti kube mrežu u **`/etc/resolv.config`** jer ćete ovde pronaći adresu kubernetes DNS servera (".1" iste opsega je kube-api krajnja tačka).
### Koristeći kubectl
### Korišćenje kubectl
Imajući token i adresu API servera, koristite kubectl ili curl za pristup kao što je ovde naznačeno:
Podrazumevano, APISERVER komunicira sa `https://` shemom.
Podrazumevano, APISERVER komunicira sa `https://` šemom.
```bash
alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls-verify=true [--all-namespaces]' # Use --all-namespaces to always search in all namespaces
```
> ako nema `https://` u URL-u, možete dobiti grešku poput Bad Request.
Možete pronaći [**službeni kubectl cheatsheet ovde**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Cilj sledećih sekcija je da predstavi različite opcije za enumeraciju i razumevanje novog K8s na koji ste dobili pristup, u uređenom redosledu.
Možete pronaći [**službeni kubectl cheatsheet ovde**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Cilj sledećih sekcija je da predstavi različite opcije za enumeraciju i razumevanje novog K8s na koji ste dobili pristup.
Da biste pronašli HTTP zahtev koji `kubectl` šalje, možete koristiti parametar `-v=8`
@@ -161,7 +161,7 @@ kubectl config set-credentials USER_NAME \
--auth-provider-arg=idp-certificate-authority=( path to your ca certificate ) \
--auth-provider-arg=id-token=( your id_token )
```
### Dobijte podržane resurse
### Dobijanje podržanih resursa
Sa ovom informacijom ćete znati sve usluge koje možete navesti
@@ -266,13 +266,13 @@ kurl -v https://$APISERVER/api/v1/namespaces/custnamespace/secrets/
{{#endtab }}
{{#endtabs }}
Ako možete da pročitate tajne, možete koristiti sledeće linije da dobijete privilegije povezane sa svakim tokenom:
Ako možete da čitate tajne, možete koristiti sledeće linije da dobijete privilegije povezane sa svakim tokenom:
```bash
for token in `k describe secrets -n kube-system | grep "token:" | cut -d " " -f 7`; do echo $token; k --token $token auth can-i --list; echo; done
```
### Dobijanje servisnih naloga
Kao što je pomenuto na početku ove stranice **kada se pod pokrene, obično mu se dodeljuje servisni nalog**. Stoga, listanje servisnih naloga, njihovih dozvola i gde se nalaze može omogućiti korisniku da eskalira privilegije.
Kao što je pomenuto na početku ove stranice **kada se pod pokrene, obično mu se dodeljuje servisni nalog**. Stoga, listanje servisnih naloga, njihovih dozvola i gde se pokreću može omogućiti korisniku da eskalira privilegije.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -328,7 +328,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/<namespace>/pods/
### Dobijanje usluga
Kubernetes **usluge** se koriste za **izlaganje usluge na određenom portu i IP-u** (koji će delovati kao balansirnik opterećenja za podove koji zapravo nude uslugu). Ovo je zanimljivo znati gde možete pronaći druge usluge koje možete pokušati napasti.
Kubernetes **usluge** se koriste za **izlaganje usluge na određenom portu i IP** (koji će delovati kao balansirnik opterećenja za podove koji zapravo nude uslugu). Ovo je zanimljivo znati gde možete pronaći druge usluge koje možete pokušati napasti.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -381,9 +381,9 @@ kurl -v https://$APISERVER/apis/extensions/v1beta1/namespaces/default/daemonsets
{{#endtab }}
{{#endtabs }}
### Preuzmi cronjob
### Dobijanje cronjob-a
Cron poslovi omogućavaju zakazivanje pokretanja poda koji će izvršiti neku radnju koristeći sintaksu sličnu crontab-u.
Cron poslovi omogućavaju zakazivanje pokretanja poda koji će izvršiti neku radnju koristeći crontab sintaksu.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -429,7 +429,7 @@ k get CiliumClusterwideNetworkPolicies
{{#endtab }}
{{#endtabs }}
### Dobijte sve / Sve
### Dobij sve / Sve
{{#tabs }}
{{#tab name="kubectl" }}
@@ -473,7 +473,7 @@ kubectl get pod <name> [-n <namespace>] -o yaml
>
> `k get nodes --show-labels`
>
> Obično, kubernetes.io/hostname i node-role.kubernetes.io/master su dobre oznake za selektovanje.
> Obično, kubernetes.io/hostname i node-role.kubernetes.io/master su sve dobre oznake za selekciju.
Zatim kreirate svoj attack.yaml fajl
```yaml
@@ -505,6 +505,8 @@ restartPolicy: Never
# or using
# node-role.kubernetes.io/master: ""
```
[original yaml source](https://gist.github.com/abhisek/1909452a8ab9b8383a2e94f95ab0ccba)
Nakon toga kreirate pod
```bash
kubectl apply -f attacker.yaml [-n <namespace>]
@@ -672,7 +674,7 @@ curl --path-as-is -i -s -k -X $'POST' \
--data-binary $'{\"apiVersion\":\"rbac.authorization.k8s.io/v1\",\"kind\":\"RoleBinding\",\"metadata\":{\"name\":\"secrets-manager-role-binding\",\"namespace\":\"default\"},\"roleRef\":{\"apiGroup\":\"rbac.authorization.k8s.io\",\"kind\":\"Role\",\"name\":\"secrets-manager-role\"},\"subjects\":[{\"apiGroup\":\"\",\"kind\":\"ServiceAccount\",\"name\":\"secrets-manager-sa\",\"namespace\":\"default\"}]}\x0a' \
"https://$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/$NAMESPACE/default/rolebindings?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
```
### Obriši vezu ulogu
### Obriši vezu uloge
```bash
CONTROL_PLANE_HOST=""
TOKEN=""