安全漏洞 / 高 / 工具系统
electron/harness/sandbox/permissions.ts
PolicyEngine 在校验工具输入时,先 JSON.stringify(input) 再用正则匹配危险模式。 这种方式可被多种方式绕过:
JSON.stringify(input)
\u0029
{a: {b: 'dangerous'}}
'rm ' + '-rf /'
function deepScan(obj: unknown): string[] { const findings: string[] = []; if (typeof obj === 'string') { DANGEROUS_PATTERNS.forEach(p => { if (p.test(obj)) findings.push(p.source); }); } else if (Array.isArray(obj)) { obj.forEach(item => findings.push(...deepScan(item))); } else if (obj && typeof obj === 'object') { Object.values(obj).forEach(v => findings.push(...deepScan(v))); } return findings; }
文件: electron/harness/sandbox/permissions.ts
修复: 新增 deepScanStrings 私有方法递归提取对象所有字符串字段值。checkAuthorization 中 deniedPatterns/allowedPatterns 改为字段级深度匹配 + 整体 argsStr 兜底,防止 Unicode 转义、嵌套对象、字符串拼接绕过。
deepScanStrings
checkAuthorization
deniedPatterns
allowedPatterns
argsStr
验证: tsc --noEmit 类型检查通过。
tsc --noEmit
No dependencies set.
The note is not visible to the blocked user.
问题类型
安全漏洞 / 高 / 工具系统
文件位置
electron/harness/sandbox/permissions.ts问题描述
PolicyEngine 在校验工具输入时,先
JSON.stringify(input)再用正则匹配危险模式。这种方式可被多种方式绕过:
\u0029等编码绕过字符匹配{a: {b: 'dangerous'}}在 stringify 后可能与顶层字符串相似'rm ' + '-rf /'在 stringify 后是合法字符串影响
建议修复
修复说明
文件:
electron/harness/sandbox/permissions.ts修复: 新增
deepScanStrings私有方法递归提取对象所有字符串字段值。checkAuthorization中deniedPatterns/allowedPatterns改为字段级深度匹配 + 整体argsStr兜底,防止 Unicode 转义、嵌套对象、字符串拼接绕过。验证:
tsc --noEmit类型检查通过。