CVE-2026-45367
HAPI FHIR: ReDoS via FHIRPath matches()/replaceMatches() in FHIR Validator HTTP Endpoint
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to 6.9.7, the FHIRPathEngine implementation passes user-controlled regular expressions from matches(), matchesFull(), and replaceMatches() to Java regex operations without effective timeouts, allowing catastrophic backtracking and denial of service. This issue is fixed in version 6.9.7.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
HAPI FHIR: ReDoS via FHIRPath matches()/replaceMatches() in FHIR Validator HTTP Endpoint
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to 6.9.7, the FHIRPathEngine implementation passes user-controlled regular expressions from matches(), matchesFull(), and replaceMatches() to Java regex operations without effective timeouts, allowing catastrophic backtracking and denial of service. This issue is fixed in version 6.9.7.
- Record
CVE-2026-45367- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
EUVDEUVD-2026-44983
7.5
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to 6.9.7, the FHIRPathEngine implementation passes user-controlled regular expressions from matches(), matchesFull(), and replaceMatches() to Java regex operations without effective timeouts, allowing catastrophic backtracking and denial of service. This issue is fixed in version 6.9.7.
- Record
EUVD-2026-44983- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-3653-68v6-rq57
7.5
HAPI FHIR: ReDoS via FHIRPath matches()/replaceMatches() in FHIR Validator HTTP Endpoint
Summary
All implementations of FHIRPathEngine accept arbitrary FHIRPath expressions and evaluate them without input validation. The FHIRPath functions matches(), matchesFull(), and replaceMatches() pass user-controlled regular expressions directly to Java's Pattern.compile() and String.replaceAll() without complexity checks or timeouts. An attacker can send a resource containing an evil regex pattern that causes catastrophic backtracking, exhausting system resources, and causing Denial-of-Service.
Details
The vulnerability exists in regex execution in FHIRPathEngine implementations across multiple code modules. For example the org.hl7.fhir.r5 module:
Entry point 1 — FHIRPathEngine.java:5929 (R5 funcMatches):
private List<Base> funcMatches(ExecutionContext context, List<Base> focus, ExpressionNode exp) {
String sw = convertToString(swb); // attacker-controlled regex pattern
// ...
Pattern p = Pattern.compile("(?s)" + sw); // VULNERABLE: no complexity check
Matcher m = p.matcher(st); // no timeout
boolean ok = m.find();
Entry point 2 — FHIRPathEngine.java:5951 (R5 funcMatchesFull):
Pattern p = Pattern.compile("(?s)" + sw); // VULNERABLE: same pattern
Matcher m = p.matcher(st);
boolean ok = m.matches();
Entry point 3 — FHIRPathEngine.java:5120 (R5 funcReplaceMatches):
result.add(new StringType(convertToString(focus.get(0))
.replaceAll(regex, repl)).noExtensions()); // VULNERABLE: replaceAll uses Pattern internally
The same vulnerabilities exist in the dstu2, dstu2016may, dstu3, r4, and r4b modules, and the FHIRPathEngine is used in the validation module functionality.
Why this is exploitable:
- No timeout mechanism covers FHIRPath evaluation — the
ValidationTimeoutclass only protectsInstanceValidatoroperations, notevaluateFhirPath() - Java's
Pattern.compile()with a pattern like(a+)+$against input"aaaaaaaaaaaaaaaaaaaaaa!"causes exponential backtracking (O(2^n) time complexity)
Impact
- CPU Exhaustion: The exponential backtracking in Java's regex engine consumes 100% of a CPU core for the duration of the hang (effectively infinite for sufficiently long input strings) for callers of FHIRPathEngine.
- Record
GHSA-3653-68v6-rq57- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
NVD
7.5
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to 6.9.7, the FHIRPathEngine implementation passes user-controlled regular expressions from matches(), matchesFull(), and replaceMatches() to Java regex operations without effective timeouts, allowing catastrophic backtracking and denial of service. This issue is fixed in version 6.9.7.
- Record
CVE-2026-45367- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
OSV
7.5
HAPI FHIR: ReDoS via FHIRPath matches()/replaceMatches() in FHIR Validator HTTP Endpoint
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to 6.9.7, the FHIRPathEngine implementation passes user-controlled regular expressions from matches(), matchesFull(), and replaceMatches() to Java regex operations without effective timeouts, allowing catastrophic backtracking and denial of service. This issue is fixed in version 6.9.7.
- Record
CVE-2026-45367- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
OSVGHSA-3653-68v6-rq57
7.5
HAPI FHIR: ReDoS via FHIRPath matches()/replaceMatches() in FHIR Validator HTTP Endpoint
Summary
All implementations of FHIRPathEngine accept arbitrary FHIRPath expressions and evaluate them without input validation. The FHIRPath functions matches(), matchesFull(), and replaceMatches() pass user-controlled regular expressions directly to Java's Pattern.compile() and String.replaceAll() without complexity checks or timeouts. An attacker can send a resource containing an evil regex pattern that causes catastrophic backtracking, exhausting system resources, and causing Denial-of-Service.
Details
The vulnerability exists in regex execution in FHIRPathEngine implementations across multiple code modules. For example the org.hl7.fhir.r5 module:
Entry point 1 — FHIRPathEngine.java:5929 (R5 funcMatches):
private List<Base> funcMatches(ExecutionContext context, List<Base> focus, ExpressionNode exp) {
String sw = convertToString(swb); // attacker-controlled regex pattern
// ...
Pattern p = Pattern.compile("(?s)" + sw); // VULNERABLE: no complexity check
Matcher m = p.matcher(st); // no timeout
boolean ok = m.find();
Entry point 2 — FHIRPathEngine.java:5951 (R5 funcMatchesFull):
Pattern p = Pattern.compile("(?s)" + sw); // VULNERABLE: same pattern
Matcher m = p.matcher(st);
boolean ok = m.matches();
Entry point 3 — FHIRPathEngine.java:5120 (R5 funcReplaceMatches):
result.add(new StringType(convertToString(focus.get(0))
.replaceAll(regex, repl)).noExtensions()); // VULNERABLE: replaceAll uses Pattern internally
The same vulnerabilities exist in the dstu2, dstu2016may, dstu3, r4, and r4b modules, and the FHIRPathEngine is used in the validation module functionality.
Why this is exploitable:
- No timeout mechanism covers FHIRPath evaluation — the
ValidationTimeoutclass only protectsInstanceValidatoroperations, notevaluateFhirPath() - Java's
Pattern.compile()with a pattern like(a+)+$against input"aaaaaaaaaaaaaaaaaaaaaa!"causes exponential backtracking (O(2^n) time complexity)
Impact
- CPU Exhaustion: The exponential backtracking in Java's regex engine consumes 100% of a CPU core for the duration of the hang (effectively infinite for sufficiently long input strings) for callers of FHIRPathEngine.
- Record
GHSA-3653-68v6-rq57- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
OSVROOT-APP-MAVEN-CVE-2026-45367 No score
CVE-2026-45367 in ca.uhn.hapi.fhir:org.hl7.fhir.validation - Patched by Root
Root has patched CVE-2026-45367 in the ca.uhn.hapi.fhir:org.hl7.fhir.validation package for Root:Maven. Multiple fixed versions available.
- Record
ROOT-APP-MAVEN-CVE-2026-45367- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
ca.uhn.hapi.fhir:org.hl7.fhir.dstu2Maven |
through 6.9.6 | 6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.dstu2016mayMaven |
through 6.9.6 | 6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.dstu3Maven |
through 6.9.6 | 6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.r4Maven |
through 6.9.6 | 6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.r4bMaven |
through 6.9.6 | 6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.r5Maven |
through 6.9.6 | 6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.validationMaven |
through 6.9.6 | 6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.validation.cliMaven |
through 6.9.6 | 6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.dstu2Maven |
before 6.9.7, plus listed versions 0.0.10.0.140.0.20.1.181.0.0 Show 45 moreShow less1.1.674.0.04.0.14.0.24.0.34.1.04.2.05.0.05.0.105.0.115.0.125.0.135.0.145.0.155.0.165.0.175.0.185.0.195.0.205.0.215.0.225.0.75.0.85.0.95.1.05.1.15.1.105.1.115.1.125.1.135.1.145.1.155.1.165.1.175.1.185.1.195.1.25.1.205.1.215.1.225.1.35.1.45.1.55.1.65.1.7 |
6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.dstu2016mayMaven |
before 6.9.7, plus listed versions 0.0.10.0.140.0.20.1.181.0.0 Show 45 moreShow less1.1.674.0.04.0.14.0.24.0.34.1.04.2.05.0.05.0.105.0.115.0.125.0.135.0.145.0.155.0.165.0.175.0.185.0.195.0.205.0.215.0.225.0.75.0.85.0.95.1.05.1.15.1.105.1.115.1.125.1.135.1.145.1.155.1.165.1.175.1.185.1.195.1.25.1.205.1.215.1.225.1.35.1.45.1.55.1.65.1.7 |
6.9.7 |
Show 20 moreShow less
| Package | Affected | Fixed |
|---|---|---|
ca.uhn.hapi.fhir:org.hl7.fhir.dstu3Maven |
before 6.9.7, plus listed versions 0.0.10.0.140.0.20.1.181.0.0 Show 45 moreShow less1.1.674.0.04.0.14.0.24.0.34.1.04.2.05.0.05.0.105.0.115.0.125.0.135.0.145.0.155.0.165.0.175.0.185.0.195.0.205.0.215.0.225.0.75.0.85.0.95.1.05.1.15.1.105.1.115.1.125.1.135.1.145.1.155.1.165.1.175.1.185.1.195.1.25.1.205.1.215.1.225.1.35.1.45.1.55.1.65.1.7 |
6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.r4Maven |
before 6.9.7, plus listed versions 0.0.10.0.140.0.20.1.181.0.0 Show 45 moreShow less1.1.674.0.04.0.14.0.24.0.34.1.04.2.05.0.05.0.105.0.115.0.125.0.135.0.145.0.155.0.165.0.175.0.185.0.195.0.205.0.215.0.225.0.75.0.85.0.95.1.05.1.15.1.105.1.115.1.125.1.135.1.145.1.155.1.165.1.175.1.185.1.195.1.25.1.205.1.215.1.225.1.35.1.45.1.55.1.65.1.7 |
6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.r4bMaven |
before 6.9.7, plus listed versions 5.6.1005.6.1015.6.1025.6.1035.6.104 Show 45 moreShow less5.6.1055.6.1065.6.1075.6.1085.6.1095.6.1105.6.1115.6.1125.6.1135.6.1145.6.1155.6.1165.6.1175.6.225.6.235.6.245.6.255.6.265.6.275.6.285.6.295.6.305.6.315.6.325.6.335.6.345.6.355.6.365.6.375.6.385.6.395.6.405.6.415.6.425.6.435.6.445.6.455.6.465.6.475.6.485.6.505.6.515.6.525.6.535.6.54 |
6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.r5Maven |
before 6.9.7, plus listed versions 0.0.10.0.140.0.20.1.181.0.0 Show 45 moreShow less1.1.674.0.04.0.14.0.24.0.34.1.04.2.05.0.05.0.105.0.115.0.125.0.135.0.145.0.155.0.165.0.175.0.185.0.195.0.205.0.215.0.225.0.75.0.85.0.95.1.05.1.15.1.105.1.115.1.125.1.135.1.145.1.155.1.165.1.175.1.185.1.195.1.25.1.205.1.215.1.225.1.35.1.45.1.55.1.65.1.7 |
6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.validationMaven |
before 6.9.7, plus listed versions 0.0.10.0.140.0.20.1.181.0.0 Show 45 moreShow less1.1.674.0.04.0.14.0.24.0.34.1.04.2.05.0.05.0.105.0.115.0.125.0.135.0.145.0.155.0.165.0.175.0.185.0.195.0.205.0.215.0.225.0.75.0.85.0.95.1.05.1.15.1.105.1.115.1.125.1.135.1.145.1.155.1.165.1.175.1.185.1.195.1.25.1.205.1.215.1.225.1.35.1.45.1.55.1.65.1.7 |
6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.validation.cliMaven |
before 6.9.7, plus listed versions 4.0.04.0.14.0.24.0.34.1.04.2.05.0.0 |
6.9.7 |
ca.uhn.hapi.fhir:org.hl7.fhir.validationRoot:Maven |
before 6.7.9-aikido.7 | 6.7.9-aikido.76.9.0-aikido.86.7.9-aikido.66.9.0-aikido.96.7.9-aikido.86.7.9-aikido.106.7.9-aikido.96.9.0-aikido.106.9.4.1-aikido.36.9.0-aikido.116.4.0-aikido.26.9.4.1-aikido.26.0.1-aikido.26.0.1-aikido.36.0.1-aikido.4 |
ca.uhn.hapi.fhir:org.hl7.fhir.dstu2Root:Maven |
before 6.7.9-aikido.7 | 6.7.9-aikido.76.9.0-aikido.86.7.9-aikido.66.9.0-aikido.96.7.9-aikido.86.7.9-aikido.106.7.9-aikido.96.9.0-aikido.106.9.4.1-aikido.36.5.27-aikido.16.4.0-aikido.26.9.4.1-aikido.26.0.1-aikido.26.9.0-aikido.116.0.1-aikido.36.0.1-aikido.4 |
ca.uhn.hapi.fhir:org.hl7.fhir.dstu2016mayRoot:Maven |
before 6.7.9-aikido.7 | 6.7.9-aikido.76.9.0-aikido.86.7.9-aikido.66.9.0-aikido.96.7.9-aikido.86.7.9-aikido.106.7.9-aikido.96.9.0-aikido.106.9.4.1-aikido.36.4.0-aikido.26.9.4.1-aikido.26.0.1-aikido.26.9.0-aikido.116.0.1-aikido.36.0.1-aikido.4 |
ca.uhn.hapi.fhir:org.hl7.fhir.r5Root:Maven |
before 6.7.9-aikido.7 | 6.7.9-aikido.76.9.0-aikido.86.7.9-aikido.66.9.0-aikido.96.7.9-aikido.86.7.9-aikido.106.7.9-aikido.96.9.0-aikido.106.9.4.1-aikido.36.4.0-aikido.26.9.4.1-aikido.26.0.1-aikido.26.9.0-aikido.116.0.1-aikido.36.0.1-aikido.4 |
ca.uhn.hapi.fhir:org.hl7.fhir.dstu3Root:Maven |
before 6.7.9-aikido.7 | 6.7.9-aikido.76.9.0-aikido.86.7.9-aikido.66.9.0-aikido.96.7.9-aikido.86.7.9-aikido.106.7.9-aikido.96.9.0-aikido.106.9.4.1-aikido.36.9.0-aikido.116.5.27-aikido.16.4.0-aikido.26.9.4.1-aikido.26.0.1-aikido.26.0.1-aikido.36.0.1-aikido.4 |
ca.uhn.hapi.fhir:org.hl7.fhir.r4Root:Maven |
before 6.7.9-aikido.7 | 6.7.9-aikido.76.9.0-aikido.86.7.9-aikido.66.9.0-aikido.96.7.9-aikido.86.7.9-aikido.106.7.9-aikido.96.9.0-aikido.106.9.4.1-aikido.36.4.0-aikido.26.9.4.1-aikido.26.0.1-aikido.26.9.0-aikido.116.0.1-aikido.36.0.1-aikido.4 |
ca.uhn.hapi.fhir:org.hl7.fhir.r4bRoot:Maven |
before 6.7.9-aikido.7 | 6.7.9-aikido.76.9.0-aikido.86.7.9-aikido.66.9.0-aikido.96.7.9-aikido.86.7.9-aikido.106.7.9-aikido.96.9.0-aikido.106.9.4.1-aikido.36.5.27-aikido.16.4.0-aikido.26.9.4.1-aikido.26.0.1-aikido.26.9.0-aikido.116.0.1-aikido.36.0.1-aikido.4 |
io.root.ca.uhn.hapi.fhir:org.hl7.fhir.dstu2Root:Maven |
before 6.7.9-root.io.3 | 6.7.9-root.io.36.7.9-root.io.46.9.0-root.io.56.9.0-root.io.66.7.9-root.io.56.9.0-root.io.76.9.0-root.io.96.7.9-root.io.76.9.0-root.io.86.7.9-root.io.66.7.9-root.io.86.7.9-root.io.106.7.9-root.io.96.9.0-root.io.106.9.4.1-root.io.36.9.0-root.io.116.5.27-root.io.16.4.0-root.io.26.9.4.1-root.io.26.0.1-root.io.26.0.1-root.io.36.0.1-root.io.4 |
io.root.ca.uhn.hapi.fhir:org.hl7.fhir.validationRoot:Maven |
before 6.7.9-root.io.4 | 6.7.9-root.io.46.9.0-root.io.56.9.0-root.io.66.7.9-root.io.56.9.0-root.io.76.7.9-root.io.76.9.0-root.io.96.9.0-root.io.86.7.9-root.io.66.7.9-root.io.86.7.9-root.io.106.7.9-root.io.96.9.0-root.io.106.9.4.1-root.io.36.9.0-root.io.116.4.0-root.io.26.9.4.1-root.io.26.0.1-root.io.26.0.1-root.io.36.0.1-root.io.4 |
io.root.ca.uhn.hapi.fhir:org.hl7.fhir.dstu2016mayRoot:Maven |
before 6.7.9-root.io.4 | 6.7.9-root.io.46.9.0-root.io.56.9.0-root.io.66.7.9-root.io.56.9.0-root.io.76.9.0-root.io.96.7.9-root.io.76.9.0-root.io.86.7.9-root.io.66.7.9-root.io.86.7.9-root.io.106.7.9-root.io.96.9.0-root.io.106.9.4.1-root.io.36.9.0-root.io.116.4.0-root.io.26.9.4.1-root.io.26.0.1-root.io.26.0.1-root.io.36.0.1-root.io.4 |
io.root.ca.uhn.hapi.fhir:org.hl7.fhir.r5Root:Maven |
before 6.7.9-root.io.4 | 6.7.9-root.io.46.9.0-root.io.56.9.0-root.io.66.7.9-root.io.56.9.0-root.io.76.9.0-root.io.96.7.9-root.io.76.9.0-root.io.86.7.9-root.io.66.7.9-root.io.86.7.9-root.io.106.7.9-root.io.96.9.0-root.io.106.9.4.1-root.io.36.9.0-root.io.116.4.0-root.io.26.9.4.1-root.io.26.0.1-root.io.26.0.1-root.io.36.0.1-root.io.4 |
io.root.ca.uhn.hapi.fhir:org.hl7.fhir.dstu3Root:Maven |
before 6.7.9-root.io.4 | 6.7.9-root.io.46.9.0-root.io.56.9.0-root.io.66.7.9-root.io.56.9.0-root.io.76.7.9-root.io.76.9.0-root.io.86.7.9-root.io.66.9.0-root.io.96.7.9-root.io.86.7.9-root.io.106.7.9-root.io.96.9.0-root.io.106.9.4.1-root.io.36.9.0-root.io.116.5.27-root.io.16.4.0-root.io.26.9.4.1-root.io.26.0.1-root.io.26.0.1-root.io.36.0.1-root.io.4 |
io.root.ca.uhn.hapi.fhir:org.hl7.fhir.r4Root:Maven |
before 6.7.9-root.io.4 | 6.7.9-root.io.46.9.0-root.io.66.7.9-root.io.56.9.0-root.io.76.7.9-root.io.76.9.0-root.io.86.7.9-root.io.66.9.0-root.io.96.7.9-root.io.86.7.9-root.io.106.7.9-root.io.96.9.0-root.io.106.9.4.1-root.io.36.9.0-root.io.116.4.0-root.io.26.9.4.1-root.io.26.0.1-root.io.26.0.1-root.io.36.0.1-root.io.4 |
io.root.ca.uhn.hapi.fhir:org.hl7.fhir.r4bRoot:Maven |
before 6.7.9-root.io.4 | 6.7.9-root.io.46.9.0-root.io.56.9.0-root.io.66.7.9-root.io.56.9.0-root.io.76.9.0-root.io.96.7.9-root.io.76.9.0-root.io.86.7.9-root.io.66.7.9-root.io.86.7.9-root.io.106.7.9-root.io.96.9.0-root.io.106.9.4.1-root.io.36.9.0-root.io.116.5.27-root.io.16.4.0-root.io.26.9.4.1-root.io.26.0.1-root.io.26.0.1-root.io.36.0.1-root.io.4 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-45367 is a high vulnerability (CVSS 7.5) in Hapifhir Org.hl7.fhir.core, published May 18, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.68%, the 52nd percentile. Fixed in ca.uhn.hapi.fhir:org.hl7.fhir.dstu2 6.9.7.
References
github.com/hapifhir/org.hl7.fhir.core/security/advisories/GHSA-3653-68v6-rq57
github.com/hapifhir/org.hl7.fhir.core/pull/2403
github.com/hapifhir/org.hl7.fhir.core/pull/2463
github.com/hapifhir/org.hl7.fhir.core/commit/275d015c680ce9f90cbe285596e50118e472bf24
github.com/hapifhir/org.hl7.fhir.core/commit/e08982d2b6f6dcd6c670a762d9cf999179fbe4ed
github.com/hapifhir/org.hl7.fhir.core/releases/tag/6.9.7
Left out here: 2,239 versions. The JSON record has them.