AZURE FUNCTIONS PRIVILEGIEN - ERWEITERUNG

AZURE FUNCTIONS PRIVILEGIEN - ERWEITERUNG

Der Serverless-Computing-Dienst Azure Functions wird von vielen Unternehmen genutzt, um ihre Anwendungen und Arbeitsabläufe in der Cloud auszuführen. Jüngste Untersuchungen von Cybersecurity-Experten haben jedoch eine kritische Schwachstelle in Azure Functions aufgedeckt, die es einem Angreifer ermöglichen kann, unbefugten Zugriff auf sensible Daten zu erhalten und seine Rechte auszuweiten.

In diesem Artikel gehen wir auf die technischen Details der Schwachstelle ein und erläutern die Schritte, die Unternehmen durchführen können, um ihre Azure Functions-Bereitstellungen zu sichern.

Sicherheitsanfälligkeit: Privilegien-Eskalation durch Azure Functions

Die Schwachstelle in Azure Functions rührt von einer REST-API-Methode her, die es einem Angreifer mit Leserechten (z. B. der Rolle “Reader”) ermöglicht, sensible Daten aus dem Dateisystem zu extrahieren, auf dem eine Azure Function läuft.

Das Azure Interface bietet Nutzern (mit Reader- oder höheren Rechten) die Möglichkeit, auf Dateien zuzugreifen, die sich auf die Funktions-App beziehen, einschließlich des Codes für die Anwendungsendpunkte (Funktionen). In der Azure-Benutzeroberfläche lassen sich im Abschnitt “App files” die Dateien anzeigen, die sich im Stammverzeichnis der Funktions-App befinden. Dazu gehören in der Regel Anforderungsdateien und jegliche Hilfsdateien, die für alle zugrunde liegenden Funktionen zugänglich gemacht werden sollen.

OBR1.png

Innerhalb der einzelnen Funktionen (HttpTrigger1) kann man zum Abschnitt Code + Test navigieren, um den Quellcode für die Funktion einzusehen. Ähnlich wie der Code im Runbook eines Automatisierungskontos ist dieser Funktionscode für jeden mit Leseberechtigung zugänglich. Da Entwickler Anmeldeinformationen, wie API-Schlüssel, Basic Auth, JWT-Token usw., in der Regel fest im Quellcode codieren, ist es nicht ungewöhnlich, in diesem Abschnitt fest codierte Anmeldeinformationen zu entdecken. Dies ist auch das, worauf wir uns während des Audits konzentrieren. Sensible Daten sollten an einem sicheren Ort gespeichert werden, z. B. in einem Key Vault.

OBR2.png

Beide Methoden des Dateizugriffs hängen von einer nicht öffentlichen API ab, die durch Überwachung des Browserverkehrs bei Verwendung der Azure-Schnittstelle aufgefunden werden kann. Der nachfolgende API-Endpunkt management.azure.com nutzt die VFS-Funktion zum Aufzählen von Dateien in der Function App:

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
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

Mit dieser Methode kann ein Angreifer jede Datei / jedes Verzeichnis (mit Ausnahme solcher, die auf den Root-Benutzer beschränkt sind, wie z. B. das Verzeichnis “/root”) im Dateisystem lesen, auf dem eine Azure Function läuft. Beispielsweise kann ein Angreifer so die Datei “/etc/passwd” lesen, um eine Liste der Benutzerkonten im System zu erhalten.

OBR5.png

Die Sicherheitslücke wird kritisch, wenn ein Angreifer interessante Parameter entdeckt, die in Systemumgebungsvariablen gespeichert sind. Indem er im Wesentlichen dieselbe REST-API-Methode verwendet, jedoch mit dem anderen URL-Pfad “/proc/self/environ”, kann ein Angreifer Umgebungsvariablen aus dem Dateisystem extrahieren, auf dem eine Azure-Funktion läuft.

Der folgende Befehl kann verwendet werden, um die Umgebungsvariablen abzurufen, sie in eine temporäre Datei zu schreiben und auszugeben.

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

Sobald der Angreifer in den Besitz der sensiblen Daten gelangt ist, kann er sie zur Privilegienerweiterung und zum unbefugten Zugriff auf die Azure Function verwenden.

Die Ausgabe zeigt eine Reihe von interessanten Variablen.

OBR5.png

Nach dem Öffnen der im CONTAINER_START_CONTEXT_SAS_URI abgelegten SAS-URL wurde der JSON-Blob “encryptedContext” angezeigt, der praktischerweise in dem für diese Daten verwendeten Parameter “CONTAINER_ENCRYPTION_KEY” gespeichert ist.

OBR6.png

Unter Verwendung von CyberChef lassen sich die Komponenten zur Entschlüsselung der Daten schnell zusammenstellen.

So sieht das Rezept in CyberChef aus:

OBR7.png

