Vulnerability GHSA-rw26-wwfc-9wvm

Low Risk
LOW RISK
CVSS Score: 3.1
Score Range: < 4.0
Low severity vulnerabilities (CVSS < 4.0). Hygiene issues that can accumulate but pose lower immediate risk.
1 hour ago
October 21, 2026 at 05:13 PM UTC
ApostropheCMS: Missing Authentication in `cleanExport` Route
1.0.0 - 3.7.0
1.0.0 - 3.7.0

Summary

ApostropheCMS: Missing Authentication in `cleanExport` Route

Details

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.

3. Root Cause Analysis

In packages/import-export/lib/apiRoutes.js, the get.related handler explicitly validates that the caller is logged in:

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:

post: {
  async overrideDuplicates(req) {
    return self.overrideDuplicates(req);
  },

  async cleanExport(req) {
    return self.cleanExport(req); // <-- No authentication check
  }
}

Because ApostropheCMS does not enforce authentication globally on all apiRoutes, omitting an explicit if (!req.user) guard allows anonymous requests to pass directly through to the business logic layer.

5. Impact

  1. Broken Access Control: Unauthenticated users can invoke cleanup operations and delete temporary export files and artifacts stored on the server.
  2. Unauthorized State Mutation: The endpoint allows modifying job records in the database via req.body.jobId (forcing them to ended: true, status: 'completed') and dismissing notifications via req.body.notificationId without verifying whether the resources belong to the requesting caller.

Timeline

Published
1 hour ago
October 21, 2026 at 05:13 PM UTC
Fixed (3.7.1)
7 days ago
October 14, 2026 at 06:14 PM UTC
Last Modified
1 hour ago
October 21, 2026 at 05:28 PM UTC