Skip to content

BuildNot yet confirmed elsewhere1 publisher3 min readPublished

wkhtmltopdf has been read-only since 2023, and your scanner will only accept migration

An archived binary with an SSRF advisory and no fixed version turns a patch ticket into a template re-approval project. Picking the replacement engine is the cheap part.

The Engineer · Build desk

How we use AISend a correction

What happened

  • wkhtmltopdf's repository was archived on 2 January 2023 and is read-only, with no maintainers, no releases and no future security patches.
  • CVE-2022-35583, an SSRF through rendered content, will never be fixed upstream.
  • The migration guide behind these points was written by the founder of PDFik, a hosted HTML-to-PDF API, who lists competing options alongside his own.

Why it matters

  • constraint A finding with no fixed version cannot be closed by patching, so the only two options are a recurring audit exception or a replacement project, and the exception has to be renegotiated every cycle.
  • cost The security fix lands on whoever owns document layout: golden files go back for approval and any table of contents behaviour has to be rebuilt outside the renderer.
  • decision The question stops being which library to call and becomes who keeps a browser process alive under load, your on-call rota or somebody else's.
  • exposure Every hosted path puts invoice and statement content on a third party's infrastructure, which is why the compliance-grade recommendation rests on audit posture rather than rendering quality.

A vulnerability scanner does not care that the binary still renders. It matches an installed package against an advisory, and CVE-2022-35583 has no fixed version to match against, because there will never be another release [1][2]. That is the whole mechanism: the remediation field on the ticket cannot be filled with a version number, so it gets filled with either an exception that returns at the next audit or a migration [3]. The advisory identifier carries a 2022 prefix, so it was already outstanding when the repository went read-only on 2 January 2023 [8].

The cost of that migration is not in the engine call. It is in the documents. Vitalii, the PDFik founder who wrote the field guide, is direct about the part a vendor post could easily skip: no Chromium-based engine reproduces wkhtmltopdf output pixel for pixel, because line breaking and font fallback differ, so golden files get re-approved [4][6]. The systems most likely to be running the old binary are invoice, report and ticket generators older than five years [11]. Those are the documents somebody formally signed off on, quite possibly the same function now demanding the CVE be closed. Templates using `--toc` or `--outline` need a separate line item, since there is no first-class Chromium equivalent and outlines are either rebuilt in post-processing or abandoned [5].

The engine question then collapses to whether templates need JavaScript to render. If they do not, and the stack is Python, WeasyPrint is a CSS `@page` engine with no browser process at all and active maintenance [12]. If they do, Playwright's five lines of `page.pdf()` arrive with a browser fleet attached: per-tab memory ceilings, crash-looping renderers under load, sandboxing, fonts in the image, pool scaling [13]. Gotenberg packages Chromium and LibreOffice behind an HTTP API in a container, which keeps document content inside your own network and leaves you owning capacity planning, upgrades and availability [14].

The rot on the old path is quieter than the CVE but harder to argue with over time. The engine is a patched Qt WebKit from another era, so CSS grid, flexbox gaps and custom properties misrender without error [9]. Distributions have been dropping the package, official builds do not cover current Debian and Ubuntu releases or arm64 well, and Docker images increasingly depend on third-party rebuilds of an unmaintained binary [10]. Anyone moving to arm64 instances hits that before any auditor does.

Treat the guide as what it says it is, a post by the founder of a competing hosted API [6]. The reason to read it anyway is that it sends compliance-heavy document generation to DocRaptor's PrinceXML engine and its SOC 2 and HIPAA-BAA posture rather than to his own product [15], and lists PDFShift, Api2Pdf and PDFMonkey as Chromium-based shortlist candidates with different pricing shapes [16]. Its own framing is that nothing breaks on a schedule, and the gap widens with each new deployment target, audit and CSS feature [7]. What changed is that one of those pressures now generates a ticket no patch can close.

What to watch

  • Whether any distribution or vendor ships a maintained fork with a patched build that scanners will accept as a fixed version.
  • Whether Chromium-based tooling gains first-class outline and table-of-contents generation, which would remove the main post-processing cost of moving.
  • Whether official builds appear for current Debian and Ubuntu releases and arm64, or whether third-party Docker rebuilds remain the only route.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence38
Adoption
Insufficient
Hype gap+18
Incentives82
Confidence45
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    The wkhtmltopdf GitHub repository was archived on January 2, 2023 and is read-only: no maintainers, no releases, no security patches ever.

    ReportedSupportedView cited source
  2. [2]

    CVE-2022-35583, an SSRF via rendered content, will never be fixed upstream in wkhtmltopdf.

    ReportedSupportedView cited source
  3. [3]

    If a scanner flags CVE-2022-35583 there is no 'upgrade to version X' remediation; the remediation is migration.

    ReportedSupportedView cited source

Sources

1 independent publisher whose own reporting we read for this story.

  1. dev.to

    1 article · August 26, 2026

    wkhtmltopdf is archived with an open CVE — a field guide to moving off it

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Topics

Entities

Loading related stories