Nach der Entschlüsselung erhalten wir einen weiteren JSON-Blob von Daten, dieses Mal mit nur einem verschlüsselten Segment (“EncryptedEnvironment”). Wir werden nicht mit diesen Daten interagieren, da die entscheidenden Informationen bereits weiter unten entschlüsselt worden sind:

  • Master Key (https://learn.microsoft.com/en-us/azure/azure-functions/security-concepts?tabs=v4#function-access-keys)
  • Function Key (https://learn.microsoft.com/en-us/azure/azure-functions/security-concepts?tabs=v4#function-access-keys)
  • Connection Strings
  • MSISecret
  • AzureWebEncryptionKey
  • WEBSITE_AUTH_SIGNING_KEY
  • Besondere Geheimnisse der Funktion
  • Blob-Speicher SAS-URLs

Es ist erwähnenswert, dass das “MICROSOFT_PROVIDER_AUTHENTICATION_SECRET” auch vorhanden ist, wenn die Funktions-App für die Authentifizierung von Benutzern über Azure AD konfiguriert wurde. Dabei handelt es sich um eine Anmeldeinformation für die App-Registrierung, die für den Zugriff auf den Mandanten von Vorteil sein kann.

Während die Jobspeicherdaten einen bequemen Weg zum Zugriff auf das Function App Storage Account bieten, liegt unser primäres Interesse im Function “Master” App Secret, da es zum Überschreiben der Funktionen in der App verwendet werden kann. Durch Überschreiben dieser Funktionen lässt sich eine vollständige Befehlsausführung innerhalb des Containers erreichen. Dies würde uns auch den Zugriff auf alle verknüpften verwalteten Identitäten in der Function App ermöglichen.

Behebung: Schritte zur Sicherung von Azure Functions

Der erste Bericht über dieses Problem wurde dem MSRC am 23. November 2022 vorgelegt.

Es gab mehrere vorläufige Versuche, das Problem zu lösen, aber schließlich wurde die anfällige API für die Reader-Rolle am 17. Januar 2023 eingeschränkt. Am 24. Januar 2023 zog Microsoft die Korrektur zurück, nachdem sie zu einigen Kundenproblemen geführt hatte.

Am 6. März 2023 führte Microsoft die Korrektur erneut ein, um das Problem zu beheben. Die weltweite Einführung war am 8. März abgeschlossen. Zum Zeitpunkt der Erstellung dieses Artikels besitzt die Reader-Rolle nicht mehr die Fähigkeit, Dateien mit den Function App VFS-APIs zu lesen. Es ist erwähnenswert, dass die Linux-Eskalationsroute eine machbare Option bleibt, wenn ein Angreifer die Befehlsausführung auf einer Linux Function App hat.

Wir empfehlen, das Prinzip des geringsten Privilegs zu befolgen. Das bedeutet, dass der Benutzer, die Rolle oder die Gruppe nur über die erforderlichen Berechtigungen verfügen sollte.

Diese Berechtigungen sollten nur für die Ressourcen isoliert werden, mit denen sie interagieren müssen (White-Listed).

Überprüfen Sie alle verwalteten Identitäten und Azure-Dienstkonten sowie deren Berechtigungen und beschränken Sie diese auf die minimal erforderlichen Berechtigungen.

Vermeiden Sie Sicherheitsrisiken, die durch ungenutzte und reduzierbare Berechtigungen entstehen, indem Sie nur geeignete Berechtigungen erteilen.

Geeignete Berechtigungen sind solche mit dem geringstmöglichen Zugriff, den eine Anwendung oder ein Benutzer benötigt, um die geforderten Aufgaben auszuführen.

Außerdem sollten Sie die Konfiguration von Azure Functions und anderen Diensten regelmäßig überprüfen, um mögliche Schwachstellen zu identifizieren und zu beheben.

Fazit

Die Azure Functions-Privilegien-Eskalationsschwachstelle unterstreicht die Bedeutung regelmäßiger Sicherheitsbewertungen und Audits für Cloud-basierte Dienste. Unternehmen sollten einen proaktiven Sicherheitsansatz verfolgen, indem sie die geringsten Privilegien und bewährte Sicherheitspraktiken anwenden und die Konfiguration ihrer Cloud-basierten Dienste regelmäßig überprüfen und auditieren.

Mit diesen Maßnahmen sind Unternehmen in der Lage, die Sicherheit und Integrität ihrer Daten in der Cloud zu gewährleisten und das Risiko eines unbefugten Zugriffs und von Datenlecks zu verringern.

Über den Autor

Citadelo
Citadelo
Citadelo is a firm of ethical hackers on your side. We think like hackers, but we don't abuse it. On the contrary, our main goal is to reveal vulnerabilities without causing damage. We have been conducting simulated attacks for our clients since 2006
Mehr von diesem Autor

Verwandte Blogs