Skip to content

security: 修复多个 P0 级安全漏洞#23

Merged
wutongci merged 17 commits intolimecloud:mainfrom
tytsxai:main
Dec 22, 2025
Merged

security: 修复多个 P0 级安全漏洞#23
wutongci merged 17 commits intolimecloud:mainfrom
tytsxai:main

Conversation

@tytsxai
Copy link
Copy Markdown

@tytsxai tytsxai commented Dec 21, 2025

概述

本 PR 包含多项功能增强和安全修复,主要集中在 Codex 支持、系统安全和运维能力方面。

主要改进

1. Codex 功能增强 ⭐ 最新更新

  • 支持 Yunyi 等代理的 API Key 认证

    • 兼容多种字段名:api_key, apiKey, OPENAI_API_KEY
    • 健康检查根据 base_url 自动选择正确的 API 格式(responses API vs chat/completions)
    • 正确处理代理服务的错误响应(如 Yunyi 的冷却期错误)
  • 支持 API Key 和 Access Token 双模式认证

    • 兼容 Codex CLI 的 API Key 登录方式
    • 保持 OAuth 流程的完整支持

2. 安全修复

  • 🔒 修复多个 P0/P1/P2 级安全漏洞
    • 限制 TLS 与远程管理开关
    • 完善服务启动与管理安全
    • 更新前端端口与安全提示

3. 运维能力增强

  • 📦 添加备份与健康检查能力
    • 支持配置和凭证的备份/恢复
    • 增强健康检查机制,自动刷新 Token

4. 配置管理改进

  • ⚙️ 兼容 YAML/JSON 保存与状态识别
    • 更新默认端口与运维说明
    • 完善文档和接口说明

5. CI/CD 改进

  • 🔧 补齐前后端检查并更新发布说明

技术细节

修改的核心文件

  • src-tauri/src/providers/codex.rs: 添加 OPENAI_API_KEY 别名支持
  • src-tauri/src/services/provider_pool_service.rs: 根据 base_url 选择正确的 API 格式

测试验证

  • ✅ 通过 curl 验证 Yunyi API 端点正确性
  • ✅ 确认错误处理逻辑正确(500 错误被正确捕获并转换为用户友好提示)
  • ✅ 前后端检查通过(TypeScript、ESLint、Prettier、Rust format、Rust build)

兼容性说明

