ApostropheCMS: Las solicitudes no autenticadas de importación de CSV dejan cargas rechazadas en el directorio temporal del sistema
Resumen
Una carga rechazada puede permanecer en el directorio temporal del sistema operativo.
Multer escribe el archivo antes de que se verifique su extensión, y la ruta de rechazo no elimina dicho archivo temporal. Un solicitante no autenticado puede repetir esto con archivos grandes y consumir progresivamente el espacio en disco temporal.
Detalles
El endpoint es:
POST /api/v1/@apostrophecms/rich-text-widget/generate-csv-table
En packages/apostrophe/modules/@apostrophecms/rich-text-widget/lib/apiRoutes.js, Multer escribe primero la carga en os.tmpdir(). Luego, el controlador rechaza los nombres de archivo cuya extensión no sea csv, pero no hay limpieza del archivo de Multer en esta ruta de error.
La ruta no requiere un usuario autenticado. Una cookie CSRF estándar es suficiente.
Durante las pruebas, la solicitud devolvió HTTP 400 con Only csv files are supported, mientras que el contenido completo cargado permaneció en un archivo con nombre aleatorio en el directorio temporal configurado tras emitirse la respuesta.
Relación con trabajos públicos anteriores
Se revisó el PR #5013,, el cual migró la ruta de subida de CSV en texto enriquecido de connect-multiparty a Multer. Este informe concierne a la limpieza posterior a dicha migración: el archivo rechazado por Multer permanece en el disco, un comportamiento que no fue descrito en el PR ni en la discusión de su revisión.
Prueba de concepto (PoC)
Cree un archivo de prueba pequeño. Se puede usar un archivo más grande para demostrar el crecimiento del disco, pero 1 MiB es suficiente para una reproducción local segura:
dd if=/dev/zero of=rejected.txt bs=1M count=1
Obtenga las cookies normales del sitio y envíe la carga rechazada:
curl -c cookies.txt 'http://127.0.0.1:3000/' > /dev/null
curl -i -b cookies.txt \
-F 'file=@rejected.txt;filename=rejected.txt;type=text/plain' \
'http://127.0.0.1:3000/api/v1/@apostrophecms/rich-text-widget/generate-csv-table'
La respuesta es HTTP 400. Compare el contenido del directorio temporal del sistema antes y después de la solicitud:
ls -lt /tmp
Permanece un nuevo archivo con un nombre aleatorio que contiene los bytes cargados.
No se requiere inicio de sesión. La repetición de la solicitud multipart genera archivos temporales persistentes adicionales.
Impacto
Un atacante remoto no autenticado puede llenar la partición utilizada por el directorio temporal del sistema operativo. Una vez agotada esa partición, es posible que Apostrophe y otros servicios no relacionados en el mismo host no puedan cargar archivos, crear datos temporales o continuar funcionando normalmente.
El ataque requiere únicamente solicitudes HTTP repetidas y los archivos almacenados permanecen tras cada respuesta rechazada.
Qué hacer
Actualice a ApostropheCMS versión 4.33.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 | apostrophe | < 4.33.0 | 4.33.0 |
Referencias
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-qhcq-9pm2-c9w9
- 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/apostrophe@4.33.0
- Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H- Debilidad (CWE)
CWE-400, CWE-459, CWE-770- Plataforma
- npm
- Paquete
apostrophe- Publicada
- 20.10.2026
- Actualizado
- 20.10.2026 21:26
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-qhcq-9pm2-c9w9 - CC BY 4.0
Historial de vulnerabilidades: apostrophe
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
- 27
- Primera → última
- 09.2020 10.2026
- Sin corrección
- 4
- Explotada en ataques
- 0
Distribución por gravedad
- Crítica 2
- Alta 8
- Media 13
- Baja 4
Divulgaciones por año
- 2020: 2
- 2021: 2
- 2022: 0
- 2023: 0
- 2024: 0
- 2025: 0
- 2026: 23
-
ApostropheCMS: Las solicitudes no autenticadas de importación de CSV dejan cargas rechazadas en el directorio temporal del sistema 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.