diff --git a/Common/Server/Utils/VM/VMRunner.ts b/Common/Server/Utils/VM/VMRunner.ts index 0f6699601f..a63b2925b6 100644 --- a/Common/Server/Utils/VM/VMRunner.ts +++ b/Common/Server/Utils/VM/VMRunner.ts @@ -123,6 +123,27 @@ function createSandboxProxy( ); }); }, + getOwnPropertyDescriptor( + fnTarget: (...args: unknown[]) => unknown, + prop: string | symbol, + ): PropertyDescriptor | undefined { + if ( + typeof prop === "string" && + BLOCKED_SANDBOX_PROPERTIES.has(prop) + ) { + return undefined; + } + const desc: PropertyDescriptor | undefined = + Reflect.getOwnPropertyDescriptor(fnTarget, prop); + if (desc && "value" in desc) { + desc.value = createSandboxProxy( + desc.value, + cache, + fnTarget as GenericObject, + ); + } + return desc; + }, }, ); return fnProxy; @@ -165,6 +186,20 @@ function createSandboxProxy( return !(typeof k === "string" && BLOCKED_SANDBOX_PROPERTIES.has(k)); }); }, + getOwnPropertyDescriptor( + objTarget: GenericObject, + prop: string | symbol, + ): PropertyDescriptor | undefined { + if (typeof prop === "string" && BLOCKED_SANDBOX_PROPERTIES.has(prop)) { + return undefined; + } + const desc: PropertyDescriptor | undefined = + Reflect.getOwnPropertyDescriptor(objTarget, prop); + if (desc && "value" in desc) { + desc.value = createSandboxProxy(desc.value, cache, objTarget); + } + return desc; + }, }); cache.set(target, objProxy);