# AWS - Elastic Beanstalk Enum {{#include ../../../banners/hacktricks-training.md}} ## Elastic Beanstalk Amazon Elastic Beanstalk fornisce una piattaforma semplificata per **il deployment, la gestione e la scalabilità di 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 offre un modo semplice e flessibile per **deployare le tue applicazioni nel cloud AWS**, senza la necessità di preoccuparsi dell'infrastruttura sottostante. Gestisce **automaticamente** i dettagli della **provisioning** della capacità, del **bilanciamento** del carico, della **scalabilità** e del **monitoraggio** della salute dell'applicazione, permettendoti di concentrarti sulla scrittura e sul deployment del tuo codice. L'infrastruttura creata da Elastic Beanstalk è gestita da **Autoscaling** Groups in **EC2** (con un bilanciatore di carico). Ciò significa che alla fine della giornata, se **comprometti l'host**, dovresti sapere riguardo a EC2: {{#ref}} aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} Inoltre, se viene utilizzato Docker, è possibile utilizzare **ECS**. {{#ref}} aws-eks-enum.md {{#endref}} ### Applicazione & Ambienti In AWS Elastic Beanstalk, i concetti di "applicazione" e "ambiente" servono a scopi diversi e hanno ruoli distinti nel processo di deployment. #### Applicazione - Un'applicazione in Elastic Beanstalk è un **contenitore logico per il codice sorgente, gli ambienti e le configurazioni della tua applicazione**. Raggruppa diverse versioni del codice della tua applicazione e ti consente di gestirle come un'unica entità. - 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 deployato in uno o più ambienti. #### Ambiente - Un ambiente è un'**istanza provisionata della tua applicazione** che gira sull'infrastruttura AWS. È **dove il codice della tua applicazione viene deployato ed eseguito**. Elastic Beanstalk provisiona le risorse necessarie (ad es., istanze EC2, bilanciatori di carico, gruppi di auto-scaling, 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, testing, staging e produzione. - Quando crei un ambiente, scegli una piattaforma (ad es., Java, .NET, Node.js, ecc.) e un tipo di ambiente (ad es., 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. **Web Server Environment**: È progettato per **ospitare e servire applicazioni web e API**. Queste applicazioni gestiscono tipicamente richieste HTTP/HTTPS in arrivo. L'ambiente del server web provisiona risorse come **istanze EC2, bilanciatori di carico e gruppi di auto-scaling** per gestire il traffico in arrivo, gestire la capacità e garantire l'alta disponibilità dell'applicazione. 2. **Worker Environment**: È progettato per elaborare **compiti in background**, che sono spesso operazioni che richiedono tempo o risorse eccessive che non richiedono risposte immediate ai client. L'ambiente worker provisiona risorse come **istanze EC2 e gruppi di auto-scaling**, ma **non ha un bilanciatore di carico** poiché non gestisce direttamente le richieste HTTP/HTTPS. Invece, consuma compiti da una **coda Amazon Simple Queue Service (SQS)**, che funge da buffer tra l'ambiente worker e i compiti che elabora. ### Sicurezza Quando crei un'app in Beanstalk ci sono 3 opzioni di sicurezza molto importanti da scegliere: - **EC2 key pair**: Questa sarà la **chiave SSH** che potrà accedere alle istanze EC2 che eseguono l'app. - **IAM instance profile**: Questo è il **profilo dell'istanza** che le istanze avranno (**privilegi IAM**). - Il ruolo generato automaticamente si chiama **`aws-elasticbeanstalk-ec2-role`** e ha accesso interessante su tutto ECS, tutto SQS, DynamoDB elasticbeanstalk e elasticbeanstalk S3 utilizzando le politiche gestite da AWS: [AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier), [AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker), [AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier). - **Service role**: Questo è il **ruolo che il servizio AWS** utilizzerà per eseguire tutte le azioni necessarie. A quanto ne so, un utente AWS normale non può accedere a quel ruolo. - Questo ruolo generato da AWS si chiama **`aws-elasticbeanstalk-service-role`** e utilizza le politiche gestite da AWS [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) e [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions) Per impostazione predefinita, **la versione dei metadati 1 è disabilitata**:
### Esposizione I dati di Beanstalk sono memorizzati in un **bucket S3** con il seguente nome: **`elasticbeanstalk--`** (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://-env...elasticbeanstalk.com/`** > [!WARNING] > Se ottieni **accesso in lettura** sul bucket, puoi **leggere il codice sorgente** e persino trovare **credenziali sensibili** in esso. > > Se ottieni **accesso in scrittura** sul bucket, potresti **modificare il codice sorgente** per **compromettere** il **ruolo IAM** che l'applicazione sta utilizzando la prossima volta che viene eseguita. ### Enumerazione ```bash # Find S3 bucket 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 --environment-name aws elasticbeanstalk describe-environment-resources --environment-name # Get env info such as SQS used queues aws elasticbeanstalk describe-instances-health --environment-name # Get the instances of an environment # Get events aws elasticbeanstalk describe-events ``` ### Accesso non autenticato {{#ref}} ../aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md {{#endref}} ### Persistenza {{#ref}} ../aws-persistence/aws-elastic-beanstalk-persistence.md {{#endref}} ### Privesc {{#ref}} ../aws-privilege-escalation/aws-elastic-beanstalk-privesc.md {{#endref}} ### Post Exploitation {{#ref}} ../aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}