AWS - Elastic Beanstalk Enum

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

Elastic Beanstalk

Amazon Elastic Beanstalk fornisce una piattaforma semplificata per implementare, gestire e scalare applicazioni e servizi web. Supporta una varietà di linguaggi di programmazione e framework, come Java, .NET, PHP, Node.js, Python, Ruby e Go, oltre a contenitori Docker. Il servizio è compatibile con server ampiamente utilizzati tra cui Apache, Nginx, Passenger e IIS.

Elastic Beanstalk fornisce un modo semplice e flessibile per implementare le tue applicazioni nel cloud AWS, senza la necessità di preoccuparsi dell'infrastruttura sottostante. Si occupa automaticamente dei dettagli della provisioning della capacità, del bilanciamento del carico, dello scaling e del monitoraggio della salute dell'applicazione, consentendoti di concentrarti sulla scrittura e implementazione del tuo codice.

L'infrastruttura creata da Elastic Beanstalk è gestita da Gruppi di Autoscaling in EC2 (con un bilanciatore di carico). Ciò significa che alla fine della giornata, se comprometti l'host, dovresti sapere di EC2:

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

Inoltre, se viene utilizzato Docker, è possibile utilizzare ECS.

pageAWS - EKS Enum

Applicazione e Ambienti

In AWS Elastic Beanstalk, i concetti di "applicazione" e "ambiente" servono a scopi diversi e hanno ruoli distinti nel processo di distribuzione.

Applicazione

  • Un'applicazione in Elastic Beanstalk è un contenitore logico per il codice sorgente dell'applicazione, gli ambienti e le configurazioni. Raggruppa diverse versioni del codice dell'applicazione e ti consente di gestirle come un'entità singola.

  • Quando crei un'applicazione, fornisci un nome e una descrizione, ma nessuna risorsa viene provisionata in questa fase. È semplicemente un modo per organizzare e gestire il tuo codice e le risorse correlate.

  • Puoi avere più versioni dell'applicazione all'interno di un'applicazione. Ogni versione corrisponde a un rilascio specifico del tuo codice, che può essere distribuito su uno o più ambienti.

Ambiente

  • Un ambiente è una istanza provisionata della tua applicazione in esecuzione sull'infrastruttura AWS. È dove il codice dell'applicazione viene distribuito ed eseguito. Elastic Beanstalk provvede alle risorse necessarie (ad esempio, istanze EC2, bilanciatori di carico, gruppi di autoscaling, database) in base alla configurazione dell'ambiente.

  • Ogni ambiente esegue una singola versione della tua applicazione, e puoi avere più ambienti per scopi diversi, come sviluppo, test, staging e produzione.

  • Quando crei un ambiente, scegli una piattaforma (ad esempio, Java, .NET, Node.js, ecc.) e un tipo di ambiente (ad esempio, server web o worker). Puoi anche personalizzare la configurazione dell'ambiente per controllare vari aspetti dell'infrastruttura e delle impostazioni dell'applicazione.

2 tipi di Ambienti

  1. Ambiente Server Web: È progettato per ospitare e servire applicazioni web e API. Queste applicazioni gestiscono tipicamente le richieste HTTP/HTTPS in ingresso. L'ambiente del server web provvede alle risorse come istanze EC2, bilanciatori di carico e gruppi di autoscaling per gestire il traffico in ingresso, gestire la capacità e garantire l'alta disponibilità dell'applicazione.

  2. Ambiente Worker: È progettato per elaborare attività in background, che sono operazioni spesso lunghe o intensive in termini di risorse che non richiedono risposte immediate ai client. L'ambiente worker provvede alle risorse come istanze EC2 e gruppi di autoscaling, ma non ha un bilanciatore di carico poiché non gestisce direttamente le richieste HTTP/HTTPS. Invece, consuma attività da una coda di servizio semplice di Amazon (SQS), che funge da buffer tra l'ambiente worker e le attività che elabora.

Sicurezza

Quando si crea un'applicazione in Beanstalk ci sono 3 opzioni di sicurezza molto importanti da scegliere:

  • Coppia di chiavi EC2: Questa sarà la chiave SSH che potrà accedere alle istanze EC2 in esecuzione dell'applicazione

  • Profilo istanza IAM: Questo è il profilo istanza che avranno le istanze (privilegi IAM)

  • Il ruolo generato automaticamente si chiama aws-elasticbeanstalk-ec2-role e ha alcuni accessi interessanti su tutti ECS, tutti SQS, DynamoDB elasticbeanstalk ed elasticbeanstalk S3 utilizzando le policy gestite da AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • Ruolo di servizio: Questo è il ruolo che il servizio AWS utilizzerà per eseguire tutte le azioni necessarie. A quanto ne so, un utente AWS regolare non può accedere a quel ruolo.

  • Questo ruolo generato da AWS si chiama aws-elasticbeanstalk-service-role e utilizza le policy gestite da AWS AWSElasticBeanstalkEnhancedHealth e AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

Per impostazione predefinita la versione dei metadati 1 è disabilitata:

### Esposizione

I dati di Beanstalk sono archiviati in un bucket S3 con il seguente nome: elasticbeanstalk-<region>-<acc-id> (se è stato creato nella console AWS). All'interno di questo bucket troverai il codice sorgente dell'applicazione caricato.

L'URL della pagina web creata è http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/

Se ottieni accesso in lettura al bucket, puoi leggere il codice sorgente e persino trovare credenziali sensibili al suo interno.

Se ottieni accesso in scrittura al bucket, potresti modificare il codice sorgente per compromettere il ruolo IAM che l'applicazione sta utilizzando la prossima volta che viene eseguita.

Enumerazione

# 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

Accesso non autenticato

pageAWS - Elastic Beanstalk Unauthenticated Enum

Persistenza

pageAWS - Elastic Beanstalk Persistence

Privesc

pageAWS - Elastic Beanstalk Privesc

Post Esploitation

pageAWS - Elastic Beanstalk Post Exploitation
Impara l'hacking su AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated