依稀记得上次我说 WAF 根本防不住 0day ,被人喷烂了,今天看到大佬复现飞牛 OS 的漏洞利用链,才证明我的看法是对的。
飞牛这次栽在哪了?
这次飞牛 OS 被人搞出来的漏洞链堪称教科书级别,整个攻击过程环环相扣:
第一步,利用路径穿越漏洞下载了系统里的一个 RSA 私钥文件。这一步 WAF 理论上能防,但实际上各种编码绕过手段多的是。
第二步,这个私钥文件里居然硬编码了 AES 密钥,这就离谱了。拿到这个密钥就相当于拿到了"万能钥匙"。
第三步才是最骚的,攻击者用这个密钥自己伪造了一个合法的 token 。问题出在系统的认证逻辑上——它在验证 WebSocket 请求时,只要你提供了 token 字段,就直接拿这个 token 去解密得到 secret ,然后用这个 secret 来验签。等于说攻击者自己生成 token 自己验证自己,系统还信了。
第四步,拿到认证之后,直接往 Docker 镜像添加接口的 url 参数里注入命令,执行任意代码,拿下 root 权限。
整个过程,除了第一步 WAF 可能还能拦一下,后面三步全是通过 WebSocket 协议走的,而且是加密的业务逻辑。WAF 在这里就是个摆设。
WAF 的尴尬之处
花了大价钱上 WAF ,结果遇到 0day 一点用都没有。
WAF 的本质是规则匹配,它只能防已知的攻击。0day 这种没见过的玩法,规则库里根本就没有,怎么拦?
更尴尬的是,现在很多应用都用 WebSocket 通信,WAF 对这种协议的深度检测能力非常有限。飞牛 OS 这次的认证绕过和命令注入都是走的 WebSocket ,WAF 连请求内容都看不清楚,更别说拦截了。
所以说,别把安全的宝全压在 WAF 上。
换个思路:让攻击者碰不到你的服务
既然边界防御不可能做到 100% 完…
依稀记得上次我说 WAF 根本防不住 0day ,被人喷烂了,今天看到大佬复现飞牛 OS 的漏洞利用链,才证明我的看法是对的。
飞牛这次栽在哪了?
这次飞牛 OS 被人搞出来的漏洞链堪称教科书级别,整个攻击过程环环相扣:
第一步,利用路径穿越漏洞下载了系统里的一个 RSA 私钥文件。这一步 WAF 理论上能防,但实际上各种编码绕过手段多的是。
第二步,这个私钥文件里居然硬编码了 AES 密钥,这就离谱了。拿到这个密钥就相当于拿到了"万能钥匙"。
第三步才是最骚的,攻击者用这个密钥自己伪造了一个合法的 token 。问题出在系统的认证逻辑上——它在验证 WebSocket 请求时,只要你提供了 token 字段,就直接拿这个 token 去解密得到 secret ,然后用这个 secret 来验签。等于说攻击者自己生成 token 自己验证自己,系统还信了。
第四步,拿到认证之后,直接往 Docker 镜像添加接口的 url 参数里注入命令,执行任意代码,拿下 root 权限。
整个过程,除了第一步 WAF 可能还能拦一下,后面三步全是通过 WebSocket 协议走的,而且是加密的业务逻辑。WAF 在这里就是个摆设。
WAF 的尴尬之处
花了大价钱上 WAF ,结果遇到 0day 一点用都没有。
WAF 的本质是规则匹配,它只能防已知的攻击。0day 这种没见过的玩法,规则库里根本就没有,怎么拦?
更尴尬的是,现在很多应用都用 WebSocket 通信,WAF 对这种协议的深度检测能力非常有限。飞牛 OS 这次的认证绕过和命令注入都是走的 WebSocket ,WAF 连请求内容都看不清楚,更别说拦截了。
所以说,别把安全的宝全压在 WAF 上。
换个思路:让攻击者碰不到你的服务
既然边界防御不可能做到 100% 完美,那就换个角度——把服务藏起来。
攻击者看不到你的服务,自然就没法攻击。这不是什么新鲜概念,VPN 就是这个思路,但 VPN 的问题是太麻烦了:
- 每个设备都要装客户端
- 断线重连是家常便饭
- 一旦 VPN 账号泄露,整个内网都暴露了
frp 这种内网穿透工具倒是方便,但它只管连通性,不管安全。你用 frp 把 SSH 端口映射出来,全世界的扫描器都能看到,然后开始爆破。
Next Terminal 的做法
我在设计 Next Terminal 的时候,想的就是怎么把"隐藏服务"和"方便访问"这两件事同时做好。
核心思路很简单:所有访问都必须先过我这道门,验证完身份再放行。
比如说你有个内网的 GitLab ,以前是直接暴露在公网上的。现在用 Next Terminal 代理之后:
- 用户访问
[gitlab\.yourdomain\.com](http://gitlab.yourdomain.com) - 请求先到 Next Terminal
- 没登录?滚蛋,GitLab 根本不知道有人来过
- 登录了但没权限?也滚蛋
- 有权限?那才把请求转发给 GitLab
这样一来,就算 GitLab 本身有漏洞(就像飞牛 OS 一样),攻击者连门都摸不到。

具体能干啥?
把服务器藏起来
Next Terminal 提供两种方式把服务器藏起来:
Agent 模式:在内网机器上跑一个 agent ,主动连接到 NT 服务器。整个过程你的服务器不需要开任何公网端口,扫描器连你的 IP 都找不到。
SSH 网关模式:利用 SSH 的端口转发能力建立隧道,服务器同样不需要暴露在公网。
保护 Web 应用
你有 Jenkins 、Grafana 、飞牛 OS 这些内部后台,想暴露出来但又不放心?
用 NT 的 Web 资产功能,配置一下就行:
App:
ReverseProxy:
Enabled: true
HttpsEnabled: true
SelfDomain: "nt.yourdomain.com"
然后在界面上添加资产,指定内网地址和对外域名。以后访问这个域名:
- 没登录 NT ?看不到
- 登录了没权限?看不到
- 有权限?无感跳转,就像直接访问一样
在线演示: https://baidu.typesafe.cn
test/test 有权限 manager/manager 无权限
临时白名单:专治移动网络 IP 变来变去
如果你有手机 APP 需要连接内网服务,肯定遇到过这个问题:移动网络的 IP 三天两头变,每次都要去后台改白名单,烦不烦?
NT 的临时白名单就是解决这个问题的。开启之后,你在手机上登录 NT ,点一下按钮,系统自动把当前 IP 加到白名单里,设定一个过期时间(比如 30 分钟)。更贴心的是,只要你持续在访问,白名单会自动续期,不用担心用着用着突然就断了。等你真正不用了,过了设定的时间才会失效。
下次 IP 变了再点一下就行,APP 随时都能连上内网服务。这不是为了安全,纯粹是为了方便。毕竟谁也不想每次 IP 变了就去改配置。
更严格的环境?还有这些招
如果你的安全要求特别高,NT 还有两个"狠招":
双向证书认证:客户端必须装证书才能访问。没证书的设备连 HTTPS 握手都过不了,直接拒绝。这招对付失窃设备或者未授权设备特别管用。
资产访问二次认证:这个最狠。就算你登录了 NT ,访问某个资产时还要再输一次 OTP (或者扫指纹)。假设你电脑被人远程控制了,或者你离开电脑忘了锁屏,攻击者拿到你的浏览器 session 也没用,因为每次访问资产都要二次验证。
这两个功能组合起来用,安全性直接拉满。
细粒度权限控制
不用再共享 root 密码了。你可以精确控制:
- 实习生只能在工作时间访问测试服务器
- 外包只能访问 Jenkins
- 临时权限到期自动失效
全在 Web 界面点几下就搞定。
操作审计
所有会话都录像,SSH 命令、RDP 桌面操作全都有。出了事能回放,看清楚谁干了什么。

Passkey 登录
支持指纹、Face ID 这些生物识别登录,天生防钓鱼。黑客做个一模一样的假网站也没用,因为根本没密码可偷。
回到飞牛这个案例
如果飞牛 OS 藏在 Next Terminal 后面会怎样?
攻击者第一步就走不通,因为:
- 路径穿越? NT 的认证在前面挡着,请求根本到不了飞牛
- 即使绕过了第一步,后续的 WebSocket 请求同样要过 NT 的认证
- 没有合法的 NT 用户凭证,整个攻击链断掉
更进一步,如果你开启了双向证书认证,攻击者连 TLS 握手都过不了。如果开了资产访问二次认证,就算内部员工的电脑被入侵了,攻击者也拿不到飞牛的访问权限。
这就是"先验证身份,再建立连接"的威力。多道防线,层层把关。
对比一下
| 方案 | 访问门槛 | 安全性 | 权限控制 | 审计能力 |
|---|---|---|---|---|
| frp | 极低(扫到就能打) | 弱 | 无 | 无 |
| VPN | 高(要装客户端) | 较强 | 粗粒度(全内网) | 无 |
| Next Terminal | 低(浏览器即用) | 强(身份前置) | 细粒度(按人按资产) | 完整录像 |
最后说两句
别指望 WAF 能防住一切。飞牛 OS 这次的教训已经很明显了:
- 路径穿越 → WAF 可能拦得住
- 认证绕过 → WebSocket 协议,WAF 无能为力
- 命令注入 → 加密业务逻辑,WAF 看不懂
安全这事儿得多层防御。WAF 守边界,NT 守入口,两道防线总比一道强。
感兴趣的话可以试试: https://typesafe.cn
本文提到的飞牛 OS 漏洞信息来自互联网公开论坛,仅用于安全研究和防御目的。