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 FencerCVSS 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
- GitHub Advisory GHSA-pqhr-mp3f-hrpp
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.