⚠️ 注意:本 PR 基于 v0.14.6 开发,而上游已发布 v0.15.1(包含 server.rs 大规模模块化重构)。建议上游维护者:

  1. 评估这些功能是否需要合并
  2. 如需合并,可能需要手动解决 server.rs 的冲突
  3. 或者选择性地 cherry-pick 部分提交(如最新的 Codex 增强部分:commit 4b34a8f

提交列表(共 13 个提交)

4b34a8f feat(codex): 支持 Yunyi 等代理的 API Key 认证和 responses API ⭐ 最新
fe542cc security: 修复多个 P0/P1/P2 级安全漏洞
093965b security: 修复多个 P0 级安全漏洞
424092e fix(codex): 支持 API Key 和 Access Token 认证模式
98dcfd2 docs: 更新运维与接口说明
baa7248 feat: 添加备份与健康检查能力
502096a 文档: 更新默认端口与运维说明
3411f92 设置: 限制 TLS 与远程管理开关
1295f48 配置: 兼容 YAML/JSON 保存与状态识别
484e349 ci: 补齐前后端检查并更新发布说明
f5406f7 更新前端端口与安全提示
770631b Codex 支持 API Key 凭证
6802dc5 完善服务启动与管理安全

相关 Issue


🤖 Generated with Claude Code

jiesen and others added 17 commits December 20, 2025 21:04
## 问题描述
Codex provider 当前强制要求 refresh_token,导致用户无法使用 API Key 模式。

## 解决方案
在 refresh_token() 方法中添加 access_token 降级处理逻辑,支持三种认证模式:

1. **API Key 模式**(优先级最高)
   - 凭证:api_key + 可选 api_base_url
   - 行为:直接使用,无需刷新

2. **OAuth 模式**(标准流程)
   - 凭证:refresh_token + access_token
   - 行为:自动刷新,完全向后兼容

3. **Access Token 模式**(新增支持)
   - 凭证:仅 access_token
   - 行为:返回现有 token,无法自动刷新

## 主要变更
- 修改 refresh_token() 方法,添加 access_token 降级处理(16 行核心逻辑)
- 添加完整的文档注释,说明三种认证模式及示例(24 行)
- 添加 4 个单元测试,覆盖所有认证场景(58 行)
- 改进错误消息,提供清晰的配置指导

## 测试结果
- ✅ 所有测试通过(24/24)
- ✅ 编译通过(0 错误)
- ✅ 向后兼容(现有 OAuth 流程不受影响)
- ✅ 测试覆盖率 ≥85%

## 向后兼容性
完全向后兼容,所有现有功能不受影响。唯一的行为变更是功能增强:
- 之前:只有 access_token(无 refresh_token)→ 报错
- 之后:只有 access_token → 返回 token(带警告)

Fixes #20

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- kiro: 移除目录遍历合并凭证逻辑,防止串凭证/串账号
- kiro: 日志脱敏,不再打印 token 内容
- kiro: 调试文件写入需 PROXYCAST_DEBUG=1 环境变量
- codex: expires_at 字段序列化输出修正
- qwen: 时间比较显式转换为 Utc,无过期时间时采用保守策略
- middleware: 移除 X-Forwarded-For 信任,防止限速绕过
- middleware: failure_map 添加容量限制和 TTL,防止内存 DoS
- injection: 添加参数白名单和黑名单,防止安全约束绕过
- router: 未注册 selector 返回 None,防止越权访问
- frontend: 使用 WebCrypto API 替代 Math.random() 生成密钥

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
P0 级修复:
- lib.rs: save_config 禁止 0.0.0.0/:: 绑定和远程管理
- lib.rs: get_env_variables 不再返回明文 token
- oauth_cmd.rs: refresh_oauth_token 不返回明文 token
- route_cmd.rs: curl 示例使用占位符替代真实 API Key
- provider_pool_cmd.rs: 调试命令仅在 debug 构建可用
- mcp_sync.rs: TOML 注入防护(键名校验+字符串转义)

P1 级修复:
- server.rs: /v1/routes 端点添加 API Key 认证
- server.rs: 请求体限制从 100MB 降至 20MB
- websocket/handler.rs: WebSocket 消息大小限制 10MB
- backup_service.rs: 恢复路径白名单校验
- converter/openai_to_cw.rs: UTF-8 安全截断

P2 级修复:
- logger.rs: 扩展日志脱敏规则覆盖更多敏感字段

测试修复:
- middleware/tests.rs: 使用 ConnectInfo 替代 X-Forwarded-For
- proxy/tests.rs: 修复主机名正则确保以字母开头
- provider_router.rs: 测试前注册 selector

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## 主要改进

### 1. 增强 API Key 字段兼容性
- 支持多种字段名:api_key, apiKey, OPENAI_API_KEY
- 兼容 Codex CLI 和 Yunyi 等代理的凭证格式

### 2. 修复健康检查逻辑
- 自定义 base_url 时使用 Codex responses API 格式
- 官方 OpenAI 时使用 chat/completions API
- 正确处理 Yunyi 等代理的 500 错误响应

### 3. 改进错误提示
- 提供更友好的配置错误提示信息

## 技术细节
- codex.rs: 添加 OPENAI_API_KEY 别名支持
- provider_pool_service.rs: 根据 base_url 选择正确的 API 格式

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- 解决 server 模块重构冲突(删除旧 server.rs,保留 server/ 目录结构)
- 解决 kiro.rs 设备指纹逻辑冲突(合并日志记录 + 凭证唯一 ID)
- 解决 CodexCredentials 字段缺失问题
- 解决 README.md 和 Cargo.lock 冲突
- 添加第三方 API Key 警告日志(UX 改进)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@wutongci wutongci merged commit 43c33bf into limecloud:main Dec 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants