Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply crafted basePdf URL in pdfme template
-
ExploitBypass isUrlSafeToFetch denylist via IPv4-mapped IPv6/[::]/NAT64/localhost alias
-
ExecutionRuntime fetches loopback or cloud metadata endpoint
-
ImpactInternal response embedded in generated PDF and exfiltrated
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the application allow an attacker to control a pdfme template's basePdf value that reaches getB64BasePdf, AND that the code run in an environment where |
| Impact | This is a server-side request forgery (CWE-918) in @pdfme/common, rated CVSS 4.0 8.9 (High) with vector AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N - network reachable, no privileges or user interaction, but with elevated attack complexity and a present attack requirement (AT:P), and high confidentiality impact on both the vulnerable and a subsequent system (the internal/metadata endpoint reached via SSRF). The vuln.today decision label is 'this_week' rather than act_now/emergency, which is consistent with the absence of a CISA KEV listing - there is no confirmed active exploitation. No EPSS probability was supplied in the input, so widespread-exploitation likelihood cannot be quantified here. A public PoC reference exists in the GHSA advisory (it demonstrates the denylist bypass via isUrlSafeToFetch returning true for internal addresses); it is not verified as a working end-to-end exploit. Note a signal conflict to verify: the GHSA advisory itself estimated CVSS 3.1 confidentiality as C:L with no scope change (S:U), whereas the supplied CVSS 4.0 vector asserts high vulnerable- and subsequent-system confidentiality (VC:H/SC:H) - the higher rating reflects reachability of cloud metadata credentials, but the vendor's own estimate was more conservative. Overall this is a genuine, patch-now-this-week issue for deployments matching the exploitation conditions, not a purely theoretical high-CVSS item, but it is gated by the application exposing attacker-controlled basePdf and running in a window-defined fetch context. |
| Exploit ScenarioDerived | An application lets users supply or import a pdfme template, and that template's basePdf value is passed to getB64BasePdf in a runtime where |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
Server-side request forgery in @pdfme/common (npm) from 5.5.10 before 6.2.6 allows an attacker who controls a template's basePdf value to make the runtime fetch loopback, internal or cloud-metadata URLs and embed the response as the generated document's base PDF. The isUrlSafeToFetch denylist added for an earlier SSRF report (GHSA-pgx6-7jcq-2qff) is incomplete: WHATWG URL parsing rewrites IPv4-mapped IPv6 forms into hex, so http://[::ffff:127.0.0.1]/ and http://[::ffff:a9fe:a9fe]/ (169.254.169.254) pass the string check, and the unspecified address http://[::]/, NAT64 prefixes such as http://[64:ff9b::a9fe:a9fe]/, and trailing-dot/alias localhost hostnames (http://localhost./) are not matched either. Exploitation requires two preconditions: attacker influence over a basePdf value that reaches getB64BasePdf, and execution in a context where window is defined (a browser or a server-side DOM shim) - plain headless Node without a DOM shim does not take the vulnerable fetch path; a public reproduction of the bypass is documented in the GitHub advisory and no active exploitation is confirmed (not in CISA KEV).
RemediationAI
Upgrade @pdfme/common to 6.2.6 or later (npm install @pdfme/common@^6.2.6), which contains commit d03d0bc4994ce6921e152879793c5ff52c5600a6 - the denylist is replaced with IP-library parsing that unwraps IPv4-mapped, NAT64, 6to4 and Teredo forms, rejects all non-global addresses including ::, 0.0.0.0/8 and 100.64.0.0/10, strips trailing dots from hostnames and permits only http/https; vendor guidance is in https://github.com/pdfme/pdfme/security/advisories/GHSA-2rg9-wxfw-wrr7. Note that 6.2.5, and anything from 5.5.10 onward including the earlier GHSA-pgx6-7jcq-2qff fix, is still bypassable, so partial upgrades do not help. Where upgrading is not immediately possible, the exposure is narrowed by removing attacker control over template basePdf values - accept only URLs from a fixed allowlist of trusted hosts, or have the server substitute a known-good PDF rather than a caller-supplied URL - at the cost of flexibility for tenants who legitimately supply remote base PDFs. Running the renderer in Node without a DOM shim avoids the vulnerable fetch branch (window is undefined), but this is a deployment limitation with side effects for any code path that needs DOM emulation, and it does not remediate the underlying denylist flaw. Because a public reproduction of the bypass is documented, treat any deployment that accepts untrusted basePdf input as exposed until 6.2.6 is installed.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
CWE-918 (server-side request forgery) arising from a hostname denylist built on new URL(x).hostname inside isUrlSafeToFetch, which getB64BasePdf calls before fetch(basePdf) in packages/common (dist/index.js). The vulnerability class here is a canonicalisation mismatch: the WHATWG URL parser normalises IPv4-mapped IPv6 literals to hexadecimal form, so new URL('http://[::ffff:127.0.0.1]/').hostname returns '[::ffff:7f00:1]', meaning the dotted-quad mapped-address comparison in the denylist never fires. The same parser gap leaves the unspecified address [::], NAT64 prefixes (64:ff9b::/96), and trailing-dot hostnames such as 'localhost.' uncovered. When getB64BasePdf accepts the URL, the fetched response is base64-encoded and used as the base PDF of the generated document, which turns the SSRF into a data-exfiltration channel for loopback services, link-local/cloud metadata endpoints (169.254.169.254) and internal networks. The vulnerability only manifests where window is defined - a browser or a server-side DOM shim - because that is the branch in which the fetch occurs. The upstream fix in 6.2.6 (commit d03d0bc4994ce6921e152879793c5ff52c5600a6) replaces the string denylist with IP-library parsing that unwraps IPv4-mapped, NAT64, 6to4 and Teredo addresses, rejects every non-global address (including ::, 0.0.0.0/8, CGNAT 100.64.0.0/10, documentation and benchmarking ranges), strips trailing dots on hostnames, and restricts schemes to http/https, with tests covering 127.0.0.1, 169.254.169.254, [::ffff:7f00:1], [::], localhost. and file:/ftp:/data:/blob: URLs.
Know when Common gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N
SSRF reaching cloud metadata gives C:H and a scope change (S:C); AC:H because the trigger needs a window-defined/DOM-shim runtime plus crafted bypass addresses; no integrity or availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
@pdfme/common from 5.5.10 before 6.2.6 contains a server-side request forgery vulnerability that allows attackers to bypass the isUrlSafeToFetch denylist in getB64BasePdf. Attackers can supply basePdf URLs using IPv4-mapped IPv6, [::], NAT64 or localhost alias hostnames to read loopback, internal or cloud metadata responses through generated documents.
Technical POC Analysis
CWE-918.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity server-side request forgery (SSRF) vulnerability in the @pdfme/common npm package could allow an attacker to cause the server to make unauthorized requests to internal or cloud metadata endpoints, potentially exposing sensitive information. The flaw affects versions 5.5.10 through 6.2.5 and requires both attacker control over a template's basePdf value and a runtime environment with a DOM shim (e.g., browser or server-side DOM). While exploitation preconditions limit exposure, any organization using these versions in such contexts faces risk of data leakage or further network compromise.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
amoyjs amoy common v1.0.10 was discovered to contain a prototype pollution via the function extend. Rated high severity
XMLReader.php in PHPOffice Common before 0.2.9 allows XXE. Rated critical severity (CVSS 9.8), this vulnerability is rem
Server-side request forgery in @pdfme/common before 5.5.10 allows attackers who control the basePdf template field to fo
Alpine Linux: buildah fixed in 1.37.4-r0
Doctrine Annotations before 1.2.7, Cache before 1.3.2 and 1.4.x before 1.4.2, Common before 2.4.3 and 2.5.x before 2.5.1
amoyjs amoy common v1.0.10 was discovered to contain a prototype pollution via the function setValue. Rated high severit
Common is a package of common modules that can be accessed by NIMBLE services. Rated medium severity (CVSS 6.5), this vu
EUVD-2026-108940
GHSA-wf6h-pqhw-phmv
NVD
CVE.org
EPSS
Exploit-DB