mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-07 13:20:48 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
@@ -6,9 +6,9 @@
|
||||
|
||||
### `sts:AssumeRole`
|
||||
|
||||
Her rol bir **rol güven politikası** ile oluşturulur; bu politika **oluşturulan rolü kimlerin devralabileceğini** belirtir. Eğer aynı hesabın içindeki bir rol, bir hesaba onu devralma izni veriyorsa, bu hesabın role erişebileceği (ve potansiyel olarak **privesc**) anlamına gelir.
|
||||
Her rol, bir **rol güven politikası** ile oluşturulur; bu politika, **oluşturulan rolü kimin üstlenebileceğini** belirtir. Eğer aynı hesaptaki bir rol, bir hesabın onu üstlenebileceğini söylüyorsa, bu o hesabın role (ve potansiyel olarak **privesc**) erişebileceği anlamına gelir.
|
||||
|
||||
Örneğin, aşağıdaki rol güven politikası herkesin onu devralabileceğini gösterir; dolayısıyla **herhangi bir kullanıcı**, o role bağlı izinlere **privesc** yapabilecektir.
|
||||
Örneğin, aşağıdaki rol güven politikası herkesin onu üstlenebileceğini gösterir; bu yüzden **herhangi bir kullanıcı**, o role bağlı izinlere privesc yapabilecektir.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -23,21 +23,22 @@ Her rol bir **rol güven politikası** ile oluşturulur; bu politika **oluşturu
|
||||
]
|
||||
}
|
||||
```
|
||||
Çalışan bir rolü taklit edebilirsiniz:
|
||||
Bir rolü şu komutu çalıştırarak taklit edebilirsiniz:
|
||||
```bash
|
||||
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
|
||||
```
|
||||
**Olası Etki:** Role Privesc.
|
||||
**Olası Etki:** Rol üzerinde Privesc.
|
||||
|
||||
> [!CAUTION]
|
||||
> Bu durumda `sts:AssumeRole` izninin **istismar edilecek role belirtilmiş** olması gerektiğine ve saldırgana ait bir policy'de **olmam**ası gerektiğine dikkat edin.\
|
||||
> Tek bir istisna dışında, farklı bir hesaptan **bir rolü üstlenebilmek** için saldırgan hesabının **ayrıca** rol üzerinde **`sts:AssumeRole`** iznine **sahip olması gerektiğini** unutmayın.
|
||||
> Bu durumda izin `sts:AssumeRole`'un **istismar edilecek rolde belirtilmiş** olması gerektiğini ve attacker'a ait bir policy'de olmaması gerektiğini unutmayın.\
|
||||
> Bir istisna dışında, farklı bir hesaptan bir rolü **üstlenmek** için attacker hesabının **ayrıca** rol üzerinde **`sts:AssumeRole`** iznine sahip olması gerekir.
|
||||
|
||||
|
||||
### `sts:AssumeRoleWithSAML`
|
||||
|
||||
Bu role ait bir trust policy, **SAML ile kimlik doğrulayan kullanıcılara rolü taklit etme yetkisi verir.**
|
||||
Bu role ait bir trust policy, **SAML ile doğrulanmış kullanıcılara rolü taklit etme erişimi** verir.
|
||||
|
||||
An example of a trust policy with this permission is:
|
||||
Bir örnek olarak bu izne sahip bir trust policy şöyledir:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -58,11 +59,11 @@ An example of a trust policy with this permission is:
|
||||
]
|
||||
}
|
||||
```
|
||||
Rolü taklit etmek için kimlik bilgileri oluşturmak amacıyla genel olarak şöyle bir şey kullanabilirsiniz:
|
||||
Genel olarak role'ü taklit etmek için credentials oluşturmak üzere şunun gibi bir şey kullanabilirsiniz:
|
||||
```bash
|
||||
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
|
||||
```
|
||||
Ancak **sağlayıcılar**, bunu kolaylaştırmak için **kendi araçlarına** sahip olabilir, örneğin [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
|
||||
Ama **sağlayıcılar**, bunu kolaylaştırmak için **kendi araçlarına** sahip olabilir, örneğin [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
|
||||
```bash
|
||||
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600
|
||||
```
|
||||
@@ -70,14 +71,14 @@ onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --
|
||||
|
||||
### `sts:AssumeRoleWithWebIdentity`
|
||||
|
||||
Bu izin, bir web kimlik sağlayıcısı ile mobil, web uygulaması, EKS... içinde kimlik doğrulaması yapılmış **kullanıcılar** için bir dizi geçici güvenlik kimlik bilgisi elde etme izni verir. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
Bu izin, bir web identity provider ile mobil veya web uygulamasında, EKS... içinde kimlik doğrulaması yapılmış kullanıcılar için bir dizi geçici güvenlik kimlik bilgisi elde etme izni verir. [Buradan daha fazlasını öğrenin.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
|
||||
For example, if an **EKS service account** should be able to **impersonate an IAM role**, it will have a token in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** and can **assume the role and get credentials** doing something like:
|
||||
Örneğin, eğer bir **EKS service account** bir **IAM role'u impersonate edebilmeli** ise, **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** içinde bir token'a sahip olur ve aşağıdakine benzer şekilde **role'u assume edip credentials alabilir**:
|
||||
```bash
|
||||
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
||||
# The role name can be found in the metadata of the configuration of the pod
|
||||
```
|
||||
### Federasyon İstismarı
|
||||
### Federation Abuse
|
||||
|
||||
{{#ref}}
|
||||
../aws-basic-information/aws-federation-abuse.md
|
||||
@@ -85,9 +86,13 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/
|
||||
|
||||
### IAM Roles Anywhere Privesc
|
||||
|
||||
AWS IAM RolesAnywhere, AWS dışındaki iş yüklerinin X.509 sertifikaları kullanarak IAM rolleri üstlenmesine izin verir. Ancak trust policy'ler doğru şekilde sınırlandırılmadığında, bunlar privilege escalation için kötüye kullanılabilir.
|
||||
AWS IAM RolesAnywhere, AWS dışındaki iş yüklerinin X.509 sertifikaları kullanarak IAM role'lerini devralmasına izin verir. Ancak trust policies uygun şekilde sınırlandırılmadığında, privilege escalation için suistimal edilebilir.
|
||||
|
||||
Bu policy, hangi trust anchor veya sertifika özniteliklerinin izinli olduğuna dair kısıtlamalar içermiyor. Sonuç olarak, hesaptaki herhangi bir trust anchor'a bağlı herhangi bir sertifika bu rolü üstlenmek için kullanılabilir.
|
||||
Bu saldırıyı anlamak için trust anchor'ın ne olduğunu açıklamak gerekir. AWS IAM RolesAnywhere'da bir trust anchor, güvenin kökünü oluşturan varlıktır; hesabınıza kayıtlı bir Certificate Authority (CA)'nın açık sertifikasını içerir, böylece AWS sunulan X.509 sertifikalarını doğrulayabilir. Bu şekilde, client sertifikası o CA tarafından verilmişse ve trust anchor etkinse, AWS bunu geçerli olarak tanır.
|
||||
|
||||
Ayrıca, bir profile, X.509 sertifikasının hangi özniteliklerinin (ör. CN, OU veya SAN) session tags'e dönüştürüleceğini tanımlayan yapılandırmadır ve bu tag'ler daha sonra trust policy koşullarıyla karşılaştırılır.
|
||||
|
||||
Bu policy, hangi trust anchor veya sertifika özniteliklerinin izinli olduğuna dair kısıtlama içermez. Sonuç olarak, hesapta herhangi bir trust anchor'a bağlı herhangi bir sertifika bu role assume etmek için kullanılabilir.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -107,9 +112,9 @@ Bu policy, hangi trust anchor veya sertifika özniteliklerinin izinli olduğuna
|
||||
}
|
||||
|
||||
```
|
||||
To privesc, `aws_signing_helper` şu adresten gereklidir: https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
|
||||
privesc yapmak için, `aws_signing_helper` şu adresten gereklidir: https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
|
||||
|
||||
Daha sonra geçerli bir sertifika kullanarak saldırgan daha yüksek ayrıcalıklı role pivot yapabilir
|
||||
Ardından, geçerli bir sertifika kullanarak attacker daha yüksek ayrıcalıklı role pivot yapabilir.
|
||||
```bash
|
||||
aws_signing_helper credential-process \
|
||||
--certificate readonly.pem \
|
||||
@@ -118,11 +123,11 @@ aws_signing_helper credential-process \
|
||||
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
|
||||
--role-arn arn:aws:iam::123456789012:role/Admin
|
||||
```
|
||||
Güven kökü, istemci sertifikası `readonly.pem`'in yetkili CA'sından geldiğini doğrular; güven kökü oluşturulduğunda CA’nın açık sertifikası dahil edilmiştir (ve şu anda `readonly.pem`'i doğrulamak için kullanılır). `readonly.pem` içinde, imzanın karşılık gelen özel anahtarı `readonly.key` ile yapılmış olduğunu doğrulamak için AWS tarafından kullanılan açık anahtar bulunur.
|
||||
Güven kökü, istemcinin `readonly.pem` sertifikasının yetkili CA'sından geldiğini doğrular; bu `readonly.pem` sertifikasının içinde ise imzanın karşılık gelen özel anahtar `readonly.key` ile yapıldığını doğrulamak için AWS'in kullandığı açık anahtar bulunur.
|
||||
|
||||
Sertifika ayrıca kimliği kanıtlar ve CN veya OU gibi öznitelikler sağlar; `default` profile bu öznitelikler etiketlere dönüştürülür, bunlar rolün güven politikasının erişimi yetkilendirip yetkilendirmeyeceğine karar vermek için kullanabileceği etiketlerdir. Eğer güven politikasında koşul yoksa bu etiketler göz ardı edilir ve geçerli bir sertifikaya sahip herkes içeriye izin verilir.
|
||||
Sertifika ayrıca CN veya OU gibi `default` profilinin etiketlere dönüştürdüğü öznitelikler sağlar; rolün güven politikası bu etiketleri erişimi yetkilendirip yetkilendirmeyeceğine karar vermek için kullanabilir. Eğer güven politikasında koşul yoksa, bu etiketlerin bir faydası olmaz ve geçerli bir sertifikaya sahip herkese erişim verilir.
|
||||
|
||||
Bu saldırının mümkün olması için hem güven kökünün hem de `default` profilin aktif olması gerekir.
|
||||
Bu saldırının mümkün olabilmesi için hem güven kökünün hem de `default` profilinin aktif olması gerekir.
|
||||
|
||||
### Referanslar
|
||||
|
||||
|
||||
Reference in New Issue
Block a user