V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
qianlongzt
V2EX  ›  NAS

飞牛登录 token 生成逻辑安全问题,并且尽快更新 rsa private key

  •  
  •   qianlongzt · 1 天前 · 1869 次点击

    根据已有公开信息,可以通过/usr/trim/etc/rsa_private_key.pem 来生成 token 。 token 应该在内存中,不落盘,或者做好权限管理。从而减少文件泄露导致的风险。

    应该改为安全的随机数来生成, 比如 golang https://pkg.go.dev/crypto/[email protected] , 或者是 /dev/urandom ,不要用成 math/rand 或者是 /dev/random

    对应用应该加强管控,尽可能的不适用 root 运行程序,同时使用比如 SELinux AppArmor 限制文件读取访问,

    需要 尽快更新现有的/usr/trim/etc/rsa_private_key.pem 文件,避免历史有人保存数据,从而再次入侵,参考如下

    #!/bin/bash
    
    # 备份老的 rsa 密钥对
    FN_RSA_BACKUP_DIR=/usr/trim/etc/backup/fn-rsa-$(date +"%Y-%m-%dT%H-%M-%S%z")
    mkdir -p "$FN_RSA_BACKUP_DIR"
    mv /usr/trim/etc/rsa_private_key.pem /usr/trim/etc/rsa_public_key.pem "$FN_RSA_BACKUP_DIR"
    
    # 重新生成 rsa 密钥对
    openssl genrsa -out /usr/trim/etc/rsa_private_key.pem 2048
    openssl rsa -in /usr/trim/etc/rsa_private_key.pem -pubout -out /usr/trim/etc/rsa_public_key.pem
    
    
    # 查看已经备份 且 生成 rsa 密钥对
    ls -lah "$FN_RSA_BACKUP_DIR"
    ls -lah /usr/trim/etc/rsa_*.pem
    
    第 1 条附言  ·  1 天前

    补充来自飞牛论坛的回复

    补充几点建议:

    1. 私钥文件权限设置为600(只有所有者可读写):

      chmod 600 /usr/trim/etc/rsa_private_key.pem
      chown root:root /usr/trim/etc/rsa_private_key.pem
      
    2. 考虑使用JWT替代自定义token,JWT有成熟的标准实现,支持过期时间、刷新机制

    3. 添加token过期机制(比如24小时过期),减少token泄露的风险

    4. 记录token生成和验证的审计日志,便于安全审计和问题排查

    5. 定期轮换密钥(比如每3个月),可以设置自动化脚本

    6. 私钥应该只在内存中使用,或者考虑使用硬件安全模块(HSM)存储

    重新生成密钥后,所有旧的token都会失效,用户需要重新登录,建议提前通知用户。

    15 条回复    2026-02-06 11:03:51 +08:00
    5200721
        1
    5200721  
       1 天前
    这次事件之后应该没人敢在公网裸奔了吧,我是套了 Tunnel+zero trust 了
    tiiis
        2
    tiiis  
       1 天前
    还好之前没开过那个外网,一直 tailscale
    adminpro
        3
    adminpro  
       1 天前
    waf 规则里面直接把/usr /trim /etc 屏蔽掉
    m1nm13
        4
    m1nm13  
       1 天前
    我猜大概率是飞牛的傻逼产品经理可能有要求过什么,通过飞牛 connect 登录之后就不需要再登录,所以说为了实现这个功能就必须云端/固件端能互相验证对方的密钥. 这样才能做到只登录一次.因为飞牛 Connect 大概率就只是一个类似 FRP 的反向代理的东西而已。
    qianlongzt
        5
    qianlongzt  
    OP
       1 天前   ❤️ 1
    @m1nm13 和这个无关,飞牛 connect 应该只是个反代。
    而漏洞本身是在 nas 本体上的
    m1nm13
        6
    m1nm13  
       1 天前
    @qianlongzt 不可能会允许任意一个人访问飞牛 connect 反代出来的网址,不然不就是等于直接塞到公网上了. 被人随便打, 前端必然有一个云端测的登录验证
    m1nm13
        7
    m1nm13  
       1 天前
    @m1nm13 #6 要用一个秘钥通过两个不一样的秘钥系统, 那不就是飞牛现在的这个东西吗
    qianlongzt
        8
    qianlongzt  
    OP
       1 天前
    @m1nm13 #6 至少从之前的飞牛 connect 的情况来看,就是直接暴露
    pingdog
        9
    pingdog  
       1 天前 via iPhone
    所有服务 rootless 才是真。要 root 也应该用 sudo 限制 command
    这 chown root, chmod 600… 它校验 token ,要载入私钥…

    搭脚手架时未考虑,后期引入/修改安全机制几乎和重构区别不大
    qianlongzt
        10
    qianlongzt  
    OP
       1 天前
    @pingdog 而且现在的第三方应用有些也是 root 。。
    alfawei
        11
    alfawei  
       1 天前 via iPhone
    @qianlongzt 飞牛有很多不靠谱的第三方应用,之前有个终端好像是有问题的吧? 貌似被移除了
    jjx
        12
    jjx  
       20 小时 53 分钟前
    @tiiis

    飞牛的更新真潦草, 我是飞牛内装了 tailscale,这次更新,重启应该没把这个启动起来,人已经回家了, nas 访问不了了
    qianlongzt
        13
    qianlongzt  
    OP
       20 小时 21 分钟前 via Android
    @jjx 反正我是直接在 debian 上面装 tailscale
    istek999
        14
    istek999  
       19 小时 53 分钟前
    跟着官方升级呗,我是没开公网访问,就用了 tailscale ,家里人都是回家备份照片。
    tiiis
        15
    tiiis  
       19 小时 31 分钟前
    @jjx 我是 hyper-v 安装飞牛,tailscale 装在 win,然后直通了两块盘给 hyper-v
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   881 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:35 · PVG 06:35 · LAX 14:35 · JFK 17:35
    ♥ Do have faith in what you're doing.