diff --git a/patched-vscode/src/vs/server/node/remoteExtensionHostAgentServer.ts b/patched-vscode/src/vs/server/node/remoteExtensionHostAgentServer.ts index 9eace08d0..97bfcb351 100644 --- a/patched-vscode/src/vs/server/node/remoteExtensionHostAgentServer.ts +++ b/patched-vscode/src/vs/server/node/remoteExtensionHostAgentServer.ts @@ -139,6 +139,13 @@ class RemoteExtensionHostAgentServer extends Disposable implements IServerAPI { if (pathname === '/vscode-remote-resource') { // Handle HTTP requests for resources rendered in the rich client (images, fonts, etc.) // These resources could be files shipped with extensions or even workspace files. + if (req.headers.referer && req.headers.host) { + const parsedRefererUrl = url.parse(req.headers.referer, true); + if (parsedRefererUrl.host !== req.headers.host) { + return serveError(req, res, 403, `Forbidden.`); + } + } + const desiredPath = parsedUrl.query['path']; if (typeof desiredPath !== 'string') { return serveError(req, res, 400, `Bad request.`); diff --git a/patches/series b/patches/series index 63c8ae4f7..ec0ff0739 100644 --- a/patches/series +++ b/patches/series @@ -18,3 +18,4 @@ sagemaker-extension-smus-support.patch post-startup-notifications.patch sagemaker-extensions-sync.patch display-language.patch +validate-http-request-referer.patch diff --git a/patches/validate-http-request-referer.patch b/patches/validate-http-request-referer.patch new file mode 100644 index 000000000..640d9cf5e --- /dev/null +++ b/patches/validate-http-request-referer.patch @@ -0,0 +1,18 @@ +Index: sagemaker-code-editor/vscode/src/vs/server/node/remoteExtensionHostAgentServer.ts +=================================================================== +--- sagemaker-code-editor.orig/vscode/src/vs/server/node/remoteExtensionHostAgentServer.ts ++++ sagemaker-code-editor/vscode/src/vs/server/node/remoteExtensionHostAgentServer.ts +@@ -139,6 +139,13 @@ class RemoteExtensionHostAgentServer ext + if (pathname === '/vscode-remote-resource') { + // Handle HTTP requests for resources rendered in the rich client (images, fonts, etc.) + // These resources could be files shipped with extensions or even workspace files. ++ if (req.headers.referer && req.headers.host) { ++ const parsedRefererUrl = url.parse(req.headers.referer, true); ++ if (parsedRefererUrl.host !== req.headers.host) { ++ return serveError(req, res, 403, `Forbidden.`); ++ } ++ } ++ + const desiredPath = parsedUrl.query['path']; + if (typeof desiredPath !== 'string') { + return serveError(req, res, 400, `Bad request.`);