ApostropheCMS: GET /api/v1/@apostrophecms/page/:id elude la restricción viewRole y expone campos protegidos por viewPermission a usuarios con menos privilegios
Resumen
El endpoint REST getOne para páginas no aplica las restricciones a nivel de tipo de viewRole ni la supresión a nivel de campo de viewPermission. Un usuario con rol de editor que conozca un _id de documento puede leer todo el contenido de páginas exclusivas para administradores y sus campos privilegiados, mientras que el endpoint getAll aplica correctamente ambas restricciones.
Detalles
Hallazgo 3 — elusión de viewRole:
modules/@apostrophecms/page/index.js expone getRestQuery(req, omitPermissionCheck = false). The getAll path calls publicApiCheckAsync y procesa todo el flujo del constructor de consultas, incluido el filtrado de viewRole. La ruta getOne utiliza una ruta de código divergente que omite este flujo.
Un tipo de página declarado con viewRole: 'admin' es inaccesible a través de GET /api/v1/@apostrophecms/page?type=secretPage (devuelve 403 a un editor), pero es devuelto en su totalidad por GET /api/v1/@apostrophecms/page/:id:en:published al mismo editor.
Hallazgo 4 — fuga de campos bajo viewPermission:
Los campos decorados con viewPermission: { action: 'edit', type: '@apostrophecms/page' } son eliminados por removeForbiddenFields en la ruta getAll, pero se devuelven textualmente en getOne. Un editor que conozca cualquier _id de documento puede leer todos los campos restringidos por viewPermission.
PoC
# Log in as editor, get session jar
EDITOR_JAR="..."
# getAll — correctly blocked
curl -b "$EDITOR_JAR" \
"http://TARGET/api/v1/@apostrophecms/page?type=secretPage"
# → 403 Forbidden
# getOne — bypassed, returns full document including viewPermission fields
curl -b "$EDITOR_JAR" \
"http://TARGET/api/v1/@apostrophecms/page/ADMIN_PAGE_ID:en:published"
# → 200 OK, full doc including secretField value
Impacto
Los editores pueden leer todo el contenido de cualquier página, incluidas aquellas restringidas a administradores mediante viewRole, siempre que conozcan o puedan adivinar el _id. Los valores de campos sensibles protegidos por viewPermission también quedan totalmente expuestos. Esto anula el modelo de control de acceso al contenido en cualquier sitio que utilice estos decoradores.
Qué hacer
Actualice el paquete apostrophe a la versión 4.34.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.34.0 | 4.34.0 |
Referencias
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-vh56-5m88-39rq
- https://nvd.nist.gov/vuln/detail/CVE-2026-112957
- 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/apostrophe@4.34.0
- Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N- Debilidad (CWE)
CWE-862- Plataforma
- npm
- Paquete
apostrophe- Publicada
- 21.10.2026
- Actualizado
- 21.10.2026 20:25
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-vh56-5m88-39rq - 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
- 33
- Primera → última
- 09.2020 10.2026
- Sin corrección
- 4
- Explotada en ataques
- 0
Distribución por gravedad
- Crítica 2
- Alta 9
- Media 18
- Baja 4
Divulgaciones por año
- 2020: 2
- 2021: 2
- 2022: 0
- 2023: 0
- 2024: 0
- 2025: 0
- 2026: 29
-
ApostropheCMS: GET /api/v1/@apostrophecms/page/:id elude la restricción viewRole y expone campos protegidos por viewPermission a usuarios con menos privilegios 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.