-
Notifications
You must be signed in to change notification settings - Fork 1.3k
代码安全审核的代码结果 #847
Description
High 级别发现
- operate eval - 任意 JavaScript 执行
- 文件: src/cli.ts:498-503
- 描述: 接受用户输入的任意 JS 并在浏览器页面上下文中执行, 无任何过滤或沙箱. 可窃取 cookies、读取敏感 DOM 内容.
- 建议: 虽然是设计功能, 但应添加 --allow-eval 安全开关并在文档中明确风险.
- Plugin 安装 - 不可信代码执行
- 文件: src/plugin.ts:570-601
- 描述: 从 GitHub 克隆插件后立即执行 npm install + 动态加载. 插件的 package.json 可包含 postinstall 脚本实现任意代码执行.
- 建议: 使用 npm install --ignore-scripts, 并显示安全警告.
Medium 级别发现
3 & 4. operate get text/value/html/attributes 及 operate type - DOM 注入
- 文件: src/cli.ts:381-402, src/cli.ts:420-429
- 描述: index 参数直接拼接进 JS 模板字符串, 无转义:
document.querySelector('[data-opencli-ref="${index}"]') - 恶意 index 如 "]') || eval(...)// 可注入执行.
- 建议: 使用 JSON.stringify() 转义 (同文件中 operate select 在 line 446 已正确使用了此方式).
- 网络拦截器 - 敏感数据捕获
- 文件: src/cli.ts:311, src/interceptor.ts
- 描述: 拦截所有 fetch/XHR 响应体 (最大 200 条, 每条 50KB), 可能包含 auth tokens、PII、会话密钥.
- 建议: 默认过滤 auth/login/token 相关端点, 添加敏感数据警告.
Low 级别发现
┌─────┬───────────────────────┬───────────────────────────────┬────────────────────────────────────────────────────────────────┐
│ # │ 问题 │ 文件 │ 说明 │
├─────┼───────────────────────┼───────────────────────────────┼────────────────────────────────────────────────────────────────┤
│ 6 │ 命令注入 (有部分防护) │ src/external.ts:100-120 │ shell 操作符正则未覆盖所有情况, 但 execFileSync 提供了额外保护 │
├─────┼───────────────────────┼───────────────────────────────┼────────────────────────────────────────────────────────────────┤
│ 7 │ CDP 端口可预测 │ src/launcher.ts:38-45 │ 固定调试端口, 本机恶意进程可抢占或连接 │
├─────┼───────────────────────┼───────────────────────────────┼────────────────────────────────────────────────────────────────┤
│ 8 │ 路径遍历 (有部分防护) │ src/download/index.ts:220-227 │ sanitizeFilename() 替换了 /\ 但未显式处理 .. 文件名 │
├─────┼───────────────────────┼───────────────────────────────┼────────────────────────────────────────────────────────────────┤
│ 9 │ Cookie 文件权限 │ src/download/index.ts:184-205 │ 导出到 tmpdir 未设置 0o600 权限 │
└─────┴───────────────────────┴───────────────────────────────┴────────────────────────────────────────────────────────────────┘