Hoch

HAPI FHIR: SHCParser unbounded DEFLATE decompression causes denial of service

  • Veröffentlicht: 17.09.2026
  • Aktualisiert: 11.10.2026 13:20

Summary

SHCParser inflates compressed Smart Health Card JWT payloads into memory without a decompressed-size limit. An attacker who can submit SHC content for validation can craft a small compressed JWT payload that expands to a very large byte array, causing memory exhaustion or severe garbage collection pressure.

Details

The vulnerable code is in org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/SHCParser.java.

decodeJWT() checks MAX_ALLOWED_SHC_LENGTH, but this only logs an error and parsing continues:

java
// SHCParser.java:282-284
if (jwt.length() > MAX_ALLOWED_SHC_LENGTH) {
  logError(...);
}

If the header contains "zip":"DEF", the payload is inflated before JSON parsing:

java
// SHCParser.java:300-304
if ("DEF".equals(res.header.asString("zip"))) {
  payloadJson = inflate(payloadJson);
}
res.payload = JsonParser.parseObject(FileUtilities.bytesToString(payloadJson), true);

inflate() accumulates all decompressed output in a ByteArrayOutputStream and has no maximum output size:

java
// SHCParser.java:455-468
while (!inflater.finished()) {
  final int count = inflater.inflate(buffer);
  outputStream.write(buffer, 0, count);
}
return outputStream.toByteArray();

The same unbounded decompression pattern exists in decompress() at SHCParser.java:410-423.

PoC

Create a highly compressible SHC-shaped JSON payload, compress it with raw DEFLATE (new Deflater(9, true)), Base64URL-encode it as the JWT payload, and set the JWT header to {"zip":"DEF"}.

Local verification measured the following expansion through SHCParser.inflate():

plain=1000066 compressed=1052 inflated=1000066 ratio=950
plain=16000066 compressed=15626 inflated=16000066 ratio=1023

A small compressed payload can therefore allocate many megabytes of heap. Larger payloads can trigger OutOfMemoryError or process instability.

Impact

This is a denial-of-service vulnerability. Any validator service or application that accepts attacker-supplied SHC content can be forced to allocate excessive heap memory. Impact ranges from request failure and severe GC pressure to process termination.

Credits

  • Thai Son Dinh from VinSOC Labs (R&D)

Betroffene Software

Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.

PlattformPaketAnfällige VersionenBehoben in
Java / Kotlin (Maven) ca.uhn.hapi.fhir:org.hl7.fhir.r5 < 6.9.12 6.9.12
Java / Kotlin (Maven) ca.uhn.hapi.fhir:org.hl7.fhir.validation < 6.9.12 6.9.12
Java / Kotlin (Maven) ca.uhn.hapi.fhir:org.hl7.fhir.validation.cli <= 5.0.0 keine Korrektur

Verweise

CVSS-Wert 7.5/10
CVSS-Vektor
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Schwäche (CWE)
CWE-20, CWE-400, CWE-409
Plattform
Java / Kotlin (Maven)
Paket
ca.uhn.hapi.fhir:org.hl7.fhir.r5, ca.uhn.hapi.fhir:org.hl7.fhir.validation, ca.uhn.hapi.fhir:org.hl7.fhir.validation.cli
Veröffentlicht
17.09.2026
Aktualisiert
11.10.2026 13:20

Quellen und Lizenzen

OSV / GitHub Advisory Database - GHSA-3w98-rrpr-fprr - CC BY 4.0

Schwachstellenhistorie: ca.uhn.hapi.fhir:org.hl7.fhir.r5

Alle veröffentlichten Schwachstellen dieses Pakets (Java / Kotlin (Maven)), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.

Alle (10) im Archiv
Einträge insgesamt
10
Erste → letzte
01.2023 09.2026
Ohne Fix
0
In Angriffen ausgenutzt
0

Verteilung nach Schweregrad

  • Kritisch 2
  • Hoch 8

Veröffentlichungen pro Jahr

  1. 2023: 2
  2. 2024: 3
  3. 2025: 0
  4. 2026: 5
Schweregrad:
  1. Hoch · 7.5 CVE-2026-81876 < 6.9.12 6.9.12
  2. HAPI FHIR: SHCParser unbounded DEFLATE decompression causes denial of service dieser Eintrag
    Hoch · 7.5 CVE-2026-81875 < 6.9.12 6.9.12
  3. Hoch · 7.5 CVE-2026-49485 >= 6.9.5, < 6.9.9, < 6.9.4.2 6.9.9, 6.9.4.2
  4. Kritisch · 9.8 CVE-2026-33180 < 6.9.0 6.9.0
  5. Hoch · 8.6 CVE-2024-52007 < 6.4.0 6.4.0
  6. Hoch · 9.8 CVE-2024-51132 < 6.4.0 6.4.0
  7. Hoch · 8.6 CVE-2024-45294 < 6.3.23 6.3.23
  8. Hoch · 7.5 CVE-2023-28465 < 5.6.106 5.6.106
  9. Kritisch · 9.1 CVE-2023-24057 < 5.6.92 5.6.92

Erkennen Sie Schwachstellen in Ihrer Anwendung

Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.

Anwendung verbinden
DockRay Newsletter

Anwendungssicherheit in Ihrem Postfach

Wichtige Schwachstellen, konkrete Empfehlungen und praktische Tipps für Ihre Anwendungen. Wählen Sie Ihre Technologien und verfolgen Sie, was für Ihr Projekt relevant ist.

  • Eine tägliche Zusammenfassung neuer Schwachstellen, auch kritischer.
  • Benachrichtigungen über wichtige Updates.
  • Praktische Tipps zur Sicherheit und Überwachung von Anwendungen.

Leer lassen, um Meldungen zu allen Technologien zu erhalten.

Kostenlos anmelden. In jeder E-Mail mit einem Klick abmelden.