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