[P0/严重] RunCommandTool env 透传 process.env,子进程可读取所有 API keys #9

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

问题类型

安全漏洞 / 严重 / 工具系统

文件位置

electron/harness/tools/built-in/command.ts

问题描述

RunCommandTool 创建子进程时使用 spawn(cmd, args, { env: process.env }),将主进程的所有环境变量透传给子进程。
主进程中包含:

  • DEEPSEEK_API_KEY
  • AGNES_API_KEY
  • MIMO_API_KEY
  • GITEA_PASSWORD(如本会话曾设置)
  • 其他敏感 token

LLM 可通过 envecho $DEEPSEEK_API_KEY 命令读取这些密钥,然后通过 WebFetch 等工具外传。

影响

  • API 密钥泄露
  • 账户接管

建议修复

  1. 白名单 env:仅传递必要变量
const SAFE_ENV_VARS = ['PATH', 'HOME', 'USERPROFILE', 'SystemRoot', 'TEMP', 'TMP'];
const safeEnv = Object.fromEntries(
  Object.entries(process.env)
    .filter(([key]) => SAFE_ENV_VARS.includes(key))
);
spawn(cmd, args, { env: safeEnv });
  1. 过滤敏感 key:删除任何包含 KEY TOKEN SECRET PASSWORD 的变量
  2. 审计日志:记录每次 env 透传的 key 列表
## 问题类型 安全漏洞 / 严重 / 工具系统 ## 文件位置 `electron/harness/tools/built-in/command.ts` ## 问题描述 RunCommandTool 创建子进程时使用 `spawn(cmd, args, { env: process.env })`,将主进程的所有环境变量透传给子进程。 主进程中包含: - `DEEPSEEK_API_KEY` - `AGNES_API_KEY` - `MIMO_API_KEY` - `GITEA_PASSWORD`(如本会话曾设置) - 其他敏感 token LLM 可通过 `env` 或 `echo $DEEPSEEK_API_KEY` 命令读取这些密钥,然后通过 WebFetch 等工具外传。 ## 影响 - API 密钥泄露 - 账户接管 ## 建议修复 1. **白名单 env**:仅传递必要变量 ```ts const SAFE_ENV_VARS = ['PATH', 'HOME', 'USERPROFILE', 'SystemRoot', 'TEMP', 'TMP']; const safeEnv = Object.fromEntries( Object.entries(process.env) .filter(([key]) => SAFE_ENV_VARS.includes(key)) ); spawn(cmd, args, { env: safeEnv }); ``` 2. **过滤敏感 key**:删除任何包含 `KEY` `TOKEN` `SECRET` `PASSWORD` 的变量 3. **审计日志**:记录每次 env 透传的 key 列表
thzxx added the ???????????? labels 2026-07-21 21:55:40 +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#9