AWS - Elastic Beanstalk Enum

Support HackTricks

Elastic Beanstalk

Amazon Elastic Beanstalk fornece uma plataforma simplificada para implantar, gerenciar e escalar aplicações e serviços web. Ele suporta uma variedade de linguagens de programação e frameworks, como Java, .NET, PHP, Node.js, Python, Ruby e Go, além de contêineres Docker. O serviço é compatível com servidores amplamente utilizados, incluindo Apache, Nginx, Passenger e IIS.

Elastic Beanstalk fornece uma maneira simples e flexível de implantar suas aplicações na nuvem AWS, sem a necessidade de se preocupar com a infraestrutura subjacente. Ele gerencia automaticamente os detalhes de provisionamento de capacidade, balanceamento de carga, escalonamento e monitoramento da saúde da aplicação, permitindo que você se concentre em escrever e implantar seu código.

A infraestrutura criada pelo Elastic Beanstalk é gerenciada por Grupos de Autoscaling em EC2 (com um balanceador de carga). O que significa que, no final do dia, se você comprometer o host, você deve saber sobre o EC2:

Além disso, se o Docker for usado, é possível usar ECS.

Aplicação e Ambientes

No AWS Elastic Beanstalk, os conceitos de "aplicação" e "ambiente" servem a propósitos diferentes e têm papéis distintos no processo de implantação.

Aplicação

  • Uma aplicação no Elastic Beanstalk é um container lógico para o código-fonte, ambientes e configurações da sua aplicação. Ela agrupa diferentes versões do código da sua aplicação e permite que você as gerencie como uma única entidade.

  • Quando você cria uma aplicação, você fornece um nome e uma descrição, mas nenhum recurso é provisionado nesta fase. É simplesmente uma maneira de organizar e gerenciar seu código e recursos relacionados.

  • Você pode ter várias versões de aplicação dentro de uma aplicação. Cada versão corresponde a um lançamento específico do seu código, que pode ser implantado em um ou mais ambientes.

Ambiente

  • Um ambiente é uma instância provisionada da sua aplicação executando na infraestrutura da AWS. É onde o código da sua aplicação é implantado e executado. O Elastic Beanstalk provisiona os recursos necessários (por exemplo, instâncias EC2, balanceadores de carga, grupos de autoescalonamento, bancos de dados) com base na configuração do ambiente.

  • Cada ambiente executa uma única versão da sua aplicação, e você pode ter vários ambientes para diferentes propósitos, como desenvolvimento, teste, homologação e produção.

  • Quando você cria um ambiente, você escolhe uma plataforma (por exemplo, Java, .NET, Node.js, etc.) e um tipo de ambiente (por exemplo, servidor web ou trabalhador). Você também pode personalizar a configuração do ambiente para controlar vários aspectos da infraestrutura e das configurações da aplicação.

2 tipos de Ambientes

  1. Ambiente de Servidor Web: É projetado para hospedar e servir aplicações web e APIs. Essas aplicações normalmente lidam com solicitações HTTP/HTTPS recebidas. O ambiente de servidor web provisiona recursos como instâncias EC2, balanceadores de carga e grupos de autoescalonamento para lidar com o tráfego recebido, gerenciar capacidade e garantir a alta disponibilidade da aplicação.

  2. Ambiente de Trabalhador: É projetado para processar tarefas em segundo plano, que são frequentemente operações demoradas ou intensivas em recursos que não requerem respostas imediatas aos clientes. O ambiente de trabalhador provisiona recursos como instâncias EC2 e grupos de autoescalonamento, mas não possui um balanceador de carga uma vez que não lida diretamente com solicitações HTTP/HTTPS. Em vez disso, ele consome tarefas de uma fila do Amazon Simple Queue Service (SQS), que atua como um buffer entre o ambiente de trabalhador e as tarefas que ele processa.

Segurança

Ao criar um App no Beanstalk, há 3 opções de segurança muito importantes a serem escolhidas:

  • Par de chaves EC2: Esta será a chave SSH que poderá acessar as instâncias EC2 executando o app.

  • Perfil de instância IAM: Este é o perfil de instância que as instâncias terão (privilégios IAM).

  • O papel gerado automaticamente é chamado de aws-elasticbeanstalk-ec2-role e tem alguns acessos interessantes sobre todo o ECS, todo o SQS, DynamoDB elasticbeanstalk e elasticbeanstalk S3 usando as políticas gerenciadas pela AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • Papel de serviço: Este é o papel que o serviço AWS usará para realizar todas as ações necessárias. Até onde sei, um usuário regular da AWS não pode acessar esse papel.

  • Este papel gerado pela AWS é chamado de aws-elasticbeanstalk-service-role e usa as políticas gerenciadas pela AWS AWSElasticBeanstalkEnhancedHealth e AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

Por padrão, a versão de metadados 1 está desativada:

Exposição

Os dados do Beanstalk são armazenados em um bucket S3 com o seguinte nome: elasticbeanstalk-<region>-<acc-id> (se foi criado no console AWS). Dentro deste bucket, você encontrará o código-fonte da aplicação carregado.

A URL da página web criada é http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/

Se você obter acesso de leitura ao bucket, poderá ler o código-fonte e até encontrar credenciais sensíveis nele.

Se você obter acesso de gravação ao bucket, poderá modificar o código-fonte para comprometer o papel IAM que a aplicação está usando na próxima vez que for executada.

Enumeração

# 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

Acesso Não Autenticado

Persistência

Escalação de Privilégios

Pós Exploração

Suporte ao HackTricks

Last updated