{"id":"CVE-2026-54668","kind":"vulnerability","aliases":["CVE-2026-54668"],"related":[],"title":"Kitodo.Production: XML import lets an uploader read server files","description":"Kitodo.Production is a workflow management tool for mass digitization and is part of the Kitodo Digital Library Suite. Prior to version 3.9.2, org.kitodo.production.helper.XMLUtils exposes several XML parsing helpers that construct a JAXP parser with the default, non-secure configuration. The methods parseXMLString(String), getNumberOfEADElements(String, String) and checkIfXmlIsWellFormed(String) build a DocumentBuilderFactory / XMLInputFactory / SAXParserFactory via newInstance() and parse the attacker-supplied string without disabling DOCTYPE declarations or external entity resolution. These helpers sit directly on the EAD-import path: an authenticated user who uploads an EAD/XML file through the \"Create process\" file-upload dialog has the uploaded bytes parsed by these methods. A crafted document with an external entity therefore yields XML External Entity (XXE) injection: local file disclosure and outbound SSRF requests from the server. This issue has been patched in version 3.9.2.","summary":"Kitodo.Production's EAD/XML import parses uploaded files with an XML parser that resolves external entities. An logged-in user who uploads a crafted file can read local files on the server and make server-side requests to internal hosts.","severity":"high","cvss":8.7,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["java","digital-library","poc-public","kitodo.production","package"],"not_affected_if":["no-ead-import-used","version-3.9.2-or-later"],"how_to_check":"Check the Kitodo.Production version in use; affected if older than 3.9.2.","fix":"Upgrade Kitodo.Production to 3.9.2 or later.","status":"open","published_at":"2026-10-23T15:17:32+00:00","first_seen_at":"2026-10-23T21:57:34+00:00","triaged_at":"2026-10-23T22:34:57+00:00","updated_at":"2026-10-23T23:24:51+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-23T22:34:57Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade Kitodo.Production to 3.9.2 or later.","reach":"internet","title":"Kitodo.Production: XML import lets an uploader read server files","impact":"medium","summary":"Kitodo.Production's EAD/XML import parses uploaded files with an XML parser that resolves external entities. An logged-in user who uploads a crafted file can read local files on the server and make server-side requests to internal hosts.","category":"package","who_cares":["kitodo.production","digital-library","java"],"confidence":0.8,"needs_auth":"yes","worst_case":"Server local files readable and internal network requests forged by an uploader","analyst_note":"","how_to_check":"Check the Kitodo.Production version in use; affected if older than 3.9.2.","needs_analyst":false,"not_affected_if":["version-3.9.2-or-later","no-ead-import-used"],"user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000486,"input_tokens":3165,"output_tokens":338,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,14A '-54668':12A,15A '3.9.2':87C,203C 'attack':127C 'attacker-suppli':126C 'authent':149C 'build':116C 'byte':167C 'checkifxmliswellform':114C 'configur':105C 'construct':95C 'craft':48B,173C 'creat':158C 'cve':10A,13A 'declar':133C 'default':101C 'dialog':163C 'digit':18B,74C,81C 'digital-librari':17B 'direct':141C 'disabl':131C 'disclosur':188C 'doctyp':132C 'document':174C 'documentbuilderfactori':118C 'ead':145C 'ead-import':144C 'ead/xml':27B,154C 'entiti':39B,136C,178C,183C 'expos':89C 'extern':38B,135C,177C,182C 'file':9A,31B,49B,53B,155C,161C,187C 'file-upload':160C 'getnumberofeadel':110C 'helper':93C,139C 'host':65B 'import':3A,28B,146C 'inject':185C 'intern':64B 'issu':197C 'java':16B 'jaxp':97C 'kitodo':80C 'kitodo.production':1A,23B,25B,66C 'let':4A 'librari':19B,82C 'local':52B,186C 'log':42B 'logged-in':41B 'make':58B 'manag':70C 'mass':73C 'method':107C,171C 'newinst':122C 'non':103C 'non-secur':102C 'org.kitodo.production.helper.xmlutils':88C 'outbound':190C 'packag':24B 'pars':29B,92C,124C,168C 'parser':35B,98C 'parsexmlstr':108C 'part':77C 'patch':200C 'path':147C 'poc':21B 'poc-publ':20B 'prior':84C 'process':159C 'public':22B 'read':7A,51B 'request':62B,192C 'resolut':137C 'resolv':37B 'saxparserfactori':120C 'secur':104C 'server':8A,56B,60B,195C 'server-sid':59B 'sever':90C 'side':61B 'sit':140C 'ssrf':191C 'string':109C,111C,112C,115C,129C 'suit':83C 'suppli':128C 'therefor':179C 'tool':71C 'upload':6A,30B,46B,152C,162C,166C 'user':44B,150C 'version':86C,202C 'via':121C 'without':130C 'workflow':69C 'xml':2A,34B,91C,181C 'xmlinputfactori':119C 'xxe':184C 'yield':180C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-23T15:17:32+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/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":"security-advisories@github.com","poc_count":1,"sources":[{"source":"nvd","external_id":"CVE-2026-54668","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54668","severity":null,"published_at":"2026-10-23T15:17:32+00:00","modified_at":"2026-10-23T19:57:42+00:00","first_seen_at":"2026-10-23T21:57:34+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null},{"source":"github-poc","external_id":"KernelEditor/CVE-2026-54668","url":"https://github.com/KernelEditor/CVE-2026-54668","severity":null,"published_at":"2026-10-23T22:46:58+00:00","modified_at":null,"first_seen_at":"2026-10-23T23:24:51+00:00","fetched_at":"2026-10-23T23:24:51+00:00","note":null}],"documents":[{"id":1946,"url":"https://github.com/KernelEditor/CVE-2026-54668","title":"KernelEditor/CVE-2026-54668","kind":"poc","source":"github","text":"PoC for CVE-2026-54668 — XXE injection in Kitodo.Production (< 3.9.2) XMLUtils. Default-configured JAXP parsers on the EAD-import path resolve external entities: local file disclosure + SSRF. Verified on JDK 17. Java, no dependencies.\n\nstars 0","published_at":"2026-10-23T22:46:58+00:00","relation":"poc","confidence":null,"note":"0 stars"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}