Radicle:网络协议漏洞披露
Radicle: Disclosure of Vulnerability in the Network Protocol

原始链接: https://radicle.dev/2026/09/23/disclosure-of-vulnerability-in-network-protocol

Radicle 已披露其点对点代码协作堆栈所有版本中存在的两个严重安全漏洞。这些缺陷涉及未加密的网络流量和损坏的对等节点身份验证,攻击者可借此在网络路径上读取敏感数据并冒充受信任的节点。 虽然存储库的完整性依然安全(攻击者无法篡改代码或伪造身份),但私有存储库的机密性已受到损害。 **建议措施:** * 立即停止通过网络使用私有存储库。 * 停止使用 `rad block` 命令传播(seeding)私有存储库。 * 将现有的私有存储库视为已泄露:如果其中包含敏感凭据或密钥,请立即更换。 * 不要依赖 VPN 或 Tor,因为它们无法防止对等节点冒充。 **解决方案:** 团队正在开发一个重大的、不向后兼容的更新,旨在将现有的网络协议替换为 *iroh*。由于此修复需要进行基础性的架构更改,因此无法提供临时补丁。在重大更新发布之前,用户应保持谨慎,因为此前传输的数据已被视为已泄露。团队强调,虽然这些漏洞影响隐私,但并不允许未经授权的代码注入或伪造。

去中心化代码协作平台 Radicle 近期披露了其网络协议中存在一个严重的安全漏洞。调查显示,节点间的网络流量既未加密也未经过妥善验证,这导致私有代码仓库可能被泄露,且节点存在被冒充的风险。 该漏洞源于安全协议实现上的根本性失误。尽管该项目试图使用“Noise”框架进行加密握手,但未能真正对数据传输应用加密。此外,薄弱的身份验证机制使得攻击者可以伪造节点身份来访问私有数据。 这一消息在 Hacker News 的开发者社区中引发了强烈批评。用户们对一个以安全、去中心化托管为核心的项目竟然忽视如此基本的安全需求感到震惊。许多人指出,这是一个关于“闭门造车”开发自定义网络协议,而非采用 mTLS 或 QUIC 等成熟且经过验证的标准所带来的警示案例。 Radicle 已建议用户在安全更新发布前停止使用私有代码仓库。一些批评人士认为,该项目在初步报告发布三个月后才进行全面披露,加之其此前对安全性的营销宣传,已严重损害了用户对该平台的信任。
相关文章

原文

Radicle is a peer-to-peer, local-first code collaboration stack built on Git.


23.09.2026

Summary

What happened?

Two critical security vulnerabilities in the network protocol used by Radicle nodes were reported.

Which versions are affected?

All versions of Radicle that were released to date are vulnerable.

What is the issue?

Network traffic between nodes is not encrypted and not authenticated. Authentication of repository contents via Signed References still detects if attackers along the network path between two nodes modify objects in transit. Thus, the main concern is information leakage, i.e., attackers along the network path between two nodes reading objects in transit. For public repositories, information leakage is less of a concern. However, encryption in transit is crucial for private repositories.

What should users do?

We recommend to stop using private repositories until a fix is released.

When will the fixed version be released?

Due to a lack of version negotiation features, combined with the fix being incompatible on the wire, a backward compatible mitigation is not feasible; that means the release to fix this issue will be breaking, thus bump the major version number. Work towards this is under way. With this disclosure, our goal is, first and foremost, to be honest and clear about the situation, so that users can assess and act accordingly, while we are working on a resolution.

The vulnerabilities

  1. The network protocol used by Radicle does not give the confidentiality it was expected to give. Anyone who can observe the network path between two nodes can read the data they exchange as the data is sent in plain text. This was reported to us by Konstantinos Maninakis on 2026-06-24. You can read his post about the issue at https://maninak.com/blog/radicle-cleartext-transport-vulnerability/. We reported upstream, see this issue.
  2. Peer authentication in the connection handshake is broken and allows impersonation. An attacker can connect to your node and present a Node ID that is not its own. Private repositories are shared only with allow-listed Node IDs. An attacker who fakes an allow-listed Node ID can fetch a private repository directly, without being on the network path. This was reported to us by cryptocode on 2026-08-12. We proposed a fix upstream, see this pull request.

