Skip to content

Security: xiaoxin2016/wvpn

Security

docs/security.md

安全须知(部署前请读完)

← 回到 README

这是一个功能完整但刻意保持简单的实现,以下取舍是显式的,不是遗漏:

会话默认 1 小时未使用即失效,打开着的页面自动续期;来源 IP 默认不向目标站点透传。 两者都在后台「会话与来源 IP」里调,见配置。

  1. 网关本身就是一台开放代理。务必保留登录(不要用 -no-auth), 并用 -allow 把可达目标收敛到确实需要的网段/域名。
  2. -allow-private 会让网关成为进入内网的跳板。开启前先确认 -allow 已配置, 否则任何登录用户都能拿它扫内网。链路本地(含云元数据 169.254.169.254 / fe80::/10) 与组播地址无论是否开启该开关都始终拒绝。
  3. 响应中的 CSP、X-Frame-Options、HSTS 等安全响应头会被剥离。这是所有 WebVPN 类产品的 共同代价:不剥离,改写后的页面就无法从网关域加载自身资源。后果是被代理站点失去这些浏览器侧防护, 且在 plain / wrd 模式下所有目标共享同一个浏览器 Origin —— 一个被代理站点的 XSS 可以读取同域下其它被代理站点的页面内容。需要强隔离时请使用 subdomain 模式。
  4. Cookie 隔离靠路径(plain / wrd 模式)。因此 Domain=.example.com 这类跨子域共享的 Cookie 会退化为按主机隔离;subdomain 模式没有这个问题。
  5. CSRF 边界被弱化:Origin / Referer 会被改写成目标站点自身的值,被代理站点的同源 校验因此对网关“看起来是同源的”。
  6. wrd 模式的默认密钥是公开值(wrdvpnisthebest!,来自社区逆向资料),只是混淆不是保密; 要让 URL 只有本网关能解,请用 -url-key 换成自有密钥。
  7. -ignore-email 会把验证码打到控制台,等于把登录凭据写进日志,仅限本地开发。
  8. SMTP 密码明文存放在配置文件中(0600,与允许登录的账号清单同一个文件)。 这个文件泄露等于同时泄露发信凭据与访问策略,请按凭据文件对待:限制宿主机访问、纳入备份加密。
  9. 初始化令牌会出现在启动日志里。如果日志被集中采集,令牌也会跟着进日志系统; 它在管理员首次登录后即失效,但在此之前等同于"可以配置这台网关"。
  10. 自签名证书的信任是网关级的,任一登录用户确认后对所有人生效(见上一节)。
  11. “允许明文认证”会把 SMTP 账号密码以明文送上网络。仅在可信内网段内使用, 并给网关配专用发信账号。
  12. TLS 私钥与 SMTP 密码一样明文存放在 0600 配置文件中。若你的部署已有 ACME 自动续期, 用 -tls-cert / -tls-key 指向文件更合适,证书材料就不进配置文件。
  13. 服务端 Cookie 罐保存的是各业务系统的会话凭据,进程内存中,按登录会话隔离。 网关进程的内存转储等同于泄露这些系统的在线会话——与它本来就能看到全部明文流量是同一量级的信任假设。

它不能替代真正的 VPN:只处理 HTTP 语义的流量,不承载任意 TCP/UDP; 对强依赖自身域名、使用 Service Worker、WebAssembly 里硬编码地址或做 TLS pinning 的站点会失效。

There aren't any published security advisories