Bezpečnost

🟢CVE-2026-8763, CVE-2026-13506

Přehled

Toto oznámení se týká dvou známých bezpečnostních zranitelností, které byly zjištěny v závislosti třetí strany používané v rámci DPGW. Obě jsou opraveny ve stejné verzi knihovny Bouncy Castle, a proto jsou zahrnuty v jediném oznámení.

Podrobnosti o zranitelnosti

  • CVE ID: CVE-2026-8763, CVE-2026-13506
  • Název závislosti:
    • org.bouncycastle:bcprov-jdk18on (přímá závislost)
    • org.bouncycastle:bcpkix-jdk18on (přímá závislost)
    • org.bouncycastle:bcutil-jdk18on (tranzitivní, přes bcpkix-jdk18on)
  • Dotčené verze závislosti: všechny verze < 1.85 — opraveno ve verzi 1.85 (vydáno 12. 7. 2026)
  • Skóre závažnosti:
    • CVE-2026-8763 — Obcházení omezení názvů pomocí koncové tečky v rfc822Name a URI (CWE-295): NIST 9.1 Critical
      (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N), CNA 9.3 Critical
      (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N)
    • CVE-2026-13506 — Lazy ASN.1 sekvence vynucující resetování ochrany hloubky vnoření (CWE-674): NIST 7.5 High
      (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H), CNA 8.7 High
      (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N)

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

Všechny dotčené větve obsahují zranitelnou verzi knihovny:

  • 1.12 — všechna vydání (<= 1.12.54-REL), obsahují bcprov-jdk18on / bcpkix-jdk18on / bcutil-jdk18on 1.84
  • 1.13 — všechna vydání (<= 1.13.34-REL), balíčky bcprov-jdk18on / bcpkix-jdk18on / bcutil-jdk18on 1.84
  • 1.14 — všechny verze (<= 1.14.11-REL), balíčky bcprov-jdk18on / bcpkix-jdk18on / bcutil-jdk18on 1.84

Pro úplnost: Verze 1.11 (<= 1.11.47-REL) obsahuje balíčky bcprov-jdk18on 1.78.1 a bcpkix-jdk18on 1.81, které rovněž spadají do dotčeného rozsahu. Níže uvedená analýza se na tuto větev vztahuje beze změn.

Posouzení rizik a použitelnosti

Použití
DPGW deklaruje bcprov-jdk18on a bcpkix-jdk18on jako přímé závislosti; bcutil-jdk18on je transitivně zahrnut prostřednictvím bcpkix-jdk18on. Příkaz dependency:tree -Dincludes=org.bouncycastle na verzích 1.12, 1.13 a 1.14 neukazuje ve stromu žádný další artefakt Bouncy Castle (bcprov-jdk15on, který by jinak přispíval org.apache.cxf:cxf-rt-ws-security, je v POM explicitně vyloučen).
Bouncy Castle je registrován jako poskytovatel JCA v DPGWMain (a pro vstupní bod CLI v CmdLineRunner) s
‚Security.addProvider(new BouncyCastleProvider());‘

Metoda Security.addProvider() připojí poskytovatele na konec seznamu poskytovatelů – není vložen na pozici 1. Vyhledávání JCA bez poskytovatele, jako například CertificateFactory.getInstance(„X.509“), CertPathValidator.getInstance(‚PKIX‘) a TrustManagerFactory.getInstance(„PKIX“), se proto i nadále řeší pomocí vlastních poskytovatelů JDK SUN / SunJSSE. K Bouncy Castle se přistupuje pouze v případě, že o to DPGW výslovně požádá.
TLS neprochází přes Bouncy Castle. bctls / BCJSSE není v classpath. HTTPS konektory v WebServerImpl jsou vytvořeny pomocí org.jsslutils.sslcontext.PKIXSSLContextFactory, která používá TrustManagerFactory.getInstance(…) a CertificateFactory.getInstance(„X.509“) bez argumentu poskytovatele, tj. implementaci SunJSSE/SUN z JDK. Totéž platí pro továrny na sokety klientů LDAP, e-mailu a HL7. WS-Security (wss4j přes CXF) se používá pouze k připojení odchozího UsernameTokenu; není zde žádné ověřování příchozích podpisů ani konfigurace šifrování Merlin.

Analýza
CVE-2026-8763 — Obcházení omezení názvů. V modulu PKIXNameConstraintValidator cesta dNSName před porovnáním odstraní koncové tečky, zatímco cesty rfc822Name (isEmailConstrained) a URI (isURIConstrained) porovnávají extrahovaný hostitelský název pouze pomocí operátoru equalsIgnoreCase. Listový certifikát s SAN rfc822Name ve tvaru ceo@bank.com se proto neshoduje se záznamem excludedSubtrees pro bank.com, takže funkce checkExcludedEmail nikdy nevyvolá výjimku a cesta je ověřena. Zneužití vyžaduje dvě věci: zranitelný kód se musí skutečně spustit – je přístupný pouze přes PKIXCertPathValidatorSpi_8 → RFC3280CertPathUtilities.processCertBC, tj. přes vlastní implementaci CertPathValidator/TrustManagerFactory v Bouncy Castle – a důvěryhodná cesta musí obsahovat mezilehlou certifikační autoritu s omezením názvu, která je pod kontrolou útočníka.
V DPGW není splněna ani jedna z těchto podmínek:

  • Žádná komponenta nepožaduje od poskytovatele „BC“ objekty CertPathValidator, CertPathBuilder ani TrustManagerFactory, a jelikož je BouncyCastleProvider připojen na konec namísto vložení na začátek, vyhledávání bez poskytovatele prováděná nástroji jsslutils a JDK směřují k SunJSSE. Ověřování klientských certifikátů na HTTPS konektorech a u každého odchozího TLS klienta je prováděno vlastní implementací PKIX v JDK, na kterou tato chyba CVE nemá vliv.
  • DPGW nevydává ani nepoužívá certifikáty obsahující rozšíření NameConstraints. Metoda CAUtils.issueCert() přidává pouze basicConstraints (CA=false), subjectKeyIdentifier a authorityKeyIdentifier — blok subjectAlternativeName je v této metodě vykomentován — a v celém kódu se nikde nevyskytují položky NameConstraints, permittedSubtrees ani excludedSubtrees. Bez certifikační autority s omezením názvu v řetězci není co obejít.

