Internet security research and reporting
Analysis Retrospective · 2023 CVE-2023-4863

WebP decoding reaches well beyond the browser

CVE-2023-4863 required inventory of browsers, embedded renderers and image-processing workers.

WebP decoding reaches well beyond the browser. Untrusted image; Browser renderer; Desktop component; Server image worker
FISRO diagram: Untrusted image; Browser renderer; Desktop component; Server image worker. FISRO

Summary

September 2023 browser advisories identified a flaw in libwebp. A complete response follows image-decoding roles into bundled libraries and asynchronous workers, with separate package and artefact evidence.

A browser advisory can identify a library problem

Google's 11 September 2023 Chrome update addressed CVE-2023-4863, a heap buffer overflow in WebP, and said an exploit existed in the wild. Mozilla's advisory the following day identified the issue in libwebp and listed fixes across Firefox and Thunderbird release lines. A team that stopped after updating one browser would have answered only part of the dependency question.

The important boundary is where software decodes an image supplied by someone else. That can be a browser, but it can also be another application or a service with image-processing functionality. The exact affected status of each product still needs evidence from its vendor or build; the presence of a WebP feature alone is not a complete vulnerability assessment.

Inventory decoding roles rather than file extensions

An image can pass through several systems before a person sees it. A service may create a preview, extract metadata, transform an upload or render content inside a desktop application. The security review needs to locate those decoding steps, not simply find directories containing .webp files.

Consider a synthetic upload path: a frontend accepts an image, a worker creates a thumbnail, and a moderation console displays the result. The frontend's dependency inventory may say nothing about the worker's native library or the console's embedded browser. These are three software ownership questions within one apparent feature.

Processing role Relevant inventory Verification question
Browser display Browser and managed release channel Did the update reach the running browser?
Desktop rendering Application's embedded components What does the application vendor say about its build?
Server conversion Worker image, native package or vendored library Which decoder is actually linked or bundled?
Stored-content replay Queues and scheduled processing Can old input reach a decoder after a deployment?

The last row is easy to miss. Updating a public upload endpoint does not automatically replace every worker that will later consume already queued content.

Backports and bundles need different evidence

A distribution-maintained library may receive a security backport without adopting the upstream version number expected by a simple scanner. A bundled or statically linked copy may not change when the operating-system package is updated. Neither situation is resolved by a single machine-wide package query.

Use the supported vendor's advisory for packaged software and retain the application or container digest alongside it. For internally built services, connect the build inputs to the deployed worker. If the build vendors the library, an operating-system update is useful but cannot demonstrate that the embedded copy changed.

Do not transform this review into a production exploit test. Version and build evidence, supported vendor assessments and controlled regression checks provide a safer basis for patch verification than sending malicious image samples through a live customer workflow.

Put parser isolation on the design review

Patching is the immediate software task. The architecture question is what a parser process could reach if a future decoder flaw were exploited. Review the worker's filesystem access, network access, credentials and resource limits against the job it performs.

A thumbnail worker usually needs image input and an output destination. It may not need the same credentials or network access as the application's main service. That is a design question to test in the deployment, not a claim that isolation makes memory corruption harmless.

The later Brotli decoder issue raises a similar ownership problem for compressed input. Image decoding and decompression differ technically, but both can occur inside a dependency that the application never calls by its public name.

Connect the package record to the worker

Package and binary checks answer different questions

For a Debian environment using the libwebp7 package, this query reads the installed package release:

dpkg-query -W -f='${Package}\t${Version}\n' libwebp7

The package name is specific to that packaging context. Other distribution releases can use different package names. An absent result says that this named package was not found; it does not prove that every application on the machine lacks a bundled decoder.

For a locally built ELF worker, static inspection can reveal declared dynamic dependencies without launching it:

readelf -d /path/to/our-image-worker

Use this on an authorised analysis copy or trusted local artefact. The dynamic section can help identify linked libraries, but it cannot reveal every statically compiled component or every library opened later at runtime. Avoid substituting execution-based inspection of an untrusted executable for static analysis.

These checks become useful when joined to the build record and product advisory. A package-manager result explains one distribution component; the worker's artefact identity explains which deployment is being assessed. Neither alone establishes the state of an embedded desktop renderer.

Review the queue after replacing the worker

A synthetic recovery test can put harmless sample images into the normal processing queue, deploy the intended worker and verify which worker identity consumes them. Record the queue, release digest and resulting job record. The purpose is to confirm deployment routing, not to reproduce the memory corruption.

This catches a common operational gap: a correct new image exists, but an old worker group or scheduled job still receives part of the workload. The test should use ordinary permitted input, with no malformed image or production exploit payload.

Keep any unresolved routes in the remediation record. The service's public endpoint and its asynchronous processing estate may have different owners and maintenance windows.

Record the decoding role, affected-product evidence, deployed artefact, running-state check and any unresolved bundled copies. For a large estate, prioritise reachable untrusted-input paths while ownership work continues elsewhere. Closing only the most visible browser ticket can leave the less visible processing jobs outside the response.

Timeline

  1. Google Chrome publishes “Chrome Stable Channel security update, 11 September 2023”. [Google Chrome]
  2. Mozilla publishes “MFSA 2023-40: heap buffer overflow in libwebp”. [Mozilla]

Methodology

AI-assisted source research and drafting. Synthesis of the linked public primary documents, prepared on 2026-10-30. Technical conditions and dates are attributed to those documents. The decision tables, diagrams and operational interpretation are FISRO analysis. No exploit reproduction, affected-system inspection or new victim measurement was performed. Event date: 2023-09-11: event or disclosure described in the sources; source publication dates are listed separately.

Sources

Primary sources are maintainers, vendors, official bodies and original documents. Secondary sources are reporting by others.

  1. Chrome Stable Channel security update, 11 September 2023 Google Chrome Primary Published 11 Sep 2023 Accessed 30 Oct 2026 Chrome Stable Channel security update, 11 September 2023 — evidence for the incident account, technical conditions or diagnostic described here.
  2. MFSA 2023-40: heap buffer overflow in libwebp Mozilla Primary Published 12 Sep 2023 Accessed 30 Oct 2026 MFSA 2023-40: heap buffer overflow in libwebp — evidence for the incident account, technical conditions or diagnostic described here.

Updates and corrections

No substantive updates or corrections since publication.

Found an error? Request a correction. We record every substantive change on this page, as set out in our corrections policy.

Related coverage