Skip to content
Fencer Intel
medium 5.3

GHSA-pqhr-mp3f-hrpp json

Nuxt OG Image vulnerable to Server-Side Request Forgery via user-controlled parameters

published 7mo ago modified 7mo ago

cvss
5.3
version 3.1, GitHub
cisa kev
Not listed
not in CISA's catalog
epss
—
no score, EPSS covers CVEs only
public exploits
0
none known

Summary

**Product:** Nuxt OG Image **Version:** < 6.2.5 **CWE-ID:** [CWE-918](https://cwe.mitre.org/data/definitions/918.html): Server-Side Request Forgery

## Description

The image generation endpoint (`/_og/d/`) accepts user-controlled parameters that are passed to the server-side renderer without proper validation or filtering. An attacker can trigger server-side requests to internal network addresses through multiple vectors.

## Impact

- Scanning internal ports and services inaccessible from the outside - Reading sensitive data from cloud infrastructure metadata services (tokens, credentials) when verbose error output is enabled

## Attack Vectors

Three distinct vectors were identified, all exploiting the same underlying lack of URL validation:

### Vector 1: CSS `background-image` injection via `style` parameter

``` GET /_og/d/og.png?style=background-image:+url('http://127.0.0.1:8888/secret') ```

### Vector 2: `<img src>` injection via `html` parameter

``` GET /_og/d/og.png?html=<img src="http://127.0.0.1:8888/secret"> ```

When verbose errors are enabled, the response content is leaked in base64-encoded error messages.

### Vector 3: SVG `<image href>` injection via `html` parameter

``` GET /_og/d/og.png?html=<svg><image href="http://127.0.0.1:8888/secret"></svg> ```

## Mitigation

Fixed in v6.2.5. The image source plugin now blocks requests to private IP ranges (IPv4/IPv6), loopback addresses, link-local addresses, and cloud metadata endpoints. Decimal/hexadecimal IP encoding bypasses are also handled.

## Credits

Researcher: Dmitry Prokhorov (Positive Technologies)

Patch / fix

  • npm nuxt-og-image 6.2.5

Is GHSA-pqhr-mp3f-hrpp in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.

Check with Fencer

CVSS scores

assigned by version score vector
GitHub 3.1 5.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

Affected packages

ecosystem package affected fixed in
npm nuxt-og-image
<6.2.5
6.2.5

Classification

Weakness
  • CWE-918 Server-Side Request Forgery

References

Sources

Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.