安全政策(Security Policy)
狐径 FoxPath —— 作者:海风(kele551) · https://github.com/kele551/FoxPath
支持范围
只对最新发布版本提供安全修复。请先确认版本(控制面板标题上就有,或右键 exe → 属性 → 详细信息)。
| 版本 | 是否支持安全修复 |
|---|---|
| 最新发布版(当前 v1.2.3) | ✅ |
| 更早的版本 | ❌ 请先升级 |
| 自己改过源码再打包的 | ❌ 请先在未修改的最新版上复现 |
怎么私下报告漏洞
请不要开公开 Issue。 这个项目有以下两条私下渠道:
- GitHub 私密漏洞报告(推荐):仓库页面 → Security 标签页 → Report a vulnerability。 这是 GitHub 提供的私密通道,只有维护者能看到,报告与讨论都留档在仓库里,不会公开。 (维护者当前正在仓库设置里开启这一功能;如果那个按钮还看不到,请走第 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 而你不希望公开,把它打码即可。