V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dushixiang
6.64D
V2EX  ›  Next Terminal

当飞牛遇到 0 day, WAF 算个屁

  •  
  •   dushixiang ·
    dushixiang · 4 小时 42 分钟前 · 755 次点击

    依稀记得上次我说 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 代理之后:

    1. 用户访问 gitlab.yourdomain.com
    2. 请求先到 Next Terminal
    3. 没登录?滚蛋,GitLab 根本不知道有人来过
    4. 登录了但没权限?也滚蛋
    5. 有权限?那才把请求转发给 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 后面会怎样?

    攻击者第一步就走不通,因为:

    1. 路径穿越? NT 的认证在前面挡着,请求根本到不了飞牛
    2. 即使绕过了第一步,后续的 WebSocket 请求同样要过 NT 的认证
    3. 没有合法的 NT 用户凭证,整个攻击链断掉

    更进一步,如果你开启了双向证书认证,攻击者连 TLS 握手都过不了。如果开了资产访问二次认证,就算内部员工的电脑被入侵了,攻击者也拿不到飞牛的访问权限。

    这就是"先验证身份,再建立连接"的威力。多道防线,层层把关。

    对比一下

    方案 访问门槛 安全性 权限控制 审计能力
    frp 极低(扫到就能打)
    VPN 高(要装客户端) 较强 粗粒度(全内网)
    Next Terminal 低(浏览器即用) 强(身份前置) 细粒度(按人按资产) 完整录像

    最后说两句

    别指望 WAF 能防住一切。飞牛 OS 这次的教训已经很明显了:

    • 路径穿越 → WAF 可能拦得住
    • 认证绕过 → WebSocket 协议,WAF 无能为力
    • 命令注入 → 加密业务逻辑,WAF 看不懂

    安全这事儿得多层防御。WAF 守边界,NT 守入口,两道防线总比一道强。

    感兴趣的话可以试试: https://typesafe.cn


    本文提到的飞牛 OS 漏洞信息来自互联网公开论坛,仅用于安全研究和防御目的。

    第 1 条附言  ·  2 小时 19 分钟前

    可以加微信群了解更多内容

    Image

    20 条回复    2026-02-03 23:12:51 +08:00
    wanguorui123
        1
    wanguorui123  
       4 小时 20 分钟前
    你如何证明 Next Terminal 就没有漏洞?
    mercury233
        2
    mercury233  
       3 小时 54 分钟前
    讲道理,../../ 这种路径穿越在第一步应该能被 waf 防
    aminobody
        3
    aminobody  
       3 小时 39 分钟前
    会比前面用 ngxin/caddy 套个 http basic auth 更方便吗?
    dushixiang
        4
    dushixiang  
    OP
       3 小时 33 分钟前 via iPhone
    @wanguorui123 谁主张谁举证
    dushixiang
        5
    dushixiang  
    OP
       3 小时 32 分钟前 via iPhone
    @mercury233 ws 的防不住
    dushixiang
        6
    dushixiang  
    OP
       3 小时 31 分钟前 via iPhone
    swiftg
        7
    swiftg  
       3 小时 9 分钟前 via iPhone   ❤️ 1
    我的思路和你一样,不过我是自己写的脚本实现。通过 cf tunnel 在本地防火墙上运行一个监听程序,只接受来自 cf worker 的带认证的 ip 白名单请求。本地不对外暴露任何端口,防火墙默认所有 ip 所有端口的入站请求全都 drop 掉。在外面需要连回去的时候先向 cf worker 上布署的一个中转服务发送请求,worker 脚本再通过 cf tunnel 隧道向本地防火墙发送白名单 ip ,然后加入到临时白名单里允许某些端口入站,10 分钟内有效。

    手机上配合快捷指令,打开某个应用,比如群晖 Photos ,后台自动访问 cf worker 接口将手机的 ip 加入到临时白名单。基本无感使用,不影响体验

    强如群晖,去年也爆出了一个严重的 0day 漏洞,不建议暴露任何端口到公网,不用说肥牛
    psllll
        8
    psllll  
       2 小时 58 分钟前
    在前面加这么多东西,这 APP 还能连上吗
    dushixiang
        9
    dushixiang  
    OP
       2 小时 53 分钟前 via iPhone
    @swiftg 英雄所见略同,我就是把你这套做成自动化的系统了
    dushixiang
        10
    dushixiang  
    OP
       2 小时 51 分钟前 via iPhone
    @psllll 互联网流量绕了一圈又一圈,过了 N 层防火墙,最后还是让我把帖子发到了 V2 上
    wonderfulcxm
        11
    wonderfulcxm  
       2 小时 48 分钟前 via iPhone   ❤️ 1
    frp 可以用 STCP ,两边都跑一个 frpc ,远程桌面就可以这样实现安全连接。
    dushixiang
        12
    dushixiang  
    OP
       2 小时 28 分钟前
    @wonderfulcxm 挺好,但不是一个完整方案
    Admstor
        13
    Admstor  
       2 小时 4 分钟前
    哈哈哈哈哈哈,飞牛这个漏洞,一下子让一些做安全的打起广告了

    可是你这个东西有个非常严重的致命问题

    VPN 之所以安全,就是因为这个工作在 L2-L3 的协议,越是底层协议,意味通常来说业务复杂度低,业务复杂度低,安全漏洞就更少
    特别是 VPN 作为行业广泛使用,本身协议漏洞几乎不存在,软件实现也经过多年稳定可靠,几乎也只剩下暴力破解一条,这一点也很容易化解


    你这个完全就又是一个 web 应用,本质上和飞牛没区别,你更加安全的自信是哪里来的呢
    100 把锁,串联在一起,随便一个断了,整个锁链都废了
    dushixiang
        14
    dushixiang  
    OP
       1 小时 46 分钟前
    @Admstor 首先你对安全的理解非常浅,但凡关注一些新闻你也会看到 C/C++ 是内存溢出漏洞的重灾区,所以才会有 Rust 的兴起。

    并且现在行业的趋势都是去 VPN 化,拥抱零信任架构,采用更加细粒度的应用层访问鉴权。

    就算我系统有漏洞,进入到后台,你无非控制到了一个点,更何况进入后台你的操作我也会要求二次认证,访问资产都不行,你 VPN 一个点沦陷,内网横向有漏洞的、弱密码的的全部拿下。

    web 应用不等于不安全,否则互联网应该关闭。
    plko345
        15
    plko345  
       1 小时 11 分钟前 via Android
    个人的,如果全用上 mtls 这种怎样,麻烦是麻烦点,再根据情况临时把当前 ip 加到安全组白名单里
    GeruzoniAnsasu
        16
    GeruzoniAnsasu  
       1 小时 7 分钟前   ❤️ 1
    懒得辩。

    「 waf 防不了 0day 」
    =
    「降落伞防不了摔死」

    3 真 7 假说得煞有介事的
    dushixiang
        17
    dushixiang  
    OP
       1 小时 3 分钟前
    @plko345 用了 mtls 可以说非常安全了。
    lolo1
        18
    lolo1  
       55 分钟前
    推广就推广,没必要拉踩,
    nt 刚出来的时候就用过了,的确非常好用,是否考虑吧你的远程的这套和资产管理这套分开
    dushixiang
        19
    dushixiang  
    OP
       44 分钟前
    @lolo1 哥,没拉踩具体的产品,只是说 WAF 不是万能的,很多 0day 防不住这也是事实。暂时没有拆分的打算
    povsister
        20
    povsister  
       10 分钟前 via iPhone
    以为是辩经结果是披着拉踩皮的推广,燕国地图还是太长了点
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2159 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:23 · PVG 23:23 · LAX 07:23 · JFK 10:23
    ♥ Do have faith in what you're doing.