Nuxt OG Image cache poisoning through derivable cache keys on unsigned dynamic image routes
**Vendor:** Nuxt **Product:** Nuxt OG Image **Version:** 6.2.5 **Description:** Due to the specifics of caching and key generation in the Open Graph image cache created by the module, an unauthenticated attacker can modify the content of the image (for example, the `title` parameter) that is delivered to the user. **Impact:** Content Spoofing **Vulnerable component:** route `/_og/d/*.png` **Exploitation conditions:** Access to the application **Mitigation:** Upgrade to 6.7.2 and set a sufficiently secure `secret` in config `ogImage` **Researcher:** Dmitry Vanin (Positive Technologies) ## Research During [the previous vulnerability research](https://github.com/nuxt-modules/og-image/security/advisories/GHSA-6c86-prf5-hj4h), it was discovered that version 6.2.5 changed the mechanism for generating cache indexes; it now takes into account the parameters passed during image generation. However, the image is still generated from data transmitted to the attacker. _Listing 1. New code for generating indexes in cache_ ``` export function resolvePathCacheKey(e: H3Event, path: string, resolvedOptions?: Record) { 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) h
- Products
- nuxt-og-image
- Affected versions
- Not specified
- Fixed versions
- 6.7.0
- CVEs
- CVE-2026-102527
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 30 Oct 2026, 19:14 UTC · Revision 1
Source evidence
Nuxt OG Image cache poisoning through derivable cache keys on unsigned dynamic image routes
core-osv · Original sourcePublished 15 Oct 2026, 20:15 UTC
**Vendor:** Nuxt **Product:** Nuxt OG Image **Version:** 6.2.5 **Description:** Due to the specifics of caching and key generation in the Open Graph image cache created by the module, an unauthenticated attacker can modify the content of the image (for example, the `title` parameter) that is delivered to the user. **Impact:** Content Spoofing **Vulnerable component:** route `/_og/d/*.png` **Exploitation conditions:** Access to the application **Mitigation:** Upgrade to 6.7.2 and set a sufficiently secure `secret` in config `ogImage` **Researcher:** Dmitry Vanin (Positive Technologies) ## Research During [the previous vulnerability research](https://github.com/nuxt-modules/og-image/security/advisories/GHSA-6c86-prf5-hj4h), it was discovered that version 6.2.5 changed the mechanism for generating cache indexes; it now takes into account the parameters passed during image generation. However, the image is still generated from data transmitted to the attacker. _Listing 1. New code for generating indexes in cache_ ``` export function resolvePathCacheKey(e: H3Event, path: string, resolvedOptions?: Record) { 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) h
osv:GHSA-2x6f-rp82-ppmj
nuxt-og-image
Fixed versions: 6.7.0
Complete source record
{
"id": "2828c2f4e629dcc1976a9f5655485bc197218ad5646b0c2278a979aae16e6849",
"url": "https://osv.dev/vulnerability/GHSA-2x6f-rp82-ppmj",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Nuxt OG Image cache poisoning through derivable cache keys on unsigned dynamic image routes",
"summary": "**Vendor:** Nuxt **Product:** Nuxt OG Image **Version:** 6.2.5 **Description:** Due to the specifics of caching and key generation in the Open Graph image cache created by the module, an unauthenticated attacker can modify the content of the image (for example, the `title` parameter) that is delivered to the user. **Impact:** Content Spoofing **Vulnerable component:** route `/_og/d/*.png` **Exploitation conditions:** Access to the application **Mitigation:** Upgrade to 6.7.2 and set a sufficiently secure `secret` in config `ogImage` **Researcher:** Dmitry Vanin (Positive Technologies) ## Research During [the previous vulnerability research](https://github.com/nuxt-modules/og-image/security/advisories/GHSA-6c86-prf5-hj4h), it was discovered that version 6.2.5 changed the mechanism for generating cache indexes; it now takes into account the parameters passed during image generation. However, the image is still generated from data transmitted to the attacker. _Listing 1. New code for generating indexes in cache_ ``` export function resolvePathCacheKey(e: H3Event, path: string, resolvedOptions?: Record) { 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) h",
"evidence": "osv:GHSA-2x6f-rp82-ppmj",
"products": [
{
"name": {
"value": "nuxt-og-image",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "6.7.0",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
}
],
"severity": "medium",
"structured": {
"id": "GHSA-2x6f-rp82-ppmj",
"aliases": [
"CVE-2026-102527",
"GHSA-2x6f-rp82-ppmj"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "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"
}
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "6.2.5"
},
{
"fixed": "6.7.0"
}
]
}
],
"package": {
"name": "nuxt-og-image",
"purl": "pkg:npm/nuxt-og-image",
"ecosystem": "npm"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-2x6f-rp82-ppmj/GHSA-2x6f-rp82-ppmj.json"
}
}
],
"modified": "2026-10-15T20:30:08.572902590Z",
"provider": "osv",
"references": [
"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"
],
"provider_metadata": {
"cwe_ids": [
"CWE-349"
],
"severity": "MODERATE",
"github_reviewed": true,
"nvd_published_at": "2026-10-15T17:17:08Z",
"github_reviewed_at": "2026-10-15T20:15:27Z"
}
},
"related_cves": [
{
"value": "CVE-2026-102527",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 336059,
"published_at": "2026-10-15T20:15:27+00:00"
}