Azure Functions: Zranitelnost v eskalaci oprávnění.

Azure Functions: Zranitelnost v eskalaci oprávnění.

Zranitelnost v eskalaci oprávnění v Azure Functions: Tohle je probuzení pro bezpečnostní profesionály!

Azure Functions, služba bezserverového počítání, je hojně využívána organizacemi ke spouštění jejich aplikací a pracovních postupů v cloudu. Nedávný výzkum odborníků na kybernetickou bezpečnost však odhalil kritickou zranitelnost v Azure Functions, která může útočníkovi umožnit získat neoprávněný přístup k citlivým datům a zvýšit oprávnění.

V tomto článku se ponoříme do technických detailů této zranitelnosti a prozkoumáme kroky, které mohou organizace podniknout k zabezpečení svých nasazení Azure Functions.

Zranitelnost: Zvýšení oprávnění prostřednictvím funkcí Azure Functions

Zranitelnost v Azure Functions vychází z metody REST API, která umožňuje útočníkovi s oprávněním ke čtení (např. role Reader) získat citlivá data ze souborového systému, na kterém běží funkce Azure Function.

Rozhraní Azure poskytuje uživatelům (s oprávněním Reader nebo vyšším) možnost přístupu k souborům souvisejícím s aplikací Function, včetně kódu koncových bodů aplikace (funkcí). V rámci rozhraní Azure lze v části označené App files (Soubory aplikace) zobrazit soubory nacházející se v kořenovém adresáři aplikace Function App. Ty obvykle zahrnují soubory s požadavky a všechny pomocné soubory, které chcete zpřístupnit pro všechny základní funkce.

OBR1.png

U jednotlivých funkcí (HttpTrigger1) lze navigovat do sekce Code + Test a zkontrolovat zdrojový kód funkce. Podobně jako kód nalezený v Runbooku účtu Automation, je tento kód funkce přístupný komukoli s oprávněními Čtenáře. Vývojáři obvykle do zdrojového kódu tvrdě zakódují pověření, jako jsou klíče API, Basic auth, JWT token atd., takže není neobvyklé objevit v této sekci tvrdě zakódovaná pověření. To je také to, na co se zaměřujeme během auditu. Citlivá data by měla být uložena na bezpečném místě, jako je například Key Vault.

OBR2.png

Obě metody přístupu k souborům závisí na nepublikovaném API, které lze nalézt sledováním provozu vašeho prohlížeče při používání Azure Interface. Následný koncový bod API management.azure.com využívá funkci VFS k výčtu souborů v aplikaci 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

Použitím této metody může útočník číst jakýkoli soubor/adresář (kromě těch, které jsou omezeny na uživatele root, jako je adresář “/root”) na souborovém systému, na kterém běží Azure Function. Například útočník může číst soubor “/etc/passwd” a získat seznam uživatelských účtů v systému.

OBR4.png

Zranitelnost se stává kritickou, když útočník objeví zajímavé parametry uložené v systémových proměnných prostředí. Použitím téže metody REST API, ale s odlišnou cestou URL “/proc/self/environ”, může útočník extrahovat proměnné prostředí ze souborového systému, na kterém běží Azure Function.

Následující příkaz lze použít k získání environmentálních proměnných, zapsání do dočasného souboru a jeho výstupu.

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

Jakmile útočník získá citlivá data, může je použít k eskalaci oprávnění a získání neoprávněného přístupu k Azure Function.

Výstup odhaluje řadu zajímavých proměnných.

OBR5.png

Po otevření SAS URL uložené v CONTAINER_START_CONTEXT_SAS_URI byl zobrazen JSON blob “encryptedContext”. Pohodlně máme šifrovací klíč uložený v parametru “CONTAINER_ENCRYPTION_KEY”, který se používá pro tato data.

OBR6.png

S využitím CyberChef můžeme rychle sestavit komponenty k dešifrování dat.

Takto vypadá recept v CyberChef:

OBR7.png

