{"id":"CVE-2026-61570","summary":"MPXJ: XXE Vulnerability in MerlinReader","details":"MPXJ is an open source library to read and write project plans from a variety of file formats and databases. From 5.5.5 until 16.4.1, MerlinReader creates a DocumentBuilder with default settings while parsing XML from the ZTIMEINTERVALS column of a Merlin project SQLite database, leaving doctype declarations and external entities enabled. A crafted database can cause the parser to read an arbitrary local file, although MPXJ's subsequent handling of the parsed XML makes disclosure of the file contents unlikely. This issue is fixed in version 16.4.1.","aliases":["GHSA-5vvx-3h34-f3gj","PYSEC-2026-4107"],"modified":"2026-11-07T13:05:51.470304857Z","published":"2026-09-22T19:56:08.061Z","database_specific":{"cwe_ids":["CWE-611"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/61xxx/CVE-2026-61570.json","cna_assigner":"GitHub_M"},"references":[{"type":"WEB","url":"https://github.com/joniles/mpxj/releases/tag/v16.4.1"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/61xxx/CVE-2026-61570.json"},{"type":"ADVISORY","url":"https://github.com/joniles/mpxj/security/advisories/GHSA-5vvx-3h34-f3gj"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-61570"},{"type":"FIX","url":"https://github.com/joniles/mpxj/commit/6e8288bc4d1cd62842af298004dc74fe66fb0805"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/joniles/mpxj","events":[{"introduced":"0"},{"fixed":"95f57a95dfd9d973e49c057f283868d53e85e782"},{"fixed":"6e8288bc4d1cd62842af298004dc74fe66fb0805"}],"database_specific":{"extracted_events":[{"strategy":"StringRangeExpression","range":[{"introduced":"5.5.5"},{"fixed":"16.4.1"}],"source":"AFFECTED_FIELD"},{"source":"REFERENCES_COMMIT","range":[{"fixed":"6e8288bc4d1cd62842af298004dc74fe66fb0805"}]},{"original_tag":"v16.4.1","range":[{"fixed":"95f57a95dfd9d973e49c057f283868d53e85e782"}],"source":"REFERENCES_TAG"}]}}],"versions":["v16.4.0","v16.3.0","v16.2.0","v16.1.0","v16.0.0","v15.3.1","v15.3.0","v15.2.0","v15.1.0","v15.0.0","v14.5.2","v14.5.1","v14.5.0","v14.3.5","v14.3.4","v14.3.3","v14.3.2","v14.3.1","v14.3.0","v14.2.0","v14.1.0","v14.0.0","v13.12.0","v13.11.0","v13.10.0","v13.9.0","v13.8.0","v13.7.0","v13.6.0","v13.5.1","v13.4.2","v13.4.1","v13.4.0","v13.3.1","v13.3.0","v13.2.1","v13.2.0","v13.1.0","v13.0.2","v13.0.1","v13.0.0","v12.10.3","v12.10.2","v12.10.1","v12.10.0","v12.9.3","v12.9.2","v12.9.1","v12.8.1","v12.8.0","v12.7.0","v12.6.0","v12.5.0","v12.3.0","v12.2.0","v12.1.3","v12.1.2","v12.1.1","v12.1.0","v12.0.2","v12.0.1","v12.0.0","v11.5.4","v11.5.3","v11.5.2","v11.5.1","v11.5.0","v11.4.0","v11.3.2","v11.3.1","v11.3.0","v11.2.0","v11.1.0","v11.0.0","v10.16.2","v10.16.1","v10.15.0","v10.14.1","v10.13.0","v10.12.0","v10.10.0","v10.9.1","v10.9.0","v10.8.0","v10.7.0","v10.6.2","v10.6.1","v10.6.0","v10.5.0","v10.4.0","v10.3.0","v10.2.0","v10.1.0","v10.0.5","v10.0.4","v10.0.3","v10.0.2","v10.0.1","v10.0.0","v9.8.3","v9.8.2","v9.8.1","v9.8.0","v9.7.0","v9.6.0","v9.5.2","v9.5.1","v9.5.0","v9.4.0","v9.3.1","v9.3.0","v9.2.6","v9.2.5","v9.2.4","v9.2.3","v9.2.2","v9.2.1","v9.2.0","v9.1.0","v9.0.0","v8.5.1","v8.5.0","v8.4.0","v8.3.5","v8.3.4","v8.3.3","v8.3.2","v8.3.1","v8.3.0","v8.2.0","v8.1.4","v8.1.3","v8.1.2","v8.1.1","v8.1.0","v8.0.8","v8.0.7","v8.0.6","v8.0.5","v8.0.4","v8.0.3","v8.0.2","v8.0.0","v7.9.8","v7.9.7","v7.9.6","v7.9.5","v7.9.4","v7.9.3","v7.9.2","v7.9.1","v7.9.0","v7.8.4","v7.8.3","v7.8.2","v7.8.1","v7.8.0","v7.7.1","v7.7.0","v7.6.3","v7.6.2","v7.6.1","v7.6.0","v7.5.0","v7.4.4","v7.4.3","v7.4.2","v7.4.1","v7.4.0","v7.3.0","v7.2.1","v7.2.0","v7.1.0","v7.0.3","v7.0.2","v7.0.1","v7.0.0"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-61570.json","vanir_signatures":[{"source":"https://github.com/joniles/mpxj/commit/6e8288bc4d1cd62842af298004dc74fe66fb0805","target":{"file":"src/main/java/org/mpxj/common/UnmarshalHelper.java"},"deprecated":false,"digest":{"threshold":0.9,"line_hashes":["125848836031459486117609617777905280688","160847963359016003552657138598704640696","285595759404101066117464512401212427570","182375962127740908912589962259204642202","139889726644266272281177992430195496717","94837425428290758660755449559370435078","267092431279737236475961460583158154153","147943849184445424859151981200513568205","204587812796598439946113356505913077786"]},"id":"CVE-2026-61570-141b15a2","signature_type":"Line","signature_version":"v1"},{"signature_type":"Function","signature_version":"v1","source":"https://github.com/joniles/mpxj/commit/6e8288bc4d1cd62842af298004dc74fe66fb0805","target":{"file":"src/main/java/org/mpxj/merlin/MerlinReader.java","function":"readFile"},"deprecated":false,"digest":{"function_hash":"172658275862139034747635699231069585347","length":592},"id":"CVE-2026-61570-40713a97"},{"signature_version":"v1","source":"https://github.com/joniles/mpxj/commit/6e8288bc4d1cd62842af298004dc74fe66fb0805","target":{"function":"createXmlReader","file":"src/main/java/org/mpxj/common/UnmarshalHelper.java"},"deprecated":false,"digest":{"function_hash":"128214986274096556154485970599270815448","length":260},"id":"CVE-2026-61570-9788916c","signature_type":"Function"},{"signature_type":"Line","signature_version":"v1","source":"https://github.com/joniles/mpxj/commit/6e8288bc4d1cd62842af298004dc74fe66fb0805","target":{"file":"src/main/java/org/mpxj/merlin/MerlinReader.java"},"deprecated":false,"digest":{"threshold":0.9,"line_hashes":["188350188840414607550987041215903346447","316645231538089724403374395329015241323","289062765613515752672507320875119833640","321478099971387457015684681014304869","319600007231477348377589754982947245331","254922011182113855573753708837328946577","66447391923216654726456879939929853077","256446879903219393397074715842872661515","110940519777418245855867902126547494322","228584782812295929837516947510484977548","32936554937105289819394015918336764676","85148941235282214984078081825650218339"]},"id":"CVE-2026-61570-b25af775"},{"source":"https://github.com/joniles/mpxj/commit/95f57a95dfd9d973e49c057f283868d53e85e782","target":{"file":"src/main/java/org/mpxj/MPXJ.java"},"deprecated":false,"digest":{"line_hashes":["134996035051442570378843048653802650782","149565229474382688604786099343804143074"],"threshold":0.9},"id":"CVE-2026-61570-bb7ac997","signature_type":"Line","signature_version":"v1"}],"vanir_signatures_modified":"2026-11-07T13:05:51Z"}}],"schema_version":"1.9.2","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"}]}