ApostropheCMS import-export: Inyección NoSQL mediante el valor update-key permite hacer coincidir y sobrescribir un documento no identificado
Resumen
La función de actualización por clave de @apostrophecms/import-export permite que un documento importado incluya una propiedad <field>:key (por ejemplo, slug:key) cuyo valor se utiliza para buscar un documento existente que actualizar en lugar de insertar uno nuevo. getUpdateKey()/insertOrUpdateDocWithKey() (lib/methods/import.js) utilizan ese valor directamente como valor de consulta en MongoDB sin ningún tipo de saneamiento:
const matchingDraftPromise = manager.findForEditing(
req.clone({ mode: 'draft' }),
{
aposMode: 'draft',
[updateField]: doc[updateKey]
}).toObject();
Los documentos del archivo se analizan con EJSON (consulte lib/formats/gzip.js), que revive objetos como { $ne: null } como valores activos; se trata de la misma fuente de datos no confiable y del mismo mecanismo de reactivación que ya se corrigió en este módulo para findSingletonAposDocId/findParkedAposDocId en GHSA-79qf-vqgc-7xx3. Esa corrección no modificó insertOrUpdateDocWithKey, por lo que la misma clase de error persiste aquí: una entrada manipulada de "slug:key": { "$ne": null } en el aposDocs.json de un archivo hace que la importación coincida con un documento existente (y luego lo actualice) que el autor del archivo nunca identificó realmente, en lugar de no encontrar ninguna coincidencia.
Impacto
Para explotar esto solo se necesita una sesión autenticada con acceso de importación al tipo de destino (el rol predeterminado de colaborador cuenta con esto, cumpliendo la condición previa de GHSA-79qf-vqgc-7xx3), sin requerir interacción de un administrador. Dado que la coincidencia utiliza un operador de MongoDB en lugar de un valor exacto, no se limita a un documento del cual el importador ya conozca el campo identificador: cualquier documento existente sobre el que el importador tenga permisos genéricos de edición y que satisfaga el operador (lo que { $ne: null } cumple de forma trivial para cualquier documento con un valor no nulo en dicho campo) es candidato. El filtro de permisos findForEditing de Apostrophe, y no la lógica de la clave de actualización, es lo único que restringe qué documento coincide y se sobrescribe realmente.
Comprobado en un entorno activo: una solicitud con rol de colaborador que importaba un documento con "slug:key": { "$ne": null } aplicó su contenido a un borrador de artículo existente y no relacionado, sobrescribiendo su título, sin que el importador hubiera especificado en ningún momento el slug real de ese artículo.
Versiones afectadas
Confirmado en el HEAD de la rama main a fecha de 2026-09-04, packages/import-export/lib/methods/import.js.
Corrección sugerida
Sanear doc[updateKey] para convertirlo en una cadena simple (replicando la solución ya aplicada a type/aposLocale/parkedId en GHSA-79qf-vqgc-7xx3) antes de utilizarlo como valor de consulta, y recurrir a la vía de inserción cuando no se trate de una cadena utilizable.
Qué hacer
Actualice a @apostrophecms/import-export versión 3.7.0 o posterior.
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.0 | 3.7.0 |
Referencias
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-jqw5-w6h3-44g6
- https://github.com/apostrophecms/apostrophe/commit/9500b8b0e1d630d5e07fbb5fd2c25ed0943845ce
- https://github.com/apostrophecms/apostrophe/commit/f84fd41cbf6c22eb8d0008fc9c25df1f7130b350
- https://github.com/apostrophecms/apostrophe
- https://github.com/apostrophecms/apostrophe/releases/tag/@apostrophecms/import-export@3.7.0
- Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L- Debilidad (CWE)
CWE-284, CWE-943- Plataforma
- npm
- Paquete
@apostrophecms/import-export- Publicada
- 20.10.2026
- Actualizado
- 20.10.2026 21:27
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-jqw5-w6h3-44g6 - 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
- 4
- Primera → última
- 03.2026 10.2026
- Sin corrección
- 0
- Explotada en ataques
- 0
Distribución por gravedad
- Crítica 1
- Media 3
Divulgaciones por año
- 2026: 4
-
ApostropheCMS import-export: Inyección NoSQL mediante el valor update-key permite hacer coincidir y sobrescribir un documento no identificado 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.