WebP BlastPass: One C Library Pwned Everything

📋 Key Takeaways
  • What happened
  • Why image decoders are perfect targets
  • Timeline
  • Defensive lessons
  • The monoculture moment
5 min read · 978 words
Educational & Ethical Use Only — This article is provided for educational and ethical cybersecurity research purposes only. The techniques described should only be used on systems you own or have explicit permission to test. Always follow responsible disclosure and the laws applicable to you. Mitigations are included so engineers can harden real systems.

Quick Answer — In September 2023, Google and Apple shipped emergency fixes for CVE-2023-4863, a heap buffer overflow in libwebp — the open-source library that renders the WebP image format inside Chrome, Firefox, Edge, Safari, Electron apps, and countless embedded products. Exploitation was confirmed in the wild as BLASTPASS, a chain that compromised iPhones by doing nothing more sinister than rendering an image in iMessage. For defenders the takeaway was brutal and clarifying: a dependency you never think about — an image decoder — was everywhere, and one bug in it pwned the entire client ecosystem at once.

The BLASTPASS incident operationalized a fear that had lived in security economics papers for years: single points of failure in open-source image-parsing libraries. For one September week, the entire industry patched the same line of C.

What happened

  • The bug: A heap buffer overflow in libwebp’s lossless Huffman decoding routine — reachable by any application that decoded a maliciously crafted WebP image, which is to say, nearly every browser and chat client on earth.
  • The exploit chain: Citizen Lab caught BLASTPASS being used against a Washington DC-based civil society victim — a zero-click iMessage exploit that installed NSO Group’s Pegasus spyware without the target touching anything.
  • The scope reveal: What began as an Apple emergency patch (August Citizen Lab disclosure) widened within days when researchers traced the root cause to libwebp itself — meaning every downstream consumer of the library needed its own fix, and vendor advisories multiplied into the dozens.
  • The attribution footnote: The commercial spyware dimension — Pegasus as the payload — put the episode in the mercenary-ware chapter of 2023 alongside Predator and Hermit.

Why image decoders are perfect targets

Property Consequence
Parser of untrusted input Any image from anyone is attacker-supplied code input by design
Legacy C codebase Memory safety absent; one overflow equals full compromise
Ubiquity One library, every platform: browsers, messengers, OSes, Electron apps
Invisible dependency Nobody audits the image decoder; risk lives below the SBOM awareness line
Zero-click delivery Chat previews render images automatically — the victim never clicks
data-hmmnm-seam="2">

Timeline

Date Event
2023-08-10 → 09-01 Citizen Lab detection and responsible disclosure window for BLASTPASS targeting an NSO victim; Apple patches Safari/rendering stack
2023-09-06 → 09-07 (event; our peg) Apple’s iOS 16.6.1-era advisories; root cause traced to libwebp CVE-2023-4863; Chrome and Firefox ship emergency fixes the same week
2023-09 mid Vendor advisory cascade: Electron, Signal, Telegram, 1Password, and dozens more ship patched builds; scanning for vulnerable libwebp becomes a fleet-wide chore
2023-09 → 10 CISA KEV listing; exploitation reporting expands beyond the original spyware victim set
2023-Q4 → The incident becomes the standard exhibit for memory-safety and supply-chain dependency arguments
data-hmmnm-seam="3">

Defensive lessons

  • Inventory your decoders. You cannot patch what you can’t name: maintain a live map of parsing libraries — image, video, archive, font, document — in every client and server you ship.
  • Treat “just an image” as code execution risk. Zero-click rendering means attachment-style sandboxing of media processing; decode in isolated processes with minimal privileges and no network.
  • Fund the boring libraries. libwebp and kin run the visual web on near-zero maintenance budgets; if your product depends on one, you inherit its security debt — pay some of it upstream.
  • Rapid advisory mapping beats rapid patching. The orgs that fared best in September 2023 weren’t the fastest patchers; they were the ones who could query “where do we use libwebp?” in minutes and know the answer was complete.
  • Assume spyware economics. Commercial exploit vendors amortize research across many buyers; a decoder bug is a product feature to them, not an accident.
data-hmmnm-seam="4">

The monoculture moment

The deeper structural story was monoculture risk crystallizing. WebP’s compression efficiency made it the default web image format, and libwebp’s open-source excellence made it the default implementation — a single parse routine under every rendering surface. When the bug landed, the patch matrix read like a directory of the software industry: two browser engines, three OS vendors, every chat app, every Electron bundle. Redundancy arguments suddenly had a case study with a CVE number. The honest defense isn’t abandoning shared code — shared code gets patched by thousands of eyes — it’s knowing your dependency graph deeply enough that “shared” doesn’t mean “unknown”. September 2023 was the pop quiz most of the industry failed blind: not “can you patch fast” but “do you even know where the library lives”.

data-hmmnm-seam="5">

Why it still matters in 2026

CVE-2023-4863 is now the canonical citation in three arguments: memory-safe languages for parsers (Rust rewrites of image stacks accelerated after it), sustained funding for foundational open source, and zero-click hardening (locked-down media pipelines, disable-link-preview policies for high-risk users). It also permanently changed spyware incident response: Citizen Lab’s catch proved civil-society monitoring has intelligence-grade value, and vendor response to “commercial exploit chain found in the wild” now runs at emergency speed by default rather than by exception.

Was it actually exploited in the wild?

Yes — confirmed. The BLASTPASS chain was used in a real spying operation against a named civil-society victim before discovery; Google TAG later assessed with high confidence the bug had been exploited as a zero-day beyond Apple’s ecosystem.

Was it NSO Group’s bug?

The exploit chain delivered Pegasus, which is NSO Group’s spyware; the exact procurement path between the exploit and the vendor follows the mercenary market’s usual opacity. The bug belonged to libwebp; the weaponization belonged to the spyware economy.

Why did patching take so long across vendors?

Because the fix had to be re-shipped by every downstream consumer of the library, and many vendors didn’t know they embedded libwebp until researchers asked. The patch itself was small; the dependency discovery was the long pole.

Should we drop WebP?

No. The format isn’t the problem — the monoculture of unaudited parser implementations was. Post-incident, libwebp received fuzzing coverage and funding attention; the durable fix is engineering process, not format migration.

Part of the hmmnm.com security-timeline series — one event per month, 2021–2024, indexed here.

data-hmmnm-seam="end">

Prabhu Kalyan Samal

Application Security Consultant at TCS. Certifications: CompTIA SecurityX, Burp Suite Certified Practitioner, Azure Security Engineer, Azure AI Engineer, Certified Red Team Operator, eWPTX v3, LPT, CompTIA PenTest+, Professional Cloud Security Engineer, SC-900, SC-200, PSPO I, CEH, Oracle Java SE 8, ISP, Six Sigma Green Belt, DELF, AutoCAD. Writing about ethical hacking, security tutorials, and tech education at Hmmnm.