Alle Sicherheitshinweise

gematik Authenticator

Hijacking des Authentifizierungsablaufs

Ein bösartiger authenticator://-Deep-Link kann den gematik Authenticator auf einen angreiferkontrollierten Identity Provider lenken. Dabei wird die per Smartcard signierte Authentifizierungs-Assertion der betroffenen Person abgegriffen und per Relay an den echten IDP weitergereicht, um die Anmeldung in deren Namen abzuschließen.

Verfasst vonVolker Schönefeld, Simon WeberErstveröffentlichung 2026-03-26Vollständige Offenlegung 2026-05-21
SchweregradKritischCVSS 9.3CVSS-3.1-VektorAV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:NCWECWE-940 (Improper Verification of Source of a Communication Channel)Produktgematik AuthenticatorBetroffene VersionenAlle Versionen vor v4.16.0 (der Deep-Link-IDP-Ablauf ist seit mindestens v3.1.0 vorhanden).Behoben inv4.16.0CVECVE-2026-33875GHSAGHSA-qg87-cf56-2rmr

Beschreibung

Der gematik Authenticator registriert sich als Handler für das benutzerdefinierte URI-Schema authenticator:// und akzeptiert einen challenge_path-Parameter, der den Identity Provider (IDP) für eine OpenID-Connect-Anmeldung benennt. Keine Allowlist schränkt ein, welcher Host als IDP dienen darf, sodass ein präparierter Deep Link den Authenticator auf einen angreiferkontrollierten Server lenken kann. Der Link lässt sich über eine Webseite, eine E-Mail oder einen QR-Code zustellen.

Der Parameter wird nur auf die URL-Form geprüft, nicht auf die Domain. Jede http/https-URL wird akzeptiert:

challenge_path-Prüfung akzeptiert jede HTTP(S)-URL

