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

This commit is contained in:
Translator
2025-01-06 17:12:28 +00:00
parent 88fbac2ccc
commit df2721a5ac
5 changed files with 88 additions and 71 deletions

1
.gitignore vendored
View File

@@ -34,3 +34,4 @@ Temporary Items
book
book/*
hacktricks-preprocessor.log
hacktricks-preprocessor-error.log

View File

@@ -7,7 +7,14 @@ from os import path
from urllib.request import urlopen, Request
logger = logging.getLogger(__name__)
logging.basicConfig(filename='hacktricks-preprocessor.log', filemode='w', encoding='utf-8', level=logging.DEBUG)
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='hacktricks-preprocessor.log', mode='w', encoding='utf-8')
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
handler2 = logging.FileHandler(filename='hacktricks-preprocessor-error.log', mode='w', encoding='utf-8')
handler2.setLevel(logging.ERROR)
logger.addHandler(handler2)
def findtitle(search ,obj, key, path=(),):
@@ -45,19 +52,29 @@ def ref(matchobj):
try:
if href.endswith("/"):
href = href+"README.md" # Fix if ref points to a folder
chapter, _path = findtitle(href, book, "source_path")
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
if "#" in href:
chapter, _path = findtitle(href.split("#")[0], book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()
logger.debug(f'Ref has # using title: {title}')
else:
chapter, _path = findtitle(href, book, "source_path")
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
except Exception as e:
try:
dir = path.dirname(current_chapter['source_path'])
logger.debug(f'Error getting chapter title: {href} trying with relative path {path.normpath(path.join(dir,href))}')
chapter, _path = findtitle(path.normpath(path.join(dir,href)), book, "source_path")
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
if "#" in href:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()
logger.debug(f'Ref has # using title: {title}')
else:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = chapter["name"]
logger.debug(f'Recursive title search result: {chapter["name"]}')
except Exception as e:
logger.debug(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
print(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
logger.debug(e)
logger.error(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
sys.exit(1)
@@ -85,13 +102,11 @@ def files(matchobj):
except Exception as e:
logger.debug(e)
logger.debug(f'Error searching file: {href}')
print(f'Error searching file: {href}')
logger.error(f'Error searching file: {href}')
sys.exit(1)
if title=="":
logger.debug(f'Error searching file: {href}')
print(f'Error searching file: {href}')
logger.error(f'Error searching file: {href}')
sys.exit(1)
template = f"""<a class="content_ref" href="/files/{href}"><span class="content_ref_label">{title}</span></a>"""
@@ -134,10 +149,11 @@ if __name__ == '__main__':
for chapter in iterate_chapters(book['sections']):
logger.debug(f"Chapter: {chapter['path']}")
current_chapter = chapter
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
# regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n#]*(?:#(.*))?)(?:\n)?{{[\s]*#endref[\s]*}}'
new_content = re.sub(regex, ref, chapter['content'])
regex = r'{{[\s]*#file[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endfile[\s]*}}'
new_content = re.sub(regex, files, chapter['content'])
new_content = re.sub(regex, files, new_content)
new_content = add_read_time(new_content)
chapter['content'] = new_content

View File

@@ -59,12 +59,12 @@ Dakle, ako imate dozvole navedene za ove fajlove, postoji vektorski napad koji v
Pratite opis u sekciji *Zloupotreba Terraform State Fajlova* na stranici *Terraform Security* za direktno upotrebljiv kod za eksploataciju:
{{#ref}}
terraform-security.md#abusing-terraform-state-files
pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
{{#endref}}
### `s3:PutBucketPolicy`
Napadač, koji treba da bude **iz istog naloga**, inače će se aktivirati greška `The specified method is not allowed`, sa ovom dozvolom će moći da sebi dodeli više dozvola nad bucket-ima omogućavajući mu da čita, piše, modifikuje, briše i izlaže buckete.
Napadač, koji mora biti **iz istog naloga**, inače će se aktivirati greška `The specified method is not allowed`, sa ovom dozvolom će moći da sebi dodeli više dozvola nad bucket-ima omogućavajući mu da čita, piše, modifikuje, briše i izlaže buckete.
```bash
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
@@ -123,7 +123,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-n
### `s3:GetBucketAcl`, `s3:PutBucketAcl`
Napadač bi mogao da zloupotrebi ove dozvole da **dodeli sebi veći pristup** određenim kanticama.\
Imajte na umu da napadač ne mora biti iz istog naloga. Pored toga, pristup za pisanje
Napomena: napadač ne mora biti iz istog naloga. Pored toga, pristup za pisanje
```bash
# Update bucket ACL
aws s3api get-bucket-acl --bucket <bucket-name>

View File

@@ -7,12 +7,12 @@
Za više informacija o Azure App uslugama, proverite:
{{#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
Ove dozvole omogućavaju pristup **SSH shell-u** unutar web aplikacije. Takođe omogućavaju **debug** aplikacije.
Ove dozvole omogućavaju pristup **SSH shell** unutar web aplikacije. Takođe omogućavaju **debug** aplikacije.
- **SSH u jednoj komandi**:
```bash
@@ -32,16 +32,16 @@ az webapp create-remote-connection --name <name> --resource-group <res-group>
## So from that machine ssh into that port (you might need generate a new ssh session to the jump host)
ssh root@127.0.0.1 -p 39895
```
- **Debug the application**:
- **Debugujte aplikaciju**:
1. Instalirajte Azure ekstenziju u VScode.
2. Prijavite se u ekstenziju sa Azure nalogom.
3. Prikazujte sve App usluge unutar pretplate.
4. Izaberite App uslugu koju želite da debagujete, kliknite desnim tasterom i izaberite "Start Debugging".
5. Ako aplikacija nema omogućeno debagovanje, ekstenzija će pokušati da ga omogući, ali vaš nalog treba da ima dozvolu `Microsoft.Web/sites/config/write` da bi to uradio.
4. Izaberite App uslugu koju želite da debugujete, desni klik i izaberite "Start Debugging".
5. Ako aplikacija nema omogućeno debugovanje, ekstenzija će pokušati da ga omogući, ali vaš nalog treba da ima dozvolu `Microsoft.Web/sites/config/write` da bi to uradio.
### Obtaining SCM Credentials & Enabling Basic Authentication
### Dobijanje SCM kredencijala i omogućavanje osnovne autentifikacije
Da biste dobili SCM akreditive, možete koristiti sledeće **komande i dozvole**:
Da biste dobili SCM kredencijale, možete koristiti sledeće **komande i dozvole**:
- Dozvola **`Microsoft.Web/sites/publishxml/action`** omogućava pozivanje:
```bash
@@ -124,14 +124,14 @@ az webapp deployment user set \
--user-name hacktricks \
--password 'W34kP@ssw0rd123!'
```
Zatim, možete koristiti ove kredencijale da **pristupite SCM i FTP platformama**. Ovo je takođe odličan način da održite postojanost.
Zatim, možete koristiti ove kredencijale da **pristupite SCM i FTP platformama**. Ovo je takođe odličan način za održavanje postojanosti.
Zapamtite da za pristup SCM platformi sa **veb-a morate pristupiti `<SCM-URL>/BasicAuth`**.
> [!WARNING]
> Imajte na umu da svaki korisnik može konfigurisati svoje kredencijale pozivajući prethodnu komandu, ali ako korisnik nema dovoljno dozvola za pristup SCM-u ili FTP-u, kredencijali neće raditi.
> Imajte na umu da svaki korisnik može konfigurisati svoje kredencijale pozivajući prethodnu komandu, ali ako korisnik nema dovoljno dozvola za pristup SCM ili FTP, kredencijali neće raditi.
- Ako vidite da su ti kredencijali **REDAKTOVANI**, to je zato što **morate omogućiti opciju osnovne autentifikacije SCM** i za to vam je potrebna druga dozvola (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
- Ako vidite da su ti kredencijali **REDAKTOVANI**, to je zato što **morate omogućiti opciju osnovne autentifikacije za SCM** i za to vam je potrebna druga dozvola (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -216,7 +216,7 @@ Ova dozvola omogućava listanje **connection strings** i **appsettings** usluge
az webapp config connection-string list --name <name> --resource-group <res-group>
az webapp config appsettings list --name <name> --resource-group <res-group>
```
### Pročitajte Konfigurisane Akreditive Treće Strane
### Pročitajte Konfigurisane Treće Strane Akreditive
Pokretanjem sledeće komande moguće je **pročitati akreditive treće strane** konfigurisane u trenutnom nalogu. Imajte na umu da, na primer, ako su neki Github akreditive konfigurisani za drugog korisnika, nećete moći da pristupite tokenu iz drugog.
```bash
@@ -250,13 +250,13 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Ažurirajte kod aplikacije iz izvora
- Ako je konfigurisani izvor treća strana kao što su Github, BitBucket ili Azure Repository, možete **ažurirati kod** usluge aplikacije kompromitovanjem izvornog koda u repozitorijumu.
- Ako je aplikacija konfigurisana koristeći **daljinski git repozitorijum** (sa korisničkim imenom i lozinkom), moguće je dobiti **URL i osnovne autentifikacione podatke** za kloniranje i slanje izmena sa:
- Ako je konfigurisan izvor treće strane kao što su Github, BitBucket ili Azure Repository, možete **ažurirati kod** usluge aplikacije kompromitovanjem izvornog koda u repozitorijumu.
- Ako je aplikacija konfigurisana koristeći **daljinski git repozitorij** (sa korisničkim imenom i lozinkom), moguće je dobiti **URL i osnovne autentifikacione podatke** za kloniranje i slanje izmena sa:
- Koristeći dozvolu **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name <app-name> --resource-group <res-group>`
- Koristeći dozvolu **`Microsoft.Web/sites/config/list/action`**:
- `az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>`
- `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
- Ako je aplikacija konfigurisana da koristi **lokalni git repozitorijum**, moguće je **klonirati repozitorijum** i **slati izmene** u njega:
- Ako je aplikacija konfigurisana da koristi **lokalni git repozitorij**, moguće je **klonirati repozitorij** i **slati izmene** u njega:
- Koristeći dozvolu **`Microsoft.Web/sites/sourcecontrols/read`**: Možete dobiti URL git repozitorijuma sa `az webapp deployment source show --name <app-name> --resource-group <res-group>`, ali će to biti isto kao SCM URL aplikacije sa putanjom `/<app-name>.git` (npr. `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`).
- Da biste dobili SCM akreditive, potrebna vam je dozvola:
- **`Microsoft.Web/sites/publishxml/action`**: Zatim pokrenite `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`.
@@ -270,7 +270,7 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
Ovo je skup dozvola koje omogućavaju **modifikaciju kontejnera koji se koristi** od strane webapp-a. Napadač bi mogao da zloupotrebi to da natera webapp da izvrši zlonamerni kontejner.
Ovo je skup dozvola koji omogućava **modifikaciju kontejnera koji se koristi** od strane webapp-a. Napadač bi mogao da zloupotrebi to da natera webapp da izvrši zlonamerni kontejner.
```bash
az webapp config container set \
--name <app-name> \

View File

@@ -2,51 +2,51 @@
{{#include ../../../banners/hacktricks-training.md}}
## Osnovne Informacije
## Osnovne informacije
**Azure Function Apps** su **serverless compute service** koje vam omogućavaju da pokrećete male delove koda, nazvane **functions**, bez upravljanja osnovnom infrastrukturom. Dizajnirane su da izvršavaju kod kao odgovor na različite okidače, kao što su **HTTP zahtevi, tajmeri ili događaji iz drugih Azure servisa** poput Blob Storage ili Event Hubs. Function Apps podržavaju više programskih jezika, uključujući C#, Python, JavaScript i Java, što ih čini svestranim za izgradnju **event-driven applications**, automatizaciju radnih tokova ili integraciju servisa. Ekonomične su, jer obično plaćate samo za vreme obrade kada se vaš kod izvršava.
**Azure Function Apps** su **serverless compute service** koje vam omogućavaju da pokrećete male delove koda, nazvane **functions**, bez upravljanja osnovnom infrastrukturom. Dizajnirane su da izvršavaju kod kao odgovor na različite okidače, kao što su **HTTP zahtevi, tajmeri ili događaji iz drugih Azure servisa** poput Blob Storage ili Event Hubs. Function Apps podržavaju više programskih jezika, uključujući C#, Python, JavaScript i Java, što ih čini svestranim za izgradnju **aplikacija vođenih događajima**, automatizaciju radnih tokova ili integraciju servisa. Troškovi su efikasni, jer obično plaćate samo vreme obrade kada se vaš kod izvršava.
> [!NOTE]
> Imajte na umu da su **Functions podskup App Services**, stoga će mnoge funkcije o kojima se ovde govori koristiti i aplikacije kreirane kao Azure Apps (`webapp` u cli).
### Različiti Planovi
### Različiti planovi
- **Flex Consumption Plan**: Nudi **dinamičko, event-driven skaliranje** sa plaćanjem po korišćenju, dodajući ili uklanjajući instance funkcija na osnovu potražnje. Podržava **virtual networking** i **pre-provisioned instances** kako bi se smanjili hladni startovi, što ga čini pogodnim za **varijabilne radne opterećenja** koja ne zahtevaju podršku kontejnera.
- **Traditional Consumption Plan**: Podrazumevani serverless izbor, gde **plaćate samo za resurse obrade kada funkcije rade**. Automatski se skalira na osnovu dolaznih događaja i uključuje **optimizacije hladnog starta**, ali ne podržava implementacije kontejnera. Idealno za **intermittent workloads** koje zahtevaju automatsko skaliranje.
- **Premium Plan**: Dizajniran za **dosledne performanse**, sa **prewarmed workers** kako bi se eliminisali hladni startovi. Nudi **produžene vreme izvršenja, virtual networking**, i podržava **custom Linux images**, što ga čini savršenim za **mission-critical applications** koje zahtevaju visoke performanse i napredne funkcije.
- **Dedicated Plan**: Radi na posvećenim virtuelnim mašinama sa **predvidljivim naplatama** i podržava ručno ili automatsko skaliranje. Omogućava pokretanje više aplikacija na istom planu, pruža **compute isolation**, i osigurava **siguran pristup mreži** putem App Service Environments, što ga čini idealnim za **long-running applications** koje zahtevaju doslednu alokaciju resursa.
- **Container Apps**: Omogućava implementaciju **containerized function apps** u upravljanom okruženju, zajedno sa mikroservisima i API-ima. Podržava prilagođene biblioteke, migraciju nasleđenih aplikacija, i **GPU processing**, eliminišući upravljanje Kubernetes klasterima. Idealno za **event-driven, scalable containerized applications**.
- **Flex Consumption Plan**: Nudi **dinamičko, događajima vođeno skaliranje** sa plaćanjem po korišćenju, dodajući ili uklanjajući instance funkcija na osnovu potražnje. Podržava **virtuelno umrežavanje** i **pre-provisioned instances** kako bi se smanjili hladni startovi, što ga čini pogodnim za **varijabilne radne opterećenja** koja ne zahtevaju podršku kontejnera.
- **Traditional Consumption Plan**: Podrazumevani serverless izbor, gde **plaćate samo za resurse obrade kada funkcije rade**. Automatski se skalira na osnovu dolaznih događaja i uključuje **optimizacije hladnog starta**, ali ne podržava implementacije kontejnera. Idealno za **povremena radna opterećenja** koja zahtevaju automatsko skaliranje.
- **Premium Plan**: Dizajniran za **dosledne performanse**, sa **prewarmed workers** kako bi se eliminisali hladni startovi. Nudi **produžene vreme izvršenja, virtuelno umrežavanje**, i podržava **prilagođene Linux slike**, što ga čini savršenim za **aplikacije od kritične važnosti** koje zahtevaju visoke performanse i napredne funkcije.
- **Dedicated Plan**: Radi na posvećenim virtuelnim mašinama sa **predvidljivim naplatama** i podržava ručno ili automatsko skaliranje. Omogućava pokretanje više aplikacija na istom planu, pruža **izolaciju obrade**, i osigurava **siguran pristup mreži** putem App Service Environments, što ga čini idealnim za **dugotrajne aplikacije** koje zahtevaju doslednu alokaciju resursa.
- **Container Apps**: Omogućava implementaciju **kontejnerizovanih funkcija** u upravljanom okruženju, zajedno sa mikroservisima i API-ima. Podržava prilagođene biblioteke, migraciju nasleđenih aplikacija, i **GPU obradu**, eliminišući upravljanje Kubernetes klasterima. Idealno za **događajima vođene, skalabilne kontejnerizovane aplikacije**.
### **Storage Buckets**
Kada kreirate novu Function App koja nije kontejnerizovana (ali daje kod za izvršavanje), **kod i drugi podaci vezani za funkciju biće pohranjeni u Storage nalogu**. Podrazumevano, web konzola će kreirati novi nalog po funkciji za pohranu koda.
Štaviše, modifikovanjem koda unutar bucket-a (u različitim formatima u kojima može biti pohranjen), **kod aplikacije će biti modifikovan na novi i izvršen** sledeći put kada se funkcija pozove.
Štaviše, modifikovanjem koda unutar kante (u različitim formatima u kojima može biti pohranjen), **kod aplikacije će biti modifikovan na novi i izvršen** sledeći put kada se funkcija pozove.
> [!CAUTION]
> Ovo je veoma zanimljivo iz perspektive napadača jer **pristup za pisanje preko ovog bucket-a** omogućava napadaču da **kompromituje kod i eskalira privilegije** na upravljane identitete unutar Function App-a.
> Ovo je veoma zanimljivo iz perspektive napadača jer **pristup za pisanje preko ove kante** omogućava napadaču da **kompromituje kod i eskalira privilegije** na upravljane identitete unutar Function App-a.
>
> Više o ovome u **odeljku o eskalaciji privilegija**.
Takođe je moguće pronaći **master i functions ključeve** pohranjene u storage nalogu u kontejneru **`azure-webjobs-secrets`** unutar foldera **`<app-name>`** u JSON datotekama koje možete pronaći unutra.
Takođe je moguće pronaći **master i funkcijske ključeve** pohranjene u storage nalogu u kontejneru **`azure-webjobs-secrets`** unutar foldera **`<app-name>`** u JSON datotekama koje možete pronaći unutra.
Imajte na umu da Functions takođe omogućavaju pohranu koda na udaljenoj lokaciji jednostavno označavajući URL do nje.
Imajte na umu da Functions takođe omogućavaju pohranu koda na udaljenoj lokaciji jednostavno ukazujući na URL.
### Mrežno Povezivanje
### Mrežno umrežavanje
Korišćenjem HTTP okidača:
- Moguće je dati **pristup funkciji sa celog Interneta** bez potrebe za bilo kakvom autentifikacijom ili dati pristup na osnovu IAM-a. Iako je takođe moguće ograničiti ovaj pristup.
- Takođe je moguće **dati ili ograničiti pristup** Function App-u iz **internetske mreže (VPC)**.
- Takođe je moguće **dati ili ograničiti pristup** Function App-u iz **internih mreža (VPC)**.
> [!CAUTION]
> Ovo je veoma zanimljivo iz perspektive napadača jer bi moglo biti moguće **pivotirati na interne mreže** iz ranjive funkcije izložene Internetu.
> Ovo je veoma zanimljivo iz perspektive napadača jer bi moglo biti moguće **pivotsati na interne mreže** iz ranjive funkcije izložene Internetu.
### **Podešavanja Function App-a & Varijable Okruženja**
### **Podešavanja Function App-a i promenljive okruženja**
Moguće je konfigurisati varijable okruženja unutar aplikacije, koje mogu sadržati osetljive informacije. Štaviše, podrazumevano se kreiraju varijable okruženja **`AzureWebJobsStorage`** i **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (među ostalima). Ove su posebno zanimljive jer **sadrže ključ naloga za kontrolu sa POTPUNIM dozvolama nad storage nalogom koji sadrži podatke aplikacije**. Ova podešavanja su takođe potrebna za izvršavanje koda iz Storage naloga.
Moguće je konfigurisati promenljive okruženja unutar aplikacije, koje mogu sadržati osetljive informacije. Štaviše, podrazumevano se kreiraju promenljive okruženja **`AzureWebJobsStorage`** i **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (među ostalima). Ove su posebno zanimljive jer **sadrže ključ naloga za kontrolu sa POTPUNIM dozvolama nad storage nalogom koji sadrži podatke aplikacije**. Ova podešavanja su takođe potrebna za izvršavanje koda iz Storage naloga.
Ove varijable okruženja ili parametri konfiguracije takođe kontrolišu kako funkcija izvršava kod, na primer, ako **`WEBSITE_RUN_FROM_PACKAGE`** postoji, to će označiti URL gde se kod aplikacije nalazi.
Ove promenljive okruženja ili parametri konfiguracije takođe kontrolišu kako funkcija izvršava kod, na primer, ako **`WEBSITE_RUN_FROM_PACKAGE`** postoji, to će ukazivati na URL gde se kod aplikacije nalazi.
### **Function Sandbox**
@@ -54,14 +54,14 @@ Unutar linux sandbox-a, izvorni kod se nalazi u **`/home/site/wwwroot`** u datot
U **Windows** funkciji koja koristi NodeJS, kod se nalazio u **`C:\home\site\wwwroot\HttpTrigger1\index.js`**, korisničko ime je bilo **`mawsFnPlaceholder8_f_v4_node_20_x86`** i bio je deo **grupa**: `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`.
### **Upravljane Identitete & Metapodaci**
### **Upravljane identitete i metapodaci**
Baš kao i [**VMs**](vms/), Functions mogu imati **Upravljane Identitete** od 2 tipa: Sistem dodeljen i Korisnik dodeljen.
Baš kao i [**VMs**](vms/index.html), Functions mogu imati **Upravljane identitete** od 2 tipa: Sistem dodeljen i Korisnik dodeljen.
**Sistem dodeljen** će biti upravljani identitet koji **samo funkcija** kojoj je dodeljen može koristiti, dok su **korisnik dodeljeni** upravljani identiteti upravljani identiteti koje **bilo koja druga Azure usluga može koristiti**.
**Sistem dodeljen** će biti upravljani identitet koji **samo funkcija** koja ga ima dodeljenog može koristiti, dok su **korisnik dodeljeni** upravljani identiteti upravljani identiteti koje **bilo koja druga Azure usluga može koristiti**.
> [!NOTE]
> Baš kao u [**VMs**](vms/), Functions mogu imati **1 sistem dodeljen** upravljani identitet i **several korisnik dodeljenih** identiteta, tako da je uvek važno pokušati pronaći sve njih ako kompromitujete funkciju jer biste mogli biti u mogućnosti da eskalirate privilegije na nekoliko upravljanih identiteta iz samo jedne funkcije.
> Baš kao i u [**VMs**](vms/index.html), Functions mogu imati **1 sistem dodeljen** upravljeni identitet i **several korisnik dodeljenih**, tako da je uvek važno pokušati pronaći sve njih ako kompromitujete funkciju jer biste mogli biti u mogućnosti da eskalirate privilegije na nekoliko upravljanih identiteta iz samo jedne funkcije.
>
> Ako se ne koristi sistemski upravljani identitet, ali su jedan ili više korisničkih upravljanih identiteta povezani sa funkcijom, podrazumevano nećete moći dobiti nijedan token.
@@ -69,42 +69,42 @@ Moguće je koristiti [**PEASS skripte**](https://github.com/peass-ng/PEASS-ng) z
{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %}
Imajte na umu da treba da pronađete način da **proverite sve Upravljane Identitete koje funkcija ima povezane** jer ako to ne naznačite, metapodataka krajnja tačka će **koristiti samo podrazumevani** (proverite prethodni link za više informacija).
Imajte na umu da treba da pronađete način da **proverite sve upravljane identitete koje funkcija ima povezane** jer ako to ne naznačite, metapodataka krajnja tačka će **koristiti samo podrazumevani** (proverite prethodni link za više informacija).
## Ključevi Pristupa
## Ključevi pristupa
> [!NOTE]
> Imajte na umu da ne postoje RBAC dozvole za davanje pristupa korisnicima da pozivaju funkcije. **Poziv funkcije zavisi od okidača** odabranog prilikom kreiranja i ako je odabran HTTP okidač, možda će biti potrebno koristiti **ključ pristupa**.
> Imajte na umu da ne postoje RBAC dozvole za davanje pristupa korisnicima za pozivanje funkcija. **Pozivanje funkcije zavisi od okidača** odabranog prilikom kreiranja i ako je odabran HTTP okidač, možda će biti potrebno koristiti **ključ pristupa**.
Kada kreirate krajnju tačku unutar funkcije koristeći **HTTP okidač**, moguće je naznačiti **nivo autorizacije ključa pristupa** potreban za aktiviranje funkcije. Dostupne su tri opcije:
- **ANONYMOUS**: **Svi** mogu pristupiti funkciji putem URL-a.
- **FUNCTION**: Krajnja tačka je dostupna samo korisnicima koji koriste **ključ funkcije, host ili master ključ**.
- **FUNCTION**: Krajnja tačka je dostupna samo korisnicima koji koriste **ključ funkcije, hosta ili master ključa**.
- **ADMIN**: Krajnja tačka je dostupna samo korisnicima sa **master ključem**.
**Tipovi ključeva:**
- **Ključevi funkcije:** Ključevi funkcije mogu biti ili podrazumevani ili korisnički definisani i dizajnirani su da omogućavaju pristup isključivo **određenim krajnjim tačkama funkcije** unutar Function App-a, omogućavajući finiju kontrolu pristupa nad krajnjim tačkama.
- **Host Ključevi:** Host ključevi, koji takođe mogu biti podrazumevani ili korisnički definisani, pružaju pristup **svim krajnjim tačkama funkcije unutar Function App-a sa FUNCTION nivoom pristupa**.
- **Master Ključ:** Master ključ (`_master`) služi kao administrativni ključ koji nudi povišene dozvole, uključujući pristup svim krajnjim tačkama funkcije (uključujući ADMIN nivo pristupa). Ovaj **ključ se ne može opozvati.**
- **Sistemski Ključevi:** Sistemski ključevi su **upravljani specifičnim ekstenzijama** i potrebni su za pristup webhook krajnjim tačkama koje koriste interni komponenti. Primeri uključuju Event Grid okidač i Durable Functions, koji koriste sistemske ključeve za sigurno interagovanje sa svojim API-ima.
- **Funkcijski ključevi:** Funkcijski ključevi mogu biti ili podrazumevani ili korisnički definisani i dizajnirani su da omogućavaju pristup isključivo **određenim funkcijskim krajnjim tačkama** unutar Function App-a, omogućavajući finiju kontrolu pristupa nad krajnjim tačkama.
- **Host ključevi:** Host ključevi, koji takođe mogu biti podrazumevani ili korisnički definisani, pružaju pristup **svim funkcijskim krajnjim tačkama unutar Function App-a sa nivoom pristupa FUNCTION**.
- **Master ključ:** Master ključ (`_master`) služi kao administrativni ključ koji nudi povišene dozvole, uključujući pristup svim funkcijskim krajnjim tačkama (uključujući ADMIN nivo pristupa). Ovaj **ključ se ne može opozvati.**
- **Sistemski ključevi:** Sistemski ključevi su **upravljački od strane specifičnih ekstenzija** i potrebni su za pristup webhook krajnjim tačkama koje koriste interni komponenti. Primeri uključuju Event Grid okidač i Durable Functions, koji koriste sistemske ključeve za sigurno interagovanje sa svojim API-ima.
> [!TIP]
> Primer za pristup funkciji API krajnjoj tački koristeći ključ:
>
> `https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>`
### Osnovna Autentifikacija
### Osnovna autentifikacija
Baš kao u App Services, Functions takođe podržavaju osnovnu autentifikaciju za povezivanje sa **SCM** i **FTP** za implementaciju koda koristeći **korisničko ime i lozinku u URL-u** koji pruža Azure. Više informacija o tome u:
Baš kao i u App Services, Functions takođe podržavaju osnovnu autentifikaciju za povezivanje sa **SCM** i **FTP** za implementaciju koda koristeći **korisničko ime i lozinku u URL-u** koji pruža Azure. Više informacija o tome u:
{{#ref}}
az-app-service.md
az-app-services.md
{{#endref}}
### Github Zasnovane Implementacije
### Github zasnovane implementacije
Kada se funkcija generiše iz Github repozitorijuma, Azure web konzola omogućava **automatsko kreiranje Github Workflow-a u specifičnom repozitorijumu** tako da kada god se ovaj repozitorijum ažurira, kod funkcije se ažurira. U stvari, Github Action yaml za python funkciju izgleda ovako:
Kada se funkcija generiše iz Github repozitorijuma, Azure web konzola omogućava **automatsko kreiranje Github Workflow-a u specifičnom repozitorijumu** tako da kada se ovaj repozitorijum ažurira, kod funkcije se ažurira. U stvari, Github Action yaml za python funkciju izgleda ovako:
<details>
@@ -192,14 +192,14 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
</details>
Pored toga, **Upravljeni Identitet** se takođe kreira kako bi Github Akcija iz repozitorijuma mogla da se prijavi u Azure. To se postiže generisanjem Federisane kredencijale preko **Upravljenog Identiteta** koja omogućava **Izdavaču** `https://token.actions.githubusercontent.com` i **Identifikatoru Subjekta** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
Pored toga, **Upravljani identitet** se takođe kreira kako bi Github akcija iz repozitorijuma mogla da se prijavi u Azure. To se postiže generisanjem Federated kredencijala preko **Upravljanog identiteta** koji omogućava **Izdavaču** `https://token.actions.githubusercontent.com` i **Identifikatoru subjekta** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
> [!CAUTION]
> Stoga, svako ko kompromituje taj repozitorijum će moći da kompromituje funkciju i Upravljene Identitete povezane s njom.
> Stoga, svako ko kompromituje taj repozitorijum će moći da kompromituje funkciju i Upravljene identitete povezane s njom.
### Implementacije zasnovane na kontejnerima
Nisu svi planovi omogućeni za implementaciju kontejnera, ali za one koji to omogućavaju, konfiguracija će sadržati URL kontejnera. U API-ju, podešavanje **`linuxFxVersion`** će imati nešto poput: `DOCKER|mcr.microsoft.com/...`, dok će u web konzoli konfiguracija prikazivati **podešavanja slike**.
Nisu svi planovi omogućili implementaciju kontejnera, ali za one koji to rade, konfiguracija će sadržati URL kontejnera. U API-ju, podešavanje **`linuxFxVersion`** će imati nešto poput: `DOCKER|mcr.microsoft.com/...`, dok će u web konzoli konfiguracija prikazivati **podešavanja slike**.
Pored toga, **niti jedan izvorni kod neće biti pohranjen u skladištu** povezanu sa funkcijom jer to nije potrebno.