XRPL 修复主网启动前的重大漏洞,客户端应用仍面临风险
XRP Ledger 验证节点已为 BatchV1_1 修订案设定了条件性激活时间——9月29日14:06:41(UTC)。这项原本存在严重安全缺陷的批处理功能,在经历一次“险些上主网”的事故后,即将成为检验该网络修订机制及配套软件生态的一次实战测试。
9月22日,xrpldashboard 数据显示,35个受信任验证节点中有30个已支持该修订案,超过了其展示的28票门槛。这一多数支持最早于9月15日在链上出现。
按照 XRPL 的修订规则,支持率须在两周内持续保持在80%以上。一旦支持率跌至80%或以下,多数支持期即告结束,因此激活日期仍属有条件安排。
9月29日将首次在生产环境中检验一个关键问题:XRPL 的验证节点流程、参考实现以及客户端生态,能否把一个本可能危及主网的缺陷,转化为可用的原子交易基础设施。
验证节点防线在主网之前发挥了作用
最初的 Batch 修订案从未在 XRP Ledger 主网上激活。今年2月,就在该修订案仍处于投票阶段时,研究人员发现了一个严重的授权缺陷,验证节点随后被建议投出反对票。
XRPL Labs 的官方漏洞披露声明指出,此次事件没有资金面临风险。
缺陷存在于校验批处理授权账户的循环逻辑中:当代码遇到某个新建账户的签名者,且该签名者的密钥恰好匹配该账户时,会立即返回成功,而不再继续校验剩余签名者。
攻击者可以把这个合法签名者放在首位,再附加一条伪造条目,声称已获得受害者账户的授权。如果该修订案当时已上线,未经校验的受害者交易可能无需受害者密钥即可被执行。
XRPL 的应对分两步走:3.1.1版本将最初的 Batch 和 fixBatchInnerSigs 修订案标记为不支持,阻止其激活;随后 BatchV1_1 以重写的授权路径和额外防护措施取代了二者。
这次事件本质上是一个在“软件发布与协议激活的交界处”被拦截的失败案例。
修复后的授权设计有多严格
XRPL 基金会最终的 XLS-56 规范要求:多账户批处理必须包含一组精确、完整的 BatchSigners——即内部交易通常所需的全部授权方,外层账户的正常签名除外。缺失、多余、重复或顺序错误的条目都会导致拒绝。
每个 BatchSigner 的签名对象也不只是一组松散的内部交易:签名载荷绑定外层账户、其序列号或票据、所选批处理模式、所有内部交易的有序哈希,以及 BatchSigner 账户本身。
多签条目还会绑定每个嵌套签名者账户。这样可以防止有效签名被“搬”进其他外层交易,或被重新指派给其他参与者。
合并后的参考实现围绕这一设计增加了多重强制措施,包括签名者排序与唯一性校验、交易数量上限、拒绝直接提交内部交易,以及账本重放保护。
这些改动既修复了已披露的“提前返回成功”漏洞,也堵住了格式错误的批处理数据或重放数据跨越授权边界的其他途径。
一个 Batch 包含两到八笔内部交易。内部交易不带签名和费用,且被特殊标记以防止独立提交。外层 Batch 必须从四种模式中选择一种:
- ALLORNOTHING:所有内部交易必须全部成功,否则任何状态变更都不提交。
- ONLYONE:仅应用第一笔成功的内部交易。
- UNTILFAILURE:按顺序执行,直到某笔失败为止。
- INDEPENDENT:无论彼此结果如何,所有内部交易都逐笔尝试。
BatchV1_1 能够支持原子性的“全有或全无”流程,但并非每个批处理都具备这种狭义的原子性。开发者也可将其用于有序回退或独立打包提交。
激活之后,风险转向实现层面
最直接的集成陷阱在于:即便部分内部交易失败,外层 Batch 仍可能返回 tesSUCCESS。客户端必须逐一检查每笔内部交易的元数据和结果码,才能判断实际执行情况。
这一区别在 ALLORNOTHING 之外的三种模式下尤其重要,因为部分执行或独立执行本来就是设计意图。
BatchV1_1 支持已于8月6日随 xrpld 3.3.0 发布。修订案一旦激活,不理解新规则的服务器将进入“修订阻塞”状态,在升级之前无法可靠验证账本或参与共识。
针对 xrpl.js 的一个已记录问题显示,5.0.0版本使用旧版载荷构造 Batch 签名,遗漏了外层账户、序列号和参与者绑定信息。启用了 BatchV1_1 的节点会以 temBAD_SIGNATURE 拒绝这些签名。xrpl.js 的发布记录显示,5.1.0版本已提供兼容支持。
| 组件 | 就绪节点 | 过旧的风险 |
|---|---|---|
| xrpld | 3.3.0 起支持 BatchV1_1 | 激活后不兼容服务器可能被修订阻塞 |
| xrpl.js | 5.1.0 起支持新签名格式 | 5.0.0 产生的签名会被 BatchV1_1 节点拒绝 |
| 钱包 | 展示每笔内部操作及所选模式 | 用户可能在未理解完整影响的情况下批准打包交易 |
| 浏览器与索引器 | 保留外层与内部交易的关联 | 界面可能误报或割裂批处理结果 |
钱包与浏览器相关内容参考了 XLS-56 详细规范中的集成指引。协议可以拒绝格式错误的签名,却无法强制钱包把复杂打包交易解释清楚,也无法要求浏览器在完整语境中呈现每笔内部结果。
规范还指出,抢跑(front-running)仍是待研究的问题。更强的授权机制可以防止一方伪造其他账户的批准,但无法消除把多个面向市场的操作打包成一次有序提交所带来的全部风险。
9月29日能证明什么
如果多数支持得以维持,激活将证明 XRPL 的验证节点流程能够叫停一个危险的修订案,引导运营方停用相关版本,并最终让修复后的替代方案通过同一套治理机制上线。
它也将开启一场真实环境下的检验:服务器、签名库、钱包与数据基础设施能否就新交易格式及其结果达成一致。
但它无法证明应用已采用 BatchV1_1,无法证明用户需要这一功能,也无法证明网络交易需求会因此上升。修订案投票与软件发布确立的只是协议层面的可用性,并不能为 XRP 的额外买盘提供证据。
真正有价值的信号将在激活之后出现:过旧节点是否被阻塞、签名失败是否集中于旧版客户端、钱包能否清晰呈现多账户批处理、浏览器能否准确报告内部结果而不把外层成功误读为全部执行。
XRPL 的验证节点已经通过了第一道考验——阻止最初的 Batch 缺陷进入主网。而9月29日的条件性激活则提出了下一个问题:整个生态是否从这次有惊无险的事故中学到了足够多的东西,来安全地运行替代方案。
本文首发于 CryptoSlate。

评论