Wysoka

HAPI FHIR: SHCParser unbounded DEFLATE decompression causes denial of service

  • Ujawniono: 17.09.2026
  • Aktualizacja: 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)

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
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 brak poprawki

Odnośniki

Ocena CVSS 7.5/10
Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Słabość (CWE)
CWE-20, CWE-400, CWE-409
Platforma
Java / Kotlin (Maven)
Paczka
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
Ujawniono
17.09.2026
Aktualizacja
11.10.2026 13:20

Źródła i licencje

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

Historia podatności: ca.uhn.hapi.fhir:org.hl7.fhir.r5

Wszystkie opisane podatności tej paczki (Java / Kotlin (Maven)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (10) w archiwum
Wszystkich wpisów
10
Pierwsza → ostatnia
01.2023 09.2026
Bez poprawki
0
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 2
  • Wysoka 8

Ujawnienia w latach

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

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.