AWS - Elastic Beanstalk Enum

Support HackTricks

Elastic Beanstalk

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 preocuparte por la infraestructura subyacente. Automáticamente maneja los detalles de provisión 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:

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

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 despliegue.

Aplicación

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

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

  • Puedes tener múltiples versiones de aplicación dentro de una aplicación. Cada versión corresponde a un lanzamiento específico de tu código, que puede ser desplegado en uno o más entornos.

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.

  • 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 normalmente 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 mucho 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.

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 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 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, 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 gestionadas 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-<region>-<acc-id> (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://<webapp-name>-env.<random>.<region>.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

Persistencia

Escalación de Privilegios

Post Explotación

Apoya a HackTricks

Last updated