AWS - Elastic Beanstalk Enum

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Elastic Beanstalk

O Amazon Elastic Beanstalk fornece uma plataforma simplificada para implantar, gerenciar e dimensionar aplicativos e serviços da web. Ele suporta uma variedade de linguagens de programação e estruturas, 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.

O Elastic Beanstalk fornece uma maneira simples e flexível de implantar seus aplicativos na nuvem da AWS, sem a necessidade de se preocupar com a infraestrutura subjacente. Ele manipula automaticamente os detalhes do provisionamento de capacidade, balanceamento de carga, dimensionamento 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 Dimensionamento Automático no 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:

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

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

pageAWS - EKS Enum

Aplicativo e Ambientes

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

Aplicativo

  • Um aplicativo no Elastic Beanstalk é um contêiner lógico para o código-fonte do seu aplicativo, ambientes e configurações. Ele agrupa diferentes versões do código do seu aplicativo e permite gerenciá-los como uma única entidade.

  • Ao criar um aplicativo, 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 aplicativos dentro de um aplicativo. 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 do seu aplicativo em execução na infraestrutura da AWS. É onde o código do seu aplicativo é implantado e executado. O Elastic Beanstalk provisiona os recursos necessários (por exemplo, instâncias EC2, balanceadores de carga, grupos de dimensionamento automático, bancos de dados) com base na configuração do ambiente.

  • Cada ambiente executa uma única versão do seu aplicativo, e você pode ter vários ambientes para diferentes fins, como desenvolvimento, teste, preparação e produção.

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

2 tipos de Ambientes

  1. Ambiente do Servidor da Web: É projetado para hospedar e servir aplicativos da web e APIs. Esses aplicativos normalmente lidam com solicitações HTTP/HTTPS recebidas. O ambiente do servidor da web provisiona recursos como instâncias EC2, balanceadores de carga e grupos de dimensionamento automático 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 operações frequentemente demoradas ou intensivas em recursos que não exigem respostas imediatas aos clientes. O ambiente de trabalhador provisiona recursos como instâncias EC2 e grupos de dimensionamento automático, mas não possui um balanceador de carga pois não lida diretamente com solicitações HTTP/HTTPS. Em vez disso, ele consome tarefas de uma fila de Serviço de Filas Simples da Amazon (SQS), que atua como um buffer entre o ambiente de trabalhador e as tarefas que processa.

Segurança

Ao criar um Aplicativo no Beanstalk, existem 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 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 de aws-elasticbeanstalk-ec2-role e tem acesso interessante sobre todos ECS, todos 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 executar 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-<região>-<id-conta> (se foi criado no console da AWS). Dentro deste bucket, você encontrará o código-fonte da aplicação enviado.

A URL da página da web criada é http://<nome-webapp>-env.<aleatório>.<região>.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 a função 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

pageAWS - Elastic Beanstalk Unauthenticated Enum

Persistência

pageAWS - Elastic Beanstalk Persistence

Escalação de privilégios

pageAWS - Elastic Beanstalk Privesc

Pós-exploração

pageAWS - Elastic Beanstalk Post Exploitation
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Última actualización