亚洲财经

☰ 搜索

XRP账本修复可能导致账户陷入债务的漏洞

核心要点

该修复程序于11月4日在分类账108、112和129中启用。自10月8日起,委托功能一直在此缺陷下运行。测试表明,铸造的代币实际上是委托人的个人债务凭证(IOU)。然而,基于货币类型的细粒度权限限制仍未实现。

漏洞修复与启用过程

验证者于UTC时间11月4日14:52启用了名为fixCleanup3_4_0的修正补丁。相关激活交易已在已验证的分类账108、112和129中得到确认,Ripple公共主网服务器也列出了该补丁的启用状态。此次启用是在一次投票中短暂失去超级多数支持后进行的,这一挫折此前已有报道。报告建议发行商运行的检查清单以及随修复提交的代码和测试,回答了一个更具体的问题:超出的代币额度究竟由谁创建。

近四周缺乏零余额检查

根据XRPL补丁仪表板显示,委托功能于10月8日在PermissionDelegationV1_1补丁下正式上线。从那时起直到11月4日,在某些配置下,持有PaymentBurn权限的委托人可能会将赎回操作推至零余额以下。因此,XRPL权限参考文档建议在该补丁启用前不要委托此权限。这一条件于11月4日得到满足。

负责此修复程序的rippled提交由GitHub用户yinyiqian1编写,添加了缺失的检查机制。当委托人仅持有PaymentBurn权限时,分类账会将支付金额与账户实际持有的余额进行比较,并拒绝任何超过该余额的操作。XRPL文档早已说明燃烧(销毁)操作会在零处停止;但对于委托支付而言,代码此前并未强制执行这一限制,直到本次补丁更新。

测试案例解析:Alice、网关与超额支付

提交中的测试使用了三个账户。Alice持有由名为Gateway的账户发行的50美元。Gateway则开设了一条信任线,接受最多200美元由Alice发行的代币,代码注释称这为支付引擎提供了“一旦信任线归零即可使用的发行流动性”。

Alice随后向第三个账户Bob授予了PaymentBurn权限,Bob代表Alice向Gateway发送了一笔金额为Alice持有量两倍的支付。追踪数据显示了在不同规则集下,分类账如何处理该支付及后续操作:

  • 旧规则 · 仅PaymentBurn
  • 支付100美元:被接受。Alice的50美元被赎回,随后创建了50美元由Alice发行的新代币。
  • 最终状态:Gateway持有50美元由Alice发行的代币。
  • 新规则 · 仅PaymentBurn
  • 支付100美元:被拒绝。
  • 支付20美元:被接受,剩余30美元。
  • 支付30美元:被接受,余额归零。
  • 支付1美元:被拒绝。
  • 新规则 · PaymentBurn + PaymentMint
  • 支付100美元:被接受。由于允许铸造且Gateway接受Alice的债务凭证,操作跨越了零余额。

新代币实质为Alice的债务

在旧规则下,该支付并未增加Gateway发行的美元数量。Gateway对Alice的义务从50美元降至零。取而代之的是50美元由Alice发行并由Gateway持有的代币:Alice通过一笔仅授权其委托人行使赎回权的支付签名,最终欠下了发行方的债务。

分类账将这些视为两种不同的资产。XRPL资产格式文档指出,信任线代币由其货币代码和发行账户标识,因此Alice的美元和Gateway的美元共享相同的代码但发行者不同。原生XRP没有发行者,完全不受此漏洞影响。

在记录在案的情况中,风险涉及两方:委托燃烧权限的账户可能承担其从未批准的负债,以及接收这些债务凭证的发行方。持有Gateway美元的投资者并未面临其持有代币的新增供应量。

Canton网络链上首秀内幕

(注:此处原文包含无关推广链接,已按要求隐去具体URL及标题引用,仅保留上下文逻辑衔接。)

限制漏洞影响的先决条件

超额透支依赖于Gateway侧的一个设置。如果没有接受Alice债务凭证的信任线,支付便无法创建由Alice发行的美元。发行商必须自行提交该信任线,这是证明该漏洞实际影响有限的最有力论据。

然而,这一论点存在局限性。XRPL委托文档还列出多用途代币(MPTs)也是燃烧-only委托人在修复前可以铸造的资产类型,而提交中的测试仅涵盖了信任线情况。尽管两者均未描述实际发生的事件,但在没有专门测试的情况下,不应将信任线的解读扩展到MPT发行商身上。

一项权限仍覆盖所有货币

该补丁限制了仅持有燃烧权限的委托人可赎回的数量上限,但未触及该权限所覆盖的代币范围。细粒度权限是硬编码的,同一文档指出,账户无法授予委托人发送某些货币的权利而同时 withholding(扣留)其他货币的权利。

对于持有USD和EUR代币或来自两个发行商的稳定币的运营账户,单一的PaymentBurn授予允许委托人对每种代币在其余额范围内进行赎回。任何按货币种类的拆分都必须通过将持仓分散到不同账户来实现。Payment交易类型权限的范围更广,涵盖一般性的此类支付,因此仅检查这两个细粒度值的审查可能会遗漏它。关于机构如何构建这些角色的详细分析,请参阅之前的相关文章。

如何判断漏洞是否被利用

所有授权都是公开的。Delegate分类账条目记录了授权账户、委托人及其权限列表,这使得滥用行为成为任何人均可在链上检查的问题。

链上模式需满足以下条件:

  1. 一笔在10月8日之后且在分类账108、112、129之前验证的支付。
  2. 由当时仅持有PaymentBurn权限(而非PaymentMint或Payment)的委托人签署。
  3. 发送给代币的发行方,导致委托账户在该信任线上出现负余额。

如果一笔支付符合上述三个条件,则证实超额透支在主网上发生过。如果在该时间窗口内审查所有PaymentBurn授予而未发现此类情况,则可排除信任线代币的滥用,但MPTs仍需单独检查。如预激活报告所述,DelegateSet会整体替换权限列表,因此检查必须使用每笔支付验证时的有效权限。

该补丁适用于分类账108、112、129之后的交易。在此之前验证的任何支付均按其原始记录保持不变,包括那些跨越零余额的交易。