# AWS - Elastic Beanstalk Enum

{{#include ../../../banners/hacktricks-training.md}}

## Elastic Beanstalk

Amazon Elastic Beanstalk pruža pojednostavljenu platformu za **implementaciju, upravljanje i skaliranje web aplikacija i usluga**. Podržava razne programske jezike i okvire, kao što su Java, .NET, PHP, Node.js, Python, Ruby i Go, kao i Docker kontejnere. Usluga je kompatibilna sa široko korišćenim serverima uključujući Apache, Nginx, Passenger i IIS.

Elastic Beanstalk pruža jednostavan i fleksibilan način za **implementaciju vaših aplikacija u AWS cloud**, bez potrebe da brinete o osnovnoj infrastrukturi. Ona **automatski** upravlja detaljima kapaciteta **provisioning**, opterećenja **balansiranja**, **skaliranja** i zdravlja aplikacije **monitoring**, omogućavajući vam da se fokusirate na pisanje i implementaciju vašeg koda.

Infrastruktura koju kreira Elastic Beanstalk upravlja **Autoscaling** grupama u **EC2** (sa load balancer-om). Što znači da na kraju dana, ako **kompromitujete host**, trebate znati o EC2:

{{#ref}}
aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
{{#endref}}

Pored toga, ako se koristi Docker, moguće je koristiti **ECS**.

{{#ref}}
aws-eks-enum.md
{{#endref}}

### Aplikacija i Okruženja

U AWS Elastic Beanstalk, koncepti "aplikacije" i "okruženja" služe različitim svrhama i imaju različite uloge u procesu implementacije.

#### Aplikacija

- Aplikacija u Elastic Beanstalk je **logički kontejner za izvorni kod vaše aplikacije, okruženja i konfiguracije**. Grupira različite verzije vašeg aplikacionog koda i omogućava vam da njima upravljate kao jednom celinom.
- Kada kreirate aplikaciju, pružate ime i **opis, ali u ovoj fazi se ne provisioniraju resursi**. To je jednostavno način da organizujete i upravljate svojim kodom i povezanim resursima.
- Možete imati **više verzija aplikacije** unutar jedne aplikacije. Svaka verzija odgovara specifičnom izdanju vašeg koda, koje može biti implementirano u jedno ili više okruženja.

#### Okruženje

- Okruženje je **provisionirana instanca vaše aplikacije** koja radi na AWS infrastrukturi. To je **gde se vaš aplikacioni kod implementira i izvršava**. Elastic Beanstalk provisionira potrebne resurse (npr. EC2 instance, load balancere, auto-scaling grupe, baze podataka) na osnovu konfiguracije okruženja.
- **Svako okruženje pokreće jednu verziju vaše aplikacije**, i možete imati više okruženja za različite svrhe, kao što su razvoj, testiranje, staging i produkcija.
- Kada kreirate okruženje, birate platformu (npr. Java, .NET, Node.js, itd.) i tip okruženja (npr. web server ili worker). Takođe možete prilagoditi konfiguraciju okruženja da kontrolišete različite aspekte infrastrukture i postavki aplikacije.

### 2 tipa Okruženja

1. **Web Server Okruženje**: Dizajnirano je da **hostuje i servira web aplikacije i API-je**. Ove aplikacije obično obrađuju dolazne HTTP/HTTPS zahteve. Web server okruženje provisionira resurse kao što su **EC2 instance, load balanceri i auto-scaling** grupe za upravljanje dolaznim saobraćajem, upravljanje kapacitetom i osiguranje visoke dostupnosti aplikacije.
2. **Worker Okruženje**: Dizajnirano je za obradu **pozadinskih zadataka**, koji su često dugotrajne ili resursno intenzivne operacije koje ne zahtevaju trenutne odgovore klijentima. Worker okruženje provisionira resurse poput **EC2 instanci i auto-scaling grupa**, ali **nema load balancer** jer ne obrađuje HTTP/HTTPS zahteve direktno. Umesto toga, konzumira zadatke iz **Amazon Simple Queue Service (SQS) reda**, koji deluje kao međuspremnik između worker okruženja i zadataka koje obrađuje.

### Bezbednost

Kada kreirate aplikaciju u Beanstalk-u, postoje 3 veoma važna bezbednosna opcija za izbor:

- **EC2 ključni par**: Ovo će biti **SSH ključ** koji će moći da pristupi EC2 instancama koje pokreću aplikaciju.
- **IAM instanca profil**: Ovo je **profil instance** koji će instance imati (**IAM privilegije**).
- Autogenerisana uloga se zove **`aws-elasticbeanstalk-ec2-role`** i ima zanimljiv pristup svim ECS, svim SQS, DynamoDB elasticbeanstalk i elasticbeanstalk S3 koristeći AWS upravljane politike: [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).
- **Uloga servisa**: Ovo je **uloga koju će AWS servis** koristiti za izvršavanje svih potrebnih akcija. Koliko znam, običan AWS korisnik ne može pristupiti toj ulozi.
- Ova uloga generisana od strane AWS-a se zove **`aws-elasticbeanstalk-service-role`** i koristi AWS upravljane politike [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) i [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions)

Podrazumevano je **metadata verzija 1 onemogućena**:

<figure><img src="../../../images/image (103).png" alt=""><figcaption></figcaption></figure>

### Izloženost

Podaci Beanstalk-a se čuvaju u **S3 bucket-u** sa sledećim imenom: **`elasticbeanstalk-<region>-<acc-id>`** (ako je kreiran u AWS konzoli). Unutar ovog bucket-a naći ćete **izvorni kod aplikacije**.

**URL** kreirane web stranice je **`http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/`**

> [!WARNING]
> Ako dobijete **pristup za čitanje** nad bucket-om, možete **pročitati izvorni kod** i čak pronaći **osetljive akreditive** u njemu.
>
> Ako dobijete **pristup za pisanje** nad bucket-om, mogli biste **modifikovati izvorni kod** da **kompromitujete** **IAM ulogu** koju aplikacija koristi sledeći put kada se izvrši.

### Enumeracija
```bash
# 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
```
### Neautentifikovani Pristup

{{#ref}}
../aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md
{{#endref}}

### Persistencija

{{#ref}}
../aws-persistence/aws-elastic-beanstalk-persistence.md
{{#endref}}

### Povišenje Privilegija

{{#ref}}
../aws-privilege-escalation/aws-elastic-beanstalk-privesc.md
{{#endref}}

### Post Eksploatacija

{{#ref}}
../aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
