GitHub Advisoryadvisory · npm

GHSA-rw26-wwfc-9wvm ApostropheCMS: Missing Authentication in `cleanExport` Route

LOW Published 2026-10-21 Modified 2026-10-21 Official page ↗
Aliases
CVE-2026-113648
Ecosystem
npm
Packages
@apostrophecms/import-export
Severity
Low
CVSS vector
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N
Weaknesses
CWE-306, CWE-862
Reviewed
2026-10-21

Affected packages

• npm @apostrophecms/import-export: < 3.7.1 → fixed in 3.7.1

Description

1. Summary The API endpoint `POST /api/v1/@apostrophecms/import-export/clean-export` in `@apostrophecms/import-export` lacks authentication and authorization checks. Any client—including unauthenticated anonymous users who have obtained the standard CSRF cookie from visiting the site—can directly invoke this route and trigger the underlying `self.cleanExport(req)` method. --- 2. Affected Files & Endpoints • Endpoint: `POST /api/v1/@apostrophecms/import-export/clean-export` • Route Definition: `packages/import-export/lib/apiRoutes.js` (lines 32–34) • Method Implementation: `packages/import-export/lib/methods/import.js` (lines 1271–1324) --- 3. Root Cause Analysis In `packages/import-export/lib/apiRoutes.js`, the `get.related` handler explicitly validates that the caller is logged in: ```javascript get: { async related(req) { if (!req.user) { throw self.apos.error('forbidden'); } // ... } } ``` In contrast, `post.cleanExport` (as well as `post.overrideDuplicates`) lacks any verification of `req.user`: ```javascript post: { async overrideDuplicates(req) { return self.overrideDuplicates(req); }, async cleanExport(req) { return self.cleanExport(req); // { get: { ... }, post: { async overrideDuplicates(req) { + if (!req.user) { + throw self.apos.error('forbidden'); + } return self.overrideDuplicates(req); }, async cleanExport(req) { + if (!req.user) { + throw self.apos.error('forbidden'); + } return self.cleanExport(req); } } ```

Related

Alias · CVE (1)

  • CVE-2026-113648 ApostropheCMS is an open-source Node.js content management system. vulnerability

Weakness · CWE (2)

  • CWE-306 Missing Authentication for Critical Functionality weakness
  • CWE-862 Missing Authorization weakness

References