The second flaw is harder to exploit on its own than it sounds. To impersonate an allow-listed Node ID, an attacker must first know one. The allow-list is not public, so an attacker who is not on the network path has to guess.

In practice, the two flaws are most useful when they can be exploited together: an attacker on the path sees the Node IDs at both ends of a connection, and both are normally on the allow-list. That attacker can read whatever is exchanged while they watch, and can then use a Node ID they saw to fetch the whole repository on demand. The realistic threat is anyone on the path between your node and node it syncs with, and no setting or allow-list protects against them.

We are publishing this before the security update is available. You can act on it today, and no fix we release later can undo an exposure that has already happened.

Workaround

  • Stop using private repositories (over the network) until the security update is released. Stop seeding private repositories, as described below. However, you may want to keep your private repositories in storage, i.e., not delete them entirely, so that you may start seeding them again once a fixed version is released.
  • Consider every private repository you have transmitted over the network to another node leaked. If it contained unencrypted credentials, keys, or tokens, rotate them.
  • Using additionally encrypted transports, such as Tor, I2P, or other overlay networks or VPN solutions are not sufficient to protect your data. They hide network traffic from an attacker along the network path between two nodes. Even though that limits the attack surface, this does not prevent peer impersonation, and a targeted, sophisticated attack might lead to exfiltratation of the contents of private repositories.

How to stop seeding private repositories

List the private repositories in storage:

Change the seeding policy of very individual repository to “block”:

Note: We recommend to use rad block instead of rad unseed, in case the seeding policy of your node is set to allow.

rad unseed removes the seeding policy for a repository, and your node then falls back to its default policy. The default is block, so on a default configuration rad unseed is enough. If you changed the default seeding policy to allow, your node keeps serving the repository after you unseed it. rad block sets an explicit block, which the node checks first, so it works either way.

To stop the node completely:

Three limits on what this achieves:

  • It stops your node from serving the repository. It does not delete your local copy. The copy stays in $(rad path)/storage/<RID without the rad: prefix>. Remove that directory only if you understand you are deleting the repository and every fork of it that you hold. If in doubt, do not delete from storage.
  • It does not reach copies that authorized peers already fetched. Those peers still hold the data, and their nodes have the same flaws. Ask them to block the repository too.
  • It does not undo past exposure. Data that has already synced over the network should be treated as disclosed.

What is affected

Both flaws are in the node transport layer, not in the repository data model. Git objects and signed references are verified at the storage layer as before. An attacker cannot forge code or identities.

The confidentiality flaw has been present in every Radicle version released to date.

Resolution

We are actively working on a resolution.

The resolution involves replacing Radicle’s networking protocol (currently a custom protocol using Noise) with iroh, an open source peer-to-peer networking stack built on open standards. We already shared out plans to migrate, and the vulnerabilities have given us all the more reason to move forward with this. Beyond addressing the vulnerabilities, iroh brings additional features like NAT traversal which improve the reliability and resilience of the Radicle network.

Such a change to the network transport is by its nature backwards-incompatible. As such, it causes the network to partition into the upgraded and non-upgraded clusters that can not communicate with each other.

Even though this means a major release, we are working to make the upgrade path as smooth as possible, by focusing breakage on the network end, keeping storage layout compatible.

Acknowledgements

We would like to thank Konstantinos Maninakis and cryptocode for responsibly disclosing these vulnerabilities to us and staying in touch.

If you would like to report a security issue, please refer to https://radicle.dev/.well-known/security.txt.

联系我们 contact @ memedata.com