The Image Optimizer Runs Inside Your Credential Boundary
Three of the five disclosures need no credentials and a fourth needs only a low-privilege tenant account, which leaves patch latency and process isolation as the only working controls — and puts PaperCut ahead of a trio of CVSS 10.0s in the queue.
The chain is short, boring, and ends at the metadata service
Next.js's built-in optimizer exposes /_next/image?url=…&w=…&q=…. Behind that route, sharp hands bytes to native decode libraries — libavif, libheif, aom — C and C++ parsing adversarially shaped input inside the Node process. That process usually holds the database URL, a service-account token, and an unrestricted path to the cloud metadata endpoint. Crafted AVIF, optimizer decode, code execution with the application's own identity, then IMDS or an internal service. Pre-auth, no user interaction.
AVIF is the tell. A modern codec got adopted for payload savings, and a memory-safety surface in the request path came with it. With a wildcard images.remotePatterns allowlist, or a legacy images.domains entry, the attacker skips the upload feature entirely. They host the payload and pass the URL.
The Windows-only flaw comes from path handling the test matrix never runs
A framework bug that fires only on Windows almost always means OS-divergent path normalization or process-spawn semantics in the server runtime. Backslash separators and drive-relative paths get past a check written against POSIX assumptions; so do reserved device names. Teams that are Linux containers end to end can treat it as noise. Any IIS-fronted Node service is a separate exposure, and so is an on-prem enterprise deployment or an internal tool running on Windows.
Sort the queue by exploitation evidence
| Disclosure | Precondition | Impact | Closed by patch? |
|---|---|---|---|
| PaperCut NG/MF 0-day, all versions | Unknown; actively exploited | Initial access, ransomware beachhead | Yes |
| cPanel / WHM domain parking | Low-privilege tenant account | Root on a shared host, all co-tenant data | Yes |
| Next.js AVIF + Windows | None — pre-auth, network | RCE as the app process | Yes, version bump |
| ServiceNow AI Platform, 3x CVSS 10.0 | None in certain circumstances | Unauthenticated code and SQL execution | Yes |
| ZBT (Shenzhen Zhibotong) firmware implants | None — remote, unauth | Root on an edge device | No — assume replacement |
ServiceNow carries the highest scores and no known exploitation. PaperCut carries no score advantage and is being used right now, per the vendor's own confirmation, and "all versions affected" means there is no safe older release to roll back to. VulnCheck's two undocumented factory implants in ZBT routers are the one item on the list a patch does not close. That one closes with a purchase order.
Patch, then shrink the surface, then move the decoder
- Patch. Verify by lockfile across every repo, including the dashboard nobody owns. Caret ranges in
package.jsonprove nothing. - Shrink the surface, same day. Drop
image/aviffromimages.formats— WebP-only costs a few percent of payload. Replace wildcardremotePatternswith exact host and path entries. Setunoptimizedwhere a route never needs transforms. If images already route through Cloudinary or imgix, confirm the built-in optimizer is disabled rather than merely unused. - Move the decoder. Push transforms to the CDN edge, or to a dedicated optimizer with no cloud role, no VPC egress, IMDSv2 with hop limit 1, and seccomp or gVisor. Then the next AVIF, JXL or HEIF bug is a contained crash instead of a breach.
Where the reporting diverges: both accounts agree the flaws are pre-auth and credit Hacktron, but only one states the patched versions, and the other truncates CVE identifiers and affected ranges. Pull the upstream Vercel advisory before this goes into a postmortem.
Native codec decode does not belong in a process that holds credentials.
What to do
Enumerate every Next.js deployment you own — prod, preview, staging, marketing, internal tools — and bump to 16.3.3 or 15.5.24 today, verified by a lockfile scan in CI rather than by asking teams.
Remove image/avif from images.formats and replace wildcard remotePatterns with exact host and path entries this week, as a stopgap while bumps roll.
Move server-side image transformation out of the credentialed app process this quarter: CDN-edge optimization or a dedicated worker with no cloud role, IMDSv2 hop limit 1, and no VPC egress.