mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-16 23:01:43 -08:00
Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe
This commit is contained in:
@@ -6,11 +6,11 @@ Kubernetes gebruik verskeie **spesifieke netwerkdienste** wat jy mag vind **bloo
|
||||
|
||||
## Finding exposed pods with OSINT
|
||||
|
||||
Een manier kan wees om te soek na `Identity LIKE "k8s.%.com"` in [crt.sh](https://crt.sh) om subdomeine te vind wat met kubernetes verband hou. 'n Ander manier kan wees om te soek na `"k8s.%.com"` in github en te soek na **YAML-lêers** wat die string bevat.
|
||||
Een manier kan wees om te soek na `Identity LIKE "k8s.%.com"` in [crt.sh](https://crt.sh) om subdomeine te vind wat verband hou met kubernetes. 'n Ander manier kan wees om te soek na `"k8s.%.com"` in github en te soek na **YAML-lêers** wat die string bevat.
|
||||
|
||||
## How Kubernetes Exposes Services
|
||||
|
||||
Dit mag nuttig wees vir jou om te verstaan hoe Kubernetes **dienste publiek kan blootstel** om hulle te vind:
|
||||
Dit kan nuttig wees vir jou om te verstaan hoe Kubernetes **dienste publiek kan blootstel** om hulle te vind:
|
||||
|
||||
{{#ref}}
|
||||
../exposing-services-in-kubernetes.md
|
||||
@@ -43,7 +43,7 @@ nmap -n -T4 -p 443,2379,6666,4194,6443,8443,8080,10250,10255,10256,9099,6782-678
|
||||
```
|
||||
### Kube-apiserver
|
||||
|
||||
Dit is die **API Kubernetes diens** waarmee die administrateurs gewoonlik praat deur die hulpmiddel **`kubectl`** te gebruik.
|
||||
Dit is die **API Kubernetes diens** waarmee die administrateurs gewoonlik kommunikeer deur die hulpmiddel **`kubectl`** te gebruik.
|
||||
|
||||
**Gewone poorte: 6443 en 443**, maar ook 8443 in minikube en 8080 as onveilig.
|
||||
```bash
|
||||
@@ -61,7 +61,7 @@ curl -k https://<IP Address>:(8|6)443/api/v1
|
||||
|
||||
Hierdie diens **loop in elke knoop van die kluster**. Dit is die diens wat die **pods** binne die **knoop** sal **beheer**. Dit praat met die **kube-apiserver**.
|
||||
|
||||
As jy hierdie diens blootgestel vind, het jy dalk 'n **onaangekondigde RCE** gevind.
|
||||
As jy hierdie diens blootgestel vind, het jy dalk 'n **onaangetekende RCE** gevind.
|
||||
|
||||
#### Kubelet API
|
||||
```bash
|
||||
@@ -94,17 +94,17 @@ etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only
|
||||
```bash
|
||||
helm --host tiller-deploy.kube-system:44134 version
|
||||
```
|
||||
You could abuse this service to escalate privileges inside Kubernetes:
|
||||
U kan hierdie diens misbruik om bevoegdhede binne Kubernetes te verhoog:
|
||||
|
||||
### cAdvisor
|
||||
|
||||
Diens nuttig om metrieks te versamel.
|
||||
Diens nuttig om metings te versamel.
|
||||
```bash
|
||||
curl -k https://<IP Address>:4194
|
||||
```
|
||||
### NodePort
|
||||
|
||||
Wanneer 'n poort in al die nodes blootgestel word via 'n **NodePort**, word dieselfde poort in al die nodes oopgemaak wat die verkeer na die verklaarde **Service** proxify. Standaard sal hierdie poort in die **reeks 30000-32767** wees. So nuwe ongekontroleerde dienste mag deur daardie poorte toeganklik wees.
|
||||
Wanneer 'n poort in al die nodes blootgestel word via 'n **NodePort**, word dieselfde poort in al die nodes geopen wat die verkeer na die verklaarde **Service** proxy. Standaard sal hierdie poort in die **reeks 30000-32767** wees. Dus kan nuwe ongekontroleerde dienste deur daardie poorte toeganklik wees.
|
||||
```bash
|
||||
sudo nmap -sS -p 30000-32767 <IP>
|
||||
```
|
||||
@@ -118,7 +118,7 @@ Anonieme toegang tot **kube-apiserver API eindpunte is nie toegelaat nie**. Maar
|
||||
|
||||
### **Kontroleer vir ETCD Anonieme Toegang**
|
||||
|
||||
Die ETCD stoor die kluster geheime, konfigurasie lêers en meer **sensitiewe data**. **Standaard** kan die ETCD **nie** **anoniem** toeganklik wees nie, maar dit is altyd goed om te kontroleer.
|
||||
Die ETCD stoor die kluster geheime, konfigurasie lêers en meer **sensitiewe data**. Deur **standaard** kan die ETCD **nie** **anoniem** toeganklik wees nie, maar dit is altyd goed om te kontroleer.
|
||||
|
||||
As die ETCD anoniem toeganklik is, moet jy dalk die **[etcdctl](https://github.com/etcd-io/etcd/blob/master/etcdctl/READMEv2.md)** **instrument** gebruik. Die volgende opdrag sal al die sleutels wat gestoor is, kry:
|
||||
```bash
|
||||
@@ -128,15 +128,15 @@ etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only
|
||||
|
||||
Die [**Kubelet dokumentasie**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/) verduidelik dat **anonieme toegang** tot die diens **standaard toegelaat** word:
|
||||
|
||||
> Stel anonieme versoeke aan die Kubelet-bediener in staat. Versoeke wat nie deur 'n ander outentikasie metode verwerp word nie, word as anonieme versoeke behandel. Anonieme versoeke het 'n gebruikersnaam van `system:anonymous`, en 'n groepnaam van `system:unauthenticated`
|
||||
> Stel anonieme versoeke aan die Kubelet bediener in. Versoeke wat nie deur 'n ander verifikasiemetode verwerp word nie, word as anonieme versoeke behandel. Anonieme versoeke het 'n gebruikersnaam van `system:anonymous`, en 'n groepnaam van `system:unauthenticated`
|
||||
|
||||
Om beter te verstaan hoe die **outentikasie en magtiging van die Kubelet API werk**, kyk na hierdie bladsy:
|
||||
Om beter te verstaan hoe die **verifikasie en magtiging van die Kubelet API werk**, kyk na hierdie bladsy:
|
||||
|
||||
{{#ref}}
|
||||
kubelet-authentication-and-authorization.md
|
||||
{{#endref}}
|
||||
|
||||
Die **Kubelet** diens **API is nie gedokumenteer** nie, maar die bronkode kan hier gevind word en om die blootgestelde eindpunte te vind is so maklik soos **om te hardloop**:
|
||||
Die **Kubelet** diens **API is nie gedokumenteer** nie, maar die bronnekode kan hier gevind word en om die blootgestelde eindpunte te vind is so maklik soos **om te hardloop**:
|
||||
```bash
|
||||
curl -s https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/server/server.go | grep 'Path("/'
|
||||
|
||||
@@ -167,9 +167,9 @@ kubeletctl exec [command]
|
||||
> [!NOTE]
|
||||
> Om hierdie aanval te vermy, moet die _**kubelet**_ diens met `--anonymous-auth false` gedraai word en die diens moet op netwerkvlak gesegregeer word.
|
||||
|
||||
### **Kontroleer Kubelet (Slegs Lees Poort) Inligting Blootstelling**
|
||||
### **Kontroleer Kubelet (Lees Slegs Poort) Inligting Blootstelling**
|
||||
|
||||
Wanneer 'n **kubelet slegs lees poort** blootgestel word, word dit moontlik vir ongeregistreerde partye om inligting van die API te verkry. Die blootstelling van hierdie poort kan lei tot die bekendmaking van verskeie **kluster konfigurasie elemente**. Alhoewel die inligting, insluitend **pod name, plekke van interne lêers, en ander konfigurasies**, dalk nie krities is nie, bly die blootstelling 'n sekuriteitsrisiko en moet vermy word.
|
||||
Wanneer 'n **kubelet lees-slegs poort** blootgestel word, word dit moontlik vir ongeoorloofde partye om inligting van die API te verkry. Die blootstelling van hierdie poort kan lei tot die bekendmaking van verskeie **kluster konfigurasie-elemente**. Alhoewel die inligting, insluitend **pod name, plekke van interne lêers, en ander konfigurasies**, dalk nie krities is nie, stel die blootstelling steeds 'n sekuriteitsrisiko voor en moet vermy word.
|
||||
|
||||
'n Voorbeeld van hoe hierdie kwesbaarheid uitgebuit kan word, behels 'n afstandaanvaller wat toegang tot 'n spesifieke URL verkry. Deur na `http://<external-IP>:10255/pods` te navigeer, kan die aanvaller moontlik sensitiewe inligting van die kubelet verkry:
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# Kubelet Authentication & Authorization
|
||||
# Kubelet Verifikasie & Magtiging
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Kubelet Authentication <a href="#kubelet-authentication" id="kubelet-authentication"></a>
|
||||
## Kubelet Verifikasie <a href="#kubelet-authentication" id="kubelet-authentication"></a>
|
||||
|
||||
[**Uit die dokumentasie:**](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/)
|
||||
|
||||
Standaard word versoeke na die kubelet se HTTPS-eindpunt wat nie deur ander geconfigureerde autentikasie-metodes verwerp word nie, as anonieme versoeke behandel, en ontvang 'n **gebruikersnaam van `system:anonymous`** en 'n **groep van `system:unauthenticated`**.
|
||||
Standaard word versoeke na die kubelet se HTTPS-eindpunt wat nie deur ander geconfigureerde verifikasie metodes verwerp word nie, as anonieme versoeke behandel, en ontvang 'n **gebruikersnaam van `system:anonymous`** en 'n **groep van `system:unauthenticated`**.
|
||||
|
||||
Die **3** autentikasie **metodes** is:
|
||||
Die **3** verifikasie **metodes** is:
|
||||
|
||||
- **Anoniem** (standaard): Gebruik die instelling van die parameter **`--anonymous-auth=true` of die konfigurasie:**
|
||||
- **Anoniem** (standaard): Gebruik die instelling deur die parameter **`--anonymous-auth=true` of die konfigurasie:**
|
||||
```json
|
||||
"authentication": {
|
||||
"anonymous": {
|
||||
@@ -28,10 +28,10 @@ Die **3** autentikasie **metodes** is:
|
||||
},
|
||||
```
|
||||
> [!NOTE]
|
||||
> Die kubelet roep die **`TokenReview` API** op die geconfigureerde API-bediener om **gebruikersinligting** uit draer tokens te bepaal
|
||||
> Die kubelet roep die **`TokenReview` API** op die geconfigureerde API-bediener om **gebruikersinligting** uit draer tokens te bepaal.
|
||||
|
||||
- **X509 kliënt sertifikate:** Laat toe om te autentiseer via X509 kliënt sertifikate
|
||||
- sien die [apiserver autentisering dokumentasie](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#x509-client-certs) vir meer besonderhede
|
||||
- sien die [apiserver authentication documentation](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#x509-client-certs) vir meer besonderhede
|
||||
- begin die kubelet met die `--client-ca-file` vlag, wat 'n CA-bundel verskaf om kliënt sertifikate mee te verifieer. Of met die konfigurasie:
|
||||
```json
|
||||
"authentication": {
|
||||
@@ -40,16 +40,16 @@ Die **3** autentikasie **metodes** is:
|
||||
}
|
||||
}
|
||||
```
|
||||
## Kubelet Outeurstelling <a href="#kubelet-authentication" id="kubelet-authentication"></a>
|
||||
## Kubelet Authorization <a href="#kubelet-authentication" id="kubelet-authentication"></a>
|
||||
|
||||
Enige versoek wat suksesvol geverifieer is (insluitend 'n anonieme versoek) **word dan geoutoriseer**. Die **verstek** outeurstellingsmodus is **`AlwaysAllow`**, wat **alle versoeke toelaat**.
|
||||
Enige versoek wat suksesvol geverifieer is (insluitend 'n anonieme versoek) **word dan geoutoriseer**. Die **verstek** outorisasi-modus is **`AlwaysAllow`**, wat **alle versoeke toelaat**.
|
||||
|
||||
Die ander moontlike waarde is **`webhook`** (wat jy **meestal daar buite sal vind**). Hierdie modus sal **die regte van die geverifieerde gebruiker nagaan** om 'n aksie toe te laat of te weier.
|
||||
|
||||
> [!WARNING]
|
||||
> Let daarop dat selfs al is die **anonieme verifikasie geaktiveer** die **anonieme toegang** dalk **nie enige regte** het om enige aksie uit te voer nie.
|
||||
> Let daarop dat selfs al is die **anonieme outentisering geaktiveer** die **anonieme toegang** dalk **nie enige regte** het om enige aksie uit te voer.
|
||||
|
||||
Die outeurstelling via webhook kan gekonfigureer word met die **param `--authorization-mode=Webhook`** of via die konfigurasie lêer met:
|
||||
Die outorisering via webhook kan gekonfigureer word met die **param `--authorization-mode=Webhook`** of via die konfigurasie-lêer met:
|
||||
```json
|
||||
"authorization": {
|
||||
"mode": "Webhook",
|
||||
@@ -68,14 +68,14 @@ Die kubelet autoriseer API versoeke met dieselfde [versoek eienskappe](https://k
|
||||
| HTTP werkwoord | versoek werkwoord |
|
||||
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| POST | skep |
|
||||
| GET, HEAD | kry (vir individuele hulpbronne), lys (vir versamelings, insluitend volle objekinhoud), kyk (vir die monitering van 'n individuele hulpbron of versameling hulpbronne) |
|
||||
| GET, HEAD | kry (vir individuele hulpbronne), lys (vir versamelings, insluitend volle objekinhoud), kyk (vir die monitering van 'n individuele hulpbron of versameling van hulpbronne) |
|
||||
| PUT | opdateer |
|
||||
| PATCH | patch |
|
||||
| DELETE | verwyder (vir individuele hulpbronne), verwyderversameling (vir versamelings) |
|
||||
|
||||
- Die **hulpbron** wat met die Kubelet API praat, is **altyd** **nodes** en **subhulpbron** word **bepaal** uit die inkomende versoek se pad:
|
||||
- Die **hulpbron** wat met die Kubelet API praat, is **altyd** **nodes** en **subresource** word **bepaal** uit die inkomende versoek se pad:
|
||||
|
||||
| Kubelet API | hulpbron | subhulpbron |
|
||||
| Kubelet API | hulpbron | subresource |
|
||||
| ------------- | -------- | ----------- |
|
||||
| /stats/\* | nodes | stats |
|
||||
| /metrics/\* | nodes | metrics |
|
||||
@@ -88,11 +88,11 @@ Byvoorbeeld, die volgende versoek het probeer om toegang te verkry tot die pods
|
||||
curl -k --header "Authorization: Bearer ${TOKEN}" 'https://172.31.28.172:10250/pods'
|
||||
Forbidden (user=system:node:ip-172-31-28-172.ec2.internal, verb=get, resource=nodes, subresource=proxy)
|
||||
```
|
||||
- Ons het 'n **Verbode** gekry, so die versoek **het die Verifikasie-toets geslaag**. As dit nie was nie, sou ons net 'n `Onbevoeg` boodskap gekry het.
|
||||
- Ons het 'n **Verbode** gekry, so die versoek het die **Authentikasie kontrole** geslaag. As nie, sou ons net 'n `Onbevoeg` boodskap gekry het.
|
||||
- Ons kan die **gebruikersnaam** sien (in hierdie geval van die token)
|
||||
- Kyk hoe die **hulpbron** **nodes** was en die **subhulpbron** **proxy** (wat sin maak met die vorige inligting)
|
||||
|
||||
## References
|
||||
## Verwysings
|
||||
|
||||
- [https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user