CVE-2024-4367 – Arbitrary JavaScript execution in PDF.js
Vulnerability and impact
- Bug in PDF.js lets attackers execute arbitrary JavaScript when a malicious PDF is opened.
- In Firefox itself, PDF.js runs in a special
resource://pdf.jsorigin: no local file access, but with some extra powers (file download prompts, access to path of opened file). - In web apps that embed PDF.js in their own origin, this becomes an XSS primitive on that domain, enabling data theft, account takeover, or malicious actions.
- In Electron/Tauri apps that expose native APIs and don’t sandbox JS correctly, the same bug can escalate to native code execution (RCE).
Who is affected / where PDF.js is used
- All Firefox versions <126 are said to be affected; new versions and ESR builds have patches, sometimes backported.
- Discussion about which Electron apps embed PDF.js by default (several guesses, no confirmation).
- Some think parts of the Microsoft ecosystem might be affected; others note Edge uses PDFium/Word-based rendering, suggesting it’s probably not.
Disclosure, patching, and updates
- Some argue publishing the blog post 6 days after Firefox’s fix is risky given slow updates in many Electron apps and some Linux distros.
- Others note most Firefox users on Windows/macOS auto-update quickly; ESR builds are patched separately.
- Mixed views on Snap and other package managers: quick to ship 126 in some cases, but also reports of lags and users needing manual updates.
PDF format debates
- Thread revisits long‑standing criticism of PDF as overly complex and “paper‑centric.”
- Alternatives mentioned: PDF/A, OpenXPS, DjVu. PDF/A praised for dropping JS/media, but it’s noted the current bug is unrelated to PDF’s own scripting and instead about font handling (
/FontMatrix). - Long subthread on how badly copy‑paste and semantics often work in PDFs. Some argue it’s an inherent design flaw; others say the format supports proper tagging and ToUnicode maps, and the problems are mostly in generators/viewers.
Security practices and mitigations
- Debate over a historic Stack Overflow answer that called the risk “only XSS” and “tiny”:
- Critics say downplaying exploitability and XSS impact is irresponsible.
- Defenders say it correctly scoped the attack as XSS, not RCE, and suggested sound mitigations (separate origin).
- General agreement that XSS is serious today, especially on sensitive origins or in Electron apps.
- Suggested mitigations:
- Serve PDF viewers on a separate origin, avoiding relaxed subdomain policies.
- Strong Content Security Policies for pages that embed PDF.js.
- Disable script evaluation in PDF.js where possible, though one commenter notes this specific vuln works even with scripting disabled.
- Some advocate “no JavaScript” or using only built‑in browser/desktop PDF viewers; others counter that JS renderers are needed for in‑app workflows (text extraction, authenticated form filling, signatures, onboarding flows).
JS PDF viewers vs. native PDF rendering
- Several argue most JS PDF viewers perform poorly; best UX is often to serve PDFs directly and let the browser/OS handle them.
- Others emphasize valid business cases where tightly integrated, JS-based PDF handling in the web app is necessary, despite the extra attack surface.