Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-06 17:12:00 +00:00
parent 4514765b06
commit 35b1c7a500
5 changed files with 86 additions and 69 deletions

View File

@@ -34,7 +34,7 @@ Kwa mfano, mshambuliaji mwenye **ruhusa hizo juu ya ndoo ya cloudformation** ina
]
}
```
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 it **itachochewa wakati arifa ya bucket itatumwa**, 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,15 @@ 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** anaweza kupata **taarifa nyeti** kwenye hizo.\
Mshambuliaji mwenye **ufikiaji wa kuandika** anaweza **kubadilisha data ili kutumia huduma fulani na kujaribu kupandisha mamlaka**.\
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**.\
Hizi ni baadhi ya mifano:
- 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.\
Ni kawaida sana kwamba [faili za hali za terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) 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.
@@ -60,7 +60,7 @@ Hivyo, ikiwa una ruhusa zilizoorodheshwa juu ya faili hizi, kuna vector ya shamb
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
pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
{{#endref}}
### `s3:PutBucketPolicy`
@@ -151,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 kuwapa ufikiaji zaidi juu ya vitu maalum ndani ya mifuko.
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
@@ -178,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

View File

@@ -7,7 +7,7 @@
Kwa maelezo zaidi kuhusu Azure App services angalia:
{{#ref}}
../az-services/az-app-service.md
../az-services/az-app-services.md
{{#endref}}
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
@@ -33,17 +33,17 @@ az webapp create-remote-connection --name <name> --resource-group <res-group>
ssh root@127.0.0.1 -p 39895
```
- **Debug the application**:
1. Sakinisha nyongeza ya Azure katika VScode.
2. Ingia kwenye nyongeza kwa kutumia akaunti ya Azure.
3. Orodhesha huduma zote za App ndani ya usajili.
4. Chagua huduma ya App unayotaka kudhibiti, bonyeza kulia na uchague "Start Debugging".
5. Ikiwa programu haina udhibiti ulioanzishwa, nyongeza itajaribu kuanzisha lakini akaunti yako inahitaji ruhusa `Microsoft.Web/sites/config/write` kufanya hivyo.
1. Install the Azure extension in VScode.
2. Login in the extension with the Azure account.
3. List all the App services inside the subscription.
4. Select the App service you want to debug, right click and select "Start Debugging".
5. If the app doesn't have debugging enabled, the extension will try to enable it but your account needs the permission `Microsoft.Web/sites/config/write` to do so.
### Obtaining SCM Credentials & Enabling Basic Authentication
Ili kupata akreditivu za SCM, unaweza kutumia **amri na ruhusa** zifuatazo:
Ili kupata akreditivu za SCM, unaweza kutumia **commands and permissions** zifuatazo:
- Ruhusa **`Microsoft.Web/sites/publishxml/action`** inaruhusu kuita:
- The permission **`Microsoft.Web/sites/publishxml/action`** allows to call:
```bash
az webapp deployment list-publishing-profiles --name <app-name> --resource-group <res-group>
# Example output
@@ -116,20 +116,20 @@ az webapp deployment list-publishing-credentials --name <app-name> --resource-gr
"type": "Microsoft.Web/sites/publishingcredentials"
}
```
Kumbuka jinsi **akihifadhi ni sawa** na amri ya awali.
Kumbuka jinsi **akihesabu ni sawa** na amri ya awali.
- Chaguo lingine lingekuwa **kweka akihifadhi zako** na kuzitumia:
- Chaguo lingine lingekuwa **kweka akihesabu zako** na kuzitumia:
```bash
az webapp deployment user set \
--user-name hacktricks \
--password 'W34kP@ssw0rd123!'
```
Kisha, unaweza kutumia hizi credentials **kuingia kwenye jukwaa la SCM na FTP**. Hii pia ni njia nzuri ya kudumisha uvumilivu.
Kisha, unaweza kutumia hizi credentials ku **access the SCM and FTP platforms**. Hii pia ni njia nzuri ya kudumisha uvumilivu.
Kumbuka kwamba ili kuingia kwenye jukwaa la SCM kutoka **mtandao unahitaji kufikia `<SCM-URL>/BasicAuth`**.
Kumbuka kwamba ili kufikia jukwaa la SCM kutoka kwa **mtandao unahitaji kufikia `<SCM-URL>/BasicAuth`**.
> [!WARNING]
> Kumbuka kwamba kila mtumiaji anaweza kuunda credentials zake mwenyewe kwa kuita amri ya awali, lakini ikiwa mtumiaji hana ruhusa za kutosha kuingia kwenye SCM au FTP, credentials hazitafanya kazi.
> Kumbuka kwamba kila mtumiaji anaweza kuunda credentials zake mwenyewe kwa kuita amri ya awali, lakini ikiwa mtumiaji hana ruhusa za kutosha kufikia SCM au FTP, credentials hazitafanya kazi.
- Ikiwa unaona kwamba hizo credentials zime **REDACTED**, ni kwa sababu unahitaji **kuwezesha chaguo la uthibitishaji wa msingi wa SCM** na kwa hiyo unahitaji ruhusa ya pili (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
```bash
@@ -153,9 +153,9 @@ az rest --method PUT \
```
### Publish code using SCM credentials
Kuwa na **SCM credentials** halali inaruhusu **kuchapisha msimbo** kwenye huduma ya App. Hii inaweza kufanywa kwa kutumia amri ifuatayo.
Kuwa na SCM credentials halali, inawezekana **kuchapisha msimbo** kwenye huduma ya App. Hii inaweza kufanywa kwa kutumia amri ifuatayo.
Kwa mfano huu wa python unaweza kupakua repo kutoka https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, fanya **mabadiliko** yoyote unayotaka na kisha **zip kwa kukimbia: `zip -r app.zip .`**.
Kwa mfano huu wa python, unaweza kupakua repo kutoka https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, fanya **mabadiliko** yoyote unayotaka na kisha **zip it running: `zip -r app.zip .`**.
Kisha unaweza **kuchapisha msimbo** katika programu ya wavuti kwa kutumia amri ifuatayo:
```bash
@@ -186,7 +186,7 @@ curl "<SCM-URL>/wwwroot/App_Data/jobs/" \
curl "https://nodewebapp-agamcvhgg3gkd3hs.scm.canadacentral-01.azurewebsites.net/wwwroot/App_Data/jobs/continuous/job_name/rev.js" \
--user '<username>:<password>'
```
- Unda **Webjob isiyokatizwa**:
- Unda **continuous Webjob**:
```bash
# Using Azure permissions
az rest \
@@ -205,7 +205,7 @@ curl -X PUT \
```
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Hizi ruhusa zinaruhusu **kuteua utambulisho uliopewa usimamizi** kwa huduma ya App, hivyo ikiwa huduma ya App ilishambuliwa hapo awali hii itamruhusu mshambuliaji kuteua utambulisho mpya uliopewa usimamizi kwa huduma ya App na **kuinua mamlaka** kwao.
Hizi ruhusa zinaruhusu **kuteua utambulisho ulioendeshwa** kwa huduma ya App, hivyo ikiwa huduma ya App ilikuwa imevunjwa hapo awali hii itaruhusu mshambuliaji kuteua utambulisho mpya ulioendeshwa kwa huduma ya App na **kuinua mamlaka** kwao.
```bash
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
```
@@ -225,7 +225,7 @@ az rest --method GET \
```
Amri hii inarudisha tokeni za Github, Bitbucket, Dropbox na OneDrive.
Hapa kuna mifano ya amri za kuangalia tokeni:
Hapa kuna baadhi ya mifano ya amri za kuangalia tokeni:
```bash
# GitHub List Repositories
curl -H "Authorization: token <token>" \
@@ -266,11 +266,11 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
> Kumbuka kwamba kuwa na ruhusa `Microsoft.Web/sites/config/list/action` na akreditif za SCM daima inawezekana kupeleka kwenye webapp (hata kama ilipangwa kutumia mtoa huduma wa tatu) kama ilivyotajwa katika sehemu ya awali.
> [!WARNING]
> Kumbuka kwamba kuwa na ruhusa zilizo hapa chini pia ni **inawezekana kutekeleza kontena chochote** hata kama webapp ilipangwa tofauti.
> Kumbuka kwamba kuwa na ruhusa zilizo hapa chini pia ni **uwezekano wa kutekeleza kontena chochote** hata kama webapp ilipangwa tofauti.
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
Hii ni seti ya ruhusa inayoruhusu **kubadilisha kontena kinachotumiwa** na webapp. Mshambuliaji anaweza kuitumia kuifanya webapp kutekeleza kontena hatari.
Hii ni seti ya ruhusa inayoruhusu **kubadilisha kontena kinachotumiwa** na webapp. Mshambuliaji anaweza kuitumia vibaya kufanya webapp itekeleze kontena hatari.
```bash
az webapp config container set \
--name <app-name> \

View File

@@ -4,31 +4,31 @@
## Basic Information
**Azure Function Apps** ni **huduma ya kompyuta isiyo na seva** inayokuruhusu kuendesha vipande vidogo vya msimbo, vinavyojulikana kama **functions**, bila kusimamia miundombinu ya chini. Zimeundwa kutekeleza msimbo kama jibu kwa vichocheo mbalimbali, kama vile **maombi ya HTTP, muda, au matukio kutoka kwa huduma nyingine za Azure** kama Blob Storage au Event Hubs. Function Apps zinasaidia lugha nyingi za programu, ikiwa ni pamoja na C#, Python, JavaScript, na Java, na kuifanya kuwa rahisi kwa ajili ya kujenga **maombi yanayoendeshwa na matukio**, kuendesha michakato, au kuunganisha huduma. Ni za gharama nafuu, kwani kwa kawaida unalipa tu kwa muda wa kompyuta ulitumika wakati msimbo wako unakimbia.
**Azure Function Apps** ni **huduma ya kompyuta isiyo na seva** inayokuwezesha kuendesha vipande vidogo vya msimbo, vinavyojulikana kama **functions**, bila kusimamia miundombinu ya chini. Zimeundwa kutekeleza msimbo kama jibu kwa vichocheo mbalimbali, kama vile **maombi ya HTTP, muda, au matukio kutoka kwa huduma nyingine za Azure** kama Blob Storage au Event Hubs. Function Apps zinasaidia lugha nyingi za programu, ikiwa ni pamoja na C#, Python, JavaScript, na Java, na kuifanya kuwa rahisi kwa ajili ya kujenga **maombi yanayoendeshwa na matukio**, kuendesha michakato, au kuunganisha huduma. Ni za gharama nafuu, kwani kwa kawaida unalipa tu kwa muda wa kompyuta ulitumika wakati msimbo wako unakimbia.
> [!NOTE]
> Kumbuka kwamba **Functions ni sehemu ya App Services**, kwa hivyo, nyingi ya vipengele vilivyojadiliwa hapa vitatumika pia na maombi yaliyoundwa kama Azure Apps (`webapp` katika cli).
### Different Plans
- **Flex Consumption Plan**: Inatoa **kupanua kwa nguvu, inayotokana na matukio** na bei ya kulipa kadri unavyotumia, ikiongeza au kuondoa mifano ya kazi kulingana na mahitaji. Inasaidia **mtandao wa virtual** na **mifano iliyotayarishwa awali** ili kupunguza kuanza baridi, na kuifanya iwe bora kwa **mizigo inayobadilika** ambayo haitahitaji msaada wa kontena.
- **Traditional Consumption Plan**: Chaguo la seva isiyo na msingi, ambapo unalipa tu kwa rasilimali za kompyuta wakati kazi zinakimbia. Inapanuka kiotomatiki kulingana na matukio yanayoingia na inajumuisha **mipango ya kuanza baridi**, lakini haisaidii kutekeleza kontena. Inafaa kwa **mizigo ya muda mfupi** inayohitaji kupanuka kiotomatiki.
- **Premium Plan**: Imeundwa kwa ajili ya **utendaji thabiti**, ikiwa na **wafanyakazi waliotayarishwa awali** ili kuondoa kuanza baridi. Inatoa **nyakati za utekelezaji zilizopanuliwa, mtandao wa virtual**, na inasaidia **picha za Linux za kawaida**, na kuifanya kuwa bora kwa **maombi muhimu** yanayohitaji utendaji wa juu na vipengele vya juu.
- **Dedicated Plan**: Inakimbia kwenye mashine halisi zilizotengwa na **malipo yanayoweza kutabiriwa** na inasaidia kupanuka kwa mikono au kiotomatiki. Inaruhusu kuendesha maombi mengi kwenye mpango mmoja, inatoa **kujitegemea kwa kompyuta**, na inahakikisha **ufikiaji salama wa mtandao** kupitia Mazingira ya Huduma ya Programu, na kuifanya iwe bora kwa **maombi yanayoendelea kwa muda mrefu** yanayohitaji ugawaji wa rasilimali thabiti.
- **Container Apps**: Inaruhusu kutekeleza **maombi ya kazi yaliyowekwa kwenye kontena** katika mazingira yanayosimamiwa, pamoja na huduma ndogo na APIs. Inasaidia maktaba za kawaida, uhamishaji wa maombi ya zamani, na **usindikaji wa GPU**, ikiondoa usimamizi wa klasta za Kubernetes. Inafaa kwa **maombi yanayoendeshwa na matukio, yanayoweza kupanuka yaliyowekwa kwenye kontena**.
- **Flex Consumption Plan**: Inatoa **kupanua kwa njia ya matukio, inayotegemea mahitaji** na bei ya kulipa kadri unavyotumia, ikiongeza au kuondoa mifano ya kazi kulingana na mahitaji. Inasaidia **mtandao wa virtual** na **mifano iliyotayarishwa awali** ili kupunguza kuanza baridi, na kuifanya kuwa bora kwa **mizigo inayobadilika** ambayo haitahitaji msaada wa kontena.
- **Traditional Consumption Plan**: Chaguo la seva isiyo na msingi, ambapo unalipa tu kwa rasilimali za kompyuta wakati kazi zinakimbia. Inapanuka kiotomatiki kulingana na matukio yanayoingia na inajumuisha **mipango ya kuanza baridi**, lakini haisaidii uanzishaji wa kontena. Inafaa kwa **mizigo ya muda mfupi** inayohitaji kupanuka kiotomatiki.
- **Premium Plan**: Imeundwa kwa ajili ya **utendaji thabiti**, ikiwa na **wafanyakazi walioandaliwa awali** ili kuondoa kuanza baridi. Inatoa **nyakati za utekelezaji zilizopanuliwa, mtandao wa virtual**, na inasaidia **picha za Linux za kawaida**, na kuifanya kuwa bora kwa **maombi muhimu** yanayohitaji utendaji wa juu na vipengele vya juu.
- **Dedicated Plan**: Inakimbia kwenye mashine halisi zilizotengwa na **malipo yanayoweza kutabiriwa** na inasaidia kupanuka kwa mikono au kiotomatiki. Inaruhusu kuendesha maombi mengi kwenye mpango mmoja, inatoa **kujitegemea kwa kompyuta**, na inahakikisha **ufikiaji salama wa mtandao** kupitia Mazingira ya Huduma ya Programu, na kuifanya kuwa bora kwa **maombi yanayoendelea kwa muda mrefu** yanayohitaji ugawaji wa rasilimali thabiti.
- **Container Apps**: Inaruhusu kupeleka **maombi ya kazi yaliyowekwa kwenye kontena** katika mazingira yanayosimamiwa, pamoja na huduma ndogo na APIs. Inasaidia maktaba za kawaida, uhamishaji wa maombi ya zamani, na **usindikaji wa GPU**, ikiondoa usimamizi wa klasta za Kubernetes. Inafaa kwa **maombi yanayoendeshwa na matukio, yanayoweza kupanuka yaliyowekwa kwenye kontena**.
### **Storage Buckets**
Unapounda Function App mpya isiyo na kontena (lakini ukitoa msimbo wa kuendesha), **msimbo na data nyingine zinazohusiana na Function zitahifadhiwa katika akaunti ya Hifadhi**. Kwa kawaida, console ya wavuti itaunda mpya kwa kila kazi kuhifadhi msimbo.
Unapounda Function App mpya isiyo na kontena (lakini ukitoa msimbo wa kuendesha), **msimbo na data nyingine zinazohusiana na Function zitawekwa kwenye akaunti ya Hifadhi**. Kwa kawaida, console ya wavuti itaunda mpya kwa kila kazi kuhifadhi msimbo.
Zaidi ya hayo, kubadilisha msimbo ndani ya bucket (katika mifumo tofauti ambayo inaweza kuhifadhiwa), **msimbo wa programu utabadilishwa kuwa mpya na kutekelezwa** wakati wa pili kazi inaitwa.
Zaidi ya hayo, kubadilisha msimbo ndani ya ndoo (katika mifumo tofauti ambayo inaweza kuhifadhiwa), **msimbo wa programu utabadilishwa kuwa mpya na kutekelezwa** wakati kazi inaitwa tena.
> [!CAUTION]
> Hii ni ya kuvutia sana kutoka kwa mtazamo wa washambuliaji kwani **ufikiaji wa kuandika juu ya bucket hii** utamruhusu mshambuliaji **kudhoofisha msimbo na kupandisha mamlaka** kwa vitambulisho vilivyo ndani ya Function App.
> Hii ni ya kuvutia sana kutoka kwa mtazamo wa washambuliaji kwani **ufikiaji wa kuandika kwenye ndoo hii** utamruhusu mshambuliaji **kushambulia msimbo na kupandisha mamlaka** kwa vitambulisho vilivyo ndani ya Function App.
>
> Zaidi kuhusu hili katika **sehemu ya kupandisha mamlaka**.
Pia inawezekana kupata **funguo za bosi na kazi** zilizohifadhiwa katika akaunti ya hifadhi katika kontena **`azure-webjobs-secrets`** ndani ya folda **`<app-name>`** katika faili za JSON ambazo unaweza kupata ndani.
Pia inawezekana kupata **funguo za master na functions** zilizohifadhiwa katika akaunti ya hifadhi katika kontena **`azure-webjobs-secrets`** ndani ya folda **`<app-name>`** katika faili za JSON ambazo unaweza kupata ndani.
Kumbuka kwamba Functions pia zinaruhusu kuhifadhi msimbo katika eneo la mbali kwa kuashiria tu URL yake.
@@ -40,11 +40,11 @@ Kwa kutumia kichocheo cha HTTP:
- Pia inawezekana **kutoa au kuzuia ufikiaji** kwa Function App kutoka **mtandao wa ndani (VPC)**.
> [!CAUTION]
> Hii ni ya kuvutia sana kutoka kwa mtazamo wa washambuliaji kwani inaweza kuwa inawezekana **kuhamasisha kwenye mitandao ya ndani** kutoka kwa Function dhaifu iliyo wazi kwa Intaneti.
> Hii ni ya kuvutia sana kutoka kwa mtazamo wa washambuliaji kwani inaweza kuwa inawezekana **kuhamasisha kwenye mitandao ya ndani** kutoka kwa Function iliyo hatarini iliyofichuliwa kwa Intaneti.
### **Function App Settings & Environment Variables**
Inawezekana kuunda mabadiliko ya mazingira ndani ya programu, ambayo yanaweza kuwa na taarifa nyeti. Zaidi ya hayo, kwa kawaida mabadiliko ya mazingira **`AzureWebJobsStorage`** na **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (miongoni mwa mengine) yanaundwa. Haya ni ya kuvutia sana kwa sababu yana **funguo za akaunti kudhibiti kwa ruhusa KAMILI akaunti ya hifadhi inayohifadhi data ya programu**. Mipangilio hii pia inahitajika kutekeleza msimbo kutoka kwa Akaunti ya Hifadhi.
Inawezekana kuunda mabadiliko ya mazingira ndani ya programu, ambayo yanaweza kuwa na taarifa nyeti. Zaidi ya hayo, kwa kawaida mabadiliko ya mazingira **`AzureWebJobsStorage`** na **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (miongoni mwa mengine) yanaundwa. Haya ni ya kuvutia sana kwa sababu yana **funguo za akaunti kudhibiti kwa ruhusa KAMILI akaunti ya hifadhi inayoshikilia data ya programu**. Mipangilio hii pia inahitajika kutekeleza msimbo kutoka kwa Akaunti ya Hifadhi.
Mabadiliko haya ya mazingira au vigezo vya usanidi pia vinadhibiti jinsi Function inavyotekeleza msimbo, kwa mfano ikiwa **`WEBSITE_RUN_FROM_PACKAGE`** ipo, itadhihirisha URL ambapo msimbo wa programu unapatikana.
@@ -52,41 +52,41 @@ Mabadiliko haya ya mazingira au vigezo vya usanidi pia vinadhibiti jinsi Functio
Ndani ya sandbox ya linux, msimbo wa chanzo unapatikana katika **`/home/site/wwwroot`** katika faili **`function_app.py`** (ikiwa python inatumika) mtumiaji anayekimbia msimbo ni **`app`** (bila ruhusa za sudo).
Katika kazi ya **Windows** inayotumia NodeJS, msimbo ulikuwa unapatikana katika **`C:\home\site\wwwroot\HttpTrigger1\index.js`**, jina la mtumiaji lilikuwa **`mawsFnPlaceholder8_f_v4_node_20_x86`** na ilikuwa sehemu ya **makundi**: `Mandatory Label\High Mandatory Level Label`, `Everyone`, `BUILTIN\Users`, `NT AUTHORITY\INTERACTIVE`, `CONSOLE LOGON`, `NT AUTHORITY\Authenticated Users`, `NT AUTHORITY\This Organization`, `BUILTIN\IIS_IUSRS`, `LOCAL`, `10-30-4-99\Dwas Site Users`.
Katika **Windows** function inayotumia NodeJS msimbo ulikuwa unapatikana katika **`C:\home\site\wwwroot\HttpTrigger1\index.js`**, jina la mtumiaji lilikuwa **`mawsFnPlaceholder8_f_v4_node_20_x86`** na ilikuwa sehemu ya **makundi**: `Mandatory Label\High Mandatory Level Label`, `Everyone`, `BUILTIN\Users`, `NT AUTHORITY\INTERACTIVE`, `CONSOLE LOGON`, `NT AUTHORITY\Authenticated Users`, `NT AUTHORITY\This Organization`, `BUILTIN\IIS_IUSRS`, `LOCAL`, `10-30-4-99\Dwas Site Users`.
### **Managed Identities & Metadata**
Kama [**VMs**](vms/), Functions zinaweza kuwa na **Managed Identities** za aina 2: Iliyotolewa na Mfumo na Iliyotolewa na Mtumiaji.
Kama [**VMs**](vms/index.html), Functions zinaweza kuwa na **Managed Identities** za aina 2: Iliyotolewa na Mfumo na Iliyotolewa na Mtumiaji.
**iliyotolewa na mfumo** itakuwa ni kitambulisho kinachodhibitiwa ambacho **ni kazi pekee** ambayo ina kitambulisho hicho itakuwa na uwezo wa kutumia, wakati **iliyotolewa na mtumiaji** ni vitambulisho vinavyodhibitiwa ambavyo **huduma nyingine yoyote ya Azure itakuwa na uwezo wa kutumia**.
**iliyotolewa na mfumo** itakuwa ni kitambulisho kinachodhibitiwa ambacho **kazi pekee** iliyotolewa itakuwa na uwezo wa kukitumia, wakati **iliyotolewa na mtumiaji** ni vitambulisho vinavyodhibitiwa ambavyo **huduma nyingine yoyote ya Azure itakuwa na uwezo wa kutumia**.
> [!NOTE]
> Kama ilivyo katika [**VMs**](vms/), Functions zinaweza kuwa na **1 kitambulisho kilichotolewa na mfumo** na **vitambulisho vingi vilivyotolewa na mtumiaji**, kwa hivyo ni muhimu kila wakati kujaribu kupata vyote ikiwa unadhoofisha kazi kwa sababu unaweza kuwa na uwezo wa kupandisha mamlaka kwa vitambulisho vingi vilivyodhibitiwa kutoka kwa Function moja tu.
> Kama ilivyo katika [**VMs**](vms/index.html), Functions zinaweza kuwa na **1 kitambulisho kilichotolewa na mfumo** na **vitambulisho vingi vilivyotolewa na mtumiaji**, kwa hivyo ni muhimu kila wakati kujaribu kupata vyote ikiwa unashambulia kazi kwa sababu unaweza kuwa na uwezo wa kupandisha mamlaka kwa vitambulisho vingi vilivyodhibitiwa kutoka kwa Function moja tu.
>
> Ikiwa kitambulisho kisichotolewa na mfumo hakitumiki lakini kitambulisho kimoja au zaidi kilichotolewa na mtumiaji kimeunganishwa na kazi, kwa kawaida huwezi kupata token yoyote.
> Ikiwa kitambulisho kisichodhibitiwa na mfumo hakitumiki lakini kitambulisho kimoja au zaidi kilichotolewa na mtumiaji kimeunganishwa na kazi, kwa kawaida huwezi kupata token yoyote.
Inawezekana kutumia [**PEASS scripts**](https://github.com/peass-ng/PEASS-ng) kupata token kutoka kwa kitambulisho kilichodhibitiwa na mfumo kutoka kwa kiunganishi cha metadata. Au unaweza kuzipata **kwa mikono** kama ilivyoelezwa katika:
{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %}
Kumbuka kwamba unahitaji kupata njia ya **kuangalia vitambulisho vyote vilivyodhibitiwa ambavyo kazi inaunganishwa** kwani ikiwa hujaashiria, kiunganishi cha metadata kita **tumia tu kile cha kawaida** (angalia kiungo kilichopita kwa maelezo zaidi).
Kumbuka unahitaji kupata njia ya **kuangalia vitambulisho vyote vilivyotolewa na kazi** kama hujaashiria, kiunganishi cha metadata kita **tumia tu kile cha kawaida** (angalia kiungo kilichopita kwa maelezo zaidi).
## Access Keys
> [!NOTE]
> Kumbuka kwamba hakuna ruhusa za RBAC za kutoa ufikiaji kwa watumiaji kuanzisha kazi. **kuanzisha kazi kunategemea kichocheo** kilichochaguliwa wakati ilipoundwa na ikiwa kichocheo cha HTTP kilichaguliwa, inaweza kuhitajika kutumia **funguo za ufikiaji**.
Unapounda kiunganishi ndani ya kazi kwa kutumia **kichocheo cha HTTP** inawezekana kuashiria **ngazi ya idhini ya funguo za ufikiaji** inayohitajika kuanzisha kazi. Chaguzi tatu zinapatikana:
Unapounda kiunganishi ndani ya kazi kwa kutumia **kichocheo cha HTTP** inawezekana kuashiria **ngazi ya uthibitisho wa funguo za ufikiaji** inayohitajika kuanzisha kazi. Chaguzi tatu zinapatikana:
- **ANONYMOUS**: **Kila mtu** anaweza kufikia kazi kupitia URL.
- **FUNCTION**: Kiunganishi kinapatikana tu kwa watumiaji wanaotumia **funguo, mwenyeji au funguo za bosi**.
- **ADMIN**: Kiunganishi kinapatikana tu kwa watumiaji wanaotumia **funguo za bosi**.
- **FUNCTION**: Kiunganishi kinapatikana tu kwa watumiaji wanaotumia **funguo, mwenyeji au funguo za master**.
- **ADMIN**: Kiunganishi kinapatikana tu kwa watumiaji wenye **funguo za master**.
**Aina za funguo:**
- **Funguo za Kazi:** Funguo za kazi zinaweza kuwa za kawaida au zilizofanywa na mtumiaji na zimeundwa kutoa ufikiaji pekee kwa **kiunganishi maalum cha kazi** ndani ya Function App ikiruhusu ufikiaji wa kina zaidi juu ya viunganishi.
- **Funguo za Mwenyeji:** Funguo za mwenyeji, ambazo pia zinaweza kuwa za kawaida au zilizofanywa na mtumiaji, zinatoa ufikiaji kwa **viunganishi vyote vya kazi ndani ya Function App kwa ngazi ya ufikiaji wa FUNCTION**.
- **Funguo za Bosi:** Funguo za bosi (`_master`) hutumikia kama funguo za usimamizi zinazotoa ruhusa za juu, ikiwa ni pamoja na ufikiaji kwa viunganishi vyote vya kazi (ngazi ya ufikiaji wa ADMIN inajumuishwa). **funguo hii haiwezi kufutwa.**
- **Funguo za Master:** Funguo za master (`_master`) hutumikia kama funguo za kiutawala zinazotoa ruhusa za juu, ikiwa ni pamoja na ufikiaji kwa viunganishi vyote vya kazi (ngazi ya ufikiaji wa ADMIN inajumuishwa). **funguo hii haiwezi kufutwa.**
- **Funguo za Mfumo:** Funguo za mfumo zinadhibitiwa na **nyongeza maalum** na zinahitajika kwa ufikiaji wa viunganishi vya webhook vinavyotumiwa na vipengele vya ndani. Mifano ni pamoja na kichocheo cha Event Grid na Functions za Kudumu, ambazo hutumia funguo za mfumo kuingiliana kwa usalama na APIs zao.
> [!TIP]
@@ -96,15 +96,15 @@ Unapounda kiunganishi ndani ya kazi kwa kutumia **kichocheo cha HTTP** inawezeka
### Basic Authentication
Kama ilivyo katika App Services, Functions pia zinasaidia uthibitishaji wa msingi kuungana na **SCM** na **FTP** ili kutekeleza msimbo kwa kutumia **jina la mtumiaji na nenosiri katika URL** inayotolewa na Azure. Maelezo zaidi kuhusu hili katika:
Kama ilivyo katika App Services, Functions pia zinasaidia uthibitisho wa msingi kuungana na **SCM** na **FTP** ili kupeleka msimbo kwa kutumia **jina la mtumiaji na nenosiri katika URL** inayotolewa na Azure. Maelezo zaidi kuhusu hili katika:
{{#ref}}
az-app-service.md
az-app-services.md
{{#endref}}
### Github Based Deployments
Wakati kazi inaundwa kutoka kwa repo ya Github, console ya wavuti ya Azure inaruhusu **kuunda kiotomatiki Github Workflow katika hifadhi maalum** ili kila wakati hifadhi hii inaposasishwa, msimbo wa kazi unasasishwa. Kwa kweli, Github Action yaml kwa kazi ya python inaonekana kama ifuatavyo:
Wakati kazi inaundwa kutoka kwa repo ya Github, console ya wavuti ya Azure inaruhusu **kuunda kiotomatiki Github Workflow katika hifadhi maalum** ili kila wakati hifadhi hii ikisasishwa, msimbo wa kazi unasasishwa. Kwa kweli, Github Action yaml kwa kazi ya python inaonekana kama ifuatavyo:
<details>
@@ -192,10 +192,10 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
</details>
Zaidi ya hayo, **Identiti Iliyosimamiwa** pia inaundwa ili Github Action kutoka kwenye hazina iweze kuingia kwenye Azure kwa kutumia hiyo. Hii inafanywa kwa kuzalisha akidi ya Shirikisho juu ya **Identiti Iliyosimamiwa** ikiruhusu **Mtoaji** `https://token.actions.githubusercontent.com` na **Kitambulisho cha Mtu** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
Zaidi ya hayo, **Identiti Iliyosimamiwa** pia inaundwa ili Github Action kutoka kwenye hazina iweze kuingia kwenye Azure kwa kutumia hiyo. Hii inafanywa kwa kuzalisha akiba ya Shughuli ya Shirikisho juu ya **Identiti Iliyosimamiwa** ikiruhusu **Mtoaji** `https://token.actions.githubusercontent.com` na **Kitambulisho cha Mtu** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
> [!CAUTION]
> Hivyo, mtu yeyote anayekatisha tamaa hazina hiyo ataweza kukatisha tamaa kazi na Identiti Iliyosimamiwa zinazohusiana nayo.
> Hivyo, mtu yeyote anayekatisha tamaa hazina hiyo ataweza kukatisha tamaa kazi na Identiti Iliyosimamiwa zinazohusishwa nayo.
### Utekelezaji wa Msingi wa Kontena