Skip to content

Commit 41bca90

Browse files
authored
Merge branch 'main' into michalpiechowiak/frb-1629-intermittent-proxy-timeouts-on-runtime-v594
2 parents 85d4eb9 + 8a7647d commit 41bca90

File tree

7 files changed

+78
-0
lines changed

7 files changed

+78
-0
lines changed

tests/e2e/edge-middleware.test.ts

+16
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,19 @@ test.describe('Middleware with i18n and excluded paths', () => {
216216
})
217217
})
218218
})
219+
220+
test("requests with x-middleware-subrequest don't skip middleware (GHSA-f82v-jwr5-mffw)", async ({
221+
middlewareSubrequestVuln,
222+
}) => {
223+
const response = await fetch(`${middlewareSubrequestVuln.url}`, {
224+
headers: {
225+
'x-middleware-subrequest': 'middleware:middleware:middleware:middleware:middleware',
226+
},
227+
})
228+
229+
// middleware was not skipped
230+
expect(response.headers.get('x-test-used-middleware')).toBe('true')
231+
232+
// ensure we are testing version before the fix for self hosted
233+
expect(response.headers.get('x-test-used-next-version')).toBe('15.2.2')
234+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export default function Home() {
2+
return (
3+
<main>
4+
<h1>Hi</h1>
5+
</main>
6+
)
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export const metadata = {
2+
title: 'Simple Next App',
3+
description: 'Description for Simple Next App',
4+
}
5+
6+
export default function RootLayout({ children }) {
7+
return (
8+
<html lang="en">
9+
<body>{children}</body>
10+
</html>
11+
)
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { NextResponse } from 'next/server'
2+
import { NextRequest } from 'next/server'
3+
4+
import packageJson from 'next/package.json'
5+
6+
export async function middleware(request: NextRequest) {
7+
const response = NextResponse.next()
8+
9+
response.headers.set('x-test-used-middleware', 'true')
10+
response.headers.set('x-test-used-next-version', packageJson.version)
11+
12+
return response
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/** @type {import('next').NextConfig} */
2+
const nextConfig = {
3+
output: 'standalone',
4+
eslint: {
5+
ignoreDuringBuilds: true,
6+
},
7+
}
8+
9+
module.exports = nextConfig
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "middleware-subrequest-vuln",
3+
"version": "0.1.0",
4+
"private": true,
5+
"scripts": {
6+
"postinstall": "next build",
7+
"dev": "next dev",
8+
"build": "next build"
9+
},
10+
"dependencies": {
11+
"next": "15.2.2",
12+
"react": "18.2.0",
13+
"react-dom": "18.2.0"
14+
},
15+
"test": {
16+
"dependencies": {
17+
"next": "15.2.2"
18+
}
19+
}
20+
}

tests/utils/create-e2e-fixture.ts

+1
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ export const fixtureFactories = {
333333
pnpm: () => createE2EFixture('pnpm', { packageManger: 'pnpm' }),
334334
bun: () => createE2EFixture('simple', { packageManger: 'bun' }),
335335
middleware: () => createE2EFixture('middleware'),
336+
middlewareSubrequestVuln: () => createE2EFixture('middleware-subrequest-vuln'),
336337
middlewareI18nExcludedPaths: () => createE2EFixture('middleware-i18n-excluded-paths'),
337338
middlewareOg: () => createE2EFixture('middleware-og'),
338339
middlewarePages: () => createE2EFixture('middleware-pages'),

0 commit comments

Comments
 (0)