Azure Functions: Zraniteľnosť eskalovaných oprávnení

Azure Functions: Zraniteľnosť eskalovaných oprávnení

Azure Functions, služba bezserverového výpočtu, je široko používaná organizáciami na spúšťanie ich aplikácií a pracovných postupov v cloude. Avšak nedávny nález odhalil kritickú zraniteľnosť v Azure Functions, ktorá útočníkovi umožňuje získať neoprávnený prístup k citlivým údajom a eskalovať oprávnenia.

V tomto článku sa ponoríme do technických podrobností zraniteľnosti a preskúmame kroky, ktoré môžu organizácie podniknúť na zabezpečenie svojich nasadení v Azure Functions.

Zraniteľnosť: Eskalácia oprávnení prostredníctvom Azure Functions

Zraniteľnosť v Azure Functions pramení z metódy REST API, ktorá umožňuje útočníkovi s právom čítania (napr. rola čitateľa) extrahovať citlivé údaje zo súborového systému, ktorý spúšťa Azure Function.

Rozhranie Azure poskytuje užívateľom (tým s oprávneniami čitateľa alebo vyššími) možnosť pristupovať k súborom súvisiacim s aplikáciou Function, vrátane kódu pre koncové body aplikácie (funkcie). V rozhraní Azure, v sekcii označenej ako App files, je možné zobraziť súbory prítomné v koreňovom adresári aplikácie Function. Zvyčajne ide o súbory s požiadavkami a akékoľvek pomocné súbory, ktoré chcete sprístupniť pre všetky základné funkcie.

OBR1.png

V rámci jednotlivých funkcií (HttpTrigger1) je možné prejsť do sekcie Kód + Test a preskúmať zdrojový kód funkcie. Podobne ako kód nájdený v knihe spustenia účtu automatizácie, je tento kód funkcie prístupný každému s oprávneniami Čitateľa. Vývojári zvyčajne vkladajú prihlasovacie údaje, ako sú kľúče API, základná autentizácia, token JWT atď., priamo do zdrojového kódu, takže nie je nezvyčajné nájsť v tejto sekcii pevné prihlasovacie údaje. Na toto sa tiež zameriavame počas auditu. Citlivé údaje by mali byť uložené na bezpečnom mieste, napríklad v Key Vault.

OBR2.png

Obidve metódy prístupu k súborom závisia od nezverejnenej API, ktorú je možné nájsť sledovaním premávky vášho prehliadača pri používaní rozhrania Azure. Nasledujúci koncový bod API management.azure.com používa funkciu VFS na vymenovanie súborov v aplikácii Function:

https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/hostruntime/admin/vfs/home/site/wwwroot/{functionName}/{fileName}?api-version=2022-03-01

OBR3.png

Pomocou tejto metódy môže útočník čítať akýkoľvek súbor/adresár (okrem tých, ktoré sú obmedzené na používateľa root, ako je adresár “/root”) na súborovom systéme, ktorý spúšťa Azure Function. Napríklad útočník môže čítať súbor “/etc/passwd” a získať zoznam účtov používateľov v systéme.

OBR4.png

Zraniteľnosť sa stáva kritickou, keď útočník objaví zaujímavé parametre uložené v systémových premenných prostredia. V podstate použitím rovnakej metódy REST API, ale s inou cestou URL “/proc/self/environ”, môže útočník extrahovať premenné prostredia zo súborového systému, ktorý spúšťa Azure Function.

Nasledujúci príkaz možno použiť na získanie environmentálnych premenných, zapísať ich do dočasného súboru a výstup:

curl -X GET -H "Authorization: Bearer $(az account get-access-token | jq '.accessToken' -r)" -H "Content-Type:application/json" -H "Accept:application/json" 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/hostruntime/admin/vfs/proc/self/environ?api-version=2022-03-01' > environment-variables.txt && cat environment-variables.txt

Po získaní citlivých údajov ich môže útočník použiť na eskaláciu oprávnení a získanie neoprávneného prístupu k funkcii Azure.

Výstup odhaľuje niekoľko zaujímavých premenných.

OBR5.png

Po otvorení SAS URL uloženej v CONTAINER_START_CONTEXT_SAS_URI sa zobrazil JSON blob “encryptedContext”. Pohodlne, máme šifrovací kľúč uložený v parametri “CONTAINER_ENCRYPTION_KEY”. používaný pre tieto dáta.

OBR6.png

Pomocou CyberChef môžeme rýchlo zostaviť komponenty na dešifrovanie údajov.

Takto vyzerá recept v CyberChef:

OBR7.png

