AWS - Elastic Beanstalk Enum

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Elastic Beanstalk

Amazon Elastic Beanstalk proporciona una plataforma simplificada para implementar, gestionar y escalar aplicaciones y servicios web. Admite una variedad de lenguajes de programación y marcos, como Java, .NET, PHP, Node.js, Python, Ruby y Go, así como contenedores Docker. El servicio es compatible con servidores ampliamente utilizados, incluidos Apache, Nginx, Passenger e IIS.

Elastic Beanstalk proporciona una forma simple y flexible de implementar sus aplicaciones en la nube de AWS, sin la necesidad de preocuparse por la infraestructura subyacente. Maneja automáticamente los detalles de la provisión de capacidad, el balanceo de carga, el escalado y la monitorización de la salud de la aplicación, lo que le permite centrarse en escribir e implementar su código.

La infraestructura creada por Elastic Beanstalk es gestionada por grupos de Escalado automático en EC2 (con un balanceador de carga). Lo que significa que al final del día, si compromete el host, debería saber acerca de EC2:

pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

Además, si se utiliza Docker, es posible utilizar ECS.

pageAWS - EKS Enum

Aplicación y Entornos

En AWS Elastic Beanstalk, los conceptos de "aplicación" y "entorno" sirven para diferentes propósitos y tienen roles distintos en el proceso de implementación.

Aplicación

  • Una aplicación en Elastic Beanstalk es un contenedor lógico para el código fuente de su aplicación, entornos y configuraciones. Agrupa diferentes versiones del código de su aplicación y le permite gestionarlos como una sola entidad.

  • Cuando crea una aplicación, proporciona un nombre y una descripción, pero no se provisionan recursos en esta etapa. Es simplemente una forma de organizar y gestionar su código y recursos relacionados.

  • Puede tener múltiples versiones de la aplicación dentro de una aplicación. Cada versión corresponde a una versión específica de su código, que se puede implementar en uno o más entornos.

Entorno

  • Un entorno es una instancia provisionada de su aplicación que se ejecuta en la infraestructura de AWS. Es donde se implementa y ejecuta el código de su aplicación. Elastic Beanstalk provisiona los recursos necesarios (por ejemplo, instancias de EC2, balanceadores de carga, grupos de escalado automático, bases de datos) en función de la configuración del entorno.

  • Cada entorno ejecuta una sola versión de su aplicación, y puede tener varios entornos para diferentes propósitos, como desarrollo, pruebas, puesta en escena y producción.

  • Al crear un entorno, elige una plataforma (por ejemplo, Java, .NET, Node.js, etc.) y un tipo de entorno (por ejemplo, servidor web o trabajador). También puede 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 alojar y servir aplicaciones web y APIs. Estas aplicaciones suelen manejar solicitudes HTTP/HTTPS entrantes. El entorno del servidor web provisiona recursos como instancias de EC2, balanceadores de carga y grupos de escalado automático para manejar el tráfico entrante, gestionar la capacidad y garantizar 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 mucho 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 escalado automático, 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:

  • Par de claves EC2: Esta será la clave SSH que podrá acceder a las instancias de EC2 que ejecutan la aplicación.

  • Perfil de instancia IAM: Este es el perfil de instancia que tendrán las instancias (privilegios IAM).

  • El rol generado automáticamente se llama aws-elasticbeanstalk-ec2-role y tiene acceso interesante sobre todos los ECS, todos los SQS, DynamoDB elasticbeanstalk y elasticbeanstalk S3 utilizando las políticas administradas por AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, 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 administradas por AWS AWSElasticBeanstalkEnhancedHealth y AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

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-<región>-<id-cuenta> (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://<nombre-app-web>-env.<aleatorio>.<región>.elasticbeanstalk.com/

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.

Enumeración

# Find S3 bucket
ACCOUNT_NUMBER=<account_number>
for r in us-east-1 us-east-2 us-west-1 us-west-2 ap-south-1 ap-south-2 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-southeast-1 ap-southeast-2 ap-southeast-3 ca-central-1 eu-central-1 eu-central-2 eu-west-1 eu-west-2 eu-west-3 eu-north-1 sa-east-1 af-south-1 ap-east-1 eu-south-1 eu-south-2 me-south-1 me-central-1; do aws s3 ls elasticbeanstalk-$r-$ACCOUNT_NUMBER 2>/dev/null && echo "Found in: elasticbeanstalk-$r-$ACCOUNT_NUMBER"; done

# Get apps and URLs
aws elasticbeanstalk describe-applications # List apps
aws elasticbeanstalk describe-application-versions # Get apps & bucket name with source code
aws elasticbeanstalk describe-environments # List envs
aws elasticbeanstalk describe-environments | grep -E "EndpointURL|CNAME"
aws elasticbeanstalk describe-configuration-settings --application-name <app_name> --environment-name <env_name>
aws elasticbeanstalk describe-environment-resources --environment-name <env_name> # Get env info such as SQS used queues
aws elasticbeanstalk describe-instances-health --environment-name <env_name> # Get the instances of an environment

# Get events
aws elasticbeanstalk describe-events

Acceso no autenticado

pageAWS - Elastic Beanstalk Unauthenticated Enum

Persistencia

pageAWS - Elastic Beanstalk Persistence

Escalada de privilegios

pageAWS - Elastic Beanstalk Privesc

Post Explotación

pageAWS - Elastic Beanstalk Post Exploitation
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización