diff --git a/src/SUMMARY.md b/src/SUMMARY.md
index 6172b28d3..d05776c71 100644
--- a/src/SUMMARY.md
+++ b/src/SUMMARY.md
@@ -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)
diff --git a/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md b/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md
index c4a966682..8b48d3275 100644
--- a/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md
+++ b/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md
@@ -352,6 +352,8 @@ print(f"Inserted document with ID: {result.inserted_id}")
* Echar un vistazo a la post explotación "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" y definiciones de roles porque aquí podría haber una escalación de privilegios
* Echar un vistazo a las restauraciones
+
+
{% hint style="success" %}
Aprende y practica Hacking en AWS:
[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)
\
Aprende y practica Hacking en GCP:
[**HackTricks Training GCP Red Team Expert (GRTE)**
](https://training.hacktricks.xyz/courses/grte)
diff --git a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unath.md b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unath.md
deleted file mode 100644
index 203c16f69..000000000
--- a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unath.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Az - VMs Unath
-
-{{#include ../../../banners/hacktricks-training.md}}
-
-## Máquinas Virtuales
-
-Para más información sobre las Máquinas Virtuales de Azure, consulta:
-
-{{#ref}}
-../az-services/vms/
-{{#endref}}
-
-### Servicio vulnerable expuesto
-
-Un servicio de red que es vulnerable a algún RCE.
-
-### Imágenes de Galería Pública
-
-Una imagen pública puede tener secretos dentro de ella:
-```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']"
-```
-### Extensiones Públicas
-
-Esto sería más extraño pero no imposible. Una gran empresa podría poner una extensión con datos sensibles dentro de ella:
-```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}}
diff --git a/src/pentesting-cloud/kubernetes-security/abusing-roles-clusterroles-in-kubernetes/README.md b/src/pentesting-cloud/kubernetes-security/abusing-roles-clusterroles-in-kubernetes/README.md
index e43cc17da..98c2d65c6 100644
--- a/src/pentesting-cloud/kubernetes-security/abusing-roles-clusterroles-in-kubernetes/README.md
+++ b/src/pentesting-cloud/kubernetes-security/abusing-roles-clusterroles-in-kubernetes/README.md
@@ -77,7 +77,7 @@ hostNetwork: true
Lo siguiente indica todos los privilegios que un contenedor puede tener:
- **Acceso privilegiado** (deshabilitando protecciones y configurando capacidades)
-- **Deshabilitar los namespaces hostIPC y hostPid** que pueden ayudar a escalar privilegios
+- **Deshabilitar namespaces hostIPC y hostPid** que pueden ayudar a escalar privilegios
- **Deshabilitar el namespace hostNetwork**, dando acceso para robar privilegios de nube de nodos y mejor acceso a redes
- **Montar hosts / dentro del contenedor**
```yaml:super_privs.yaml
@@ -123,7 +123,7 @@ Una línea de [este tweet](https://twitter.com/mauilion/status/11294684854807511
```bash
kubectl run r00t --restart=Never -ti --rm --image lol --overrides '{"spec":{"hostPID": true, "containers":[{"name":"1","image":"alpine","command":["nsenter","--mount=/proc/1/ns/mnt","--","/bin/bash"],"stdin": true,"tty":true,"imagePullPolicy":"IfNotPresent","securityContext":{"privileged":true}}]}}'
```
-Ahora que puedes escapar al nodo, revisa las técnicas de post-explotación en:
+Ahora que puedes escapar al nodo, consulta las técnicas de post-explotación en:
#### Sigilo
@@ -149,7 +149,7 @@ Para más información, consulta:
pod-escape-privileges.md
{{#endref}}
-### **Crear/Patch Despliegue, Daemonsets, Statefulsets, Replicationcontrollers, Replicasets, Jobs y Cronjobs**
+### **Crear/Patch Deployment, Daemonsets, Statefulsets, Replicationcontrollers, Replicasets, Jobs y Cronjobs**
Es posible abusar de estos permisos para **crear un nuevo pod** y establecer privilegios como en el ejemplo anterior.
@@ -235,7 +235,7 @@ curl -k -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Im[...]' 'https://
#### Eludir la protección de solo lectura
-Si tienes la suerte de que la capacidad altamente privilegiada `CAP_SYS_ADMIN` esté disponible, puedes simplemente volver a montar la carpeta como rw:
+Si tienes la suerte de que la capacidad altamente privilegiada `CAP_SYS_ADMIN` está disponible, puedes simplemente volver a montar la carpeta como rw:
```bash
mount -o rw,remount /hostlogs/
```
@@ -247,7 +247,7 @@ allowedHostPaths:
- pathPrefix: "/foo"
readOnly: true
```
-Lo que se pretendía era prevenir escapes como los anteriores al, en lugar de usar un hostPath mount, utilizar un PersistentVolume y un PersistentVolumeClaim para montar una carpeta de hosts en el contenedor con acceso de escritura:
+Lo que se pretendía era prevenir escapes como los anteriores al, en lugar de usar un montaje hostPath, utilizar un PersistentVolume y un PersistentVolumeClaim para montar una carpeta de hosts en el contenedor con acceso de escritura:
```yaml
apiVersion: v1
kind: PersistentVolume
@@ -297,12 +297,12 @@ name: task-pv-storage-vol
Con un privilegio de [**suplantación de usuario**](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation), un atacante podría suplantar una cuenta privilegiada.
-Simplemente use el parámetro `--as=` en el comando `kubectl` para suplantar a un usuario, o `--as-group=` para suplantar a un grupo:
+Solo usa el parámetro `--as=` en el comando `kubectl` para suplantar a un usuario, o `--as-group=` para suplantar a un grupo:
```bash
kubectl get pods --as=system:serviceaccount:kube-system:default
kubectl get secrets --as=null --as-group=system:masters
```
-O use la API REST:
+O utiliza la API REST:
```bash
curl -k -v -XGET -H "Authorization: Bearer " \
-H "Impersonate-Group: system:masters"\
@@ -312,7 +312,7 @@ https://:/api/v1/namespaces/kube-system/secrets/
```
### Listando Secretos
-El permiso para **listar secretos podría permitir a un atacante leer realmente los secretos** accediendo al punto final de la API REST:
+El permiso para **listar secretos podría permitir a un atacante leer realmente los secretos** accediendo al endpoint de la API REST:
```bash
curl -v -H "Authorization: Bearer " https://:/api/v1/namespaces/kube-system/secrets/
```
@@ -389,7 +389,7 @@ El token se genera a partir de un conjunto limitado de 27 caracteres (`bcdfghjkl
Si tiene los verbos **`create`** en el recurso `certificatesigningrequests` (o al menos en `certificatesigningrequests/nodeClient`). Puede **crear** un nuevo CeSR de un **nuevo nodo.**
-De acuerdo con la [documentación, es posible aprobar automáticamente estas solicitudes](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/), por lo que en ese caso **no necesita permisos adicionales**. Si no, necesitaría poder aprobar la solicitud, lo que significa actualizar en `certificatesigningrequests/approval` y `approve` en `signers` con resourceName `/` o `/*`
+De acuerdo con la [documentación, es posible aprobar automáticamente estas solicitudes](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/), así que en ese caso **no necesita permisos adicionales**. Si no, necesitaría poder aprobar la solicitud, lo que significa actualizar en `certificatesigningrequests/approval` y `approve` en `signers` con resourceName `/` o `/*`
Un **ejemplo de un rol** con todos los permisos requeridos es:
```yaml
@@ -424,10 +424,7 @@ verbs:
```
Entonces, con el nuevo CSR de nodo aprobado, puedes **abusar** de los permisos especiales de los nodos para **robar secretos** y **escalar privilegios**.
-En [**esta publicación**](https://www.4armed.com/blog/hacking-kubelet-on-gke/) y [**esta otra**](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/), la configuración de GKE K8s TLS Bootstrap está configurada con **firma automática** y se abusa para generar credenciales de un nuevo nodo K8s y luego abusar de esas para escalar privilegios robando secretos.\
-Si **tienes los privilegios mencionados, podrías hacer lo mismo**. Ten en cuenta que el primer ejemplo elude el error que impide que un nuevo nodo acceda a secretos dentro de contenedores porque un **nodo solo puede acceder a los secretos de los contenedores montados en él.**
-
-La forma de eludir esto es simplemente **crear credenciales de nodo para el nombre del nodo donde el contenedor con los secretos interesantes está montado** (pero solo verifica cómo hacerlo en la primera publicación):
+En [**esta publicación**](https://www.4armed.com/blog/hacking-kubelet-on-gke/) y [**esta otra**](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/), la configuración de GKE K8s TLS Bootstrap está configurada con **firma automática** y se
```bash
"/O=system:nodes/CN=system:node:gke-cluster19-default-pool-6c73b1-8cj1"
```
@@ -516,7 +513,7 @@ Entonces puede actualizar/crear nuevos roles, clusterroles con mejores permisos
### Proxy de nodos
-Principales con acceso al subrecurso **`nodes/proxy`** pueden **ejecutar código en pods** a través de la API de Kubelet (según [**esto**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/nodes_proxy.rego)). Más información sobre la autenticación de Kubelet en esta página:
+Principales con acceso al **`nodes/proxy`** subrecurso pueden **ejecutar código en pods** a través de la API de Kubelet (según [**esto**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/nodes_proxy.rego)). Más información sobre la autenticación de Kubelet en esta página:
{{#ref}}
../pentesting-kubernetes-services/kubelet-authentication-and-authorization.md
@@ -575,7 +572,7 @@ Crea tu .yaml
```bash
kubectl run app --image=bash --command -oyaml --dry-run=client > -- sh -c 'ping google.com'
```
-Edita tu .yaml y añade las líneas sin comentar:
+Edita tu .yaml y añade las líneas descomentadas:
```yaml
#apiVersion: v1
#kind: Pod
@@ -645,7 +642,7 @@ kubectl describe po nginx | grep "Image: "
```

-Como se puede ver en la imagen anterior, intentamos ejecutar la imagen `nginx`, pero la imagen final ejecutada es `rewanthtammana/malicious-image`. ¿Qué acaba de pasar!?
+Como puedes ver en la imagen anterior, intentamos ejecutar la imagen `nginx`, pero la imagen final ejecutada es `rewanthtammana/malicious-image`. ¿Qué acaba de pasar!?
#### Technicalities
@@ -667,9 +664,9 @@ El fragmento anterior reemplaza la primera imagen del contenedor en cada pod con
## Mejores Prácticas
-### **Deshabilitar la Automontura de Tokens de Cuentas de Servicio**
+### **Deshabilitar el Automontaje de Tokens de Cuentas de Servicio**
-- **Pods y Cuentas de Servicio**: Por defecto, los pods montan un token de cuenta de servicio. Para mejorar la seguridad, Kubernetes permite deshabilitar esta función de automontura.
+- **Pods y Cuentas de Servicio**: Por defecto, los pods montan un token de cuenta de servicio. Para mejorar la seguridad, Kubernetes permite deshabilitar esta función de automontaje.
- **Cómo Aplicar**: Establecer `automountServiceAccountToken: false` en la configuración de cuentas de servicio o pods a partir de la versión 1.6 de Kubernetes.
### **Asignación Restrictiva de Usuarios en RoleBindings/ClusterRoleBindings**
diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md b/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md
index d9fc5a933..326e1c5ff 100644
--- a/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md
+++ b/src/pentesting-cloud/kubernetes-security/kubernetes-enumeration.md
@@ -8,7 +8,7 @@ Si has comprometido el acceso a una máquina, el usuario puede tener acceso a al
En esta carpeta podrías encontrar archivos de configuración con **tokens y configuraciones para conectarse al servidor API**. En esta carpeta también puedes encontrar una carpeta de caché con información recuperada previamente.
-Si has comprometido un pod dentro de un entorno de kubernetes, hay otros lugares donde puedes encontrar tokens e información sobre el entorno K8 actual:
+Si has comprometido un pod dentro de un entorno de Kubernetes, hay otros lugares donde puedes encontrar tokens e información sobre el entorno K8 actual:
### Tokens de Cuenta de Servicio
@@ -29,7 +29,7 @@ Generalmente **uno** de los directorios:
contiene los archivos:
-- **ca.crt**: Es el certificado ca para verificar las comunicaciones de kubernetes
+- **ca.crt**: Es el certificado ca para verificar las comunicaciones de Kubernetes
- **namespace**: Indica el espacio de nombres actual
- **token**: Contiene el **token de servicio** del pod actual.
@@ -55,7 +55,7 @@ Si no sabes qué es **RBAC**, **lee esta sección**.
## Aplicaciones GUI
-- **k9s**: Una GUI que enumera un clúster de kubernetes desde la terminal. Consulta los comandos en [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Escribe `:namespace` y selecciona todo para luego buscar recursos en todos los espacios de nombres.
+- **k9s**: Una GUI que enumera un clúster de Kubernetes desde la terminal. Consulta los comandos en [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Escribe `:namespace` y selecciona todo para luego buscar recursos en todos los espacios de nombres.
- **k8slens**: Ofrece algunos días de prueba gratuita: [https://k8slens.dev/](https://k8slens.dev/)
## Hoja de Trucos de Enumeración
@@ -66,17 +66,17 @@ Para enumerar un entorno K8s necesitas un par de cosas:
- La **dirección (**_**https://host:port**_**) del API de Kubernetes**. Esto generalmente se puede encontrar en las variables de entorno y/o en el archivo de configuración kube.
- **Opcional**: El **ca.crt para verificar el servidor API**. Esto se puede encontrar en los mismos lugares donde se puede encontrar el token. Esto es útil para verificar el certificado del servidor API, pero usando `--insecure-skip-tls-verify` con `kubectl` o `-k` con `curl` no necesitarás esto.
-Con esos detalles puedes **enumerar kubernetes**. Si el **API** por alguna razón es **accesible** a través de **Internet**, puedes simplemente descargar esa información y enumerar la plataforma desde tu host.
+Con esos detalles puedes **enumerar Kubernetes**. Si el **API** por alguna razón es **accesible** a través de **Internet**, puedes simplemente descargar esa información y enumerar la plataforma desde tu host.
Sin embargo, generalmente el **servidor API está dentro de una red interna**, por lo tanto necesitarás **crear un túnel** a través de la máquina comprometida para acceder a él desde tu máquina, o puedes **subir el** [**kubectl**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux) binario, o usar **`curl/wget/anything`** para realizar solicitudes HTTP en bruto al servidor API.
### Diferencias entre los verbos `list` y `get`
-Con permisos de **`get`** puedes acceder a la información de activos específicos (_opción `describe` en `kubectl`_) API:
+Con permisos de **`get`** puedes acceder a información de activos específicos (_opción `describe` en `kubectl`_) API:
```
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
```
-Si tienes el permiso **`list`**, se te permite ejecutar solicitudes API para listar un tipo de activo (_opción `get` en `kubectl`_):
+Si tienes el permiso **`list`**, se te permite ejecutar solicitudes API para listar un tipo de activo (_`get` opción en `kubectl`_):
```bash
#In a namespace
GET /apis/apps/v1/namespaces/{namespace}/deployments
@@ -119,7 +119,7 @@ Por defecto, el APISERVER se comunica con el esquema `https://`
```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
```
-> si no hay `https://` en la URL, puede que obtengas un error como Bad Request.
+> si no hay `https://` en la URL, puede que obtenga un error como Bad Request.
Puedes encontrar un [**cheatsheet oficial de kubectl aquí**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). El objetivo de las siguientes secciones es presentar de manera ordenada diferentes opciones para enumerar y entender el nuevo K8s al que has obtenido acceso.
@@ -272,7 +272,7 @@ for token in `k describe secrets -n kube-system | grep "token:" | cut -d " " -f
```
### Obtener Cuentas de Servicio
-Como se discutió al principio de esta página **cuando se ejecuta un pod, generalmente se le asigna una cuenta de servicio**. Por lo tanto, listar las cuentas de servicio, sus permisos y dónde se están ejecutando puede permitir a un usuario escalar privilegios.
+Como se discutió al principio de esta página, **cuando se ejecuta un pod, generalmente se le asigna una cuenta de servicio**. Por lo tanto, listar las cuentas de servicio, sus permisos y dónde se están ejecutando puede permitir a un usuario escalar privilegios.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -347,7 +347,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/default/services/
### Obtener nodos
-Obtén todos los **nodos configurados dentro del clúster**.
+Obtener todos los **nodos configurados dentro del clúster**.
{{#tabs }}
{{#tab name="kubectl" }}