Alle Sicherheitshinweise

med-united epa4all

TLS-Zertifikatsprüfung deaktiviert

SSLUtils.initSSLContext() installiert einen Trust-all-X509TrustManager, dessen checkServerTrusted() leer ist, und deaktiviert die Hostname-Prüfung JVM-weit. Kein Konfigurationsschalter aktiviert die Prüfung wieder, sodass ein Angreifer im Netzwerkpfad zwischen epa4all und seinen Backends (dem ePA-Aktensystem, dem IDP oder dem Konnektor) ein beliebiges Zertifikat präsentieren und den Verkehr abfangen kann.

Verfasst vonChiara Fliegner, Volker Schönefeld, Simon WeberErstveröffentlichung 2026-05-20Vollstä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)Produktmed-united epa4allBetroffene Versionen1.0.0-SNAPSHOT, alle Builds vor dem Fix vom 20.05.2026 (von der initialen SSLUtils-Implementierung bis Commit `f9351df`)Behoben inBehoben am 20.05.2026 (ergänzt Hostname- und Zertifikatsprüfungen sowie einen Keystore auf Basis der Telematik-TSL).GHSAGHSA-296w-v8f6-3rf7

Beschreibung

SSLUtils.initSSLContext() installiert den Trust-all-Kontext, aktiviert die externe DTD-Auflösung über alle XML-Parser hinweg und deaktiviert die Hostname-Prüfung für den JDK-HTTP-Client:

SSLUtils.java:52-55

sslContext.init(keyManagerFactory.getKeyManagers(), getFakeTrustManagers(), null);
System.setProperty("javax.xml.accessExternalDTD", "all");
System.setProperty("jdk.internal.httpclient.disableHostnameVerification", "true");

View source →

getFakeTrustManagers() liefert einen X509TrustManager, dessen checkServerTrusted() und checkClientTrusted() leere Methoden sind und dessen getAcceptedIssuers() leer ist, sodass jedes Zertifikat akzeptiert wird:

SSLUtils.java:71-85

public static TrustManager[] getFakeTrustManagers() {
return new TrustManager[] { new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
}};
}

View source →

Die CXF-HTTP-Transportschicht wendet denselben Trust-all-Kontext über ClientFactory an (tlsParams.setSslContext(createFakeSSLContext())), und ServicePortProvider schaltet zusätzlich die Common-Name-Prüfung ab (tlsParams.setDisableCNCheck(true)) und installiert einen permissiven Hostname-Verifier (hostnameVerifier((h, s) -> true)). Das Abschalten der CN-Prüfung gilt unabhängig davon, ob der zertifikats- oder der nicht-zertifikatsbasierte Authentifizierungspfad gewählt wird.

Dies ist die Transportschicht-Hälfte einer zweischichtigen Lücke: Auch die Anwendungsschicht authentifiziert den VAU-Server nicht (siehe med-united: VAU-Server-Authentifizierungs-Bypass in epa4all). Beide sind unabhängig; bei deaktivierter TLS-Prüfung gibt es nichts, worauf man zurückfallen könnte, und selbst bei wiederhergestellter Prüfung benötigt der VAU-Server weiterhin eine Authentifizierung auf Anwendungsebene.

Auswirkung

  • Ein Angreifer im Netzwerkpfad zwischen epa4all und einem Backend (dem ePA-Aktensystem, dem IDP oder dem Konnektor) terminiert die TLS-Verbindung mit einem beliebigen Zertifikat, auch einem selbstsignierten, und leitet den Verkehr weiter. Die Verbindung kommt zustande, weil keine Zertifikats- oder Hostname-Prüfung sie ablehnt.
  • Der abgefangene Verkehr enthält Versichertenkennungen, Dokumenteninhalte, IDP-Credential-Austausch und SMC-B-Kartenoperationen. Der Angreifer kann all dies mitlesen und verändern. Werden der IDP-Credential-Austausch oder die SMC-B-Operationen abgegriffen, reicht das über die zum Zeitpunkt verarbeitete Betroffene hinaus auf jede Betroffene, für die die abgefangene SMC-B-Karte tätig werden kann.
  • Im produktiven Bereitstellungsmodell passt das Angreifermodell ins Praxisnetz: epa4all läuft als On-Premise-Container in einer Arztpraxis, ist aus dem lokalen Netz erreichbar und baut ausgehende Verbindungen zur gematik-Infrastruktur auf.

