[P0/严重] preload.ts contextBridge 失败时降级到 globalThis 赋值削弱渲染进程隔离 #7

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

问题类型

安全漏洞 / 严重 / IPC 通信

文件位置

electron/preload.ts

问题描述

preload.ts 在 try/catch 中调用 contextBridge.exposeInMainWorld(),失败时降级到 globalThis.metonaAPI = ... 直接赋值。
这削弱了 Electron 的 context isolation 安全边界:

  1. 页面恶意脚本可通过原型链访问 Node API
  2. contextBridge 的对象克隆/函数白名单机制失效
  3. 渲染进程可篡改 API 实现

影响

  • 恶意网页(如 WebFetch 加载的内容)可访问受限 API
  • 违反 Electron 安全最佳实践

建议修复

  1. 不要降级:contextBridge 失败应直接 throw,让应用崩溃并暴露问题
  2. 或者在开发环境降级,生产环境强制失败
try {
  contextBridge.exposeInMainWorld('metonaAPI', api);
} catch (err) {
  log.error('contextBridge failed:', err);
  // 生产环境:抛出错误,阻止应用以不安全状态启动
  if (app.isPackaged) throw err;
  // 开发环境:仅警告
  log.warn('Falling back to globalThis in dev mode');
  globalThis.metonaAPI = api;
}
## 问题类型 安全漏洞 / 严重 / IPC 通信 ## 文件位置 `electron/preload.ts` ## 问题描述 preload.ts 在 try/catch 中调用 `contextBridge.exposeInMainWorld()`,失败时降级到 `globalThis.metonaAPI = ...` 直接赋值。 这削弱了 Electron 的 context isolation 安全边界: 1. 页面恶意脚本可通过原型链访问 Node API 2. contextBridge 的对象克隆/函数白名单机制失效 3. 渲染进程可篡改 API 实现 ## 影响 - 恶意网页(如 WebFetch 加载的内容)可访问受限 API - 违反 Electron 安全最佳实践 ## 建议修复 1. **不要降级**:contextBridge 失败应直接 throw,让应用崩溃并暴露问题 2. 或者在开发环境降级,生产环境强制失败 ```ts try { contextBridge.exposeInMainWorld('metonaAPI', api); } catch (err) { log.error('contextBridge failed:', err); // 生产环境:抛出错误,阻止应用以不安全状态启动 if (app.isPackaged) throw err; // 开发环境:仅警告 log.warn('Falling back to globalThis in dev mode'); globalThis.metonaAPI = api; } ```
thzxx added the IPC?????????? labels 2026-07-21 21:55:38 +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#7