mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-10 23:00:49 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
@@ -6,9 +6,9 @@
|
||||
|
||||
### `sts:AssumeRole`
|
||||
|
||||
Kila jukumu linaumbwa na **sera ya kuamini jukumu**, sera hii inaonyesha **nani anaweza kuchukua jukumu lililoundwa**. Ikiwa jukumu kutoka kwa **akaunti ile ile** linasema kwamba akaunti inaweza kulichukua, inamaanisha kwamba akaunti hiyo itakuwa na uwezo wa kufikia jukumu hilo (na kwa uwezekano **privesc**).
|
||||
Kila role inaundwa na **role trust policy**, sera hii inaonyesha **nani anaweza kuchukua role iliyoundwa**. Ikiwa role kutoka kwa **akaunti ile ile** inasema kwamba akaunti inaweza kuichukua, inamaanisha kuwa akaunti hiyo itakuwa na uwezo wa kufikia role (na kwa uwezekano **privesc**).
|
||||
|
||||
Kwa mfano, sera ifuatayo ya kuamini jukumu inaonyesha kwamba mtu yeyote anaweza kulichukua, hivyo basi **mtumiaji yeyote ataweza privesc** kwa ruhusa zinazohusiana na jukumu hilo.
|
||||
Kwa mfano, role trust policy ifuatayo inaonyesha kwamba yeyote anaweza kuichukua, kwa hiyo **mtumiaji yeyote atakuwa na uwezo wa privesc** kwa ruhusa zinazohusishwa na role hiyo.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -23,41 +23,22 @@ Kwa mfano, sera ifuatayo ya kuamini jukumu inaonyesha kwamba mtu yeyote anaweza
|
||||
]
|
||||
}
|
||||
```
|
||||
Unaweza kujifanya kuwa jukumu linalotembea:
|
||||
Unaweza ku-impersonate role kwa kuendesha:
|
||||
```bash
|
||||
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea:** Privesc kwa jukumu.
|
||||
**Athari Inayoweza Kutokea:** Privesc kwa role.
|
||||
|
||||
> [!CAUTION]
|
||||
> Kumbuka kwamba katika kesi hii ruhusa `sts:AssumeRole` inahitaji kuwa **imeonyeshwa katika jukumu la kutumia vibaya** na si katika sera inayomilikiwa na mshambuliaji.\
|
||||
> Kwa ubaguzi mmoja, ili **kuchukua jukumu kutoka akaunti tofauti** akaunti ya mshambuliaji **pia inahitaji** kuwa na **`sts:AssumeRole`** juu ya jukumu.
|
||||
> Kumbuka kwamba katika kesi hii ruhusa `sts:AssumeRole` inahitaji kuonyeshwa katika role itakayodukuliwa na si katika sera inayomilikiwa na mshambuliaji.\
|
||||
> Isipokuwa kwa tukio moja, ili **kuchukua role kutoka kwa akaunti tofauti** akaunti ya mshambuliaji **pia inahitaji** kuwa na **`sts:AssumeRole`** kwa role hiyo.
|
||||
|
||||
### **`sts:GetFederationToken`**
|
||||
|
||||
Kwa ruhusa hii inawezekana kuzalisha akidi za kujifanya kuwa mtumiaji yeyote:
|
||||
```bash
|
||||
aws sts get-federation-token --name <username>
|
||||
```
|
||||
Hii ndiyo njia ambayo ruhusa hii inaweza kutolewa kwa usalama bila kutoa ufikiaji wa kujifanya kama watumiaji wengine:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Sid": "VisualEditor0",
|
||||
"Effect": "Allow",
|
||||
"Action": "sts:GetFederationToken",
|
||||
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
### `sts:AssumeRoleWithSAML`
|
||||
|
||||
Sera ya kuaminiana na jukumu hili inatoa **watumiaji walioidhinishwa kupitia SAML ufikiaji wa kujifanya kuwa jukumu hilo.**
|
||||
Sera ya uaminifu kwa role hii inawapa **watumiaji waliothibitishwa kupitia SAML uwezo wa kujifanya role.**
|
||||
|
||||
Mfano wa sera ya kuaminiana na ruhusa hii ni:
|
||||
Mfano wa sera ya uaminifu yenye ruhusa hii ni:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -78,21 +59,21 @@ Mfano wa sera ya kuaminiana na ruhusa hii ni:
|
||||
]
|
||||
}
|
||||
```
|
||||
Ili kuunda akreditif za kujifanya kuwa na jukumu kwa ujumla unaweza kutumia kitu kama:
|
||||
Kwa ujumla, ili kuzalisha credentials za ku-impersonate role unaweza kutumia kitu kama:
|
||||
```bash
|
||||
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
|
||||
```
|
||||
Lakini **watoa huduma** wanaweza kuwa na **zana zao** za kufanya hii iwe rahisi, kama [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
|
||||
Lakini **watoa huduma** wanaweza kuwa na **zana zao wenyewe** za kufanya hii iwe rahisi, kama [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
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea:** Privesc kwa jukumu.
|
||||
**Athari Inayoweza Kutokea:** Privesc kwa role.
|
||||
|
||||
### `sts:AssumeRoleWithWebIdentity`
|
||||
|
||||
Ruhusa hii inatoa ruhusa ya kupata seti ya akreditif za usalama za muda kwa **watumiaji ambao wamethibitishwa katika programu za simu, wavuti, EKS...** na mtoa huduma wa utambulisho wa wavuti. [Jifunze zaidi hapa.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
Ruhusa hii inatoa uwezo wa kupata seti ya nyaraka za usalama za muda kwa **watumiaji ambao wameidhinishwa kwenye mobile, web application, EKS...** na kupitia web identity provider. [Soma zaidi hapa.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
|
||||
Kwa mfano, ikiwa **akaunti ya huduma ya EKS** inapaswa kuwa na uwezo wa **kujifanya kama jukumu la IAM**, itakuwa na token katika **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** na inaweza **kuchukua jukumu na kupata akreditif** ikifanya kitu kama:
|
||||
Kwa mfano, ikiwa **EKS service account** inapaswa kuweza **impersonate an IAM role**, itakuwa na token katika **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** na inaweza **assume the role and get credentials** kwa kufanya kitu kama:
|
||||
```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
|
||||
@@ -105,9 +86,13 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/
|
||||
|
||||
### IAM Roles Anywhere Privesc
|
||||
|
||||
AWS IAM RolesAnywhere inaruhusu kazi za nje ya AWS kuchukua majukumu ya IAM kwa kutumia vyeti vya X.509. Lakini wakati sera za kuamini hazijapangwa vizuri, zinaweza kutumika vibaya kwa ajili ya kupandisha hadhi.
|
||||
AWS IAM RolesAnywhere inaruhusu workloads nje ya AWS kuchukua IAM roles kwa kutumia vyeti vya X.509. Lakini pale trust policies zisizofafanuliwa ipasavyo, zinaweza kutumika vibaya kwa privilege escalation.
|
||||
|
||||
Sera hii haina vizuizi juu ya ni vipi kiunganishi cha kuamini au sifa za cheti zinazoruhusiwa. Kama matokeo, cheti chochote kilichounganishwa na kiunganishi chochote cha kuamini katika akaunti kinaweza kutumika kuchukua jukumu hili.
|
||||
Ili kuelewa shambulio hili, ni muhimu kufafanua ni nini trust anchor. Trust anchor katika AWS IAM RolesAnywhere ni entiti ya mizizi ya imani; ina public certificate ya Certificate Authority (CA) iliyosajiliwa kwenye akaunti ili AWS iweze kuthibitisha vyeti vya X.509 vinavyowasilishwa. Kwa hivyo, ikiwa cheti cha mteja kimetolewa na CA hiyo na trust anchor iko hai, AWS kinakitambua kama halali.
|
||||
|
||||
Zaidi ya hayo, profile ni usanidi unaoelezea ni sifa gani za cheti cha X.509 (kama CN, OU, au SAN) zitakazogeuzwa kuwa session tags, na vitambulisho hivi vitalinganishwa baadaye dhidi ya masharti ya trust policy.
|
||||
|
||||
Sera hii haijaiweka vizingiti juu ya ni trust anchor au sifa za cheti zipi zinazoruhusiwa. Kwa matokeo, cheti chochote kilichounganishwa na trust anchor yoyote katika akaunti kinaweza kutumika kuchukua role hii.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -127,9 +112,9 @@ Sera hii haina vizuizi juu ya ni vipi kiunganishi cha kuamini au sifa za cheti z
|
||||
}
|
||||
|
||||
```
|
||||
Ili kupata haki za juu, `aws_signing_helper` inahitajika kutoka https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
|
||||
Kwa privesc, `aws_signing_helper` inahitajika kutoka https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
|
||||
|
||||
Kisha kwa kutumia cheti halali, mshambuliaji anaweza kuhamasisha katika jukumu lenye haki za juu.
|
||||
Kisha, kwa kutumia cheti halali mshambuliaji anaweza pivot katika role yenye vibali vya juu.
|
||||
```bash
|
||||
aws_signing_helper credential-process \
|
||||
--certificate readonly.pem \
|
||||
@@ -138,6 +123,12 @@ aws_signing_helper credential-process \
|
||||
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
|
||||
--role-arn arn:aws:iam::123456789012:role/Admin
|
||||
```
|
||||
The trust anchor inathibitisha kwamba cheti cha mteja `readonly.pem` kinatoka kwa CA yake iliyoruhusiwa, na ndani ya cheti hicho `readonly.pem` kuna ufunguo wa umma ambao AWS hutumia kuthibitisha kwamba saini ilitengenezwa kwa kutumia ufunguo wake binafsi unaolingana `readonly.key`.
|
||||
|
||||
Cheti pia kinatoa sifa (kama CN au OU) ambazo profile ya `default` hubadilisha kuwa tags, ambazo trust policy ya role inaweza kutumia kuamua ikiwa itaidhinisha ufikiaji. Ikiwa hakuna masharti katika trust policy, tags hizo hazina matumizi, na ufikiaji unatolewa kwa yeyote mwenye cheti halali.
|
||||
|
||||
Ili shambulio hili liwezekane, trust anchor na profile ya `default` zote mbili lazima ziwe hai.
|
||||
|
||||
### Marejeleo
|
||||
|
||||
- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation)
|
||||
|
||||
Reference in New Issue
Block a user