{"id":"CVE-2026-12993","kind":"vulnerability","aliases":["CVE-2026-12993","GHSA-748j-wm96-4wh5"],"related":[],"title":"Apicurio Registry is vulnerable to denial of service through XML entity expansion","description":"A flaw was found in Apicurio Registry. The DocumentBuilderAccessor correctly blocks external DTD and schema access but does not disable DOCTYPE declarations or enable FEATURE_SECURE_PROCESSING. An attacker with artifact-write permission can upload XML documents with internal entity-expansion payloads (billion-laughs variant) that cause CPU and heap exhaustion, partially mitigated by the JAXP default 64,000 entity-expansion limit.","summary":"Apicurio Registry's XML schema parser does not disable DOCTYPE declarations or secure processing, so crafted nested-entity XML can consume large amounts of CPU and heap. An attacker with artifact-write permission can make the registry slow or crash, though the JAXP default entity-expansion limit partly mitigates it.","severity":"medium","cvss":6.5,"epss":0.00519,"exploited":false,"exploited_at":null,"products":[{"name":"io.apicurio:apicurio-registry-schema-util-xml","fixed":["3.3.1"],"affected":">= 3.3.0, < 3.3.1","ecosystem":"maven"},{"name":"io.apicurio:apicurio-registry-schema-util-xml","fixed":["3.2.6"],"affected":"< 3.2.6","ecosystem":"maven"},{"name":"redhat build of apicurio registry","fixed":[],"affected":">= 3.0, <= 3.2","ecosystem":"vendor"}],"ecosystems":["maven","vendor"],"tags":["apicurio-registry","cwe-776","java","maven","package","schema-registry"],"not_affected_if":["no-xml-artifacts","read-only-access"],"how_to_check":"- Check the version of `io.apicurio:apicurio-registry-schema-util-xml` in your build files (for example `mvn dependency:list` or your lockfile) and compare it to the fixed versions below.\n- Confirm whether untrusted users can upload artifacts to the registry (artifact-write permission).","fix":"- `io.apicurio:apicurio-registry-schema-util-xml` 3.3.x: move to `3.3.1`\n- `io.apicurio:apicurio-registry-schema-util-xml` 3.2.x: move to `3.2.6`","status":"open","published_at":"2026-06-26T00:16:50+00:00","first_seen_at":"2026-11-04T18:17:04+00:00","triaged_at":"2026-11-04T18:19:04+00:00","updated_at":"2026-11-04T18:28:34+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-04T18:19:04Z","model":"claude-haiku-5-5","output":{"fix":"- `io.apicurio:apicurio-registry-schema-util-xml` 3.3.x: move to `3.3.1`\n- `io.apicurio:apicurio-registry-schema-util-xml` 3.2.x: move to `3.2.6`","reach":"network","title":"Apicurio Registry: XML entity expansion lets uploads exhaust CPU and memory","impact":"medium","summary":"Apicurio Registry's XML schema parser does not disable DOCTYPE declarations or secure processing, so crafted nested-entity XML can consume large amounts of CPU and heap. An attacker with artifact-write permission can make the registry slow or crash, though the JAXP default entity-expansion limit partly mitigates it.","audience":"developers","category":"package","nicknames":[],"who_cares":["apicurio-registry","java","maven","schema-registry"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"Registry becomes unresponsive from CPU and heap exhaustion","analyst_note":"","how_to_check":"- Check the version of `io.apicurio:apicurio-registry-schema-util-xml` in your build files (for example `mvn dependency:list` or your lockfile) and compare it to the fixed versions below.\n- Confirm whether untrusted users can upload artifacts to the registry (artifact-write permission).","plain_action":"","needs_analyst":false,"not_affected_if":["read-only-access","no-xml-artifacts"],"who_is_affected":"Exposure requires the Apicurio Registry XML schema utility on the processing path and an account with artifact-write permission that can upload XML documents. Deployments where only trusted users can write artifacts, or that do not use the XML schema utility, are less exposed.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.000758,"input_tokens":4362,"output_tokens":644,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-12993':15A,23A '-2026':14A,22A '-776':47B '000':167C '4wh5':20A '64':166C '748j':18A 'access':121C 'amount':77B 'apicurio':1A,26A,33A,41A,44B,54B,111C 'apicurio-registri':43B 'apicurio-registry-schema-util-xml':25A,32A 'artifact':86B,137C 'artifact-writ':85B,136C 'attack':83B,134C 'billion':151C 'billion-laugh':150C 'block':116C 'build':39A 'caus':155C 'consum':75B 'correct':115C 'cpu':79B,156C 'craft':69B 'crash':95B 'cve':13A,21A 'cwe':46B 'declar':64B,127C 'default':99B,165C 'denial':6A 'disabl':62B,125C 'doctyp':63B,126C 'document':143C 'documentbuilderaccessor':114C 'dtd':118C 'enabl':129C 'entiti':11A,72B,101B,147C,169C 'entity-expans':100B,146C,168C 'exhaust':159C 'expans':12A,102B,148C,170C 'extern':117C 'featur':130C 'flaw':107C 'found':109C 'ghsa':17A 'ghsa-748j-wm96-4wh5':16A 'heap':81B,158C 'intern':145C 'io.apicurio':24A,31A 'java':48B 'jaxp':98B,164C 'larg':76B 'laugh':152C 'limit':103B,171C 'make':90B 'maven':49B 'mitig':105B,161C 'nest':71B 'nested-ent':70B 'of':40A 'packag':50B 'parser':59B 'part':104B 'partial':160C 'payload':149C 'permiss':88B,139C 'process':67B,132C 'redhat':38A 'registri':2A,45B,53B,55B,92B,112C 'registry':27A,34A,42A 'schema':28A,35A,52B,58B,120C 'schema-registri':51B 'secur':66B,131C 'servic':8A 'slow':93B 'though':96B 'upload':141C 'util':29A,36A 'variant':153C 'vulner':4A 'wm96':19A 'write':87B,138C 'xml':10A,30A,37A,57B,73B,142C","nicknames":[],"mitigations":[],"who_affected":"Exposure requires the Apicurio Registry XML schema utility on the processing path and an account with artifact-write permission that can upload XML documents. Deployments where only trusted users can write artifacts, or that do not use the XML schema utility, are less exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":["buildofapicurioregistry","ioapicurioapicurioregistryschemautilxml","redhatbuildofapicurioregistry"],"ptokens":["apicurio","build","io","of","redhat","registry","schema","util","xml"],"labels":["apicurioregistry","cwe776","java","maven","medium","package","schemaregistry","vendor"],"campaign_type":null,"first_public_at":"2026-06-26T00:16:50+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-748j-wm96-4wh5","url":"https://github.com/advisories/GHSA-748j-wm96-4wh5","severity":"medium","published_at":"2026-06-26T00:32:07+00:00","modified_at":"2026-11-04T18:12:09+00:00","first_seen_at":"2026-11-04T18:17:04+00:00","fetched_at":"2026-11-04T18:53:13+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-12993","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-12993","severity":null,"published_at":"2026-06-26T00:16:50+00:00","modified_at":"2026-10-25T22:10:00+00:00","first_seen_at":"2026-11-04T18:28:34+00:00","fetched_at":"2026-11-04T18:28:34+00:00","note":null}],"documents":[{"id":69227,"url":"https://github.com/Apicurio/apicurio-registry/commit/03cd1cc081d9b1b4c8b9a59330ff4c980dc68b73","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":69019,"url":"https://github.com/Apicurio/apicurio-registry/releases/tag/3.3.1","title":"Release: github.com","kind":"release","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release: github.com"},{"id":69230,"url":"https://github.com/Apicurio/apicurio-registry/releases/tag/v3.2.6","title":"Release: github.com","kind":"release","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release: github.com"},{"id":69226,"url":"https://github.com/Apicurio/apicurio-registry/pull/8200","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":69016,"url":"https://github.com/Apicurio/apicurio-registry/commit/48369d0e9008f7aab16dce5970c1ecbdd55e9aa5","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":69374,"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2491692","title":"Vendor advisory: bugzilla.redhat.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Vendor advisory: bugzilla.redhat.com"},{"id":69373,"url":"https://access.redhat.com/security/cve/CVE-2026-12993","title":"Vendor advisory: access.redhat.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Vendor advisory: access.redhat.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}