Po dešifrovaní získame ďalší JSON blob údajov, tentokrát len s jedným šifrovaným segmentom (“Šifrované prostredie”). S týmito údajmi nebudeme interagovať, pretože kľúčové informácie už boli dešifrované nižšie:

  • Hlavný kľúč (https://learn.microsoft.com/en-us/azure/azure-functions/security-concepts?tabs=v4#function-access-keys)
  • Kľúč funkcie (https://learn.microsoft.com/en-us/azure/azure-functions/security-concepts?tabs=v4#function-access-keys)
  • Reťazce pripojenia
  • MSISecret
  • AzureWebEncryptionKey
  • WEBSITE_AUTH_SIGNING_KEY
  • Tajomstvá špecifické pre funkciu
  • SAS URL úložiska Blob

Treba spomenúť, že “MICROSOFT_PROVIDER_AUTHENTICATION_SECRET” bude tiež prítomný, ak bola aplikácia Function nakonfigurovaná na autentifikáciu používateľov prostredníctvom Azure AD. Ide o poverenie registrácie aplikácie, ktoré by mohlo byť prospešné pre získanie prístupu k nájomníkovi.

Aj keď údaje o úložisku prác poskytujú pohodlnú cestu k prístupu k účtu úložiska aplikácie Function App, naším hlavným záujmom je tajomstvo aplikácie “Master” Function, pretože ho môžeme použiť na prepísanie funkcií v aplikácii. Prepísaním týchto funkcií môžeme dosiahnuť úplné vykonanie príkazu v kontajneri. To by nám tiež umožnilo pristupovať k akýmkoľvek prepojeným spravovaným identitám na aplikácii Function App.

Náprava: Kroky na zabezpečenie Azure Functions

Počiatočná správa o tomto probléme bola predložená MSRC 23. novembra 2022.

Bolo niekoľko predbežných pokusov o vyriešenie problému, ale nakoniec bola zraniteľná API obmedzená pre rolu Čitateľa 17. januára 2023. Dňa 24. januára 2023 Microsoft stiahol opravu, keďže to viedlo k niektorým problémom zákazníkov.

Dňa 6. marca 2023 Microsoft znovu predstavil opravu na riešenie problému. Celosvetové nasadenie bolo dokončené 8. marca. V čase písania tohto článku už rola Čitateľa nemá možnosť čítať súbory s API VFS aplikácie Function. Treba poznamenať, že cesta eskalácie Linuxu zostáva uskutočniteľnou možnosťou, ak má útočník príkaz na vykonanie na aplikácii Linux Function.

Odporúčame dodržiavať princíp najmenších oprávnení. To znamená, že užívateľ, rola alebo skupina by mali mať len potrebné oprávnenia. Tieto oprávnenia by mali byť izolované (zaradené na bielu listinu) iba pre zdroje, s ktorými potrebujú interagovať.

Preskúmajte všetky spravované identity a účty služieb Azure a ich oprávnenia a obmedzte ich na minimálne potrebné oprávnenia.

Vyhnite sa bezpečnostným rizikám spojeným s nepoužívanými a redukovateľnými oprávneniami tým, že udelíte iba vhodné oprávnenia. Vhodné oprávnenia sú tie s najmenej prístupným prístupom, ktorý je potrebný pre aplikáciu alebo používateľa na vykonanie ich požadovaných úloh.

Pravidelne preskúmajte a auditujte konfiguráciu Azure Functions a ďalších služieb na identifikáciu a nápravu akýchkoľvek potenciálnych zraniteľností.

Záver

Zraniteľnosť eskalácie oprávnení Azure Functions zdôrazňuje dôležitosť pravidelných bezpečnostných hodnotení a auditov pre služby založené na cloude. Organizácie by mali prijať proaktívny prístup k bezpečnosti tým, že budú dodržiavať princíp najmenších oprávnení a bezpečnostne osvedčené postupy, a pravidelne preskúmavajú a auditujú konfiguráciu svojich služieb založených na cloude.

Podniknutím týchto krokov môžte zabezpečiť integritu a bezpečnosť svojich dát v cloude a znížiť riziko neoprávneného prístupu. Kontaktuje nás už dnes a my Vám pripravíme ponuku na mieru, sme Citadelo - hackeri na Vašej strane!

O autorovi

Citadelo
Citadelo
Citadelo je dom plný etických hackerov na vašej strane. Pomáhame otestovať ich informačnú bezpečnosť. Podrobte svoje IT prostredie výzve a odhaľte, do akej miery sú vaše citlivé dáta chránené.
Zobraziť viac od autora

Podobné blogy