Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin

This commit is contained in:
Translator
2025-01-05 15:23:31 +00:00
parent 6f4e8873b7
commit 402780f095
3 changed files with 133 additions and 73 deletions

View File

@@ -10,9 +10,58 @@ Kwa maelezo zaidi kuhusu dynamodb angalia:
../aws-services/aws-dynamodb-enum.md
{{#endref}}
### `dynamodb:PutResourcePolicy`, na kwa hiari `dynamodb:GetResourcePolicy`
Tangu Machi 2024, AWS inatoa *sera za msingi wa rasilimali* kwa ajili ya DynamoDB ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)).
Hivyo, ikiwa una `dynamodb:PutResourcePolicy` kwa meza, unaweza kujipa wewe mwenyewe au mtu mwingine yeyote ufikiaji kamili kwa meza hiyo.
Kutoa `dynamodb:PutResourcePolicy` kwa mtu yeyote wa bahati nasibu mara nyingi hutokea kwa bahati mbaya, ikiwa wasimamizi wanafikiri kwamba kutoa `dynamodb:Put*` kutaruhusu tu mtu huyo kuweka vitu kwenye hifadhidata - au ikiwa walitoa ruhusa hiyo kabla ya Machi 2024...
Kwa kawaida, unapaswa pia kuwa na `dynamodb:GetResourcePolicy`, ili usifute ruhusa nyingine muhimu, bali tu uweke ruhusa za ziada unazohitaji:
```bash
# get the current resource based policy (if it exists) and save it to a file
aws dynamodb get-resource-policy \
--resource-arn <table_arn> \
--query 'Policy' \
--output text > policy.json
```
Ikiwa huwezi kupata sera ya sasa, tumia hii ambayo inatoa ufikiaji kamili juu ya jedwali kwa mhusika wako:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FullAccessToDynamoDBTable",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<ACCOUNT_ID>:<USER_OR_ROLE>/<USERNAME_OR_ROLENAME>"
},
"Action": [
"dynamodb:*"
],
"Resource": [
"arn:aws:dynamodb:<REGION>:<AWS_ACCOUNT_ID>:table/<TABLENAME>"
]
}
]
}
```
Ikiwa unahitaji kuiboresha, hapa kuna orodha ya vitendo vyote vinavyowezekana vya DynamoDB: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). Na hapa kuna orodha ya vitendo vyote vinavyoweza kuruhusiwa kupitia sera ya msingi ya rasilimali *NA ni yapi kati ya haya yanaweza kutumika kati ya akaunti (fikiria kuhusu uhamasishaji wa data!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html)
Sasa, ikiwa hati ya sera `policy.json` iko tayari, weka sera ya rasilimali:
```bash
# put the new policy using the prepared policy file
# dynamodb does weirdly not allow a direct file upload
aws dynamodb put-resource-policy \
--resource-arn <table_arn> \
--policy "$(cat policy.json)"
```
Sasa, unapaswa kuwa na ruhusa ulizohitaji.
### Post Exploitation
Kuhusu ninavyojua, **hakuna njia ya moja kwa moja ya kupandisha mamlaka katika AWS kwa kuwa na ruhusa za AWS `dynamodb` tu**. Unaweza **kusoma taarifa nyeti** kutoka kwenye meza (ambazo zinaweza kuwa na akreditif za AWS) na **kuandika taarifa kwenye meza** (ambazo zinaweza kusababisha udhaifu mwingine, kama vile sindano za msimbo wa lambda...) lakini chaguzi hizi zote tayari zinachukuliwa katika **ukurasa wa DynamoDB Post Exploitation**:
Kuhusu ninavyojua, **hakuna njia nyingine ya moja kwa moja ya kupandisha ruhusa katika AWS kwa kuwa na ruhusa za AWS `dynamodb`**. Unaweza **kusoma taarifa nyeti** kutoka kwa meza (ambazo zinaweza kuwa na akauti za AWS) na **kuandika taarifa kwenye meza** (ambazo zinaweza kusababisha udhaifu mwingine, kama vile sindano za msimbo wa lambda...) lakini chaguzi hizi zote tayari zinachukuliwa katika **ukurasa wa DynamoDB Post Exploitation**:
{{#ref}}
../aws-post-exploitation/aws-dynamodb-post-exploitation.md

View File

@@ -8,7 +8,7 @@
Mshambuliaji mwenye ruhusa hizo juu ya ndoo za kuvutia anaweza kuwa na uwezo wa kuiba rasilimali na kupandisha mamlaka.
Kwa mfano, mshambuliaji mwenye **ruhusa hizo juu ya ndoo ya cloudformation** inayoitwa "cf-templates-nohnwfax6a6i-us-east-1" ataweza kuiba uanzishaji. Ufikiaji unaweza kutolewa kwa sera ifuatayo:
Kwa mfano, mshambuliaji mwenye **ruhusa hizo juu ya ndoo ya cloudformation** inayoitwa "cf-templates-nohnwfax6a6i-us-east-1" ataweza kuiba utekelezaji. Ufikiaji unaweza kutolewa kwa sera ifuatayo:
```json
{
"Version": "2012-10-17",
@@ -34,7 +34,7 @@ Kwa mfano, mshambuliaji mwenye **ruhusa hizo juu ya ndoo ya cloudformation** ina
]
}
```
Na utekaji ni waweza kwa sababu kuna **dirisha dogo la muda kutoka wakati template inapoupoaded** kwenye bucket hadi wakati **template inatekelezwa**. Mshambuliaji anaweza tu kuunda **lambda function** katika akaunti yake ambayo itakuwa **inachochea wakati arifa ya bucket inatumwa**, na **hijacks** **maudhui** ya **bucket** hiyo.
Na hijack inapatikana kwa sababu kuna **dirisha dogo la muda kutoka wakati template inapoupoload** kwenye bucket hadi wakati **template inatekelezwa**. Mshambuliaji anaweza tu kuunda **lambda function** katika akaunti yake ambayo itakuwa **inachochewa wakati arifa ya bucket inatumwa**, na **hijacks** **maudhui** ya **bucket** hiyo.
![](<../../../images/image (174).png>)
@@ -44,15 +44,28 @@ Kwa maelezo zaidi angalia utafiti wa asili: [https://rhinosecuritylabs.com/aws/c
### `s3:PutObject`, `s3:GetObject` <a href="#s3putobject-s3getobject" id="s3putobject-s3getobject"></a>
Hizi ni ruhusa za **kupata na kupakia vitu kwenye S3**. Huduma kadhaa ndani ya AWS (na nje yake) hutumia hifadhi ya S3 kuhifadhi **faili za usanidi**.\
Mshambuliaji mwenye **ufikiaji wa kusoma** kwao anaweza kupata **taarifa nyeti** juu yao.\
Mshambuliaji mwenye **ufikiaji wa kuandika** kwao anaweza **kubadilisha data ili kutumia huduma fulani na kujaribu kupandisha mamlaka**.\
Mshambuliaji mwenye **ufikiaji wa kusoma** anaweza kupata **taarifa nyeti** kwenye hizo.\
Mshambuliaji mwenye **ufikiaji wa kuandika** anaweza **kubadilisha data ili kutumia huduma fulani na kujaribu kupandisha mamlaka**.\
Hizi ni baadhi ya mifano:
- Ikiwa mfano wa EC2 unahifadhi **data ya mtumiaji kwenye bucket ya S3**, mshambuliaji anaweza kuibadilisha ili **kutekeleza msimbo wowote ndani ya mfano wa EC2**.
- Ikiwa mfano wa EC2 unahifadhi **data za mtumiaji kwenye bucket ya S3**, mshambuliaji anaweza kuibadilisha ili **kutekeleza msimbo wowote ndani ya mfano wa EC2**.
### `s3:PutObject`, `s3:GetObject` (hiari) juu ya faili ya hali ya terraform
Ni kawaida sana kwamba faili za [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) za hali zinahifadhiwa kwenye hifadhi ya blob ya watoa huduma wa wingu, e.g. AWS S3. Kiambishi cha faili kwa faili ya hali ni `.tfstate`, na majina ya bucket mara nyingi pia yanaonyesha kuwa yana faili za hali za terraform. Kawaida, kila akaunti ya AWS ina bucket moja kama hiyo kuhifadhi faili za hali zinazoonyesha hali ya akaunti.\
Pia kawaida, katika akaunti za ulimwengu halisi karibu kila wakati watengenezaji wote wana `s3:*` na wakati mwingine hata watumiaji wa biashara wana `s3:Put*`.
Hivyo, ikiwa una ruhusa zilizoorodheshwa juu ya faili hizi, kuna vector ya shambulio inayokuruhusu kupata RCE katika pipeline kwa mamlaka ya `terraform` - wakati mwingi `AdministratorAccess`, ikifanya wewe kuwa admin wa akaunti ya wingu. Pia, unaweza kutumia vector hiyo kufanya shambulio la kukataa huduma kwa kufanya `terraform` ifute rasilimali halali.
Fuata maelezo katika sehemu ya *Kunyanyasa Faili za Hali za Terraform* ya ukurasa wa *Usalama wa Terraform* kwa msimbo wa matumizi moja kwa moja:
{{#ref}}
terraform-security.md#abusing-terraform-state-files
{{#endref}}
### `s3:PutBucketPolicy`
Mshambuliaji, ambaye anahitaji kuwa **kutoka kwenye akaunti hiyo hiyo**, ikiwa sivyo kosa `Njia iliyoainishwa hairuhusiwi itasababisha`, kwa ruhusa hii ataweza kujipa ruhusa zaidi juu ya bucket(s) akimruhusu kusoma, kuandika, kubadilisha, kufuta na kufichua buckets.
Mshambuliaji, ambaye anahitaji kuwa **kutoka akaunti hiyo hiyo**, ikiwa sivyo kosa `Njia iliyoainishwa hairuhusiwi itachochewa`, kwa ruhusa hii atakuwa na uwezo wa kujipa ruhusa zaidi juu ya bucket(s) akimruhusu kusoma, kuandika, kubadilisha, kufuta na kufichua buckets.
```bash
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
@@ -138,7 +151,7 @@ aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://a
```
### `s3:GetObjectAcl`, `s3:PutObjectAcl`
Mshambuliaji anaweza kutumia ruhusa hizi kuongeza ufikiaji wake juu ya vitu maalum ndani ya makundi.
Mshambuliaji anaweza kutumia ruhusa hizi kumpatia ufikiaji zaidi juu ya vitu maalum ndani ya makundi.
```bash
# Update bucket object ACL
aws s3api get-object-acl --bucket <bucekt-name> --key flag
@@ -165,7 +178,7 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
```
### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl`
Mshambuliaji mwenye haki hizi anatarajiwa kuwa na uwezo wa kuweka Acl kwa toleo maalum la kitu.
Mshambuliaji mwenye ruhusa hizi anatarajiwa kuwa na uwezo wa kuweka Acl kwa toleo maalum la kitu.
```bash
aws s3api get-object-acl --bucket <bucekt-name> --key flag
aws s3api put-object-acl --bucket <bucket-name> --key flag --version-id <value> --access-control-policy file://objacl.json