CVE-2026-13506 — Resetování hlídacího mechanismu hloubky vnoření ASN.1. Metoda LazyEncodedSequence.force() vytvoří nový objekt ASN1InputStream s reinicializovaným čítačem hloubky vnoření, místo aby zdědila zbývající hloubku z analýzy, která jej vygenerovala. Útočník, který dokáže poskytnout strukturu DER o velikosti přibližně 40–50 KB, jejíž obsah tvoří řetězec přibližně 10 000 vnořených sekvencí SEQUENCE, poté způsobí, že metody hashCode()/equals()/toDERObject()/getEncoded()/isSignatureValid() provádějí rekurzi o jeden rámec jazyka Java na každou úroveň, přičemž pokaždé používají nový limit hloubky, což vyvolá nezachycenou chybu StackOverflowError, která ukončí procesní vlákno provádějící zpracování.
K této chybě dochází pouze v případě, že je zapnuto odložené vyhodnocování. V bcprov/bcpkix 1.84 se to týká přesně dvou míst mimo samotný mechanismus odloženého vyhodnocování: X509CRLHolder.parseStream() (new ASN1InputStream(stream, true)) a vlastní cesta CRL v JCE CertificateFactory od Bouncy Castle. Všechny ostatní vstupní body — včetně metody ASN1Primitive.fromByteArray() a konstruktoru ASN1InputStream(byte[]) — provádějí analýzu nelíným způsobem a zůstávají chráněny běžným omezením hloubky vnoření (org.bouncycastle.asn1.max_cons_depth, výchozí hodnota 32).
DPGW nedosahuje ani jedné z těchto dvou „lazy“ cest. Je také třeba hned na začátku poznamenat, že DPGW neprovádí vůbec žádné parsování digitálních podpisů typu CMS, PKCS#7, časových razítek (TSP), OCSP ani DICOM – žádné z těchto rozhraní Bouncy Castle se v kódu nevyskytuje –, takže rozsah parsování je omezen na cesty PEM/PKCS#10 a načítání klíčů uvedené v části „Použití“.

Stav
Není ovlivněno

Dopad na DPGW

Žádný dopad.

CVE-2026-8763 nelze vyvolat, protože validátor cesty certifikátů PKIX v knihovně Bouncy Castle není nikdy vybrán – veškerá validace řetězce certifikátů, včetně ověřování klientských certifikátů na HTTPS konektorech, je prováděna JDK – a protože žádný certifikát zpracovávaný DPGW neobsahuje rozšíření Name Constraints.
CVE-2026-13506 nelze spustit, protože režim odloženého vyhodnocování ASN.1, který resetuje hloubkovou ochranu, je povolen pouze na cestách pro analýzu CRL v Bouncy Castle, které DPGW nepoužívá: DPGW CRL generuje, místo aby je analyzovalo, a soubory CRL čte prostřednictvím CertificateFactory v JDK. Veškeré parsování externě dodaných dat pomocí Bouncy Castle v DPGW je „non-lazy“ a nadále podléhá standardnímu omezení hloubky vnoření.

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

Plánovaná oprava
Ačkoli DPGW není touto chybou dotčeno, bude verze závislosti s touto zranitelností preventivně odstraněna ze sestavení. Bouncy Castle bude aktualizován z verze 1.84 na verzi >= 1.85 (aktuální verze od původního vývojáře je 1.86, vydaná 11. září 2026) pro bcprov-jdk18on, bcpkix-jdk18on a transitivně spravovaný bcutil-jdk18on:

  • 1.14 — 1.14.12-REL (datum vydání zatím není stanoveno)
  • 1.13 — 1.13.35-REL (datum vydání zatím není stanoveno)
  • 1.12 — 1.12.55-REL (datum vydání zatím není stanoveno)

Akce uživatele
Není nutný žádný zásah ze strany uživatele.

Bezpečnost

🟢CVE-2023-3438

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-2023-3438
  • Název závislosti: Trellix MOVE AntiVirus – instalační služba pro Windows (mvagtsce.exe)
  • Ovlivněná verze závislosti: <=4.10.0
  • Skóre závažnosti: NIST 7.8 High, CNA 4.4 Medium

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

U všech verzí DPGW, u nichž je používán modul digi (1.11.x – 1.14.x), pokud je digitalizační stanice nainstalována pomocí standardního instalačního skriptu s výchozí instalační cestou C:\Program Files\DicompassDigi

Posouzení rizik a použitelnosti

Použití
DPGW neobsahuje, není závislý na ani neinstaluje produkt Trellix MOVE AntiVirus. Zranitelný produkt není součástí žádné verze DPGW.
Modul digi systému DPGW řídí program Dicompass Capture, který běží na samostatné digitalizační stanici se systémem Windows. Program Capture se instaluje pomocí instalačního skriptu install.cmd (repozitář dpgw/install-digi) do adresáře %DIGI_PATH% – ve výchozím nastavení C:\Program Files\DicompassDigi – a je zaregistrován jako služba systému Windows Dicompass Capture Service pomocí vlastního přepínače pro automatickou instalaci „%DIGI_PATH%\%CAPTURE_VERSION%\DicompassCapture.exe“ -si.
Služba běží pod účtem LocalSystem.
Praktická využitelnost této funkce na digitalizační stanici je velmi omezená:

  • Umístění souboru C:\Program.exe vyžaduje možnost vytvořit soubor v kořenovém adresáři systémového disku, což výchozí seznam přístupových oprávnění (ACL) systému Windows povoluje pouze členům skupiny „Správci“ – útočník, který již toto oprávnění má, tím nic nezíská
  • stanice je specializované jednoúčelové zařízení s operačním systémem Windows 10; interaktivní přihlášení pro účty bez správcovských oprávnění není součástí standardní konfigurace
  • vložený binární soubor se spustí až při příštím spuštění služby, tj. po restartu služby nebo po restartu systému provedeném operátorem

Stav
Ovlivněno

Hodnocení závažnosti v kontextu DPGW: 2.0 Low CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U/MPR:H

Dopad na DPGW

Pokud by se útočníkovi podařilo tuto zranitelnost v rámci našeho softwaru úspěšně zneužít, potenciální dopad by byl následující:

  • eskalace místních oprávnění na úroveň LocalSystem na digitalizační stanici, což umožňuje plnou kontrolu nad zachycenými obrázky a videi uloženými na této stanici před jejich odesláním na server DPGW
  • žádný dopad na samotný server DPGW, na archiv ani na data ostatních stanic

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

Plánovaná oprava
Cesta ImagePath bez uvozovek je zapsána instalačním skriptem programu Capture, takže opravu je třeba provést v programu Dicompass Capture. V nadcházející verzi programu Capture bude registrace služby upravena tak, aby cesta k binárnímu souboru byla uvedena v uvozovkách; na straně serveru DPGW není nutná žádná změna.

Akce uživatele
Antivirový program Trellix MOVE AntiVirus není součástí dodávky DPGW – pokud jej zákazník nainstaloval na stanici, je třeba jej aktualizovat na verzi novější než 4.10.0 v souladu s doporučením společnosti Trellix SB10404.
U služby Dicompass Capture Service lze zranitelnost zkontrolovat a zmírnit, aniž by bylo nutné čekat na opravu:

  • Zjistěte název klíče služby pomocí příkazu sc getkeyname „Dicompass Capture Service“ a zkontrolujte registraci pomocí příkazu reg query „HKLM\SYSTEM\CurrentControlSet\Services\<název klíče>“ /v ImagePath
  • pokud hodnota není uvedena v uvozovkách, opravte ji pomocí sc config „<název klíče>“ binPath= „\“C:\Program Files\DicompassDigi\capture\DicompassCapture.exe\„“
  • ověřte, zda kořenový adresář systémového disku C:\ neumožňuje vytváření souborů účty bez správcovských oprávnění
  • neumožňujte účtům bez správcovských oprávnění interaktivní ani vzdálené přihlášení na digitalizační stanici
Bezpečnost

🟡CVE-2026-10050, CVE-2026-10051, CVE-2026-6790, CVE-2026-8384

Přehled

