Severity by source
AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N
Delivered via crafted import file requiring victim to run it (UI:R) and a known reference file to correlate (AC:H); only the document digest leaks (C:L), no integrity/availability impact; single confidentiality scope so S:U.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3DescriptionCVE.org
BentoPDF is a client-side PDF toolkit that is self hostable. In 2.8.6 and earlier, deserializeWorkflow() accepts the Timestamp node's tsaUrl control from imported JSON without schema or destination validation. When a user imports the crafted workflow and runs it against a PDF, timestampPdf() sends an RFC 3161 TimeStampReq containing the PDF's SHA-256 MessageImprint to the attacker-selected endpoint. The default self-hosted configuration does not set VITE_CORS_PROXY_URL, so the request bypasses the proxy's ALLOWED_TSA_HOSTS checks and is sent directly. The disclosed digest can confirm that a document matches a known file and can correlate the same document across users without revealing its contents. This vulnerability is fixed in 2.8.7.
AnalysisAI
BentoPDF 2.8.6 and earlier ships its Timestamp workflow node with an unvalidated TimeStamp Authority URL, so importing a crafted workflow JSON causes the tool to send the SHA-256 message imprint of a user's PDF to an attacker-chosen endpoint. Exploitation requires the victim to import the malicious workflow and actively run its Timestamp node against a document (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N, score 3.4), and it is only effective in the default self-hosted deployment where VITE_CORS_PROXY_URL is unset and the request bypasses the ALLOWED_TSA_HOSTS proxy check. …
Unlock full vulnerability intelligence
- Risk assessment & exploitation conditions
- Attack chain visualization
- Remediation with exact patch versions
- Threat intelligence from 22 sources
- Personal watchlist & email alerts
No credit card · 7-day full trial
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata
Vulnerability AssessmentAI
| Exploitation | Requires (1) a victim to import an attacker-crafted BentoPDF workflow JSON and actively run its Timestamp node against a PDF (UI:R - no self-triggering); (2) the default self-hosted deployment where VITE_CORS_PROXY_URL is unset, which is what causes the request to skip the proxy's ALLOWED_TSA_HOSTS allowlist and go directly to the attacker endpoint - instances configured with the CORS proxy still enforce host validation; and (3) for the disclosed SHA-256 digest to be actionable, the attacker must already possess the candidate file to compare against or seek to correlate the same document across users. … Additional conditions and limiting factors are described in the full assessment. |
| Risk Assessment | This is a genuinely low-priority, low-real-risk finding despite being remotely reachable. … Full risk analysis with EPSS, KEV, and SSVC signal comparison available after sign-in. |
| Exploit Scenario | Full exploit scenario with step-by-step reproduction available after sign-in. |
| Remediation | Vendor-released patch: upgrade to BentoPDF 2.8.7 (https://github.com/alam00000/bentopdf/releases/tag/v2.8.7), which applies the fix from commit b21f602 - adding isValidTsaRequestUrl()/isAllowedTsaUrl() allowlist helpers, an overridable sanitizeControlValue() on BaseWorkflowNode that is enforced during deserializeWorkflow() so any imported tsaUrl outside TIMESTAMP_TSA_PRESETS is reset to the default preset, plus a redundant URL validation inside timestampPdf(). … Detailed patch versions, workarounds, and compensating controls in full report. |
Threat intelligence, references, and detailed analysis are available after sign-in.
Server-side request forgery in the BentoPDF certificate/timestamp CORS proxy (cloudflare/cors-proxy-worker.js) allows un
Cross-site scripting in BentoPDF's Markdown to PDF Tool allows remote attackers to execute arbitrary JavaScript when use
Same weakness CWE-502 – Deserialization of Untrusted Data
View allSame technique Deserialization
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-86242