AWS - Elastic Beanstalk Enum

Support HackTricks

Elastic Beanstalk

Amazon Elastic Beanstalk fornece uma plataforma simplificada para implantar, gerenciar e escalar aplicativos 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, bem como 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 seus aplicativos na nuvem AWS, sem a necessidade de se preocupar com a infraestrutura subjacente. Ele automaticamente lida com os detalhes de provisionamento de capacidade, balanceamento de carga, escalabilidade e monitoramento da saúde do aplicativo, permitindo que você se concentre em escrever e implantar seu código.

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

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

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

AWS - EKS Enum

Aplicação e Ambientes

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

Aplicação

  • Uma aplicação no Elastic Beanstalk é um contêiner lógico para o código-fonte, ambientes e configurações da sua aplicação. Ela agrupa diferentes versões do seu código de 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 etapa. É simplesmente uma maneira de organizar e gerenciar seu código e recursos relacionados.

  • Você pode ter múltiplas versões de aplicação dentro de uma aplicação. Cada versão corresponde a uma versão específica do seu código, que pode ser implantada em um ou mais ambientes.

Ambiente

  • Um ambiente é uma instância provisionada da sua aplicação rodando na infraestrutura AWS. É onde seu código de aplicação é implantado e executado. O Elastic Beanstalk provisiona os recursos necessários (por exemplo, instâncias EC2, balanceadores de carga, grupos de auto-scaling, 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 múltiplos 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 aplicativos web e APIs. Esses aplicativos 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 auto-scaling para lidar com o tráfego recebido, gerenciar a capacidade e garantir a alta disponibilidade do aplicativo.

  2. Ambiente de Trabalhador: É projetado para processar tarefas em segundo plano, que são frequentemente operações demoradas ou que consomem muitos recursos e que não requerem respostas imediatas aos clientes. O ambiente de trabalhador provisiona recursos como instâncias EC2 e grupos de auto-scaling, mas não possui um balanceador de carga já 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 para escolher:

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

  • 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 aws-elasticbeanstalk-ec2-role e tem alguns acessos interessantes sobre todo ECS, todo 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. Pelo que sei, um usuário regular da AWS não pode acessar esse papel.

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

Por padrão, a versão 1 dos metadados 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 da 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ê obtiver acesso de leitura ao bucket, poderá ler o código-fonte e até encontrar credenciais sensíveis nele.

Se você obtiver acesso de escrita 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

AWS - Elastic Beanstalk Unauthenticated Enum

Persistência

AWS - Elastic Beanstalk Persistence

Privesc

AWS - Elastic Beanstalk Privesc

Pós-Exploração

AWS - Elastic Beanstalk Post Exploitation
Suporte ao HackTricks

Last updated