Toto oznámení se týká několika známých bezpečnostních zranitelností zjištěných v závislosti třetí strany používané v rámci DPGW: vestavěném webovém serveru Eclipse Jetty.

Podrobnosti o zranitelnosti

  • CVE ID: CVE-2026-10050, CVE-2026-10051, CVE-2026-6790, CVE-2026-8384
  • Název závislosti: org.eclipse.jetty (jetty-server, jetty-ee10-servlet/servlets, jetty-rewrite, jetty-ee10-proxy, jetty-http2-server, jetty-alpn-*, jetty-client — vše se řeší prostřednictvím vlastnosti jetty.version)
  • Ovlivněná verze závislosti:
    • CVE-2026-10050, CVE-2026-10051: Jetty 12.0.0–12.0.35 a 12.1.0–12.1.9 (opraveno ve verzi 12.0.36 / 12.1.10)
    • CVE-2026-6790, CVE-2026-8384: Jetty 12.0.0–12.0.34 a 12.1.0–12.1.8 (opraveno ve verzi 12.0.35 / 12.1.9)
    • DPGW 1.13 obsahuje Jetty 12.1.8, což spadá do všech čtyř dotčených rozsahů.
  • Skóre závažnosti (základní):
    • CVE-2026-10050 — 8.7 High (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:N/SA:N digest-auth bypass; GHSA-2fvj-hgj9-j2gr)
    • CVE-2026-10051 — 4.0 Low (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N; GHSA-f4v5-65jj-pcr2)
    • CVE-2026-6790 — Low (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N; GHSA-7p3p-8qv8-m2vh)
    • CVE-2026-8384 — 5.3 Medium (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N; GHSA-w7x5-g22v-xqhr)

Dotčené verze DPGW

  • 1.13 — všechna vydání (<= 1.13.29-REL), která obsahují Jetty 12.1.8
    Větev 1.14 není touto situací dotčena: již obsahuje Jetty 12.1.10 (od verze 1.14.08-REL; hlava větve HEAD je na verzi 12.1.11), což je verze, která splňuje nebo překračuje požadavky na opravu všech čtyř CVE. Verze DPGW z řady Jetty 12.0.x jsou sledovány samostatně.

Posouzení rizik a použitelnosti

Použití
DPGW využívá Eclipse Jetty jako svůj HTTP/HTTPS server (WebServerImpl). Běžné konektory obsluhují protokol HTTP/1.1; HTTPS konektory navíc vyjednávají protokol HTTP/2 prostřednictvím ALPN. DPGW používá jetty-server, servletový stack EE10, jetty-rewrite a jetty-ee10-proxy (tři transparentní proxy servlety). Odchozí HTTP požadavky iniciované samotným DPGW využívají Apache HttpClient 5, nikoli HTTP klienta Jetty. Rozhodnutí o řízení přístupu se provádějí v AuthFilteru na základě cesty požadavku (getRequestURI()/getServletPath().startsWith(…)).

Analýza
CVE-2026-10050 — Obcházení ověřování metodou Digest v HTTP klientovi Jetty (základní skóre 8,7, úroveň rizika „High“)
Chyba se nachází v klientské implementaci ověřování metodou Digest v Jetty, která počítá hashové hodnoty Digest pomocí kódování ISO-8859-1, což umožňuje kolize znaků v heslech. Nevztahuje se na DPGW. DPGW nepoužívá HTTP klienta Jetty pro žádné záměrné odchozí požadavky (používá Apache HttpClient 5) a nikdy nekonfiguruje ověřování typu Digest/Basic ani AuthenticationStore. K klientovi Jetty se dostanete pouze tranzitivně přes transparentní proxy servlety, které nekonfigurují žádné ověřování, takže k zranitelné části kódu nikdy nedojde.

CVE-2026-10051 — Únik dat z koncových polí HTTP/1.1 mezi požadavky (základní úroveň 4.0 – Low)
Koncová pole prvního požadavku jsou uchovávána a dochází k jejich úniku do následujících požadavků na stejném trvalém připojení. Nevztahuje se na DPGW. DPGW nikdy nečte ani nezapisuje koncová pole HTTP (funkce getTrailerFields a Trailer se nepoužívají), takže uniklá koncová pole nejsou nikdy zpracována.

CVE-2026-6790 — Nesoulad mezi oprávněním požadavku a hlavičkou Host (základní úroveň: Low)
Jetty striktně nevynucuje shodu oprávnění požadavku s hlavičkou Host, což umožňuje okrajové případy přesměrování, virtuálních hostitelů a reverzních proxy. V standardním nasazení DPGW se tato chyba nevyskytuje. DPGW neinstaluje modul ForwardedRequestCustomizer a neprovádí rozhodnutí o řízení přístupu ani směrování na základě autority v záhlaví Host; název serveru se používá pouze k sestavení URL adres pro přesměrování nebo zpětné volání. DPGW běží samostatně (vlastní ukončení TLS), nikoli jako backend reverzního proxy pro virtuální hostitele, který by se na tomto chování spoléhal.

CVE-2026-8384 — nevyřešené procházení cestou v URI požadavku (základní úroveň 5.3, Medium)
Jetty vrací nevyřešenou cestu požadavku (např. /public/../admin/x namísto normalizované /admin/x) pro URI obsahující sekvence procházení/parametrů. Vlastní kontrola aliasů v Jetty stále blokuje přímé procházení souborů, ale následné aplikace, které činí bezpečnostní rozhodnutí na základě nezpracované cesty, mohou být uvedeny v omyl. Toto je relevantní problém pro DPGW: AuthFilter řídí přístup pomocí kontrol předpon cest (startsWith(„/private/“), „/dw/“, „/replica/“, „/capture/“). Speciálně vytvořená, nevyřešená URI by mohla způsobit, že by tyto kontroly předpon byly vyhodnoceny na základě nekanonické cesty, což by mohlo vést k nesprávnému rozhodnutí o autorizaci nebo směrování.

Stav
Ovlivněno

Skóre závažnosti v kontextu DPGW: 5.3 Medium CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Závažnost v kontextu DPGW se řídí číslem CVE-2026-8384, což je jediné CVE, u něhož zranitelná kódová cesta DPGW smysluplně funguje. CVE-2026-10050 (základní hodnocení 8,7 – High), CVE-2026-10051 a CVE-2026-6790 se na použití DPGW nevztahují a nepřispívají k efektivní závažnosti.

Dopad na DPGW

Vzdálený, neautentizovaný útočník by mohl vytvořit URI požadavku obsahující sekvence pro procházení cestou/parametry, které Jetty předá aplikaci v nevyhodnocené podobě. Jelikož AuthFilter autorizuje požadavky na základě shody předpon cest, mohla by nekanonická cesta vést k nesprávnému rozhodnutí o řízení přístupu (dopad na integritu, nízký). Přímé procházení souborového systému zůstává blokováno kontrolou aliasů v Jetty a ostatní tři CVE nelze v konfiguraci DPGW zneužít.

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

Oprava
Aktualizujte integrovaný Jetty na opravenou verzi – 12.1.10 nebo novější z řady 12.1.x (verze 12.1.9 opravuje chyby CVE-2026-6790/CVE-2026-8384; verze 12.1.10 navíc opravuje chyby CVE-2026-10050/CVE-2026-10051). Větev 1.14 již tuto verzi obsahuje (Jetty 12.1.10 ve verzi 1.14.08-REL; 12.1.11 ve větvi HEAD).

