Repository navigation
chore(deps): update dependency @opennextjs/cloudflare to v1.20.2 [security] - #530
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Note
|
renovate
Bot
force-pushed
the
renovate/npm-opennextjs-cloudflare-vulnerability
branch
from
October 19, 2026 05:28
7bc529d to
971bb46
Compare
renovate
Bot
force-pushed
the
renovate/npm-opennextjs-cloudflare-vulnerability
branch
from
October 20, 2026 14:40
971bb46 to
e5a5319
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.17.1→1.20.2OpenNext Cloudflare: Cache interception can bypass middleware protection for encoded paths
CVE-2026-100409 / GHSA-2vc4-c4r6-p6v6
More information
Details
Summary
When cache interception is enabled,
@opennextjs/cloudflarecan interpret percent-encoded paths differently during middleware matching and cache lookup.An encoded request may fail to match authorization middleware, then be decoded into the cache key of a protected route. The cached response may consequently be returned without invoking the middleware.
enableCacheInterceptionis disabled by default.Impact
A remote unauthenticated attacker may retrieve cached content from routes intended to be protected by middleware.
An application is affected when it:
enableCacheInterception;Details
Middleware matching previously used the encoded request pathname, while cache interception decoded the pathname before selecting a cache entry.
For example, consider an application with:
/admin/:path*;401 Authentication requiredfor/admin;/adminroute; andAn attacker can request:
The encoded pathname does not match
/admin/:path*, so the authorization middleware is not invoked. Cache interception then decodes%61dmintoadminand may return the cached/adminresponse:Malformed paths exposed an additional inconsistency. For example:
The previous implementation decoded each segment independently. It decoded
%61dmintoadminbut retained the malformed%ZZsegment, allowing cache lookup to continue using a partially decoded pathname.Patches
The fix aligns encoded-path handling across middleware matching and cache lookup, and rejects malformed paths instead of partially decoding them. See the upstream fixes in opennextjs-aws#1199 and opennextjs-aws#1200.
Users should upgrade to
@opennextjs/cloudflare@1.20.2or later.Workarounds
If upgrading is not immediately possible for an application:
enableCacheInterception: true.Adding individual encoded matcher variants is not a complete workaround because pathnames can have multiple equivalent encodings.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
opennextjs/opennextjs-cloudflare (@opennextjs/cloudflare)
v1.20.2Compare Source
Patch Changes
#1312
38ea40bThanks @james-elicx! - fix: handle encoded middleware and cache paths safelyUpgrade
@opennextjs/awsto prevent encoded paths from bypassing middleware matching or selecting partially decoded cache entries.#1313
766eee9Thanks @james-elicx! - chore: bump the Next.js peer dependency to 15.5.21 / 16.2.11#1306
97ef330Thanks @james-elicx! - fix: normalize Windows paths when patching the Turbopack runtimeEnsure traced Turbopack chunks are included in the generated runtime loaders when builds run on Windows.
v1.20.1Compare Source
Patch Changes
#1460
8e60dedThanks @vicb! - chore: bump@opennextjs/awsto 4.1.12See details at https://github.com/opennextjs/opennextjs-aws/releases/tag/v4.1.12
#1414
15f4c9eThanks @allangreatsoftwares! - fix: render server action redirects for the host of the request#1439
1ebbc55Thanks @mathurshubham! - fix: inline named webpack chunks (webpackChunkName) in the server runtimeApps built with webpack returned a 500 with
Error: Unknown chunk Nwhen the server code loaded a chunk named with/* webpackChunkName: "..." */, i.e. from anext/dynamicorimport()in the app or in a dependency. Named chunks are now bundled into the Worker and load correctly.v1.20.0Compare Source
Minor Changes
#1290
46c50fcThanks @james-elicx! - feature: add opt-in batch upload viarclonefor fast R2 cache population.Key Changes:
Optional
rcloneUpload: Install the optionalrclone.jspeer dependency and pass--rcloneto opt in torclonebased batch uploads.R2_ACCESS_KEY_IDR2_SECRET_ACCESS_KEYCF_ACCOUNT_IDExplicit Opt-in: The existing worker-based population path remains the default.
rcloneis only loaded when--rcloneis used for a remote cache.Clear Errors: The CLI reports missing credentials or a missing
rclone.jsinstallation when the option is used.Usage:
Install
rclone.js, then add the secrets in a.env/.dev.varsfile in your project root:pnpm add rclone.js pnpm approve-builds # select rclone.js pnpm rebuild rclone.js R2_ACCESS_KEY_ID=your_key R2_SECRET_ACCESS_KEY=your_secret CF_ACCOUNT_ID=your_account opennextjs-cloudflare deploy --rcloneYou can also set the environment variables for CI builds.
Notes:
rclonemay not be supported on all platforms.Patch Changes
#1289
eef243fThanks @thatssoheil! - fix: spread SQLite bindings in BucketCachePurge alarm so tag purges runBucketCachePurge.alarm()passed its tag bindings toSqlStorage.execas asingle array.
exec(query, ...bindings)is variadic over its bindings, so for amulti-tag
DELETE ... WHERE tag IN (?, ?, …)the binding count (1) disagreedwith the placeholder count (N) and
execthrew "Wrong number of parameterbindings" on every flush. On-demand
revalidateTagpurges therefore neverreached the Cloudflare cache, and with
bypassTagCacheOnCacheHitenabled pagesserved stale until the ISR TTL expired.
Spread the bindings, normalise the
INSERTto the same variadic form, andtighten the drain loop's guard from
while (tags.length >= 0)(which neverexits via the condition) to
while (tags.length > 0).#1291
51439b1Thanks @james-elicx! - fix: disable response compression when provisioning R2 cache bucketsAvoid truncated compressed Cloudflare API responses causing R2 cache bucket provisioning to fail.
v1.19.11Compare Source
Patch Changes
#1270
802047eThanks @alex-all3dp! - fix: skip non-upload-triggered worker versions when building skew-protection deployment mappingWorker versions created by metadata-only operations (e.g. Cloudflare API secret updates) do not include the static assets bundle. Previously, such versions could become the "latest" target in the skew-protection mapping, causing
/_next/static/*requests to return 404 on past deployments. Versions are now filtered to those withworkers/triggered_byin{upload, version_upload}.Closes #1230
v1.19.10Compare Source
Patch Changes
#1261
780dd4fThanks @vicb! - Allow populating R2 when the domain is protected by Cloudflare AccessYou need to:
v1.19.9Compare Source
Patch Changes
3b35c6eThanks @vicb! - chore: bump Next.js to 15.5.18 / 16.2.6 and @opennextjs/aws to 4.0.2v1.19.8Compare Source
Patch Changes
#1256
9696cd0Thanks @vicb! - bump@opennextjs/awsto 4.0.1See details at https://github.com/opennextjs/opennextjs-aws/releases/tag/v4.0.1
v1.19.7Compare Source
Patch Changes
#1252
29fe15dThanks @vicb! - bump the number of retries for r2 cache uploadsIncrease the retry count from 5 to 15 with a capped exponential backoff to improve resilience against transient R2 write failures during cache population.
#1255
364b7d9Thanks @vicb! - Bump react and nextv1.19.6Compare Source
Patch Changes
#1246
5d2014fThanks @vicb! - fix: do not log expected expected D1 errorsThe
populateCachecommand adds columns to the D1 tag cache for SWR support.This is required for older deployments made before those column were added.
SQLite errors when the columns exist and we should not log those errors.
#1244
01babceThanks @tahmid-23! - fix: drop streaming wasm calls in Turbopack runtimeTurbopack replaces wasm imports using
WebAssembly.compileStreamingandWebAssembly.instantiateStreaming. These functions are not available inthe workerd runtime.
We add a helper
loadWasmChunkFn. This is a generated switch statementthat contains an import for each wasm chunk. We use static strings for
all imports to ensure that all necessary wasm chunks will be detected
and bundled for the final build.
The Turbopack patcher replaces the invocations in
loadWebAssemblyandloadWebAssemblyModule, using the synchronousWebAssembly.instantiateand redirecting to
loadWasmChunkFn.#1243
1c815deThanks @tahmid-23! - fix: detect object-valued conditionsThe pre-existing build condition transform logic had subtle errors:
(e.g. "workerd": { "import": ..., "require": ... })
Now, we fully support object conditions. Furthermore, we prune siblings,
unless its subtree also contains the build condition.
v1.19.5Compare Source
Patch Changes
dd7de1dThanks @vicb! - fix: add missing git ignored files for the migrate commandv1.19.4Compare Source
Patch Changes
#1221
a2679bfThanks @mushan0x0! - Stop bundling@vercel/og(and its ~1.4 MiBresvg.wasm) when the app does not use it.Next.js's
externalImporthelper keeps a dynamicimport("next/dist/compiled/@vercel/og/index.edge.js")in the emitted handler even for apps that never useImageResponse/opengraph-image. Previously this module was marked asexternalwhenuseOgwasfalse, which left Wrangler to resolve and bundle it — pulling in ~800 KiB of JS plusresvg.wasmand pushing many Workers over the Cloudflare free-tier 3 MiB gzip limit.When
useOgisfalse, the edge entry is now aliased to the existingthrow.jsshim, so the unreachable dynamic import resolves to a tiny module and the real@vercel/oglibrary is no longer pulled into the Worker bundle.#1208
2c5b472Thanks @edmundhung! - UseOPEN_NEXT_BUILD_IDinstead ofNEXT_BUILD_IDin the cache keys.As of Next 16.2
NEXT_BUILD_IDis a fixed value when deploymentId is set explicitly.See opennextjs/opennextjs-aws#1144
#1193
1e8d232Thanks @conico974! - Fix tag cache stale logicv1.19.3Compare Source
Patch Changes
#1215
608893eThanks @vicb! - Factor large repeated values in manifestsThis reduce the size of the generated code.
#1218
f0d0226Thanks @314systems! - removeprocess.versionoverrideRemove process.version / process.versions.node overrides now that unjs/unenv#493 is merged and shipped in unenv@2.0.0-rc.16 (project uses 2.0.0-rc.24)
#1199
32594d6Thanks @SdSadat! - fix(cli): fail fast in non-TTY environments instead of hanging on config-creation promptsWhen
open-next.config.ts(orwrangler.(toml|json|jsonc)) is missing, the CLIprompts the user to auto-create it. In non-TTY environments (Cloudflare Workers
Builds, Docker, CI) the Enquirer prompt can't read stdin, so the build hangs or
fails with a truncated prompt and a cryptic exit code — the user sees
? Missing required open-next.config.ts file, do you want to create one? (Y/n)and then
ELIFECYCLE Command failed with exit code 13, with no hint at whatto do next.
Now, in non-interactive environments, both prompts throw an actionable error
with the exact template to paste (for
open-next.config.ts) or point at theexisting
--skipWranglerConfigCheck/SKIP_WRANGLER_CONFIG_CHECKescapehatch (for the wrangler config). Interactive behavior is unchanged.
v1.19.2Compare Source
Patch Changes
#1207
0958726Thanks @edmundhung! - bump@opennextjs/awsto 3.10.2See details at https://github.com/opennextjs/opennextjs-aws/releases/tag/v3.10.2
#1139
79b01b8Thanks @james-elicx! - Fix Turbopack external module resolution by dynamically discovering external imports at build time.When packages are listed in
serverExternalPackages, Turbopack externalizes them viaexternalImport()which uses dynamicawait import(id). The bundler (ESBuild) can't statically analyzeimport(id)with a variable, so these modules aren't included in the worker bundle.This patch:
.next/node_modules/symlinks (e.g.shiki-43d062b67f27bbdc→shiki)externalImport("shiki")) and subpath imports (e.g.shiki/engine/javascript)switch/caseentries so the bundler can statically resolve and include these modules#1203
6f02d12Thanks @314systems! - fix: exclude unsupported Next.js 16 releases from peer dependencies.The previous range allowed Next.js 16.0.0 through 16.2.2 without a peer dependency warning because
>=16.2.3was already covered by>=15.5.15.The range now explicitly supports Next.js 15.5.15 and above in the 15.x line, and Next.js 16.2.3 and above in the 16.x line.
#1200
7820ad0Thanks @NathanDrake2406! - fix: reuse sharded tag data when filling the regional cache.The sharded tag cache miss path already reads tag data from the Durable Object before answering the request. Reuse that fetched data when populating the regional cache so a shard miss does not immediately trigger a second identical Durable Object read.
#1206
585795dThanks @314systems! - fix: regression where getEnvFromPlatformProxy received wrong options typeThis fixes a regression introduced in 32ba91a where
getEnvFromPlatformProxycall sites passedOpenNextConfigeven though the function expects WranglerGetPlatformProxyOptions.The fix restores the pre-32ba91a argument shape by passing
{ configPath, environment }from CLI arguments, so env resolution follows the selected Wrangler config/environment.v1.19.1Compare Source
Patch Changes
#1270
802047eThanks @alex-all3dp! - fix: skip non-upload-triggered worker versions when building skew-protection deployment mappingWorker versions created by metadata-only operations (e.g. Cloudflare API secret updates) do not include the static assets bundle. Previously, such versions could become the "latest" target in the skew-protection mapping, causing
/_next/static/*requests to return 404 on past deployments. Versions are now filtered to those withworkers/triggered_byin{upload, version_upload}.Closes #1230
v1.19.0Compare Source
Minor Changes
#1168
9a26846Thanks @conico974! - Add support for SWR (stale-while-revalidate) inrevalidateTagSee the AWS implementation for more details.
Patch Changes
#1184
c7d6425Thanks @vicb! - fix for Next.js CVE-2026-23869See the CVE-2026-23869 summary for details.
This CVE is fixed by bumping the minium Next.js release version to 15.5.15/16.2.3
#1177
e814a63Thanks @conico974! - Fixuse cachenot working as expected in Next 16+v1.18.1Compare Source
Patch Changes
#1176
2232651Thanks @conico974! - fix for OG with Next 16.2.2#1166
f89fba1Thanks @ash1day! - fix: sort.endsWith()checks by path length descending to prevent suffix collisions in dynamic requiresRoutes whose paths are suffixes of other routes (e.g.
/test/appvs/) were resolved incorrectly because the shorter path matched first in the generated.endsWith()chain. Sorting by path length descending ensures more specific (longer) paths are always checked first.Fixes #1156.
v1.18.0Compare Source
Minor Changes
#1159
75f5f0aThanks @edmundhung! - Use remote dev for R2 cache populationUsing remote dev is not subject to the Cloudflare API rate limit of 1,200 requests per 5 minutes that caused failures for large applications with thousands of prerendered pages.
v1.17.3Compare Source
Patch Changes
#1160
161e726Thanks @matthewvolk! - fix(patches): includeprefetch-hints.jsonin loadManifest build-time inliningNext.js 16.2.0 introduced
prefetch-hints.jsonas a new server manifest loaded unconditionallyby
NextNodeServer.getPrefetchHints(). The file exists in the build output but wasn't matched bythe glob pattern
*-manifest.json, causing the patchedloadManifest()to throw at runtime.v1.17.2Compare Source
Patch Changes
#1151
a143282Thanks @nathanschram! - fix: handle known optional manifests gracefully in loadManifest/evalManifest patchesNext.js loads certain manifests with
handleMissing: true(returning{}when the file doesn'texist). The adapter's build-time glob scan doesn't find these files when they're conditionally
generated, so the patched function threw at runtime, crashing dynamic routes with 500.
Instead of a blanket catch-all, handle only the specific optional manifests from Next.js
route-module.ts:react-loadable-manifest(Turbopack per-route, not all routes have dynamic imports)subresource-integrity-manifest(only whenexperimental.sriconfigured)server-reference-manifest(App Router only)dynamic-css-manifest(Pages Router + Webpack only)fallback-build-manifest(only for/_errorpage)prefetch-hints(new in Next.js 16.2)_client-reference-manifest.js(optional for static metadata routes, evalManifest)Manifest matching strips
.jsonbefore comparison since some Next.js constants omitthe extension (
SUBRESOURCE_INTEGRITY_MANIFEST,DYNAMIC_CSS_MANIFEST, etc.).Unknown manifests still throw to surface genuine errors.
Fixes #1141.
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.