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
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
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
The wkhtmltopdf GitHub repository was archived on January 2, 2023 and is read-only: no maintainers, no releases, no security patches ever.
- [2]
CVE-2022-35583, an SSRF via rendered content, will never be fixed upstream in wkhtmltopdf.
- [3]
If a scanner flags CVE-2022-35583 there is no 'upgrade to version X' remediation; the remediation is migration.
- [4]
No Chromium-based engine reproduces wkhtmltopdf output pixel-for-pixel because of different line breaking and font fallback, so golden files will need re-approval.
- [5]
The --toc and --outline flags have no first-class Chromium equivalent; outlines must be rebuilt with a post-processing step or done without.
- [6]
The field guide's author discloses he is Vitalii, founder of PDFik, a hosted URL/HTML-to-PDF API, and says he lists competitors and names them where they are the better fit.
- [7]
The source states existing PDFs will not stop rendering tomorrow, and that every new deployment target, security audit and CSS feature designers use widens the gap.
- [8]
The vulnerability identifier CVE-2022-35583 carries a 2022 year prefix, which precedes the January 2, 2023 archive date, so the advisory was already outstanding when maintenance stopped.
- [9]
wkhtmltopdf's engine is a patched Qt WebKit from another era, so modern CSS including grid, flexbox gaps and custom properties silently misrenders.
- [10]
Distributions have been dropping the wkhtmltopdf package, official builds do not cover current Debian/Ubuntu releases or arm64 well, and Docker images increasingly rely on third-party rebuilds of an unmaintained binary.
- [11]
Most invoice, report and ticket generators older than five years have wkhtmltopdf somewhere in their dependency tree.
- [12]
WeasyPrint is an @page-first CSS engine with no browser process, actively maintained, suited to print-oriented documents on a Python stack with no JavaScript in templates and data that must not leave your infrastructure.
- [13]
Playwright/Puppeteer page.pdf() is about five lines of code but means running a browser fleet: zombie processes, per-tab memory ceilings, crash-looping renderers under load, sandboxing, font packages in the image, timeouts and pool scaling.
- [14]
Gotenberg wraps Chromium and LibreOffice in a Docker container with an HTTP API, keeping data on your own infrastructure while you still own capacity planning, upgrades and availability.
- [15]
DocRaptor is the hosted API built on the PrinceXML engine, with SOC 2 and HIPAA-BAA posture, described as the established choice for compliance-heavy document generation.
- [16]
PDFShift, Api2Pdf and PDFMonkey are listed as Chromium-based hosted rendering options with different pricing shapes (per-document, per-credit, template-first), all worth shortlisting depending on volume curve.
Sources
1 independent publisher whose own reporting we read for this story.
- dev.towkhtmltopdf is archived with an open CVE — a field guide to moving off it
1 article · August 26, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.