ApostropheCMS: Falta de autenticación en la ruta `cleanExport`
1. Resumen
El endpoint de API POST /api/v1/@apostrophecms/import-export/clean-export en @apostrophecms/import-export carece de comprobaciones de autenticación y autorización. Cualquier cliente —incluidos los usuarios anónimos no autenticados que hayan obtenido la cookie CSRF estándar al visitar el sitio— puede invocar directamente esta ruta y activar el método subyacente self.cleanExport(req).
2. Archivos y endpoints afectados
- Endpoint:
POST /api/v1/@apostrophecms/import-export/clean-export - Definición de ruta:
packages/import-export/lib/apiRoutes.js(líneas 32–34) - Implementación del método:
packages/import-export/lib/methods/import.js(líneas 1271–1324)
3. Análisis de causa raíz
En packages/import-export/lib/apiRoutes.js, el manejador get.related valida explícitamente que el solicitante haya iniciado sesión:
get: {
async related(req) {
if (!req.user) {
throw self.apos.error('forbidden');
}
// ...
}
}
Por el contrario, post.cleanExport (así como post.overrideDuplicates) carece de cualquier verificación de req.user:
post: {
async overrideDuplicates(req) {
return self.overrideDuplicates(req);
},
async cleanExport(req) {
return self.cleanExport(req); // <-- No authentication check
}
}
Dado que ApostropheCMS no aplica la autenticación globalmente en todos los apiRoutes, omitir una protección explícita mediante if (!req.user) permite que las solicitudes anónimas pasen directamente a la capa de lógica de negocio.
4. Evidencia
Al enviar una solicitud POST no autenticada con la cookie CSRF del sitio (emitida a cualquier visitante en GET /), la solicitud elude el control de acceso por completo y ejecuta self.cleanExport(req), como se demuestra en el seguimiento de pila del servidor:
at Object.cleanExport (.../packages/import-export/lib/methods/import.js)
at .../packages/apostrophe/modules/@apostrophecms/module/index.js:193:30
Esto confirma que la ejecución llega directamente al manejador principal de importación/exportación sin una sesión autenticada.
5. Impacto
- Control de acceso roto: Los usuarios no autenticados pueden invocar operaciones de limpieza y eliminar archivos temporales de exportación y artefactos almacenados en el servidor.
- Mutación de estado no autorizada: El endpoint permite modificar registros de tareas en la base de datos a través de
req.body.jobId(forzándolos aended: true, status: 'completed') y descartar notificaciones mediantereq.body.notificationIdsin verificar si los recursos pertenecen al solicitante.
6. Mitigación sugerida (parche)
Aplique una comprobación de autenticación en packages/import-export/lib/apiRoutes.js antes de ejecutar los métodos subyacentes:
--- a/packages/import-export/lib/apiRoutes.js
+++ b/packages/import-export/lib/apiRoutes.js
@@ -26,10 +26,16 @@ module.exports = self => {
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);
}
}
Qué hacer
Actualice @apostrophecms/import-export a la versión 3.7.1 o posterior. Alternativamente, implemente una comprobación de autenticación en packages/import-export/lib/apiRoutes.js antes de ejecutar los métodos subyacentes.
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Paquete de npm | @apostrophecms/import-export | < 3.7.1 | 3.7.1 |
Referencias
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-rw26-wwfc-9wvm
- https://nvd.nist.gov/vuln/detail/CVE-2026-113648
- https://github.com/apostrophecms/apostrophe/commit/06e4b377f3c360f9e89c32dccd7e505ad5ddf498
- https://github.com/apostrophecms/apostrophe/commit/40b989b1a9dd23d30029b8ce7668634265cfe5ea
- https://github.com/apostrophecms/apostrophe
- https://github.com/apostrophecms/apostrophe/releases/tag/@apostrophecms/import-export@3.7.1
- Vector CVSS
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N- Debilidad (CWE)
CWE-306, CWE-862- Plataforma
- npm
- Paquete
@apostrophecms/import-export- Publicada
- 21.10.2026
- Actualizado
- 21.10.2026 20:24
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-rw26-wwfc-9wvm - CC BY 4.0
Historial de vulnerabilidades: @apostrophecms/import-export
Todas las vulnerabilidades publicadas de este paquete (Paquete de npm), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.
- Entradas en total
- 9
- Primera → última
- 03.2026 10.2026
- Sin corrección
- 0
- Explotada en ataques
- 0
Distribución por gravedad
- Crítica 1
- Alta 1
- Media 6
- Baja 1
Divulgaciones por año
- 2026: 9
-
ApostropheCMS: Falta de autenticación en la ruta `cleanExport` esta entrada
Identifica las vulnerabilidades de tu aplicación
Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.