Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Host header SSRF is network-exploitable with no auth per CVSS 4.0 PR:N; scope changes as server contacts external systems; only low confidentiality impact on subsequent systems, no integrity or availability effect.
Primary rating from Vendor (4daa8cea-433a-44bd-9456-53b127fc289a).
CVSS VectorVendor: 4daa8cea-433a-44bd-9456-53b127fc289a
Lifecycle Timeline
3DescriptionCVE.org
Server-Side Request Forgery (SSRF) (CWE-918) in the PDF generation endpoint GET /api/reports/{id}/pdf (backend/main.py) in ccyl13 Pentestify 1.0.0 and lower allows remote attackers to make the server issue requests to arbitrary internal or external URLs, including cloud metadata services, and return the rendered content in the resulting PDF via a crafted Host header, because the target URL is built from request.base_url without validation.
AnalysisAI
Server-Side Request Forgery in Pentestify 1.0.0's PDF generation endpoint enables remote attackers (PR:N per CVSS 4.0 vector) to coerce the server into issuing outbound HTTP requests to arbitrary internal or external targets, including cloud metadata services such as the AWS Instance Metadata Service at 169.254.169.254, by supplying a crafted HTTP Host header. The rendered PDF is returned to the caller, potentially leaking internal service responses or IAM role credentials. No public exploit code has been identified and no CISA KEV listing exists at time of analysis; the vulnerability is patched in version 1.1.0.
Technical ContextAI
Pentestify is a Python-based penetration testing report management application developed by ccyl13. The vulnerable code path is in backend/main.py at the GET /api/reports/{id}/pdf endpoint, where the application constructs the PDF render target URL using Flask/FastAPI's request.base_url - a value derived directly from the HTTP Host header - without any validation or allowlisting. A PDF rendering library (likely WeasyPrint or a headless browser) then fetches resources relative to this attacker-controlled base URL, causing the server to make outbound requests to arbitrary targets. CWE-918 (Server-Side Request Forgery) precisely describes this class of flaw: untrusted user-controlled input (the Host header) is used to construct a URL that the server fetches on behalf of the user. The v1.1.0 fix addresses a related attack surface by adding Pydantic field validators in schemas.py that restrict client_logo and images fields to base64 data URIs via a strict regex (_DATA_IMAGE_RE), preventing remote URL embedding in PDF-rendered HTML content. The frontend also gained HTML escaping for image src attributes in js/app.js. No CPE string is provided in the source data.
RemediationAI
Upgrade to Pentestify 1.1.0, which introduces Pydantic field validators in schemas.py enforcing that client_logo and images fields accept only base64 data URIs (matching the pattern data:image/<type>;base64,<data>), preventing remote URL embedding during PDF rendering. The patch commit is at https://github.com/ccyl13/Pentestify/commit/a058a22b42c6311895622645265df79a60265b1d. If immediate upgrade is not feasible, restrict network access to the /api/reports/{id}/pdf endpoint via a reverse proxy or WAF configured to reject requests with non-canonical Host header values. Additionally, apply egress firewall rules on the application server to block outbound connections to cloud metadata IP ranges (169.254.169.254 for AWS IMDS, 100.100.100.200 for Alibaba Cloud IMDS) - note this does not prevent SSRF against other internal network services and has no side effects on external PDF rendering if data URIs are used exclusively. Validating the Host header against an explicit allowlist at the application layer is the preferred long-term control.
Same weakness CWE-918 – Server-Side Request Forgery (SSRF)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-38735
GHSA-jmg8-x6hq-972w