2021-3-19 12:49
其他 | 神鱼:Filecoin lotus节点的一些返回值不是很符合常规逻辑
神鱼及Cobo官方今日给出Filecoin“双花攻击”细节:Filecoin lotus节点提供了多个API用于链上交易的获取,例如ChainGetBlockMessages可以获取指定区块内的所有交易内容,StateGetReceipt可以获取指定交易ID对应的执行结果,此次被攻击的交易所就是采用这两个API来进行链上转账行为的解析,并基于此为用户入账。不过他们没有注意到,StateGetReceipt接口有个比较不符合常规逻辑思维的设计,就是在获取指定交易ID的执行结果时,如果这笔交易已经被RBF(replace by fee),则会返回最终RBF成功的那笔交易的执行结果,并且在返回值里没有任何的提示表明这笔是RBF后的交易的执行结果。
假设攻击者首先发送了TX1,对应的交易ID为TXID1,随后攻击者对TX1进行了RBF,生成TX2,对应的交易ID为TXID2,最终TX2上链成功。此时通过StateGetReceipt对TXID1和TXID2分别查询,都能得到执行正确的结果!
Cobo Custody技术团队在对接Filecoin的过程中已经发现了上述问题,因此没有采用ChainGetBlotckMessages和StateGetReceipt来获取链上的转账行为,而是采用ChainGetParentMessages和ChainGetParentReceipts来获取已经成功上链的交易,从而从根本上避免了被双花充值的风险,因此未受此次双花充值攻击的影响。
此外,在使用ChainGetParentMessages和ChainGetParentReceipt的过程中,Cobo Custody技术团队发现lotus节点的一些返回值也不是很符合常规逻辑思维,例如对于空块的处理是有一些问题的。Cobo Custody技术团队对此作了妥善的安全处理,在此也提示其他中心化托管机构需要仔细检查相关的对接代码,避免其他的双花充值攻击行为。