Envenenamiento de caché en Nuxt OG Image mediante claves de caché derivables en rutas de imágenes dinámicas no firmadas
Proveedor: Nuxt
Producto: Nuxt OG Image
Versión: 6.2.5
Descripción: Debido a las particularidades del almacenamiento en caché y la generación de claves en la caché de imágenes Open Graph creada por el módulo, un atacante no autenticado puede modificar el contenido de la imagen (por ejemplo, el parámetro title) que se entrega al usuario.
Impacto: Suplantación de contenido (Content Spoofing)
Componente vulnerable: ruta /_og/d/*.png
Condiciones de explotación: Acceso a la aplicación
Mitigación: Actualizar a 6.7.2 y establecer un secret suficientemente seguro en la configuración ogImage
Investigador: Dmitry Vanin (Positive Technologies)
Investigación
Durante la investigación de vulnerabilidad previa,) se descubrió que la versión 6.2.5 modificó el mecanismo de generación de índices de caché; ahora toma en cuenta los parámetros pasados durante la generación de la imagen.
Sin embargo, la imagen aún se genera a partir de datos transmitidos al atacante.
Listado 1. Nuevo código para la generación de índices en caché
export function resolvePathCacheKey(e: H3Event, path: string, resolvedOptions?: Record<string, any>) {
const siteConfig = getSiteConfig(e, {
resolveRefs: true,
})
const basePath = withoutTrailingSlash(withoutLeadingSlash(normalizeKey(path)))
const hashParts: any[] = [
basePath,
import.meta.prerender ? '' : siteConfig.url,
]
// Hash resolved options (not raw query string) so unknown/extra query params
// cannot produce unique cache keys and bypass the cache.
if (resolvedOptions)
hashParts.push(hash(resolvedOptions))
return [
(!basePath || basePath === '/') ? 'index' : basePath,
hash(hashParts),
].join(':')
}
En este caso, basePath se obtiene del parámetro _path, y resolvedOptions corresponden a las configuraciones normalizadas del componente, por ejemplo:
Listado 2. Un ejemplo de resolvedOptions
{"emojis":"noto","extension":"png","width":1200,"height":600,"cacheMaxAgeSeconds":259200,"component":"OgImageDefaultImageTakumi"}
A partir del análisis de resolvedOptions, se concluyó que, en general, todos los parámetros son conocidos a través del enlace directo a la OG Image o mediante la respuesta del servidor.
Reproducción de la vulnerabilidad
-
Encontrar la ruta a OG Image. Figura 1. Demostración de localización de la ruta a OG Image
(width: 974, height: 361)
-
Obtener los parámetros de la respuesta del servidor, especialmente
cacheMaxAgeSeconds(cabeceracache-control, claves-maxage); los demás parámetros son conocidos a partir de las etiquetas meta así como del parámetroc_<component name>. Figura 2. Obtención de parámetros(width: 974, height: 245)
-
Generar una clave de caché utilizando un script. Listado 3. Script
import {hash} from "ohash";
var url = "https://contoso.com"
var obj = JSON.parse(`{"emojis":"noto","extension":"png","width":1200,"height":600,"cacheMaxAgeSeconds":259200,"component":"OgImageBlogPostTakumi"}`)
var basePath = '/'
var hashParts = [
basePath,
url
]
if (obj)
hashParts.push(hash(obj))
console.log([
(!basePath || basePath === '/') ? 'index' : basePath,
hash(hashParts),
].join(':'))
-
Repetir los pasos como en la vulnerabilidad 1,), transmitiendo además el
cacheKeyobtenido. -
De este modo, se obtuvo el mismo resultado que en la vulnerabilidad 1). Figura 4. Respuesta del servidor
(width: 974, height: 729)
Créditos
Investigador: Dmitry Vanin (Positive Technologies)
Qué hacer
Actualice a 6.7.2 y configure un secret suficientemente seguro en la configuración ogImage.
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Paquete de npm | nuxt-og-image | >= 6.2.5, < 6.7.0 | 6.7.0 |
Referencias
- https://github.com/nuxt-modules/og-image/security/advisories/GHSA-2x6f-rp82-ppmj
- https://nvd.nist.gov/vuln/detail/CVE-2026-102527
- https://github.com/nuxt-modules/og-image/pull/638
- https://github.com/nuxt-modules/og-image/commit/e6c5b53ce7f434ab8cbc91298dccfb2b515c56a5
- https://github.com/nuxt-modules/og-image
- https://github.com/nuxt-modules/og-image/releases/tag/v6.7.0
- Vector CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N- Debilidad (CWE)
CWE-349- Plataforma
- npm
- Paquete
nuxt-og-image- Publicada
- 15.10.2026
- Actualizado
- 19.10.2026 08:00
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-2x6f-rp82-ppmj - CC BY 4.0
Historial de vulnerabilidades: nuxt-og-image
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
- 6
- Primera → última
- 03.2026 10.2026
- Sin corrección
- 0
- Explotada en ataques
- 0
Distribución por gravedad
- Media 5
- Baja 1
Divulgaciones por año
- 2026: 6
-
Envenenamiento de caché en Nuxt OG Image mediante claves de caché derivables en rutas de imágenes dinámicas no firmadas 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.