[P1/高] PolicyEngine JSON.stringify 后正则匹配易被绕过 #14

Open
opened 2026-07-21 21:55:44 +08:00 by thzxx · 0 comments
Owner

问题类型

安全漏洞 / 高 / 工具系统

文件位置

electron/harness/sandbox/permissions.ts

问题描述

PolicyEngine 在校验工具输入时,先 JSON.stringify(input) 再用正则匹配危险模式。
这种方式可被多种方式绕过:

  1. Unicode 转义\u0029 等编码绕过字符匹配
  2. 嵌套对象{a: {b: 'dangerous'}} 在 stringify 后可能与顶层字符串相似
  3. 字符串拼接'rm ' + '-rf /' 在 stringify 后是合法字符串
  4. 正则注入:输入中包含正则元字符可破坏匹配逻辑

影响

  • 危险工具调用绕过权限校验
  • 命令注入风险

建议修复

  1. 结构化校验:直接遍历对象,递归检查每个字段值
  2. 基于 schema 校验:使用 JSON Schema 或 zod 验证输入
  3. 字段级正则:对每个字段单独匹配,而非整体 stringify
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` ## 问题描述 PolicyEngine 在校验工具输入时,先 `JSON.stringify(input)` 再用正则匹配危险模式。 这种方式可被多种方式绕过: 1. **Unicode 转义**:`\u0029` 等编码绕过字符匹配 2. **嵌套对象**:`{a: {b: 'dangerous'}}` 在 stringify 后可能与顶层字符串相似 3. **字符串拼接**:`'rm ' + '-rf /'` 在 stringify 后是合法字符串 4. **正则注入**:输入中包含正则元字符可破坏匹配逻辑 ## 影响 - 危险工具调用绕过权限校验 - 命令注入风险 ## 建议修复 1. **结构化校验**:直接遍历对象,递归检查每个字段值 2. **基于 schema 校验**:使用 JSON Schema 或 zod 验证输入 3. **字段级正则**:对每个字段单独匹配,而非整体 stringify ```ts 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; } ```
thzxx added the ??????????? labels 2026-07-21 21:55:44 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MetonaTeam/metona-ai-desktop#14