Abhilfe

Aktualisieren Sie auf einen Build vom 20.05.2026 oder später, der die Zertifikats- und Hostname-Prüfung wiederherstellt und die gematik TI-PKI über einen Telematik-TSL-basierten Keystore verankert. Für betroffene Builds existiert kein Workaround. Das alleinige Wiederherstellen des JVM-Standard-Truststores reicht jedoch nicht aus: Das ePA-Aktensystem, der VAU-Proxy und der IDP präsentieren Zertifikate, die in der gematik TI-PKI wurzeln (etwa GEM.RCA-X), die nicht in der Standard-Mozilla-Root-Liste enthalten ist. Eine Standard-Trust-Konfiguration würde öffentlich ausgestellte Zertifikate akzeptieren und dabei den legitimen gematik-Ursprung nicht authentifizieren; die Trust-Anchors müssen daher die veröffentlichten TI-PKI-Roots sein, bei aktivierter Hostname-Prüfung. Kombinieren Sie diesen Fix mit med-united: VAU-Server-Authentifizierungs-Bypass; beide sind erforderlich.

Checkliste für Betreiber

  • Auf den Build vom 20.05.2026 oder später aktualisieren.

    Alle 1.0.0-SNAPSHOT-Builds vor diesem Datum sind betroffen. Der Fix stellt die Zertifikats- und Hostname-Prüfung wieder her und ergänzt den Telematik-TSL-Keystore.

  • Prüfen, dass die Trust-Anchors die TI-PKI-Roots sind, nicht der System-Standard.

    Die gematik-Backends präsentieren Zertifikate, die in der TI-PKI wurzeln (GEM.RCA-X), die der Standard-JVM-/Mozilla-Truststore nicht enthält. Binden Sie einen dedizierten Truststore aus den veröffentlichten gematik-Root-CAs an den CXF-/WebClient-Transport für diese Hosts und lassen Sie die Hostname-Prüfung aktiviert.

  • Sicherstellen, dass kein permissiver Hostname-Verifier verbleibt.

    Prüfen Sie, dass jdk.internal.httpclient.disableHostnameVerification, tlsParams.setDisableCNCheck(true) und jeder hostnameVerifier((h, s) -> true) aus dem Produktionspfad entfernt sind. Ein Truststore mit deaktivierter Hostname-Prüfung lässt sich weiterhin durch jedes Zertifikat umgehen, das auf einen vertrauenswürdigen Root zurückführt.

  • Diesen Fix mit dem VAU-Server-Authentifizierungs-Fix kombinieren.

    TLS-Pinning authentifiziert den Transport, nicht die signierten öffentlichen Schlüssel des VAU-Servers. Beide Schichten müssen prüfen; siehe med-united: VAU-Server-Authentifizierungs-Bypass.

Bewertung im Detail

AV:ADer Angreifer muss im Netzwerkpfad zwischen epa4all und seinen Backends sitzen. Im On-Premise-Betrieb ist das das Praxis-LAN-Segment, eine Position im Nachbarnetz statt eines beliebigen Internet-Ursprungs.AC:LEin einziges selbstsigniertes Zertifikat wird akzeptiert; keine Zeit- oder Umgebungsbedingungen.PR:NAußer der Netzwerkposition werden keine Credentials benötigt.UI:Nepa4all öffnet die ausgehenden Verbindungen nach eigenem Zeitplan; keine Nutzerinteraktion.S:UDie Auswirkung ist auf den Verkehr beschränkt, den epa4all mit seinen Backends austauscht.C:HKlartext-Zugriff auf Versichertenkennungen, Dokumenteninhalte und IDP-Credential-Austausch auf den abgefangenen Verbindungen.I:HDer Angreifer kann den weitergeleiteten Verkehr in beide Richtungen verändern, einschließlich Dokumenteninhalten und Authentifizierungsaustausch.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.