最近帮自己的 NAS 做了一轮安全检查,发现几个群晖自带组件的问题,分享给同样用群晖的朋友参考。
Node.js v20
Node.js 官方在 2026 年 4 月 30 日结束了 v20 的维护。 之后 7 月和 10 月两轮安全更新,包括 10 月那个可远程执行代码的 Brotli 漏洞(CVE-2026-111497,已被列入实际遭利用的漏洞清单),v20 都没有修复,也永远不会有。
问题在于群晖的 Synology Drive Server 和 Synology Photos 到现在仍然依赖 Node.js v20。 套件中心会显示 v20 已是「最新版」,因为群晖确实没有更新可推,但这个「最新」是停在今年 3 月的最后一版。 你无法卸载它,因为 Drive 和 Photos 会跟着失效; 也无法自己换成 v22,依赖关系写在群晖的套件描述里。
群晖在 10 月 29 日发了公告 SA-26:15,把 Drive 和 Photos 标为「不受影响」,但没有解释理由,也没有给迁移时间表。
Python 2
Python 2 在 2020 年初就停止维护了,DSM 7 上它仍然是系统套件,无法卸载。 好消息是它没有监听任何端口,只是给一些旧脚本用的。 坏消息是它会一直在那里。
群晖自己的套件依赖老版本运行时,用户层面无法处理。 套件中心的「全部最新」只代表群晖仓库里没有更新,不代表上游没有漏洞。
PHP 8.2 & 7.4
我之前用过一段时间 DS Note,现在这个产品群晖已经基本放弃,但是我之前一直没有卸载,这次发现 Note 组件依赖的 PHP 8.2 , 而 8.2 在2024年已经被官方停止更新,仅做安全维护到 2026 年 12 月 31日,所以我这次也一起做了卸载处理
Node 和 PHP 8.2 的问题是比较容易发现的。还有一个隐形的 PHP 7.4,就不容被发现了。
Hyper Backup 就自带了一份 PHP 7.4.33,放在自己的套件目录下,给内部的日志和资源脚本用。 PHP 7.4 在 2022 年 11 月就彻底停止维护了,比 Python2 晚不了多久。 Hyper Backup 更新时会顺手重新编译这份 PHP,所以 build 日期看起来很新,但大版本永远停在 7.4,群晖没有要换的意思。
好在它和 Python2 一样,不监听端口、不对外、只跑内部脚本,攻击面很小。 但它说明了一件事:套件中心的「依赖此套件的套件」只能查到宣告过的依赖,查不到内嵌的运行时。 只有 SSH 进去检查才会发现。
建议
虽然群晖判定以上问题目前都不构成威胁,但想想自己的数据仓库下面埋着一堆炸弹,这件事终究是令人不安的。所以我针对以上问题的给各位两个不专业、不负责的建议
- 在当前的安全形势下,最好别让 NAS 直接暴露在公网。 这些漏洞要利用,攻击者得先能连上 Drive 或 Photos。 关掉 QuickConnect 和端口转发,用 Tailscale 之类的方案做远程访问,漏洞就只对内网可达。
- 不用 Synology Photos 就卸载它。 它是目前唯一一个常驻运行 Node.js v20 进程的套件,Drive 只是按需调用,对于正在用 Photos 的大多数人来说,忽略这个建议吧,我知道这个东西用起来后,很难换或者不用了。
这一轮威胁,雖然社群有报道最新版本DSM也有被攻击,但我身边保持更新的朋友目前都没事。 所以保持更新和坚持 3-2-1 备份策略是保护自己数据的安全底线,相比群晖可能存在的漏洞,缺乏安全纪律性的危险更大。
其实,真正容易被忘记的不是群晖套件更新,而是自己不知道什么时候放上去的 Docker 容器和手动安装的 SPK,这些东西群晖套件中心完全不管,也不会提醒,我自己的有个容器就这样落后了近两年、七个大版本没升,发现时简直惊出一身冷汗啊。
祝大家平安。


發表留言