Oviva epa4all-client
VAU-Signature-Verification-Bypass
In SignedPublicKeysTrustValidatorImpl.isTrusted() verwirft die ECDSA-Prüfung der signierten öffentlichen VAU-Server-Schlüssel den booleschen Rückgabewert von Signature.verify(). Die Methode fällt unabhängig vom Prüfergebnis zu return true durch, wodurch ein Angreifer im Netzwerk eigene Schlüssel in den VAU-Handshake einschleusen kann.
Beschreibung
Der Trust-Validator berechnet alles, was zur Authentifizierung der signierten öffentlichen Server-Schlüssel nötig ist, und verwirft dann den einen entscheidenden booleschen Wert:
SignedPublicKeysTrustValidatorImpl.java:39-56
var ecdsa = Signature.getInstance("SHA256withECDSA", BouncyCastleProvider.PROVIDER_NAME);ecdsa.initVerify(certs.cert());ecdsa.update(signedPublicKeys.signedPubKeys());
var signatureDer = ECDSA.transcodeSignatureToDER(signedPublicKeys.signatureEs256());ecdsa.verify(signatureDer);
// fällt durch zu:return true;Dieselbe Codebasis enthält bereits das korrekte Muster in einem benachbarten Verifier:
BrainpoolJwsVerifier.java:53
return sig.verify(derSignature);Da die Zertifikatskette und OCSP tatsächlich geprüft werden, leitet ein netzwerkpositionierter MITM das echte Zertifikat und die OCSP-Antwort des Servers vom Upstream weiter und ersetzt nur die öffentlichen VAU-Schlüssel, die er mit einem Wegwerf-Schlüssel signiert. Kette und OCSP passieren; die falsche Signatur auf den untergeschobenen Schlüsseln ist das Einzige, was fehlschlagen sollte, und dieses Ergebnis wird verworfen. Dieselbe Grundursache (eine verworfene Signaturprüfung der Server-Schlüssel) tritt im gesamten ePA-VAU-Ökosystem auf; siehe gematik: VAU-Handshake führt nur 2 von 6 vorgeschriebenen Server-Schlüssel-Prüfungen aus.
Auswirkung
- Ein Angreifer im selben Netzwerk wie der ePA-Client (etwa im lokalen Klinik-Netzwerk, in dem der ePA-Konnektor steht) ersetzt im VAU-Handshake die ECDH- und Kyber-Public-Keys durch eigene. Der Client leitet Session-Keys aus den Angreifer-Schlüsseln ab und gewährt damit vollen Klartext-Zugriff auf den ePA-Verkehr: Dokumenten-Writes, Dokumenten-Reads und Autorisierungsflüsse.
- Während eines Testlaufs erfasste ein einzelner Relay das echte Zertifikat und die OCSP-Antwort des Upstream-Servers, präsentierte sie zusammen mit angreiferkontrollierten VAU-Schlüsseln, deren Signatur nicht verifizierte, und schloss den M1-M4-Handshake ab; anschließend las er die Einwilligungsentscheidungen einer Betroffenen, modifizierte eine zweite Antwort und schleuste einen dritten Patientendatensatz über den einen gekaperten Kanal ein.
Abhilfe
Aktualisieren Sie epa4all-client auf 1.2.1 oder höher. Der Fix liest den booleschen Rückgabewert von Signature.verify() und gibt false zurück, wenn die Signatur nicht passt, anstatt ihn zu verwerfen. Ergänzen Sie einen Unit-Test, der prüft, dass isTrusted() bei einer ungültigen Signatur false zurückgibt; zum Zeitpunkt der Offenlegung umgingen die Handshake-Tests die Signaturprüfung mit einer permissiven s -> true-Lambda, sodass das Verwerfen nie ausgeführt wurde.
Checkliste für Betreiber
epa4all-client auf 1.2.1 oder höher aktualisieren.
Jede veröffentlichte Version bis einschließlich 1.2.0 ist betroffen. Der Fix ist Pull Request #34: das
Signature.verify()-Ergebnis lesen und im Fehlerfall abbrechen.Eigene Forks auf verworfene verify()-Aufrufe durchsuchen.
Jeder
verify(...)-Aufruf, dessen boolescher Rückgabewert nicht gelesen wird, entspricht keiner Prüfung. Suchen Sie nachSignature.verify,.verify(auf JWS-/JWT-Verifiern und Ähnlichem über Ihre VAU- und IDP-Pfade hinweg.Einen Negativtest für den Trust-Validator ergänzen.
Prüfen Sie, dass
isTrusted()bei einer strukturell gültigen, aber falschen Signaturfalsezurückgibt. Tests, die das Vertrauen mit einers -> true-Lambda stubben, führen den echten Validator nie aus und bestehen gegen den verwundbaren Code.Mit selbstsigniertem Gegenpart testen.
Bauen Sie einen lokalen VAU-Gegenpart, der angreiferkontrollierte öffentliche Schlüssel mit einer nicht passenden Signatur zurückgibt. Der Client muss den Handshake ablehnen.
Bewertung im Detail
Referenzen
So können wir helfen
Wer wir sind
Die Sicherheitsforscher hinter diesem Sicherheitshinweis.

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

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.
