🟢CVE-2026-64607

Přehled

Toto oznámení se týká známé bezpečnostní chyby zjištěné v závislosti třetí strany používané v rámci DPGW.

Podrobnosti o zranitelnosti

  • CVE ID: CVE-2026-64607 (CWE-772, Neuvolnění zdroje po uplynutí doby platnosti; zveřejněno 13. srpna 2026, objevitel Yu Bao, tým kybernetické bezpečnosti společnosti PayPal)
  • Název závislosti: org.apache.httpcomponents.client5:httpclient5
  • Ovlivněná verze závislosti: 5.0-alpha1 – 5.6.2 — opraveno ve verzi 5.6.3 (aktuální verzí je 5.6.4)
  • Skóre závažnosti: 5.3 Medium (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, CISA-ADP). NVD zatím nezveřejnila vlastní analýzu; ASF hodnotí tento problém jako „důležitý“.

Verze DPGW ovlivňující verze závislostí

Všechny udržované větve deklarují httpclient5 jako přímou, explicitně zafixovanou závislost a obsahují zranitelnou verzi:

  • 1.12 — všechny verze (<= 1.12.53-REL) obsahují httpclient5 5.4.4
  • 1.13 — všechny verze (<= 1.13.32-REL), obsahuje httpclient5 5.5.1
  • 1.14 — všechny verze (<= 1.14.09-REL), obsahuje httpclient5 5.6.1

Posouzení rizik a použitelnosti

Použití
DPGW používá Apache HttpClient 5 jako univerzálního odchozího HTTP klienta. Nepoužívá se k obsluze příchozích požadavků – to je úkolem Jetty – takže zranitelná komponenta je aktivována pouze tehdy, když DPGW funguje jako klient vůči vzdálenému koncovému bodu.

Odchozí klienti jsou centrálně vytvářeni metodou org.medoro.dpgw.base.priv.webclient.WebClientFactoryImpl.createHttpClientBuilder(…), která sestavuje klasický (blokující) I/O CloseableHttpClient na základě PoolingHttpClientConnectionManager (PoolConcurrencyPolicy.STRICT, hodnoty maxConnTotal / maxConnPerRoute převzaté z konfigurace WebClientParameters). Zhruba 130 zdrojových souborů odkazuje na org.apache.hc.*; klasický klient je variantou používanou téměř všude, včetně:

  • org.medoro.dpgw.web.common.replica.CentralServerConnection — synchronizace replikace s centrálním serverem
  • org.medoro.dpgw.modules.cloudpacsclient.priv.* — volání rozhraní API CloudPACS
  • org.medoro.dpgw.modules.dexclient.priv.* — řídicí připojení DEX
  • org.medoro.dpgw.dicom.plugin.CStoreStowRSPlugin / CStoreToStowRSPlugin / CStoreToDrSejfPlugin / CMoveToCloudPACSPlugin — přesměrování DICOMweb / STOW-RS
  • org.medoro.dpgw.base.pub.license.LicenseServer, OAuth2WebClientFactoryPlugins, JWTWebClientFactoryPlugins, HelpDownloader, SharedUserAccountServlet, DPGWHttpClient

Klient asynchronního vstupu/výstupu (HttpAsyncClientBuilder, který používají SSEClient a CentralServerConnection pro svůj kanál SSE) je vytvořen metodou createHttpAsyncClientBuilder(…) a tato chyba se ho netýká.

Dekódování obsahu odpovědi je ve výchozím nastavení povoleno: WebClientParameters.httpCompression má výchozí hodnotu true a WebClientFactoryImpl volá metodu disableContentCompression() pouze v případě, že je explicitně nastavena na hodnotu false. Interceptor ContentCompressionExec — ve kterém se chyba nachází — je proto přítomen ve výchozím prováděcím řetězci každého nakonfigurovaného webového klienta.

Analýza
CVE-2026-64607 je chyba způsobující únik připojení v klasickém řetězci zpracování I/O knihovny HttpClient. Pokud odpověď obsahuje hlavičku Content-Encoding, jejíž hodnota neodpovídá podporovanému ani registrovanému kódování, dojde k selhání fáze dekódování obsahu ještě před zpracováním entity odpovědi a podkladové připojení není uvolněno zpět do správce připojení. Každá taková odpověď trvale odebere jedno připojení z fondu. Jakmile je dosaženo limitu maxConnTotal / maxConnPerRoute fondu, následující požadavky jsou blokovány, dokud nevyprší časový limit pro požadavek na připojení, a poté selžou – což pro daného klienta představuje stav typu „odmítnutí služby“ (denial-of-service). Asynchronní model I/O není touto chybou ovlivněn.

V DPGW je možné se dostat k ohrožené části kódu: jako výchozí je nastaven klasický klient se sdílenou pamětí a dekódování obsahu je ve výchozím nastavení zapnuto.

Tento útok však není obecným síťovým útokem. Chybně formátovaná odpověď musí pocházet z HTTP koncového bodu, na který je DPGW nakonfigurován tak, aby jej volal – z centrálního replikačního serveru, instance CloudPACS, řídicího serveru DEX, partnera DICOMweb/STOW-RS, licenčního serveru nebo nakonfigurovaného poskytovatele identit OAuth2/JWT. Všechny tyto entity jsou spravovány administrátorem a připojení k nim probíhá přes protokol TLS s přísnou validací protokolu a názvu hostitele (DefaultClientTlsStrategy, TLS 1.2/1.3). Útočník proto musí buď napadnout jednoho z těchto nakonfigurovaných partnerů, nebo se dostat do pozice „man-in-the-middle“ v rámci TLS, což výrazně zvyšuje složitost útoku.

Rozsah dopadu je rovněž omezen tím, jak DPGW spravuje dobu životnosti klientů. Většina míst volání vytvoří klienta pro každou operaci uvnitř bloku try-with-resources; uzavření klienta vymaže jeho pool, takže jakékoli uniklé připojení je na konci dané operace uvolněno. Významným rizikem je malá skupina dlouhodobě existujících klientů v poolu, kteří přetrvávají napříč operacemi – zejména CentralServerConnection.syncHttpClient (klient synchronizace replikace v mezipaměti) a řídicí připojení DEX –, kde se úniky připojení hromadí, dokud není pool vyčerpán. Důsledkem je zhoršení výkonu dotčené integrace (např. zastavení replikace nebo provozu cloudového PACS), nikoli však ohrožení brány nebo uložených dat; důvěrnost a integrita zůstávají nedotčeny.

Stav
Ovlivněno

Hodnocení závažnosti v kontextu DPGW: 3,7 – Nízká CVSS: 3,1/AV: N/AC: H/PR: N/UI: N/S: U/C: N/I: N/A: L
Vektor byl snížen z publikované hodnoty AC:L na AC:H, protože útočník musí ovládat, kompromitovat nebo se vydávat za vzdálený koncový bod, se kterým je DPGW explicitně nakonfigurován pro komunikaci přes TLS; tento koncový bod není přístupný libovolnému účastníkovi sítě. Dopad na dostupnost zůstává nízký: vyčerpání se omezuje na jeden pojmenovaný fond webových klientů a zhoršuje fungování pouze této jedné integrace.

Dopad na DPGW

Škodlivý nebo nesprávně fungující vzdálený peer, který vrací odpovědi s neplatnou nebo nepodporovanou hlavičkou Content-Encoding, může postupně vyčerpat fond připojení webového klienta DPGW, který s ním komunikuje. Praktickým důsledkem je zpomalení nebo selhání synchronizace replikace, volání rozhraní CloudPACS API, řídicího provozu DEX nebo předávání DICOMweb směrem k tomuto partnerovi, a to až do restartu DPGW nebo obnovení postiženého klienta. Na důvěrnost ani integritu údajů o pacientech to nemá žádný vliv, stejně jako na zpracování příchozích požadavků (Jetty) v DPGW.

Náprava a zmírnění dopadů

Plánovaná oprava
Aktualizujte dodávanou knihovnu org.apache.httpcomponents.client5:httpclient5 na verzi 5.6.3 nebo novější (aktuální verze: 5.6.4). Tato aktualizace bude začleněna do udržovaných větví v rámci rutinní údržby závislostí:

  • 1.14 — čeká se (5.6.1 → 5.6.4)
  • 1.13 — čeká se (5.5.1 → 5.6.4)
  • 1.12 — čeká se (5.4.4 → 5.6.4)

Akce uživatele
Ve standardním nasazení, kde jsou všechny nakonfigurované koncové body webových klientů důvěryhodné a administrativně spravované systémy, není nutný žádný zásah uživatele.

V případě, že je vzdálený koncový bod méně důvěryhodný, lze tuto zranitelnost odstranit před aktualizací závislosti tím, že se na dotčeném webovém klientovi deaktivuje dekódování obsahu odpovědi – nastavte httpCompression=“false“ v příslušné konfigurační položce WebClientParameters. Tím se ContentCompressionExec zcela vyřadí z řetězce provádění, avšak za cenu ztráty komprese odpovědí gzip/deflate pro daného klienta.

Příznakem probíhajícího úniku dat jsou opakované časové limity požadavků na připojení k jednomu koncovému bodu, přestože je tento koncový bod jinak dostupný; restartování DPGW vymaže vyčerpané fondy.