AI Newsway

Vercel Disabled AVIF Across Its Platform Because of a Bug Fixed a Year Ago

The libheif flaw reaching Next.js image optimization was already patched upstream β€” the commit just was not labeled a security fix, so nobody downstream knew

|5 min read0
AI Summary
Vercel published its account of a libheif vulnerability reported as a Next.js remote code execution flaw in August 2026. The defect sat upstream in an AVIF decoder reached through sharp and libvips, and had been fixed a year earlier in a commit never labeled as security-relevant, so it received no CVE. Vercel disabled AVIF platform-wide on August 13, and Next.js and libheif both shipped fixes on August 25.
Server infrastructure of the kind running the image optimization pipelines Vercel had to mitigate after tracing a Next.js RCE report to the libheif decoder
Server infrastructure of the kind running the image optimization pipelines Vercel had to mitigate after tracing a Next.js RCE report to the libheif decoder

A maintainer corrected a memory bug, pushed the commit, and moved on. No advisory. No security label. No CVE identifier. That single omission is why Vercel spent two weeks in August coordinating patches across four open source projects and ultimately switched off AVIF image optimization for every application it hosts.

Key takeaways

  • Vercel disabled AVIF optimization platform-wide on August 13 and shipped a Next.js security release on August 25 after tracing a reported RCE to libheif rather than its own code.
  • The vulnerable path runs from next/image through sharp to libvips, which calls libheif for AVIF decoding β€” a chain shared with ImageMagick, WordPress and much of the web.
  • Vercel reported that private vulnerability submissions on GitHub grew from 500 per week in January to 3,000 per week in May 2026, with 1,560 reviewed advisories that month.

The labeling gap is the actual failure

Without a security label, nothing downstream fires. Distribution packagers get no signal to backport. Dependency scanners have no identifier to match against. Debian 12 and 13 kept shipping affected versions, and Debian's own update did not arrive until August 8. Every consumer of those packages inherited the exposure while the correction sat in public git history, visible to anyone who read the diff carefully enough.

For years that was a tolerable failure mode. Reading a year of upstream commits across a decoder to find an unlabeled memory fix was expensive expertise. It is not expensive anymore. A three-researcher survey of exposure across Slack, Meta, GitHub Enterprise, Ruby on Rails, Next.js, Astro and Gatsby ran two months and cost under $3,000 in tokens.

Why the report landed on the wrong project

Hacktron AI brought the issue to Vercel in August, framed as an RCE in Next.js image optimization. The investigation moved the blame upstream fast. Next.js applications that use the Image component can resize and optimize AVIF files. Doing so invokes sharp, sharp invokes libvips, and libvips calls libheif to decode.

That meant a hostile AVIF image sent to the optimization endpoint could reach vulnerable decoder code without touching a line of Next.js. The framework was a conduit, not the defect. It was also the only layer Vercel directly controlled at that moment.

The disclosure timeline

Vercel's engineering write-up dates each step. Hacktron reported on August 11 and 12, and the two teams reproduced the RCE against a current Next.js build with a working proof of concept.

On August 13 Vercel applied a platform mitigation. Every image optimization request on Vercel passes through one central service, so disabling AVIF optimization and resizing there cut the path for all hosted customers at once. Incoming AVIF files simply stopped reaching libheif.

Self-hosted deployments were a different problem, and the reason the rest of the timeline exists. Vercel emailed the maintainers of sharp and libvips, and opened coordination with libheif through a GitHub Security Advisory. Hacktron submitted its exploit details to libheif separately. On August 19 the Next.js team met the libvips maintainer to align the remediation path. Security partners were notified on August 24.

August 25 closed it. Next.js folded an AVIF mitigation into a security release originally scheduled for an unrelated issue and shipped it a day early, disabling AVIF optimization and resizing outright. The libheif maintainer released v1.23.2 remediating the RCE on the same day, six days after that coordination meeting.

How far the same decoder reaches

libheif is a dependency of ImageMagick, WordPress and sharp, which is why an obscure flaw here has an unusually wide blast radius. The decoder had been corrected upstream the previous year, but because the commit carried no security marking, the correction never propagated as one.

