{"id":"CVE-2026-113874","kind":"vulnerability","aliases":["CVE-2026-113874"],"related":[],"title":"SmileCDR HAPI FHIR: bundle body can switch tenant partitions","description":"SmileCDR HAPI FHIR allows an untrusted bundle body to replace a partition identity previously established by a trusted source, and does not enforce storage partition entitlement by default. An attacker authorized for one tenant can read from or write to another tenant's partition.","summary":"A caller authorized for one tenant can put the request-partition-ids extension on a transaction/batch Bundle entry and override the trusted X-Request-Partition-IDs header, reading from or writing to another tenant's partition. HAPI FHIR ships no entitlement check by default, so it is exploitable unless you register one. No fix exists yet (CISA: all versions affected).","severity":"high","cvss":8.6,"epss":0.00234,"exploited":false,"exploited_at":null,"products":[{"name":"HAPI FHIR","fixed":[],"affected":">= 8.2.0 (CISA lists all versions)","ecosystem":"maven"}],"ecosystems":["maven"],"tags":["hapi-fhir","healthcare","java","multi-tenant","package","partitioning","self-hosted","smilecdr"],"not_affected_if":["entitlement-hook-registered","partitioning-disabled","single-tenant-deployment"],"how_to_check":"You are exposed if you run HAPI FHIR (>= 8.2.0, where the extension handler first shipped; Smile CDR 2026.05.R01 is based on 8.10.0) with partitioning enabled, RequestHeaderPartitionInterceptor behind an authenticating gateway, and no STORAGE_PARTITION_SELECTED hook that checks the caller's entitlement. Test: send a batch Bundle whose entry.request carries the extension http://hapifhir.io/fhir/ns/StructureDefinition/request-partition-ids naming another partition; if the GET returns foreign data you are exposed.","fix":"No fixed version as of 2026-10-22. Mitigation (from the reporter's control test): register a STORAGE_PARTITION_SELECTED interceptor that verifies the caller may access the final partition. Or strip or reject that extension on Bundle.entry.request at the gateway. Watch for a HAPI FHIR release after 8.12.1 and Smile CDR notes.","status":"open","published_at":"2026-10-22T18:17:27+00:00","first_seen_at":"2026-10-23T21:57:31+00:00","triaged_at":"2026-10-23T22:39:17+00:00","updated_at":"2026-10-24T07:15:51+00:00","category":"package","confidence":0.85,"triage":{"at":"2026-10-23T22:39:17Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"network","title":"SmileCDR HAPI FHIR: bundle body can switch tenant partitions","impact":"high","summary":"An attacker with access to one tenant can send a FHIR bundle that replaces the partition identity set by a trusted source. That lets them read or write another tenant's partition.","category":"package","who_cares":["smilecdr","hapi-fhir","healthcare","multi-tenant"],"confidence":0.6,"needs_auth":"yes","worst_case":"Attacker reads or writes another tenant's FHIR patient data","analyst_note":"Find the SmileCDR advisory and fixed version at the NVD link; confirm whether default config is affected, since the text says entitlement is not enforced by default.","how_to_check":"unknown","needs_analyst":true,"not_affected_if":["single-tenant-deployment","partitioning-disabled"],"user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000461,"input_tokens":2898,"output_tokens":342,"severity_before":"high"},"analyst_status":"done","analyst_note":"Find the SmileCDR advisory and fixed version at the NVD link; confirm whether default config is affected, since the text says entitlement is not enforced by default.","search":"'-113874':12A,15A '-2026':11A,14A 'affect':93B 'allow':97C 'anoth':66B,134C 'attack':123C 'author':34B,124C 'bodi':5A,101C 'bundl':4A,49B,100C 'caller':33B 'check':75B 'cisa':90B 'cve':10A,13A 'default':77B,121C 'enforc':116C 'entitl':74B,119C 'entri':50B 'establish':108C 'exist':88B 'exploit':81B 'extens':45B 'fhir':3A,17A,20B,71B,96C 'fix':87B 'hapi':2A,16A,19B,70B,95C 'hapi-fhir':18B 'header':60B 'healthcar':21B 'host':30B 'id':44B,59B 'ident':106C 'java':22B 'multi':24B 'multi-ten':23B 'one':36B,85B,126C 'overrid':52B 'packag':26B 'partit':9A,27B,43B,58B,69B,105C,118C,137C 'previous':107C 'put':39B 'read':61B,129C 'regist':84B 'replac':103C 'request':42B,57B 'request-partition-id':41B 'self':29B 'self-host':28B 'ship':72B 'smilecdr':1A,31B,94C 'sourc':112C 'storag':117C 'switch':7A 'tenant':8A,25B,37B,67B,127C,135C 'transaction/batch':48B 'trust':54B,111C 'unless':82B 'untrust':99C 'version':92B 'write':64B,132C 'x':56B 'x-request-partition-id':55B 'yet':89B","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-22T18:17:27+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"9119a7d8-5eab-497f-8521-727c672e3725","poc_count":1,"sources":[{"source":"nvd","external_id":"CVE-2026-113874","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-113874","severity":null,"published_at":"2026-10-22T18:17:27+00:00","modified_at":"2026-10-23T19:17:43+00:00","first_seen_at":"2026-10-23T21:57:31+00:00","fetched_at":"2026-10-23T22:29:02+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-113874:493","url":null,"severity":null,"published_at":"2026-10-23T23:40:50+00:00","modified_at":"2026-10-23T23:40:50+00:00","first_seen_at":"2026-10-23T23:40:50+00:00","fetched_at":"2026-10-23T23:40:50+00:00","note":"Read CISA CSAF VA-26-294-01 and reporter's oss-security post: all versions affected, no fix as of 2026-10-22; PoC public (JUnit, reporter's writeup); no exploitation reported. Not a Smile CDR-published advisory; Smile CDR not tested. Social search not done."},{"source":"epss","external_id":"CVE-2026-113874","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-113874","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T07:15:51+00:00","fetched_at":"2026-10-24T07:15:51+00:00","note":null}],"documents":[{"id":2109,"url":"https://raw.githubusercontent.com/cisagov/CSAF/develop/csaf_files/IT/white/2026/va-26-294-01.json","title":"CISA CSAF VA-26-294-01 (HAPI FHIR, VU#394579)","kind":"advisory","source":"analyst","text":"CVE-2026-113874 trusted tenant partition override, CWE-863, CVSS 3.1 8.1. Affected: all versions. Remediation: none available. Recommended: update to most recent version.","published_at":null,"relation":"advisory","confidence":null,"note":null},{"id":2107,"url":"https://www.openwall.com/lists/oss-security/2026/10/22/34","title":"oss-security: HAPI FHIR cross-tenant partition override (Abhinav Agarwal)","kind":"poc","source":"analyst","text":"Reporter's writeup. Affected setup: RequestHeaderPartitionInterceptor behind a gateway setting X-Request-Partition-IDs. Caller puts extension http://hapifhir.io/fhir/ns/StructureDefinition/request-partition-ids on Bundle.entry.request, overriding trusted header in BaseTransactionProcessor.setRequestPartitionHeaderIfEntryHasTheExtension(). HAPI ships no STORAGE_PARTITION_SELECTED entitlement hook; an integrator hook blocked the override. Reproduced on 8.10.0; code present in 8.8.2, 8.10.1, 8.12.1 and master; handler first shipped v8.2.0. Smile CDR 2026.05.R01 is based on 8.10.0 (not tested). No fix. PoC: 7 JUnit classes at https://abhinavagarwal07.github.io/posts/hapi-fhir-authorization-findings/?src=oss","published_at":null,"relation":"poc","confidence":null,"note":null}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}