AWS - Elastic Beanstalk Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 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:
AWS - EC2, EBS, ELB, SSM, VPC & VPN EnumAdemás, si se utiliza Docker, es posible usar ECS.
AWS - EKS EnumEn AWS Elastic Beanstalk, los conceptos de "aplicación" y "entorno" sirven para diferentes propósitos y tienen roles distintos en el proceso de despliegue.
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 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.
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.
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.
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.
Al crear una aplicación en Beanstalk hay 3 opciones de seguridad muy importantes a 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:
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.
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)