主打抗审查与去中心化代码协作的 P2P 协议 Radicle,在 2026 年 9 月 23 日发布了一份性质极为罕见的安全通告。官方披露其底层网络协议存在两项致命漏洞:节点间传输的数据完全未加密,且握手环节的身份验证形同虚设,波及迄今发布的全部版本,包括当前最新的 1.10.3 版本。
比漏洞本身更严峻的是处置方式。官方没有提供任何平滑升级的安全补丁,因为既有协议缺少线缆级版本协商能力,热修复无法向前兼容;Radicle 官方不仅直接定性所有私有仓库已实质泄露,更明确告知用户,唯有通过破坏性的跨大版本升级换装全新协议才能彻底解决。
握手成功后的明文裸奔:代码层拆解
在理论架构设计中,Radicle 被视作对抗中心化代码托管平台的加密堡垒。它依托 Git 的本地优先特性,设计了基于 Noise XK 与 ChaCha20-Poly1305 的端到端传输加密体系,并以 Ed25519 公钥作为节点身份标识。但真实的工程实现却呈现出令人震惊的断层。
第一项缺陷由安全研究员 Konstantinos Maninakis 于 2026 年 6 月 24 日报告。问题出在底层网络库 cyphernet-labs/netservices.rs。节点之间确实按部就班地完成了复杂的 Noise 密码学握手并派生了对称密钥,然而握手一旦结束,NoiseSession 状态机并未将应用层负载导入加密流水线,而是直接将原始读写管道直通旁路到底层 TCP 或 SOCKS5。这意味着在网络传输路径上的任何旁路设备,都可以直接以明文读取节点间拉取和推送的全部代码。
紧随其后的是身份认证的破防。2026 年 8 月 12 日,安全研究员 cryptocode 报告了另一个存在于 cyphernet-labs/cyphernet.rs 的漏洞:在连接握手时,协议未校验发起方对私钥的持有证明。只要攻击者向目标节点声称自己拥有某个公钥 Node ID,目标节点便会予以接纳。
这两项漏洞在单独存在时各有局限,组合起来却构成了完整的攻击闭环。Radicle 的私有仓库仅允许白名单上的 Node ID 访问,若攻击者不在信道上,原本难以盲猜白名单。然而,明文传输漏洞让链路上嗅探的攻击者能够一眼看清通信双方合法的 Node ID;随后,攻击者无需驻留在原网络链路上,只要在全网任意位置仿冒所窃取的 Node ID,即可直接连接目标节点,将全量私有代码与历史提交完整拉走。
- 风险.使用 Tor、I2P 或传统 VPN 无法抵御此次威胁。覆盖网络虽然可以隐藏中间链路,但完全无法阻止攻击者借由未经验证的 Node ID 主动向开放端口提取私有仓库。
协议演进陷阱:版本协商缺失与硬分叉代价
这一事件不仅暴露出代码实现层面的严重疏漏,更直接揭开了 P2P 去中心化协作网络在架构治理上的脆弱命门。
传统中心化平台如 GitHub、GitLab,其安全控制面高度统一。客户端与中心服务端通过成熟的 TLS 证书体系与 SSH 密钥握手,如果协议出现漏洞,平台方可在数小时内完成服务端热修与强制降级阻断。而 Radicle 将信任体系全面分散在节点公钥与签名引用之上。代码内容虽然依托签名机制(Signed References)守住了防篡改底线,攻击者无法向仓库注入虚假提交,但私有代码的机密性却全盘崩溃。
更致命的在于协议升级的死胡同。Radicle 底层网络协议完全缺乏线缆级版本协商能力(wire protocol version negotiation)。在标准网络协议体系中,新老客户端在握手初期会比对支持的协议版本号,协商降级或平滑过度;Radicle 缺失了这一抽象,任何对传输格式的修补都将直接导致新旧节点互不相认。
密码学理论上的精妙完备,阻挡不了工程状态机在明文直通处的彻底溃败。
为此,官方不得不放弃热补丁路线,宣布将用开源 P2P 网络栈 iroh 彻底替换原有的自定义 Noise 网络协议。这一重构不仅意味着新老协议的线缆格式互不兼容,还将引发全网网络分区的破坏性大版本变更(Breaking major release)。节点运营商必须在统一的时间窗口内被动迁移,否则网络将立刻分裂为无法互通的两大孤岛。
通告发布时,该漏洞甚至尚未分配正式的 CVE 编号。这种在未备齐修复补丁前就全盘公开底层技术细节的做法,既反映了去中心化社区对知情权的坚守,也从侧面印证了开发团队面对协议根本性缺陷时的被动。
应急处置:从止血阻断到凭证注销
对于在 Radicle 上托管核心专有代码或机密项目的团队而言,眼下等待大版本重构并不现实,唯一合理的动作是立即切断网络面暴露。
Radicle 的私有仓库在本地磁盘上默认未经对称加密存储,其机密性此前完全依赖网络信道的访问控制。由于官方确认“未来的修复无法撤销过去的暴露”,任何曾通过网络与其他节点发生过同步的私有仓库,都必须按最高威胁级别判定为已外泄。
- 建议.节点运营商应立即在终端执行
rad block <RID>命令,显式封禁私有仓库的种子分发策略,而非使用会退回到默认策略的rad unseed;若无必要,应直接执行rad node stop停机。
在本地执行阻断后,切勿直接删除本地存储目录,以免彻底丢失代码副本。更为紧迫的任务是梳理所有曾上传至 Radicle 的私有代码库:凡是在提交历史中包含未加密的 API 密钥、访问凭据、部署私钥或数据库连接串的项目,相关工程团队必须立即在生产环境全量轮换密钥。在去中心化的协议世界里,对系统安全性的盲目信仰,永远抵不过一行旁路代码所带来的真实代价。
