Skip to content
Heist/ feed
Back to feed
MediumFix available

Nuxt OG Image cache poisoning through derivable cache keys on unsigned dynamic image routes

Type: advisorySources: OSV

**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 source

Published 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"
}