From 01d3442246f3976b56689d7d4f9934f2ff40c7bf Mon Sep 17 00:00:00 2001 From: scoootscooob Date: Tue, 24 Mar 2026 10:57:06 -0700 Subject: [PATCH] Plugins: sanitize sdk export subpaths --- src/plugins/sdk-alias.test.ts | 3 +++ src/plugins/sdk-alias.ts | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/sdk-alias.test.ts b/src/plugins/sdk-alias.test.ts index 77eb07f9cec..6fc12d34f39 100644 --- a/src/plugins/sdk-alias.test.ts +++ b/src/plugins/sdk-alias.test.ts @@ -341,6 +341,9 @@ describe("plugin sdk alias helpers", () => { "./plugin-sdk/compat": { default: "./dist/plugin-sdk/compat.js" }, "./plugin-sdk/telegram": { default: "./dist/plugin-sdk/telegram.js" }, "./plugin-sdk/nested/value": { default: "./dist/plugin-sdk/nested/value.js" }, + "./plugin-sdk/..\\..\\evil": { default: "./dist/plugin-sdk/evil.js" }, + "./plugin-sdk/C:temp": { default: "./dist/plugin-sdk/drive.js" }, + "./plugin-sdk/.hidden": { default: "./dist/plugin-sdk/hidden.js" }, }, }); const subpaths = listPluginSdkExportedSubpaths({ diff --git a/src/plugins/sdk-alias.ts b/src/plugins/sdk-alias.ts index ee6a3b0641a..983eb94f3bf 100644 --- a/src/plugins/sdk-alias.ts +++ b/src/plugins/sdk-alias.ts @@ -32,11 +32,15 @@ function readPluginSdkPackageJson(packageRoot: string): PluginSdkPackageJson | n } } +function isSafePluginSdkSubpathSegment(subpath: string): boolean { + return /^[A-Za-z0-9][A-Za-z0-9_-]*$/.test(subpath); +} + function listPluginSdkSubpathsFromPackageJson(pkg: PluginSdkPackageJson): string[] { return Object.keys(pkg.exports ?? {}) .filter((key) => key.startsWith("./plugin-sdk/")) .map((key) => key.slice("./plugin-sdk/".length)) - .filter((subpath) => Boolean(subpath) && !subpath.includes("/")) + .filter((subpath) => isSafePluginSdkSubpathSegment(subpath)) .toSorted(); }