MEDIUMCVSS v4 5.3Vulnerability

CVE-2026-113664

### Summary The tar-extraction guard added to `@apostrophecms/import-export` for GHSA-mwxc-m426-3f78 is a literal substring test for `../`, and `./..` does not contain that substring. An entry named `./..` therefore passes the guard, `path.join` normalizes it to the parent of the export directory, and the resulting `fs.WriteStream` opens a directory and emits `EISDIR` with no `error` listener attached, which terminates the Node process. Confirmed on default-branch HEAD `1bd5d0a7a6fe880836fa75adad6964f1c577d640`, package version `3.6.2`. ### Details `packages/import-export/lib/formats/gzip.js`, in the tar-stream `entry` handler inside `extract(filepath, exportPath)`: ```js const name = header.name.replace(/\\/g, '/'); if (name.includes('../')) { // skipped } ... stream.pipe(fs.WriteStream(path.join(exportPath, name))); ``` Two separate problems sit in those four lines. The guard tests the raw entry name for a substring instead of resolving the joined path and requiring containment, and the write stream has no `error` handler, so any stream error becomes an unhandled `'error'` event. Reaching it needs an account that can import, nothing more. `packages/import-export/modules/@apostrophecms/import-export-page/index.js` exposes `post.importExportImport`, which calls into `lib/methods/import.js`; that handler requires `req.user` and then calls `format.input(exportPath)`, which for a `.gz` upload is `gzip.js` calling `extract()` on the uploaded archive. ### PoC This is not an end-to-end exploit. What follows is each of the three primitives the crash depends on, executed individually, plus a source-level trace of the route. The chain from `post.importExportImport` to `extract()` was read, not observed. The guard misses the payload: ```bash node -e "console.log('./..'.includes('../')); console.log('..'.includes('../')); console.log('a/./..'.includes('../'));" ``` ```text false false false ``` `path.join` then resolves it out of the export directory: ```bash n

Properties

Summary
ApostropheCMS import-export tar guard misses './..' because it is a literal '../' substring test
Severity
medium
Nvd fetched at
2026-10-20T21:14:08.448323+00:00
Cvss score
5.3
Cvss severity
MEDIUM
Retrieved at
2026-10-21T01:23:59+00:00
Ghsa published
2026-10-20T18:23:42Z
Source url
https://github.com/advisories/GHSA-97wv-p4xx-c7mg
Ghsa updated
2026-10-20T18:23:43Z
Ghsa id
GHSA-97wv-p4xx-c7mg
Last source
GitHub Advisory Database
Score
5.3
Cvss version
4.0
Cve id
CVE-2026-113664
Cvss vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/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
First seen by Signal
2026-10-20T21:15:35+00:00
Is ghsa only
false
Vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/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
Published at
2026-10-20T18:17:19.860
Last modified
2026-10-20T19:53:10.247

Related Entities (3)

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-113664 (CVSS v4 5.3) — Ninja Signal Threat Intelligence | Ninja Signal