Po dešifrování získáme další JSON blob data, tentokrát pouze s jedním šifrovaným segmentem (“EncryptedEnvironment”). S těmi daty nebudeme interagovat, protože klíčové informace již byly dešifrovány níže:

  • Hlavní klíč (https://learn.microsoft.com/en-us/azure/azure-functions/security-concepts?tabs=v4#function-access-keys)
  • Funkční klíč (https://learn.microsoft.com/en-us/azure/azure-functions/security-concepts?tabs=v4#function-access-keys)
  • Připojovací řetězce
  • MSISecret
  • AzureWebEncryptionKey
  • WEBSITE_AUTH_SIGNING_KEY
  • Specifická tajemství funkce
  • SAS URL úložiště Blob

Stojí za zmínku, že “MICROSOFT_PROVIDER_AUTHENTICATION_SECRET” bude také přítomen, pokud byla aplikace Function nakonfigurována tak, aby ověřovala uživatele prostřednictvím Azure AD. Jedná se o pověření registrace aplikace, které by mohlo být pro získání přístupu k nájemci užitečné.

Zatímco data úložiště pracovních míst poskytují pohodlnou cestu k přístupu k účtu úložiště aplikace Function App, náš hlavní zájem spočívá v tajemství aplikace “Master” Function, protože jej lze použít k přepsání funkcí v aplikaci. Přepsaním těchto funkcí můžeme dosáhnout úplného provedení příkazu v kontejneru. To by nám také umožnilo přístup ke všem propojeným spravovaným identitám v aplikaci Function App.

Náprava: Kroky k zabezpečení Azure Functions

První hlášení o této záležitosti bylo předloženo MSRC 23. listopadu 2022.

Bylo provedeno několik předběžných pokusů o vyřešení problému, ale nakonec bylo zranitelné API omezeno pro roli čtenáře 17. ledna 2023. Dne 24. ledna 2023 Microsoft stáhl opravu poté, co vedla k některým problémům zákazníků.

Dne 6. března 2023 Microsoft znovu zavedl opravu, aby řešil problém. Celosvětové nasazení bylo dokončeno 8. března. V době psaní, role čtenáře již nemá schopnost číst soubory pomocí API VFS aplikace Function. Stojí za zmínku, že cesta eskalace Linuxu zůstává proveditelnou možností, pokud útočník má spuštění příkazu v aplikaci Linux Function.

Doporučujeme dodržovat zásadu nejmenšího oprávnění. To znamená, že uživatel, role nebo skupina by měla mít pouze požadovaná oprávnění. Tato oprávnění by měla být izolována (zařazena na bílou listinu) pouze k zdrojům, se kterými potřebují interagovat.

Zkontrolujte všechny spravované identity a účty služeb Azure a jejich oprávnění a omezte je na minimální potřebná oprávnění.

Vyhněte se bezpečnostním rizikům spojeným s nepoužívanými a redukovatelnými oprávněními tím, že budete udělovat pouze vhodná oprávnění. Vhodná oprávnění jsou ta s nejmenším povoleným přístupem, který je potřebný pro aplikaci nebo uživatele k vykonání jejich požadovaných úkolů.

Pravidelně kontrolujte a auditujte konfiguraci Azure Functions a dalších služeb, abyste identifikovali a odstranili případné potenciální zranitelnosti.

Závěr

Zranitelnost eskalace oprávnění v Azure Functions zdůrazňuje důležitost pravidelných bezpečnostních testů a auditů. Organizace by měly přijmout proaktivní přístup k bezpečnosti tím, že budou dodržovat zásadu přidělení nejnižšího oprávnění, osvědčené bezpečnostní postupy a budou pravidelně kontrolovat a auditovat konfiguraci svých služeb založených na cloudu.

Podniknutím těchto kroků mohou organizace zajistit bezpečnost a integritu svých dat v cloudu a snížit riziko neoprávněného přístupu a porušení dat. Rádi se vám na vaše zabezpečení mrkneme, kontaktujte nás již dnes. Jsme Citadelo - hackeři na Vaší straně.

O autorovi

Citadelo
Citadelo
Citadelo je dům plný etických hackerů na vaší straně. Myslíme jako útočník, avšak nezneužíváme toho. Ba naopak, naším hlavním cílem je odhalit zranitelnost bez napáchaných škod. Pro naše klienty připravujeme simulované útoky již od roku 2006. Pomáháme otestovat jejich informační bezpečnost. Podrobte své IT prostředí výzvě a odhalte, do jaké míry jsou vaše citlivá data chráněna.
Zobrazit více od autora

Podobné blogy