CVE-2026-61570: 
Java vulnerability analysis and mitigation

Overview

CVE-2026-61570 is an XML External Entity (XXE) injection vulnerability in the MerlinReader component of MPXJ, an open-source Java library for reading and writing project plan files. Affecting versions 5.5.5 through 16.4.0, the flaw allows a crafted Merlin project SQLite database to trigger arbitrary local file reads during XML parsing. The vulnerability was disclosed on September 22, 2026, with a fix released in version 16.4.1. It carries a CVSS v3.1 base score of 7.5 (High) (GitHub Advisory).

Technical details

The root cause is classified as CWE-611 (Improper Restriction of XML External Entity Reference). In MerlinReader.java, a DocumentBuilder instance was created using DocumentBuilderFactory.newInstance().newDocumentBuilder() — the default configuration — which leaves doctype declarations and external entity resolution enabled. When MPXJ parses the XML content stored in the ZTIMEINTERVALS column of a Merlin project SQLite database, a malicious XML payload with an external entity reference (e.g., file:///etc/passwd) can cause the parser to read arbitrary local files. The fix, applied in commit 6e8288b, introduces a shared UnmarshalHelper.createDocumentBuilder() method that explicitly sets the http://apache.org/xml/features/disallow-doctype-decl feature to true on the DocumentBuilderFactory before creating the builder (GitHub Commit, GitHub Advisory).

Impact

Successful exploitation allows an attacker to cause the XML parser to read arbitrary files from the local filesystem of the host running the MPXJ library. However, the advisory notes that due to how MPXJ subsequently processes the parsed XML, actual exfiltration of the file contents is unlikely in practice. There is no integrity or availability impact; the primary risk is a partial confidentiality breach limited to the local file system of the affected application server (GitHub Advisory).

Exploitability

No public proof-of-concept exploit code or in-the-wild exploitation has been reported for CVE-2026-61570. The EPSS score is 0.0, and it is not listed in the CISA Known Exploited Vulnerabilities catalog. Exploitation requires an attacker to supply a crafted Merlin project SQLite database file to an application using a vulnerable version of MPXJ, which limits the attack surface to scenarios where untrusted project files are processed (GitHub Advisory).

Exploitation steps

  1. Craft a malicious SQLite database: Create or modify a Merlin project .sqlite file, inserting a malicious XML payload into the ZTIMEINTERVALS column. The payload should include a DOCTYPE declaration with an external entity referencing a target local file, e.g.:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><root>&xxe;</root>
  1. Deliver the file: Provide the crafted SQLite database to a target application that uses a vulnerable version of MPXJ (>= 5.5.5, < 16.4.1) to parse Merlin project files — for example, via a file upload feature or shared network path.
  2. Trigger parsing: Cause the application to open and parse the malicious database using MerlinReader. MPXJ will instantiate a DocumentBuilder with default settings and parse the XML from ZTIMEINTERVALS.
  3. File read occurs: The XML parser resolves the external entity and reads the referenced local file. Due to MPXJ's subsequent XML processing, direct exfiltration of the file content is unlikely, but the read operation does occur on the server (GitHub Advisory, GitHub Commit).

Indicators of compromise

  • File System: Unexpected or untrusted .sqlite files submitted to applications that process Merlin project files.
  • Logs: Application or Java runtime logs showing XML parsing errors related to DOCTYPE declarations or external entity resolution (e.g., SAXParseException referencing file:// URIs) when processing Merlin project files.
  • Process: Java process making unexpected file system reads to sensitive paths (e.g., /etc/passwd, /etc/shadow, Windows SAM files) during MPXJ MerlinReader execution.

Mitigation and workarounds

Upgrade MPXJ to version 16.4.1 or later, which disables doctype declarations in the DocumentBuilder used by MerlinReader. The fix is available across all supported package ecosystems: Maven (net.sf.mpxj:mpxj), NuGet (MPXJ.Net, net.sf.mpxj, net.sf.mpxj-for-csharp, net.sf.mpxj-for-vb), pip (mpxj), and RubyGems (mpxj). If upgrading immediately is not possible, workarounds include: avoiding parsing of Merlin project files with MPXJ, accepting Merlin files only from trusted sources, or preprocessing SQLite databases to strip DOCTYPE declarations from the ZTIMEINTERVALS column before parsing (GitHub Advisory, MPXJ Release).

Community reactions

The vulnerability was credited to researcher dyingman1 and published by the MPXJ maintainer (joniles) via GitHub Security Advisories. No significant broader media coverage or notable public researcher commentary beyond the advisory itself has been identified at this time (GitHub Advisory).

Additional resources


Source: This report was generated using AI

Related Java vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-54148HIGH8.1
  • Java logoJava
  • org.http4k:http4k-security-digest
NoYesSep 18, 2026
CVE-2026-61570HIGH7.5
  • Java logoJava
  • mpxj
NoYesSep 22, 2026
CVE-2026-85058HIGH7.5
  • Java logoJava
  • io.moquette:moquette-broker
NoYesSep 18, 2026
CVE-2026-69190MEDIUM6.3
  • Java logoJava
  • org.graylog2:graylog2-server
NoYesSep 21, 2026
CVE-2026-65829MEDIUM5.3
  • Java logoJava
  • net.sf.mpxj:mpxj
NoYesSep 22, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management