Alle Sicherheitshinweise

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.

Verfasst vonChiara Fliegner, Volker Schönefeld, Simon WeberErstveröffentlichung 2026-05-05Vollständige Offenlegung 2026-05-28
SchweregradHochCVSS 8.1CVSS-3.1-VektorAV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NCWECWE-295 (Improper Certificate Validation)ProduktOviva epa4all-clientBetroffene VersionenAlle Versionen bis einschließlich 1.2.0 (eingeführt mit dem initialen Commit des Trust-Validators)Behoben in1.2.1 (enthält Pull Request #34)CVECVE-2026-44900GHSAGHSA-g8r3-5hwf-qp96

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;

View source →

Dieselbe Codebasis enthält bereits das korrekte Muster in einem benachbarten Verifier:

BrainpoolJwsVerifier.java:53

return sig.verify(derSignature);

View source →

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 nach Signature.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 Signatur false zurückgibt. Tests, die das Vertrauen mit einer s -> 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

AV:ADer Angreifer muss im Netzwerkpfad zwischen ePA-Client und Backend sitzen. Im Bereitstellungsmodell ist das das lokale Klinik-Netzwerk, in dem der ePA-Konnektor steht, eine Position im Nachbarnetz.AC:LEin MITM leitet das echte Upstream-Zertifikat und die OCSP-Antwort ohnehin weiter; nur die Signatur über den untergeschobenen Schlüsseln wird gefälscht, und deren Prüfergebnis wird bedingungslos verworfen. Keine Zeit- oder Umgebungsbedingungen.PR:NAußer der Netzwerkposition werden keine Credentials benötigt.UI:NDer Client führt den VAU-Handshake nach eigenem Zeitplan aus; keine Nutzerinteraktion.S:UDie Auswirkung ist auf den VAU-Kanal und die ePA-Payloads beschränkt, die er transportiert.C:HKlartext-Zugriff auf ePA-Dokumenten-Reads und Autorisierungsmaterial der Betroffenen, für die der Client gerade tätig ist.I:HKlartext-Zugriff auf und Modifikation von ePA-Dokumenten-Writes und Autorisierungsflüssen auf dem gekaperten Kanal.A:NKeine Auswirkung auf die Verfügbarkeit.

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.