---
id: "CVE-2026-54668"
kind: "vulnerability"
aliases: ["CVE-2026-54668"]
title: "Kitodo.Production: XML import lets an uploader read server files"
severity: "high"
cvss: 8.7
epss: 0.00407
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["digital-library", "java", "kitodo.production", "package", "poc-public"]
not_affected_if: ["no-ead-import-used", "version-3.9.2-or-later"]
published_at: "2026-10-23T15:17:32+00:00"
first_seen_at: "2026-10-23T21:57:34+00:00"
updated_at: "2026-10-25T12:38:49+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-54668", "first_seen_at": "2026-10-23T21:57:34+00:00"}, {"source": "github-poc", "url": "https://github.com/KernelEditor/CVE-2026-54668", "first_seen_at": "2026-10-23T23:24:51+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-54668", "first_seen_at": "2026-10-25T12:38:49+00:00"}]
---

# Kitodo.Production: XML import lets an uploader read server files

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.

_Summary, check and fix written by a model from the sources; labelled as such._

## 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.

## Timeline

- 2026-10-23T21:57:34+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-54668
- 2026-10-23T23:24:51+00:00 github-poc https://github.com/KernelEditor/CVE-2026-54668
- 2026-10-25T12:38:49+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-54668

## Documents

- [poc] KernelEditor/CVE-2026-54668 https://github.com/KernelEditor/CVE-2026-54668

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
