gematik ref-idp-server
Open Redirect durch unvalidierte redirect_uri
Der gematik ref-idp-server enthält eine Open-Redirect-Schwachstelle im Error-Handler. Bei fehlgeschlagener Parametervalidierung wird die redirect_uri aus der HTTP-Anfrage ohne Prüfung gegen registrierte OAuth-Clients verwendet, wodurch Angreifer Benutzer auf bösartige Seiten umleiten können.
Beschreibung
Im normalen Authentifizierungsablauf wird der redirect_uri-Parameter im Controller-Methodenkörper gegen registrierte OAuth-Clients validiert. Jakarta Bean Validation-Annotationen an Anfrageparametern (wie @Pattern auf state, nonce, code_challenge und code_challenge_method) werden jedoch ausgewertet, bevor der Controller-Body ausgeführt wird.
Im Normalablauf wird die redirect_uri gegen registrierte Clients validiert:
IdpController.java:95
idpAuthenticator.validateRedirectUri(clientId, redirectUri);Diese Validierung befindet sich jedoch im Controller-Methodenkörper. Wenn Jakarta Bean Validation-Annotationen an Parametern fehlschlagen, wird eine ConstraintViolationException geworfen, bevor der Controller-Body ausgeführt wird. Die Exception wird von buildForwardingError behandelt, der die redirect_uri direkt aus der HTTP-Anfrage liest und für eine 302-Weiterleitung verwendet, ohne jemals validateRedirectUri aufzurufen:
IdpServerExceptionHandler.java:100-130
final String redirectUri = request.getParameter("redirect_uri");if (redirectUri == null) { // ... return 400} else { final UriBuilder uriBuilder = UriBuilder.fromPath(redirectUri) .queryParam("error", ...) .queryParam("gematik_code", ...); // ... response.setHeader(HttpHeaders.LOCATION, location.toString()); return new ResponseEntity<>(HttpStatus.FOUND);}Die redirect_uri-Validierung in createIdpErrorResponse greift nur bei MissingServletRequestParameterException, nicht bei ConstraintViolationException. Jede Anfrage, die einen Parameterformat-Validierungsfehler auslöst, leitet daher zur beliebigen redirect_uri des Angreifers weiter.
Ein Angreifer kann dies ausnutzen, indem er eine Anfrage mit einer gültigen client_id aber einem absichtlich fehlerhaften code_challenge sendet. Der Wert entspricht nicht dem erwarteten Regex-Muster, was Fehlercode 2010 mit HTTP-Status 302 auslöst. Der Error-Handler leitet den Benutzer dann zur vom Angreifer kontrollierten URL weiter:
Proof of Concept
curl -v 'https://idp.example.com/sign_response?\ client_id=eRezeptApp&\ redirect_uri=https://evil.com&\ response_type=code&\ scope=openid+e-rezept&\ code_challenge=too_short&\ code_challenge_method=S256&\ state=x&nonce=y'Auswirkung
- OAuth-Phishing: Angreifer können Links erstellen, die scheinbar von der vertrauenswürdigen IDP-Domain stammen, aber Benutzer im Gesundheitswesen auf eine Phishing-Seite umleiten.
- Diebstahl von Anmeldedaten durch Social Engineering in Kombination mit einer überzeugenden Phishing-Seite.
Abhilfe
Aktualisieren Sie auf ref-idp-server Version 30.0.5 oder höher, die die redirect_uri in allen Fehlerpfaden validiert.
Referenzen
Wer wir sind
Die Sicherheitsforscher hinter diesem Advisory.

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

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