安全政策(Security Policy)

狐径 FoxPath —— 作者:海风(kele551) · https://github.com/kele551/FoxPath

支持范围

只对最新发布版本提供安全修复。请先确认版本(控制面板标题上就有,或右键 exe → 属性 → 详细信息)。

版本 是否支持安全修复
最新发布版(当前 v1.2.3) ✅
更早的版本 ❌ 请先升级
自己改过源码再打包的 ❌ 请先在未修改的最新版上复现

怎么私下报告漏洞

请不要开公开 Issue。 这个项目有以下两条私下渠道:

  1. GitHub 私密漏洞报告(推荐):仓库页面 → Security 标签页 → Report a vulnerability。 这是 GitHub 提供的私密通道,只有维护者能看到,报告与讨论都留档在仓库里,不会公开。 (维护者当前正在仓库设置里开启这一功能;如果那个按钮还看不到,请走第 2 条,并在报告里说明。)
  2. 仓库 Issues 里先说一句,但别写细节:开一条 Issue,标题写「安全相关问题,请私下联系我」, 正文不要写任何漏洞细节、复现步骤或影响范围,只留一个你可以被联系到的方式。 维护者会尽快建立私密渠道,再请你把细节发过来。

无论走哪条,都欢迎先附上:程序版本号、Windows 版本、以及"哪一类问题"(例如:注册表还原、升级链路完整性、面板接口)。

响应时限

阶段 承诺
确认收到报告 3 天内
初步判断(是不是真问题、严重度) 7 天内
修复版本 视严重度:能导致系统网络异常、代理设置无法还原、或代码执行的,优先修;其余攒进下一个功能版

修好之后,如果你愿意,会在发布说明里致谢(也可以要求匿名)。

这个项目的威胁模型(先说清哪些算、哪些不算)

这个程序会修改系统代理设置(HKCU\...\Internet Settings),并在 127.0.0.1 的 8787(被别的程序占着时自动顺延到备选端口)/8788 上开本机端口,所以下面这些算漏洞,欢迎报告:

  • 还原不干净或还原成别人的设置:退出 / --restore 之后系统代理没有还原成运行前的样子; 连点两次「启用加速」导致还原备份被自己覆盖(这个坑 v1.0.0 出过、v1.0.1 修过一半,属重点关注项)
  • 升级链路完整性:升级源 version.json 缺少或写错 sha256 时程序仍会安装未经校验的 exe; 或者签名校验被跳过(version.json.sig 缺失 / 格式不对 / 用内置公钥验不过却仍然采用)—— 升级源必须 Ed25519 公钥验签 + sha256 + 字节数 全过才采用,验不过一律拒绝并保留旧版本
  • 面板接口越权:任意网页可以借本机浏览器触发面板的 GET/POST 接口(CSRF / DNS rebinding), 或从 /api/diag、/api/status、/pac 读到不该外泄的本机信息
  • 代理被滥用:本机代理端口(8787 或顺延后的端口)被非本程序发起的连接当成通用转发(CONNECT 任意目标)
  • git 配置被改坏:接管后 ~/.gitconfig 里 credential / 别名等其它段落被改动,或退出后仍有指向狐径端口的 http.<url>.proxy 残留、原本别人设的代理被覆盖(2026-10-30 起 git 接管纳入威胁模型)
  • 写入 %LOCALAPPDATA%\FoxPath\ 的文件可被执行(升级小助手脚本等)
  • 「卸载/退出」之后仍留下会自行运行或改设置的东西(计划任务、自启动项、残留 PAC)

不算漏洞(属于已知边界,README 里已写明):

  • 早期版本自带的 Fix-GitHub.ps1 会改 hosts、需要管理员权限(上一代做法的历史脚本)。 该脚本已于 2026-10-16 从仓库移除,以符合「不改 hosts、不改系统 DNS、不需要管理员权限」的承诺; 以前跑过它的用户请按 使用说明.txt 第 8 节收尾。当前仓库里的主程序不碰 hosts。
  • 程序会写注册表:这是它的工作原理(在本机代理与 PAC 上做流量分流),不是漏洞。 但它只写 HKCU 下自己相关的值,不需要管理员权限。
  • 杀软报毒 / 首次升级后被杀软拦一下。程序没有代码签名,属于可预期现象 —— 请以发行页上的 SHA256 自行核对来源。详见 CODE_SIGNING_POLICY.md。
  • 升级源的 Ed25519 签名能防什么、不能防什么(别把它当万灵药): 能防升级源被篡改 —— GitCode / GitHub 账号被盗、仓库被人推了恶意 version.json + 恶意 exe 时, 没有私钥就签不出合法签名,客户端会直接拒绝(验签不过一律拒绝,保留当前版本), 这是 sha256 做不到的(sha256 与它校验的文件放在同一个升级源里,源被整体替换时指纹会跟着一起改)。 不能防:维护者机器上的私钥本身被偷(有了私钥就能签出合法签名); 也不等于 Windows 代码签名证书 —— 有这个签名,SmartScreen / 杀软的提示该出现还是会出现。
  • 「出口 IP」在控制面板上可见:那是你自己的出口信息,面板只监听 127.0.0.1,不对局域网开放。
  • 某些域名不代理(githubassets.com / api.github.com):这是设计如此。 (avatars. / camo.githubusercontent.com 自 2026-10-11 起也走代理:与 raw/objects 同段 185.199.108.0/22、同一张 *.githubusercontent.com 证书,共用 raw 池。)
  • 不能用 nohup ... & 后台常驻:这是 Windows 上 shell 的行为,不是缺陷。

升级源签名(Ed25519):防什么、不防什么

从 v1.1.1 之后的版本起,升级源 version.json 必须带一份同目录的 version.json.sig (64 字节签名的十六进制,128 个字符),客户端用内置公钥验签。判定规则:

情形 客户端的动作
签名验过 + sha256 与字节数都对 采用这条升级源(唯一放行路径)
签名为空 / 缺失(取不到 .sig) 拒绝这条候选,换下一个升级源
签名不是 128 个十六进制字符 拒绝(格式不对一律拒绝,不"猜")
验签不通过(内容被改过 / 不是这把钥匙签的) 拒绝,继续试下一个候选;全都不行就保留当前版本并提示「更新源校验未通过,已保留当前版本」
客户端里的验签模块缺失 拒绝(fail-closed:宁可不让升级,也不放行没验签的更新)

能防:升级源被篡改 —— 比如 GitCode / GitHub 账号被盗、仓库里被推进一份恶意 version.json + 恶意 exe。没有私钥签不出合法签名,客户端不装。 (这正是只比 sha256 挡不住的:sha256 与被校验的文件同处一个升级源,源被整体替换时它跟着一起改。)

不能防:维护者机器上的私钥本身被偷(拿到私钥就能签出合法签名); 也不能替代 Windows 代码签名证书 —— 本程序仍未购买代码签名,SmartScreen / 杀软的提示照旧。

私钥怎么管的:私钥只在维护者机器上(64 个十六进制字符 = 32 字节种子), 绝不入库、不进发行包、不写进任何配置文件的明文字段;只有发版签名那一刻读一次。 公钥内置在 github_direct.py(UPDATE_PUBKEY),公开无妨 —— 它本来就要随程序分发。 发版脚本找不到私钥时拒绝发布,不会静默发一份没有签名的升级源出去。

报告里请不要包含

不要发送你的账号凭据或个人数据。日志(%LOCALAPPDATA%\FoxPath\foxpath.log)里没有隐私信息,可以直接贴; 如果里面有你的出口 IP 而你不希望公开,把它打码即可。