Plánovaná oprava
– 1.13 — 1.13.30-REL (23. 7. 2026) – aktualizace verze jetty z 12.1.8 na 12.1.11

Akce uživatele

  • Jakmile bude k dispozici, proveďte aktualizaci na verzi DPGW 1.13.x, která obsahuje Jetty 12.1.10 nebo novější.
  • Dočasné řešení: umístěte před DPGW reverzní proxy, která normalizuje/odmítá URI požadavků obsahující ../; sekvence pro procházení parametrů cesty, a omezte síťovou expozici webové vrstvy pouze na důvěryhodné klienty.
Bezpečnost

🔴ADV-2026-014

Přehled

Toto oznámení se týká bezpečnostní chyby ve vlastní autentizační vrstvě DPGW (nejedná se o závislost na řešení třetích stran). Při určitých konfiguracích autentizace může dojít k úniku identity autentizovaného uživatele z jednoho HTTP požadavku do následujícího požadavku zpracovávaného stejným pracovním vláknem ze skupiny, což umožňuje, aby byl požadavek jednoho uživatele zpracován pod identitou jiného uživatele.

Podrobnosti o zranitelnosti

  • CVE ID: Žádné (interní identifikace)
  • Komponenta: DPGW Security Manager (org.medoro.dpgw.base.priv.security2.SecurityManager2) a filtry pro ověřování požadavků (Security2FilterHandler, AuthFilter a přihlašovací obslužné rutiny ESB / OAuth2 / GoldDigger)
  • Třída zranitelnosti: CWE-488 (vystavení datového prvku nesprávné relaci) / CWE-384 (fixace relace) / nesprávné vyčištění kontextu zabezpečení lokálního pro vlákno u vlákna v poolu
  • Skóre závažnosti: 7.8 High (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N)

Dotčené verze DPGW

Týká se pouze případů, kdy je povoleno ověřování ESB nebo OAuth2 (stejnou chybu vykazuje i ověřovací filtr „open“ v GoldDiggeru).

  • 1.11 — všechna vydání (<= 1.11.47-REL), zatím bez opravy
  • 1.12 — všechna vydání (<= 1.12.51-REL), zatím bez opravy
  • 1.13 — verze <= 1.13.29-REL (opraveno ve větvi, bude zahrnuto v příští verzi 1.13.x)
  • 1.14 — všechny verze (<= 1.14.08-REL), zatím bez opravy
  • main / devel — dosud nevydáno, zatím bez opravy

Posouzení rizik a použitelnosti

Použití
DPGW ověřuje HTTP požadavky prostřednictvím řetězce servletových filtrů. Ověřený subjekt (Principal) je uchováván pro každé vlákno v proměnné typu ThreadLocal uvnitř SecurityManager2 (funkce login() jej nastaví, funkce logout() jej vymaže pomocí ThreadLocal.remove()). Žádosti jsou obsluhovány pracovními vlákny Jetty ze skupiny, takže proměnná lokální pro vlákno musí být vymazána na konci každé žádosti; v opačném případě hodnota přetrvává ve vlákně a je viditelná pro jakoukoli žádost, kterou skupina tomuto vláknu přiřadí jako další.
Vymazání provádí AuthFilter v blocích finally { sm2.logout(); } — avšak pouze u cest žádostí, které procházejí přes chain.doFilter(…). Přijímací modul pro přihlášení důvěryhodného uživatele používaný v procesech federovaného přihlášení, TrustedUserAuthenticateAction.authenticateAndLoginToSession(), volá sm.login(principal) (čímž naplní proměnnou thread-local) a uloží principal do HTTP relace, ale není spárován s odhlášením v daném rozsahu.

Analýza
Přihlašovací postupy ESB, OAuth2 a GoldDigger dokončují požadavek tím, že zapíší přesměrování/odpověď a vrátí se bez volání chain.doFilter(…), takže se nikdy nedosáhne bloků cleanup finally v AuthFilteru:

  • ESB: ESBTokenAuthFilterHandler.filterAction() (/openviewer) → authenticateAndLoginToSession() (→ sm.login) → filterAction.sendRedirect(…) a návrat. Žádný logout(), žádný chain().
  • OAuth2: OAuth2AuthorizeServletV1 (/public/auth/v1/oauth2/authorize/*) → AuthorizeHandler.loginUser() → OAuth2Login.loginUser() → authenticateAndLoginToSession() (→ sm.login). Protože je koncový bod pod /public/…, AuthFilter jej směruje přes svou větev „else“, která se řetězí bez finally-logout.
  • GoldDigger: GoldDiggerAuthenticationWebFilter.filterAction() (/openzauth/*) — stejný vzor „přihlášení a následné přesměrování“.

Po dokončení takové žádosti o přihlášení zůstává principál uživatele ESB/OAuth2/GoldDigger v proměnné thread-local daného pracovního vlákna Jetty. Když pool následně přiřadí toto vlákno jinému, jinak neověřenému požadavku, bezpečnostní vrstva zachází s požadavkem jako s již ověřeným pod identitou zbývajícího uživatele — důvěryhodnými body, které čtou proměnnou vlákna namísto opětovného odvození identity z požadavku/relace, jsou AuthFilter (if (sm2.getCurrentPrincipal().isPresent()) { … }) a OAuth2AuthorizeServletV1 (sm.getCurrentPrincipal().isPresent()).
Okno zranitelnosti nastává při prvním opětovném použití daného vlákna krátce po úspěšném přihlášení: požadavek, který zdědí tuto identitu, je v rámci něj obsloužen a následně se odhlásí, čímž se hodnota vymaže. Útočník nemůže ovlivnit, které vlákno z fondu obslouží jeho požadavek, ani nemůže vynutit načasování, takže zneužití je nezávislé na souběžném legitimním přihlášení (odráží se v AC:H). Pokud se to podaří, důsledkem je úplné zosobnění postiženého uživatele — přístup k datům tohoto uživatele a schopnost jednat jeho jménem — odtud C:H/I:H. Nedochází k žádnému dopadu na dostupnost.

Stav
Ovlivněno

Skóre závažnosti v kontextu DPGW: 7.8 High CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Zranitelnost je přístupná ze sítě (AV:N) a nevyžaduje přihlašovací údaje útočníka (PR:N). Složitost útoku je vysoká (AC:H), protože k úspěchu je nutné bezprostředně po přihlášení oběti do jednotného systému předběhnout konkrétní vlákno sdílené v poolu. Převzetí identity má vysoký dopad na důvěrnost a integritu (C:H/I:H) v případě systému pro lékařské zobrazování; nemá žádný dopad na dostupnost (A:N).

Dopad na DPGW

Je-li povoleno ověřování pomocí ESB nebo OAuth2, může být požadavek zpracován pod identitou jiného uživatele při prvním opětovném použití vlákna ze sdíleného fondu po přihlášení daného uživatele. Jedná se o obcházení ověřování a autorizace: převzatý požadavek získá role a oprávnění k přístupu k datům původního uživatele, což umožňuje neoprávněné prohlížení studií a údajů o pacientech jiného uživatele a akcí provedených pod jeho identitou. Toto se netýká nasazení, která nemají povoleno ověřování pomocí ESB nebo OAuth2 (nebo GoldDigger open).

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

Oprava
Tato oprava zajišťuje, že kontext zabezpečení na úrovni vlákna je vždy vymazán na konci každého požadavku, bez ohledu na to, který handler přihlášení provedl, a to tak, že nejvnější zpracování požadavku /* filtrovacího handleru je obaleno blokem finally { sm.logout(); }:
– 1.13 — commit d42c8925c3 („oprava (Security): zajištění správného odhlášení v Security2FilterHandler“); bude součástí příštího vydání řady 1.13.x (po verzi 1.13.29-REL).
Protože Security2FilterHandler je nejvyšší /* handler, jeho finally-logout se spustí i v případě, že vnitřní handler ESB/OAuth2/GoldDigger zkrátí proces přesměrováním, takže pokrývá všechny cesty, kde by mohlo docházet k úniku.

Plánovaná oprava
Stejná oprava má být přenesena i do zbývajících udržovaných větví:

  • 1.14 — 1.14.09-REL (28. 7. 2026)
  • 1.12 — 1.12.53-REL (23. 7. 2026)
  • 1.11 — čeká na schválení
  • main / devel — čeká na schválení

Akce uživatele

  • Dočasné zmírnění rizika: Pokud není vyžadováno otevřené ověřování pomocí ESB, OAuth2 nebo GoldDigger, deaktivujte jej, dokud nebude nasazena opravená verze. Nasazení, která využívají pouze standardní ověřování pomocí souborů cookie/relace nebo tokenů DPGW (jejichž cesty již vymažou proměnné lokální pro vlákno), nejsou ohrožena.
  • Jakmile bude pro používanou větev k dispozici verze DPGW obsahující opravu, proveďte upgrade na ni.
Bezpečnost

🔴CVE-2026-14266

Přehled

Toto oznámení se týká známé bezpečnostní chyby zjištěné v komponentě třetí strany používané v rámci DPGW. Na rozdíl od většiny oznámení v tomto sledovacím systému se v tomto případě nejedná o integrovanou závislost jazyka Java, ale o externí binární soubor 7-Zip, který DPGW spouští na hostitelském počítači/v kontejneru za účelem rozbalení archivů nahraných uživateli.

Podrobnosti o zranitelnosti

  • CVE ID: CVE-2026-14266
  • Název závislosti: 7-Zip (systémový binární soubor 7z / 7zip; nainstalován do kontejneru DPGW příkazem dnf install 7zip z repozitáře EPEL)
  • Ovlivněná verze závislosti: 7-Zip 21.07 – 26.01 (opraveno ve verzi 26.02)
  • Skóre závažnosti: ZDI/CNA 7.0 High (CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H)

Dotčené verze DPGW

  • <= 1.14.08-REL (balíček obsahuje binární soubor 7zip a používá jej k importu archivů)
  • <= 1.13.29-REL (balíček obsahuje binární soubor 7zip a používá jej k importu archivů)

Větve 1.12 a 1.11 neobsahují funkci rozbalování archivů založenou na 7-Zipu (chybí SevenZipExtractor, ImportInput7Zip a parametr @sevenzip-command) a ve svých kontejnerových obrazech nemají zabalený binární soubor 7zip. Tyto větve nejsou touto změnou dotčeny.

Posouzení rizik a použitelnosti

Použití
DPGW využívá externí binární soubor 7-Zip k rozbalení archivů nahraných uživateli během importu DICOM. Nahrávací koncový bod /private/dicom-import (DicomImportServlet) přijímá archivy ve formátech zip, 7z, rar a iso (včetně těch chráněných heslem); je-li nastaven globální parametr @sevenzip-command (výchozí hodnota 7z), spustí SevenZipExtractor binární program příkazem 7z x -y -o
[-p] (ProcessBuilder) a obsah archivu je extrahován na straně serveru. Binární program je poskytován hostitelským systémem — ve standardním obrazu kontejneru se instaluje příkazem dnf install -y … 7zip (z EPEL); v nasazeních na fyzickém hardwaru operátor nainstaluje balíček 7zip pro daný operační systém (zdokumentováno v příručce Release Notes).

Analýza
CVE-2026-14266 je chyba přetečení vyrovnávací paměti v kódu pro dekompresi formátu XZ v programu 7-Zip. Když program 7-Zip dekóduje speciálně upravená data komprimovaná formátem XZ, dojde k poškození vyrovnávací paměti a může dojít ke spuštění libovolného kódu v kontextu procesu provádějícího extrakci. Tato zranitelnost se spouští pouhým rozbalením škodlivého archivu – kromě samotné dekomprese není zapotřebí žádná samostatná konfigurace ani zapnutí žádné funkce. Postihuje všechny verze programu 7-Zip od 21.07 až po 26.01 a je opravena ve verzi 26.02.
DPGW využívá přesně tuto cestu kódu: volá systémový binární soubor 7-Zip k extrakci obsahu archivu dodaného uživatelem. Útočník, který má přístup k funkci importu DICOM, může proto odeslat speciálně upravený archiv, který způsobí spuštění kódu pod účtem služby DPGW (uid 1000 uvnitř kontejneru).
Útok je omezen autorizačním modelem DPGW. Koncový bod /private/dicom-import vyžaduje ověřeného uživatele s rolí ROLE_LOCDATA_IMPORT spolu s jednou z podrolí pro import (ROLE_LOCDATA_IMPORT_ARCHIVE, ROLE_LOCDATA_USER_READ nebo ROLE_LOCDATA_STATION_READ). Anonymně není přístupný. Jakmile však oprávněný uživatel (nebo odcizená/padělaná relace takového uživatele) nahraje archiv, extrakce proběhne automaticky na straně serveru bez další interakce, takže praktickým scénářem je zlovolný nebo kompromitovaný oprávněný uživatel, případně oprávněný uživatel, který byl podveden k importu archivu poskytnutého útočníkem.

Stav
Ovlivněno

Skóre závažnosti v kontextu DPGW: 7.5 High CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
Základní skóre ZDI vychází ze scénáře na stolním počítači (oběť otevře lokální škodlivý soubor: AV:L, PR:N, UI:R). V případě DPGW je situace odlišná: užitečné zatížení je doručeno přes síť prostřednictvím ověřeného nahrání (AV:N), útočník musí mít oprávnění k importu (PR:L) a extrakce se spouští automaticky na straně serveru bez samostatné interakce oběti (UI:N). Složitost útoku zůstává vysoká (AC:H), protože spolehlivé zneužití přetečení oblasti paměti (heap overflow) je obtížné, a dopad zůstává High/High/High, protože úspěšné zneužití vede ke spuštění kódu pod účtem služby DPGW.

Dopad na DPGW

Úspěšné zneužití by umožnilo ověřenému uživateli s oprávněními k importu DICOM dosáhnout vzdáleného spuštění kódu jako účet služby DPGW uvnitř kontejneru prostřednictvím nahrání speciálně upraveného archivu. To by mohlo vést k:

  • spuštění libovolného kódu v kontextu procesu DPGW (uid 1000);
  • přístup pro čtení a zápis k úložišti a datům, ke kterým má přístup účet služby DPGW;
  • v závislosti na konfiguraci může dojít k laterálnímu pohybu nebo kompromitaci služby.

Nasazení, která neudělují importní role nedůvěryhodným uživatelům a která zajišťují, že webová vrstva je přístupná pouze z důvěryhodných sítí, vykazují odpovídající snížení rizika – avšak jakýkoli oprávněný importér, který se dostane k danému koncovému bodu, může spustit zranitelnou část kódu.

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

Plánovaná oprava
Tento problém lze vyřešit aktualizací externího binárního souboru 7-Zip na verzi 26.02 nebo novější; není nutná žádná změna v kódu DPGW v Javě. Pro standardní obraz kontejneru to znamená překompilovat obraz DPGW, jakmile základní repozitáře (EPEL) poskytnou 7-Zip 26.02+, aby příkaz dnf install 7zip stáhl opravený binární soubor. Tato změna bude začleněna do udržovaných větví 1.13 a 1.14 v rámci rutinní údržby obrazů.

  • Větev 1.14 — přepracovaný obraz obsahující balíček 7-Zip 26.02+
  • Větev 1.13 — přepracovaný obraz obsahující balíček 7-Zip 26.02+

Akce uživatele

  • Nasazení v kontejnerech: proveďte aktualizaci na obraz DPGW sestavený s programem 7-Zip verze 26.02 nebo novější. Správci mohou zkontrolovat verzi v balíčku spuštěním příkazu 7z (nebo zkontrolováním hodnoty proměnné @sevenzip-command) uvnitř kontejneru a ověřením, zda je zobrazená verze 26.02 nebo novější.
  • Nasazení na fyzických serverech: aktualizujte balíček programu 7-Zip v operačním systému hostitelského počítače na verzi 26.02 nebo novější.
  • Dočasné řešení: omezte role pro import DICOM (ROLE_LOCDATA_IMPORT a podrole pro import) pouze na důvěryhodné uživatele a/nebo zrušte nastavení globálního parametru @sevenzip-command, čímž zakážete rozbalování archivů na straně serveru, dokud nebude binární soubor opraven (tím se zakáže import archivů 7z/rar/iso a archivů chráněných heslem).
Bezpečnost

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

Bezpečnost

🟢CVE-2026-59949

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-59949 (oznámení GitHubu GHSA-xx22-p4ch-683r; nedostatečná validace argumentů typu bajtového pole na hranici JNI)
  • Název závislosti: at.yawk.lz4:lz4-java (větve 1.12 / 1.13 / 1.14)
  • Ovlivněná verze závislosti: at.yawk.lz4:lz4-java <= 1.11.0 — opraveno ve verzi 1.11.1 (vydáno 6. 7. 2026)
  • Skóre závažnosti: 6.5 Medium (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:H)

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

Všechny udržované větve obsahují zranitelnou verzi knihovny:

  • 1.12 — všechna vydání (<= 1.12.53-REL), obsahují at.yawk.lz4:lz4-java 1.11.0
  • 1.13 — všechna vydání (<= 1.13.30-REL), obsahují at.yawk.lz4:lz4-java 1.11.0
  • 1.14 — všechna vydání (<= 1.14.08-REL), obsahují at.yawk.lz4:lz4-java 1.11.0

Posouzení rizik a použitelnosti

Použití
DPGW deklaruje lz4-java jako přímou závislost a používá jej výhradně pro hashování pomocí XXHash64 — API pro kompresi a dekompresi LZ4 (LZ4Factory, net.jpountz.lz4.*) není v kódu nikde zmíněno a dependency:tree potvrzuje, že tento artefakt není tranzitivně načítán žádnou jinou komponentou.

XXHash64 se používá na následujících místech volání:

  • org.medoro.dpgw.base.pub.hash.XXHash64InputStream / XXHash64OutputStream — toky kontrolních součtů (podtřídy java.util.zip.CheckedInputStream/CheckedOutputStream) používané úložným modulem (HashAlgorithm.XXH64) k výpočtu hashů obsahu ukládaných objektů při jejich čtení či zápisu.
  • org.medoro.dpgw.digi.HashUtils.xxh64(Path) — vypočítá hash souboru z disku s pevným vyrovnávacím pamětním blokem o velikosti 64 KiB.
  • org.medoro.dpgw.core.db.DB.calculateLiquibaseHash() — vypočítá hash svázaných zdrojů protokolu změn Liquibase při spuštění s pevným vyrovnávacím pamětním blokem o velikosti 8 KiB.
  • org.medoro.lib.utils.LogHashUtils, NaturalMapHasher, ShareLinksAPIImpl — získají hasher pomocí metody XXHashFactory.fastestJavaInstance().

První tři získávají hasher pomocí metody XXHashFactory.fastestInstance(), která v případě dostupnosti volí implementaci JNI/nativní, takže v dané sestavě je přítomna zranitelná část kódu. Zbývající tři používají metodu fastestJavaInstance() (čistě javová implementace), která hranici JNI vůbec nepřekračuje.

Analýza
CVE-2026-59949 je chyba spočívající v nedostatečné validaci chybějících argumentů v implementacích funkce XXHash v knihovně lz4-java založených na rozhraní JNI. Nativní vstupní body hash(…) / update(…) neprovádějí validaci odkazu na pole bajtů ani rozsahu off/len před jejich předáním nativnímu kódu, což umožňuje vznik dvou typů selhání:

  • Pole s hodnotou null: volání hash(null, 0, 0, seed) nebo update(null, 0, 0) vede k volání metody GetPrimitiveArrayCritical s odkazem na hodnotu null, což způsobí fatální selhání JVM.
  • Překročení rozsahu: volání typu update(new byte[16], 0, Integer.MAX_VALUE) umožňuje nativnímu kódu číst data daleko za koncem pole v Javě, což opět způsobí selhání JVM.

Důsledkem je útok typu „denial of service“ způsobený náhlým ukončením JVM (A:H), s omezeným dopadem na důvěrnost (C:L) v důsledku čtení mimo povolený rozsah. Klíčové je, že ke zneužití je nutné, aby útočník ovlivnil argumenty týkající se objektu pole, offsetu nebo délky předávané nativnímu API. V původním bezpečnostním oznámení se výslovně uvádí, že běžné způsoby použití, při nichž útočník ovládá pouze obsah pole, nejsou touto chybou ovlivněny.

Použití DPGW se zcela řadí do tohoto neovlivněného vzorce:

  • Každé místo volání nativního kódu předává lokálně alokovaný buffer pevné velikosti s rozsahem (buf, 0, read), kde read je návratová hodnota metody InputStream.read(buf) — podle podmínky je nezáporná a nikdy není větší než buf.length. Odkaz na pole není nikdy null a nikdy není dodán z vnějšího zdroje.
  • Oba kontrolní součtové toky delegují prostřednictvím java.util.zip.CheckedInputStream/CheckedOutputStream. V metodě CheckedInputStream.read(b, off, len) je rozsah ověřen čtením podkladového streamu před voláním metody Checksum.update; v metodě CheckedOutputStream.write(b, off, len) je nejprve volána zabalená metoda OutputStream.write, která odmítne neplatný rozsah ještě předtím, než dojde k aktualizaci kontrolního součtu. V obou případech pocházejí offset a délka z interních kopírovacích smyček DPGW, nikoli ze vzdáleného vstupu.
  • Data poskytnutá útočníkem (objekty DICOM, nahrané dokumenty) se k hasheru dostávají vždy pouze jako obsah pole, nikdy jako odkaz na pole, offset nebo délka.

Neexistuje tedy žádný způsob, jak by vzdálený nebo lokální účastník mohl ovlivnit posun, délku nebo odkaz na pole, které směřují k nativním vstupním bodům XXHash.

Stav
Neovlivněno

Dopad na DPGW

Žádný dopad. Zranitelnost v ověřování argumentů JNI lze vyvolat pouze tím, že volající předá pole s hodnotou null nebo pár off/len mimo povolený rozsah. Všechna místa volání DPGW předávají interně alokované vyrovnávací paměti s rozsahy odvozenými z návratových hodnot metody InputStream.read, takže k selhání systému nemůže dojít — a to ani ve větvi 1.11, kde opuštěný artefakt org.lz4:lz4-java 1.8.0 nemá žádnou opravu v upstreamu.

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

Plánovaná oprava
Ačkoli DPGW není touto chybou dotčeno, zranitelná verze závislosti bude z buildů odstraněna z preventivních důvodů:
– 1.14 / 1.13 / 1.12 — v příštím rutinním vydání každé větve dojde k aktualizaci at.yawk.lz4:lz4-java z verze 1.11.0 na verzi 1.11.1.

Akce uživatele
Není nutná žádná akce ze strany uživatele.

Bezpečnost

🟢GHSA-r7wm-3cxj-wff9

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: Žádné přiřazené (upozornění GitHubu GHSA-r7wm-3cxj-wff9; CWE-770, Přidělování zdrojů bez omezení nebo regulace)
  • Název závislosti: com.fasterxml.jackson.core:jackson-core
  • Ovlivněná verze závislosti: < 2.18.8, 2.19.0 – 2.21.3 a 2.22.0 (opraveno ve verzích 2.18.8 / 2.21.4 / 2.22.1). Větev DPGW 1.12 obsahovala verzi 2.21.3, která spadá do dotčeného rozsahu.
  • Skóre závažnosti: 8.7 High (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N)

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

  • <= 1.12.51-REL (větev 1.12 deklaruje jackson-core jako přímou, explicitně zafixovanou závislost a obsahuje zranitelnou verzi 2.21.3)

jackson-core je přímo spravován v souboru POM pouze ve větvi 1.12; v ostatních udržovaných větvích je načítán transitivně. Toto oznámení se týká větve 1.12, kde byla tato závislost explicitně zahrnuta do balíčku a nyní byla aktualizována.

Posouzení rizik a použitelnosti

Použití
DPGW používá jako primární knihovnu pro práci s JSON Google Gson; pro vlastní zpracování JSON nepoužívá Jackson a neobsahuje žádné přímé odkazy na streamovací API Jacksonu. jackson-core je přítomen pouze jako transitivní závislost — především prostřednictvím com.auth0:java-jwt (analýza JWT, která využívá blokující ObjectMapper na kompletním řetězci tokenu v paměti) a Azure Storage SDK (které serializuje pomocí azure-json, nikoli Jackson streaming). Ve větvi 1.12 je jackson-core navíc pevně přiřazen jako přímá spravovaná závislost, aby bylo možné kontrolovat vyřešenou verzi.

Analýza
GHSA-r7wm-3cxj-wff9 představuje neúplnou opravu předchozího bezpečnostního upozornění (GHSA-72hv-8253-57qq). Asynchronní streamovací parser Jacksonu, který neblokuje, nedokáže vynutit nastavený limit maxNumberLength (výchozí hodnota 1000), pokud se celočíselné číslice hodnoty JSON přenášejí v několika vstupních blocích bez ukončovacího bajtu. Útočník, který streamuje dlouhou řadu číslic v malých blocích, může donutit parser, aby akumuloval znaky až do limitu maxStringLength (výchozí hodnota 20 MiB) — což představuje přibližně 20 000násobné překročení nastaveného limitu délky čísla — a tím způsobit vyčerpání paměti (denial of service).

K zranitelné části kódu se lze dostat pouze prostřednictvím neblokujícího parseru — JsonFactory.createNonBlockingByteArrayParser() / createNonBlockingByteBufferParser() (NonBlockingJsonParser) — kterému musí být explicitně předán vstup v blocích, obvykle z reaktivního / neblokujícího streamovacího řetězce.

DPGW nikdy nevytváří instanci neblokujícího parseru: v celém kódu se nikde přímo nepoužívá Jackson a neexistuje žádný reaktivní řetězec, který by do asynchronního parseru Jacksonu přiváděl bajty po částech. Jediná komponenta, která skutečně parsuje JSON pomocí Jacksonu (java-jwt), používá standardní blokující parser na plně vyrovnávaném řetězci v paměti, na který se tento problém nevztahuje. Zranitelná část kódu je proto v DPGW nedosažitelná.

Stav
Neovlivněno

Dopad na DPGW

Žádný dopad. Tato zranitelnost se týká pouze neblokujícího asynchronního parseru knihovny Jackson, který DPGW nepoužívá. Artefakt jackson-core je vždy využíván pouze prostřednictvím blokujícího, plně vyrovnávaného parsování transitivními spotřebiteli, takže k vyčerpání paměti nemůže dojít.

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

Plánovaná oprava
Ačkoli DPGW není touto chybou dotčeno, byla zranitelná verze závislosti z verze 1.12 odstraněna z preventivních důvodů: jackson-core byl aktualizován z verze 2.21.3 na 2.21.5 (commit d4c148f506, 23. 7. 2026). Tato změna bude zahrnuta v příštím vydání verze 1.12:
– 1.12.52-REL — obsahuje balíček jackson-core 2.21.5

Akce uživatele
Není nutná žádná akce ze strany uživatele.

Bezpečnost

🟢CVE-2026-54291

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-54291
  • Název závislosti: org.postgresql:postgresql (PostgreSQL JDBC Driver, pgjdbc)
  • Ovlivněná verze závislosti: 42.7.4 – 42.7.11 (opraveno ve verzi 42.7.12)
  • Skóre závažnosti: NIST 5.9 Medium
    (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N); CNA (GitHub) 8.2 High (CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:L/SA:N)

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

  • <= 1.14.08-REL (obsahuje balíček pgjdbc 42.7.11)
  • <= 1.13.29-REL (obsahuje balíček pgjdbc 42.7.11)
  • <= 1.12.51-REL (obsahuje balíček pgjdbc 42.7.11)
    Větev 1.11 (v současné době 1.11.47-REL) obsahuje pgjdbc 42.7.3, jehož verze je starší než kód s bezpečnostní chybou a nespadá do rozsahu příslušných verzí.

Posouzení rizik a použitelnosti

Použití
DPGW používá jako klientský ovladač pro svou aplikační databázi ovladač PostgreSQL JDBC (pgjdbc). Připojení k databázi se konfiguruje v sekci souboru dpgw.xml pomocí parametru connection-url; výchozí a dokumentovaná hodnota je jdbc:postgresql://localhost/…. DPGW nenastavuje vlastnost připojení channelBinding a ani nezapíná TLS pro připojení k databázi (sslmode / ssl nejsou nakonfigurovány v žádné dodávané ani modelové konfiguraci).

Analýza
CVE-2026-54291 představuje nepozorovatelné snížení úrovně autentizace při vázání kanálu v knihovně pgjdbc. Pokud klient prostřednictvím připojení TLS požaduje nastavení channelBinding=require, klient SCRAM vrátí prázdná bajtová pole namísto toho, aby vyhodil chybu, když narazí na certifikát TLS podepsaný nepodporovaným podpisovým algoritmem. To umožňuje aktivnímu útočníkovi typu „man-in-the-middle“ na trase TCP/TLS mezi klientem JDBC a serverem PostgreSQL snížit úroveň zabezpečení z SCRAM-SHA-256-PLUS (s vázáním kanálu) na prostý SCRAM-SHA-256 (bez vázání kanálu), čímž obchází ochranu proti útokům typu MITM, kterou má vázání kanálu zaručit. K zneužití je nutné, aby se útočník nacházel na síťové trase mezi aplikací a její databází.

V konfiguraci nasazení, které se týká toto bezpečnostní upozornění – tedy v případě, kdy se databáze PostgreSQL nachází na stejném hostiteli jako DPGW a přijímá pouze připojení z localhostu – provoz mezi DPGW a databází nikdy neopouští tento hostitel. Neexistuje žádný síťový segment, který by útočník mohl obsadit, takže předpoklad zranitelnosti typu „man-in-the-middle“ nemůže být splněn. To odpovídá výchozí a zdokumentované konfiguraci DPGW (jdbc:postgresql://localhost/…). Navíc DPGW nepožaduje vazbu kanálu a pro připojení k databázi nepoužívá protokol TLS, takže k zranitelné směrovací cestě vůbec nedochází.

Stav
Neovlivněno

Dopad na DPGW

V případě nasazení, kdy je databáze PostgreSQL umístěna na stejném hostiteli jako DPGW a je přístupná pouze přes localhost, nedochází k žádnému dopadu. Jelikož mezi DPGW a databází neexistuje žádná síťová cesta, nelze splnit podmínku útoku typu „man-in-the-middle“ související s CVE-2026-54291.

Poznámka: V případě nasazení, kde je DPGW připojen k instanci PostgreSQL přes síť (například k databázi na samostatném hostiteli, jak se používá v některých konfiguracích s více lokalitami nebo replikačními sadami) a která pro ochranu proti útokům typu „man-in-the-middle“ (MITM) využívají nastavení channelBinding=require, je třeba tento ovladač považovat za zranitelný a provést níže uvedenou opravu. Standardní nasazení DPGW tuto konfiguraci nepoužívají.

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

Oprava
Ovladač byl aktualizován na opravenou verzi ve vývojové větvi:
– hlavní větev (příští řada verzí) — pgjdbc aktualizováno na verzi 42.7.13 (změna „chore“(Security): aktualizace PostgreSQL z důvodu CVE-2026-54291)
Jelikož DPGW není ve standardní konfiguraci databáze localhost ovlivněno, bude aktualizace pgjdbc na verzi 42.7.12+ začleněna do udržovaných větví 1.12 / 1.13 / 1.14 v rámci rutinní údržby závislostí, nikoli jako nouzové vydání. Větev 1.11 není na úrovni závislostí (pgjdbc 42.7.3) ovlivněna a nevyžaduje žádné změny.

Akce uživatele
U standardní konfigurace (databáze na stejném hostiteli, připojení pouze přes localhost) není nutný žádný zásah ze strany uživatele.

Provozovatelé mohou ověřit, zda používají konfiguraci, která není touto chybou dotčena, tak, že zkontrolují, zda adresa connection-url v sekci souboru dpgw.xml odkazuje na localhost (nebo 127.0.0.1) a zda je PostgreSQL nakonfigurován tak, aby přijímal pouze lokální připojení. Správci, kteří provozují DPGW se vzdálenou databází PostgreSQL přes nedůvěryhodnou síť, by měli provést upgrade na verzi DPGW obsahující pgjdbc 42.7.12 nebo novější.

Bezpečnost

🟢CVE-2026-9828

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-9828
  • Název závislosti: ch.qos.logback:logback-classic (logback-core)
  • Ovlivněná verze závislosti: <= 1.5.32
  • Skóre závažnosti: CNA 2.9 Low
    (CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N/E:P/RE:L/U:Green); NIST score not yet published

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

  • <= 1.14.08-REL
  • <= 1.13.29-REL
  • <= 1.12.51-REL
  • <= 1.11.47-REL

Posouzení rizik a použitelnosti

Použití
DPGW používá jako rámec pro protokolování Logback, který je inicializován při spuštění programem DPGWMain a konfigurován prostřednictvím souboru conf/logback.xml. Žádné nasazení DPGW nekonfiguruje SocketAppender ani soketový přijímač protokolů.

Analýza
CVE-2026-9828 se týká třídy HardenedObjectInputStream v rámci Logbacku, kterou výhradně používají komponenty SimpleSocketServer a SimpleSSLSocketServer k deserializaci objektů ILoggingEvent přijatých přes síťový socket od vzdáleného SocketAppenderu. V postižených verzích (včetně verze 1.5.32) přijímá seznam povolených objektů v rámci zabezpečení širší sadu tříd java.lang/java.util, než bylo zamýšleno, což umožňuje útočníkovi, který je schopen odeslat speciálně upravená serializovaná data na takový socketový server, instancovat omezené objekty a obejít zamýšlené omezení. Zneužití této chyby vyžaduje, aby cílová aplikace skutečně spouštěla instanci SimpleSocketServer/SimpleSSLSocketServer, ke které má útočník přístup; nebylo prokázáno žádné vzdálené spuštění kódu, pouze obejití omezení.

DPGW nikdy nevytváří instanci ani nespouští ch.qos.logback.classic.net.SimpleSocketServer ani SimpleSSLSocketServer a žádná z jeho konfigurací logback.xml (výchozí ani specifická pro daný web) nedefinuje SocketAppender ani socketový přijímač. Logback se používá výhradně jako knihovna pro protokolování v rámci procesu, takže k zranitelné větvi kódu pro deserializaci není nikdy možné se dostat, a to ani lokálně, ani vzdáleně.

Stav
Neovlivněno

Dopad na DPGW

Žádný dopad. DPGW tuto zranitelnou komponentu nevyužívá.

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

Plánovaná oprava
Z bezpečnostních důvodů to není nutné, ale v rámci rutinní údržby závislostí došlo dne 3. července 2026 k aktualizaci logbacku na opravenou verzi (1.5.37). Tato změna bude součástí příštího vydání:
– hlavní větev / větev 1.14 (aktuálně 1.14.08-REL)
– větev 1.13 (aktuálně 1.13.29-REL)
– větev 1.12 (aktuálně 1.12.51-REL)
Větev 1.11 (v současné době 1.11.47-REL, logback 1.5.16) tuto aktualizaci neobdržela. Jelikož DPGW není touto chybou dotčeno, pro verzi 1.11 není v tuto chvíli naplánována žádná specifická oprava.

Akce uživatele
Není nutná žádná akce ze strany uživatele.