export async function validateChallengePath(challengePath: string) {
if (!COMMON_USED_REGEXES.URL.test(challengePath)) { /* throw */ }
}
// constants.ts
URL: /(http|https):\/\/(\w+:?\w*@)?(\S+)(:\d+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/,

View source →

Der Authenticator ruft das OpenID-Connect-Discovery-Dokument von diesem Host ab und decodiert es mit jsonwebtoken.decode(), das keine Signaturprüfung durchführt:

Discovery-Dokument wird ohne Signaturprüfung akzeptiert

const res = await window.api.httpGet(
context.state.idpHost + IDP_ENDPOINTS.OPENID_CONFIGURATION, { /* ... */ }
);
context.commit('setOpenIdConfiguration', jsonwebtoken.decode(res.data));

View source →

jsonwebtoken.decode() decodiert das Token nur per Base64; die Dokumentation der Bibliothek warnt ausdrücklich, dass es nicht für nicht vertrauenswürdige Nachrichten verwendet werden darf. Das unsignierte Dokument des Angreifers (alg: none) wird akzeptiert, und seine Felder authorization_endpoint und uri_puk_idp_enc werden unverändert genutzt. Anschließend verschlüsselt der Authenticator die per Smartcard signierte Assertion mit dem öffentlichen Schlüssel des Angreifers und sendet sie per POST an dessen Endpunkt:

Signierte Assertion wird an den angreiferkontrollierten Endpunkt gesendet

const payload = 'signed_challenge=' + state.jweChallenge;
const url = context.state.openIdConfiguration.authorization_endpoint;
const response = await window.api.httpPost(url, payload, { /* ... */ });

View source →

Das gesendete JWE umschließt ein JWS mit dem X.509-AUT-Zertifikat der Karte (x5c-Header) und der Smartcard-Signatur. Da der Angreifer den Verschlüsselungsschlüssel besitzt, kann er es entschlüsseln und die signierte Assertion gewinnen; dieser Abgriff der Credentials ist gegen die Mock-Umgebung Ende-zu-Ende nachgewiesen. Die Challenge-JWT enthält keine Umgebungsbindung (kein cnf-Claim, keine Quell-IP, keine TLS-Sitzungskennung), sodass die abgegriffene Assertion ihrerseits an den echten IDP weitergereicht werden kann, um die Anmeldung als betroffene Person abzuschließen — bewertet anhand der Spezifikation und der Referenz-IDP-Implementierung, nicht gegen die Produktivinfrastruktur getestet.

IDP-Zertifikats-Pinning war in v4.4.1 vorhanden, wurde aber in v4.12.0 zugunsten des Betriebssystem-Truststores entfernt. Der Host des Angreifers benötigt daher nur ein gewöhnliches, öffentlich vertrauenswürdiges TLS-Zertifikat (etwa von Let's Encrypt). Der private Schlüssel der Smartcard verlässt die Karte nie; die Schwäche besteht darin, dass der Authenticator den IDP, mit dem er spricht, nicht authentifiziert.

Auswirkung

  • Ein Angreifer greift die signierte Authentifizierungs-Assertion der betroffenen Person ab, einschließlich ihres X.509-AUT-Zertifikats und der Smartcard-Signatur, ohne Rechte, ohne Schadsoftware und ohne Kompromittierung von Konnektor oder Smartcard.
  • Da die Challenge keine Sitzungsbindung trägt, lässt sich die Assertion an den echten IDP weiterreichen, um die Anmeldung als betroffene Person abzuschließen. Dabei werden Token in deren Namen für Dienste der Telematikinfrastruktur wie ePA, E-Rezept und Versichertendaten ausgestellt.
  • Die betroffene Person sieht nur eine normal wirkende Authentifizierungsaufforderung. Der Ablauf lässt sich über eine Webseite, einen E-Mail-Link, einen QR-Code oder jeden lokalen Prozess auslösen, der den Protokoll-Handler aufruft.

Abhilfe

Aktualisieren Sie auf v4.16.0 oder höher. Die dauerhaften Korrekturen sind: challenge_path auf eine Allowlist bekannter gematik-IDP-Hosts beschränken; das Discovery-Dokument und die Challenge mit jsonwebtoken.verify() gegen den gepinnten Signaturschlüssel des IDP prüfen statt mit decode(); das IDP-TLS-Zertifikats-Pinning wiederherstellen und prüfen, dass die Endpunkte aus dem Discovery-Dokument auf dem Allowlist-Host bleiben; sowie DPoP (RFC 9449) einführen, sodass die Challenge an einen sitzungsspezifischen Schlüssel gebunden ist, den ein Angreifer beim Weiterreichen der Smartcard-Signatur nicht reproduzieren kann.

Checkliste für Betreiber

  • Eingesetzte Version prüfen

    Stellen Sie sicher, dass auf jedem Arbeitsplatz gematik Authenticator v4.16.0 oder höher läuft; frühere Builds, einschließlich der produktiven App-Store-Version v4.15.3, sind betroffen.

  • authenticator://-Links als nicht vertrauenswürdig behandeln

    Die Authentifizierung sollte aus dem lokalen Primärsystem gestartet werden, niemals über einen Link in einer E-Mail, auf einer Webseite oder in einem QR-Code.

  • Auf unerwartete IDP-Hosts achten

    Wo Proxy-Logs verfügbar sind, sollte auf Authenticator-IDP-Verkehr zu Hosts außerhalb der bekannten gematik-Telematikinfrastruktur-Domains alarmiert werden.

Bewertung im Detail

AV:NDer bösartige Deep Link wird aus der Ferne über Webseite, E-Mail oder QR-Code zugestellt.AC:LEs sind keine besonderen Bedingungen nötig; der Ablauf startet mit einem Klick.PR:NDer Angreifer benötigt keine Rechte und kein Konto auf dem Ziel.UI:RDie betroffene Person muss den Link öffnen und die Smartcard-Aufforderung bestätigen.S:CDie Kompromittierung wechselt vom Authenticator zur Identität, die am IDP behauptet wird, und betrifft damit Dienste der Telematikinfrastruktur über die Anwendung hinaus.C:HDie signierte Assertion und, per Relay, die vollständige TI-Identität der betroffenen Person werden offengelegt.I:HAm TI-Dienst können Aktionen als betroffene Person ausgeführt werden.A:NKeine Auswirkung auf die Verfügbarkeit.

Der Schweregrad entspricht dem GHSA-Score des Herstellers (CVSS 9.3).

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.