The reach was not theoretical. Weeks before the Vercel report, researchers chained the same class of libheif overflow with an SSO weakness to reach OpenAI's internal monorepo through a community forum image upload β€” a completely different product, entry point and remediation path, built on the identical unlabeled defect.

Outlook

Vercel framed the volume problem directly, noting the CVE program has published more than 35,000 identifiers in 2026 and that it expects more upstream flaws like this one to surface as language models accelerate vulnerability research. It also warned that recent Next.js security releases have been more frequent and that the trend should continue.

The practical consequence for teams is narrower than the headline suggests. Platform customers were covered on August 13 without doing anything. Everyone running their own image pipeline has to confirm which libheif build they actually ship, which is precisely the question an unlabeled fix makes hard to answer.

FAQ

Was the vulnerability in Next.js itself?

No. The defect was in libheif, an AVIF decoder reached through sharp and libvips when Next.js optimizes AVIF images. Next.js disabled AVIF optimization as a mitigation because it was the layer that could be patched quickly, not because it contained the flaw.

Do I need to do anything if I deploy on Vercel?

No action is required. Vercel disabled AVIF optimization and resizing in its central Image Optimization Service on August 13, which blocked the path for all hosted applications. Self-hosted deployments need the August 25 Next.js security release or a libheif build at v1.23.2 or later.

Why does an unlabeled upstream fix matter so much?

Security tooling keys off identifiers. A commit that silently corrects a memory bug never enters the advisory database, so distributions do not backport it and CI scanners cannot flag affected versions. The fix exists in public code while every downstream consumer stays vulnerable.

How do you feel about this article?

SJ

Discussion

Sign in to post
Loading...

Related articles

A Poisoned Rust Crate Was Live for 86 Minutes. It Had 245 Million Downloads.
Developer Tools

A Poisoned Rust Crate Was Live for 86 Minutes. It Had 245 Million Downloads.

Malicious releases of arrayref, internment and append-only-vec pulled an infostealer through a typosquatted proc-macro1 dependency during compilation.

Seung Jung27 days ago
Anthropic Unlocks Its Withheld Mythos 5 Model for Defenders, With $35M for Open Source
Developer Tools

Anthropic Unlocks Its Withheld Mythos 5 Model for Defenders, With $35M for Open Source

Anthropic pledges $35M in credits for open-source security and opens Mythos 5, the model it withheld from release, to enterprise vulnerability scanning.

Seung Jung28 days ago
Cloudflare Cut Astro's Open Issues by 85% With Four Agents That Refuse to Share Context
Developer Tools

Cloudflare Cut Astro's Open Issues by 85% With Four Agents That Refuse to Share Context

Separate reproduction, diagnosis, verification and fix agents hand off through a report file, with the original bug reporter acting as the acceptance test.

Seung Jung27 days ago
Go 1.27 Ships Generic Methods, a Rebuilt JSON Engine and Post-Quantum Signatures
Developer Tools

Go 1.27 Ships Generic Methods, a Rebuilt JSON Engine and Post-Quantum Signatures

Go 1.27 adds generic methods, backs encoding/json with a new v2 engine, cuts small-object allocation cost by up to 30 percent and brings ML-DSA into crypto/tls.

Seung Jung30 days ago
Debian Is Voting on Whether to Ban AI-Assisted Code, and the Ballot Has Nine Choices
Developer Tools

Debian Is Voting on Whether to Ban AI-Assisted Code, and the Ballot Has Nine Choices

Debian developers vote through August 28 on nine proposals covering LLM-assisted contributions, from an outright ban to responsible-use guidelines.

Seung Jung29 days ago
Modular Opens Its AI Stack Across Trainium, TPUs and Qualcomm Silicon
Developer Tools

Modular Opens Its AI Stack Across Trainium, TPUs and Qualcomm Silicon

Modular put the Mojo compiler under Apache 2.0 and extended its platform to Trainium, TPUs and Qualcomm accelerators, opening the stack across rival silicon.

Seung Jung30 days ago