CVE-2026-81875
HighCVSS 7.5Summary
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to version 6.9.12, SHCParser in org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/SHCParser.java can consume attacker-controlled Smart Health Card JWT content whose header contains zip: "DEF" and whose small raw-DEFLATE payload expands to a very large value. SHCParser.decodeJWT() passes the decoded payload to SHCParser.inflate(), which accumulates all decompressed bytes in a ByteArrayOutputStream without an output-size limit before JSON parsing, and SHCParser.decompress() contains the same unbounded pattern. An application or validator service that accepts attacker-supplied SHC content can therefore suffer excessive heap allocation, severe garbage-collection pressure, request failure, process instability, or process termination. This issue is fixed in version 6.9.12.
Risk Assessment
An attacker can cause excessive memory consumption, leading to process crashes or system instability, which is particularly dangerous in healthcare environments.
Recommendation
It is recommended to immediately upgrade HAPI FHIR to version 6.9.12 or later to prevent DoS attacks via excessive memory allocation.
Other vulnerabilities in HAPI FHIR
See all- CVE-2026-81876High
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to version 6.9.12, SHCParser in org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/SHCParser.java can enter an infinite loop while processing attacker-controlled Smart Health Card JWT content whose header contains zip: "DEF" and whose raw-DEFLATE payload is empty or truncated. SHCParser.decodeJWT() reaches SHCParser.inflate(), where Inflater.inflate() can return zero while Inflater.finished() remains false and Inflater.needsInput() is true. The loop also lacks an Inflater.needsDictionary() termination check, SHCParser.decompress() contains the same zero-progress pattern, and ResourceChecker.java can reach SHC parsing during file-format detection. A malformed validation request can pin a JVM worker thread indefinitely, and concurrent requests can exhaust all validation workers. This issue is fixed in version 6.9.12.
- CVE-2026-55471Critical
A vulnerability in HAPI FHIR before version 6.9.10 allows XML External Entity (XXE) injection via the saxonTransform function in XsltUtilities. Missing ACCESS_EXTERNAL_DTD and ACCESS_EXTERNAL_STYLESHEET restrictions enable an attacker to read local files, perform blind XXE, and SSRF to arbitrary URLs.
- CVE-2026-34361Critical
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to version 6.9.4, the FHIR Validator HTTP service exposes an unauthenticated "/loadIG" endpoint that makes outbound HTTP requests to attacker-controlled URLs. Combined with a startsWith() URL prefix matching flaw in the credential provider (ManagedWebAccessUtils.getServer()), an attacker can steal authentication tokens (Bearer, Basic, API keys) configured for legitimate FHIR servers by registering a domain that prefix-matches a configured server URL. This issue has been patched in version 6.9.4.
- CVE-2026-62296High
Prior to 6.9.11, XhtmlParser.java imposes no maximum element nesting depth, so a deeply nested text.div narrative triggers unbounded recursion between parseElementInner() and parseElement(), raising a StackOverflowError. An attacker who can submit FHIR resources containing such narratives can thus crash a parsing or validation worker thread, affecting validator services and any application that parses attacker-supplied FHIR JSON or XML. This issue is fixed in version 6.9.11.
- CVE-2026-62295High
Prior to 6.9.11, the JSON utility parser in org.hl7.fhir.utilities.json.parser.JsonParser enforces no maximum nesting depth for arrays or objects. As a result, a small but deeply nested, syntactically valid FHIR JSON document can trigger unbounded readArray() or readObject() recursion, raising a StackOverflowError before structural validation runs. An attacker who can submit JSON resources for validation can thus crash the request thread, and services that do not isolate StackOverflowError safely may experience worker loss or process instability — a denial-of-service condition. This issue is fixed in version 6.9.11.
- CVE-2026-62293Medium
HAPI FHIR prior to 6.9.11 contains a stored cross-site scripting vulnerability in the hidden scan command, which concatenates attacker-controlled titles and source references without escaping in Scanner.java. A user scanning a malicious IG/profile and opening the generated HTML report can trigger stored XSS, executing attacker-controlled JavaScript in the report's browser context.
- CVE-2026-49485High
HAPI FHIR prior to versions 6.9.9 and 6.9.4.2 accepts arbitrary FHIRPath expressions without input validation. The functions matches(), matchesFull(), and replaceMatches() pass user-controlled regular expressions to Pattern.compile() and String.replaceAll() through an incomplete timeout utility. An attacker can send a resource with a malicious regex pattern causing catastrophic backtracking, exhausting CPU resources and causing denial of service.
- CVE-2026-45367High
In HAPI FHIR before version 6.9.7, the FHIRPathEngine passes user-controlled regular expressions from matches(), matchesFull(), and replaceMatches() to Java regex operations without effective timeouts, allowing catastrophic backtracking and denial of service (DoS).
- CVE-2026-55470High
The vulnerability in HAPI FHIR before version 6.9.10 stems from an incomplete patch for CVE-2026-45367 in the DSTU2 module. The FHIRPathEngine.matches() method calls String.matches(sw) without RegexTimeout protection, allowing an unauthenticated attacker to trigger catastrophic regex backtracking and exhaust server CPU.
- CVE-2026-34360Medium
HAPI FHIR prior to version 6.9.4 has a /loadIG HTTP endpoint in the FHIR Validator HTTP service that accepts a user-supplied URL via JSON body and makes server-side HTTP requests without hostname, scheme, or domain validation. An unauthenticated attacker with network access can probe internal network services, cloud metadata endpoints, and map network topology through error-based information leakage.
Original NVD description (English source)
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to version 6.9.12, SHCParser in org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/SHCParser.java can consume attacker-controlled Smart Health Card JWT content whose header contains zip: "DEF" and whose small raw-DEFLATE payload expands to a very large value. SHCParser.decodeJWT() passes the decoded payload to SHCParser.inflate(), which accumulates all decompressed bytes in a ByteArrayOutputStream without an output-size limit before JSON parsing, and SHCParser.decompress() contains the same unbounded pattern. An application or validator service that accepts attacker-supplied SHC content can therefore suffer excessive heap allocation, severe garbage-collection pressure, request failure, process instability, or process termination. This issue is fixed in version 6.9.12.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

