Skip to content

Commit 09d8c90

Browse files
committed
fix: avoid path traversal with optimize deps sourcemap handler (#22161)
1 parent f8103cc commit 09d8c90

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

packages/vite/src/node/server/middlewares/transform.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ export function transformMiddleware(
161161
const sourcemapPath = url.startsWith(FS_PREFIX)
162162
? fsPathFromId(url)
163163
: normalizePath(path.resolve(server.config.root, url.slice(1)))
164+
// url may contain relative path that may resolve outside of the optimized deps directory
165+
if (!depsOptimizer.isOptimizedDepFile(sourcemapPath)) {
166+
return next()
167+
}
164168
try {
165169
const map = JSON.parse(
166170
await fsp.readFile(sourcemapPath, 'utf-8'),

playground/fs-serve/__tests__/fs-serve.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,21 @@ describe.runIf(isServe)('invalid request', () => {
9393
target: path.posix.join('/@fs/', root, 'root/src/dummy.crt/') + '.',
9494
status: 'HTTP/1.1 403 Forbidden',
9595
},
96+
{
97+
name: 'denied optimize deps sourcemap handler',
98+
target:
99+
path.posix.join('/@fs/', root) +
100+
'/node_modules/.vite/deps/../../../unsafe.map',
101+
status: 'HTTP/1.1 403 Forbidden',
102+
},
103+
{
104+
name: 'denied backslash optimize deps sourcemap handler',
105+
target:
106+
path.posix.join('/@fs/', root) +
107+
'/node_modules/.vite/deps/..\\..\\..\\unsafe.map',
108+
status: isWindows ? 'HTTP/1.1 403 Forbidden' : 'HTTP/1.1 200 OK',
109+
content: isWindows ? undefined : 'Cache-Control: no-cache',
110+
},
96111
{
97112
name: 'HTML outside root with relative path',
98113
target: '/../unsafe.html',

playground/fs-serve/unsafe.map

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"key": "unsafe"
3+
}

0 commit comments

Comments
 (0)