群晖 QuickConnect DDNS/IPv6 信息泄露
关于 QuickConnect

QuickConnect 是群晖的云服务,用于远程访问内网 NAS 设备。
QC 会根据用户输入的 QC ID 获取设备信息,包括DDNS、IPv6,以自动选择最合适的远程访问方式。
如果没有上述的有效访问方式,QC 还会通过中继的方式为用户提供访问能力,中继服务器会通过端口转发的方式访问 NAS。
漏洞详情
其实这个 “漏洞” 并不能严格说是漏洞,群晖官方认为这是设计的功能,有意而为的,但个人看来该功能中存在一些对敏感信息的保护不足的情况,导致有心人可以持续枚举互联网上的 NAS 设备。
枚举中继服务器
首先我们找到中继服务器的证书,已知的指纹有这些:
1 | |
在微步(或 zoomeye、shodan)可以搜索到全部使用此证书的资产:

随后可以针对这些IP地址,使用工具扫描中继端口。 可以使用 masscan 扫描 > 10000 的端口,也可以使用 shodan 或微步来获取,不过 masscan 更准确。
获取设备 ezid
群晖 NAS 有一个无需授权的 api:https://ip:port/webman/pingpong.cgi?action=cors&quickconnect=true
可以获得设备的 ezid 信息:

这个 ezid 其实就是 serverID 的 md5 散列值。
我们可以通过 hashcat 碰撞出原始的 serverID。
1 | |
由于 serverID 均为 0 开头的9位纯数字,且没有加盐,所以可以在数秒内完成碰撞。
获取设备详细信息
根据上述获得的 serverID,通过 QuickConnect 的 Serv.php 接口可以获得设备的详细信息:
1 | |
上述响应如果有详情则无需继续请求,否则需根据响应发送第二个请求,比如响应如下:
1 | |
这意味着 global.quickconnect.to 没有找到详细信息,但在其他中继上找到了,则需要根据 sites 再次请求:
1 | |
设备详细响应如下:

1 | |
关于响应字段的解析,可以参考:https://music.aqzscn.cn/docs/notes/services/audiostation/
简单来说,响应中包含:
- DDNS
- IPv4/6
- 内网网关
- 中继服务器和端口
- serverID
我枚举了一部分:

一些想法
其实每一个环节看起来似乎都很合理没什么问题,但:
如果这些设备配置了
DDNS或IPv6,就有可能导致被恶意访问。通过
Serv接口获取设备详细信息并不要求“近期使用过 QC”的条件,这个条件是为了获取QC中继端口以直接访问设备,用于通过pingpong接口获得ezid。所以攻击者可以定时定期收集ezid数据,不断扩充收集到的数据。没猜错的话
serverID是与设备或账号绑定的,因此一般不会变。获得
ezid后很容易被碰撞出原serverID,这一点是主要使我感到不安的地方,因为Serv接口只接受ServerID或QC ID,并不接受哈希,因此如果此处使用较复杂的哈希运算,使得攻击者完全无法轻易进行碰撞,那么安全性会大幅提高。个人认为,
IPv6比IPv4更难猜测,而DDNS也是用户手动配置的,因此均具有一定隐秘性和随机性,但此“漏洞”会导致这些信息完全暴露。当然这一点可能比较有争议。由于 NAS 主要在内网使用,且相当一部分用户并非专业互联网从业人员,安全保护相对会可能差一些,比如会装一些第三方套件、部署一些不安全的 web 站点或 docker 容器,或配置了匿名访问的 FTP、SMB、WebDav等服务(比如我),因此如果 NAS 能够被互联网用户直接访问,会有较大风险。
写在最后
此“漏洞”已提交给群晖官方,官方表示“非漏洞”,个人认为可以理解,但确实可以做得更好更安全。
无论群晖官方是否会做出更多加固,请务必保持安全意识,可以使用 VPN 来远程访问。严格控制暴露的端口,减小攻击面。