From 42a9e20e32719713bef9535e34d44f6505b7603f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Wed, 21 Jun 2023 22:20:47 +0200 Subject: [PATCH] fix(core): Add additional path-traversal guards on res.sendFile calls (no-changelog) (#6505) --- packages/cli/src/Server.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/Server.ts b/packages/cli/src/Server.ts index 58f3b63604..279e414bd0 100644 --- a/packages/cli/src/Server.ts +++ b/packages/cli/src/Server.ts @@ -14,7 +14,7 @@ import assert from 'assert'; import { exec as callbackExec } from 'child_process'; import { access as fsAccess } from 'fs/promises'; import os from 'os'; -import { join as pathJoin, resolve as pathResolve } from 'path'; +import { join as pathJoin, resolve as pathResolve, relative as pathRelative } from 'path'; import { createHmac } from 'crypto'; import { promisify } from 'util'; import cookieParser from 'cookie-parser'; @@ -1467,6 +1467,9 @@ export class Server extends AbstractServer { loader.directory, req.originalUrl.substring(pathPrefix.length), ); + if (pathRelative(loader.directory, filePath).includes('..')) { + return res.status(404).end(); + } try { await fsAccess(filePath); return res.sendFile(filePath);