2000万OP代币被盗关键:交易重放

慢雾科技发布于2022-06-10更新于2022-06-10

文章摘要

6月9日,Optimism与Wintermute双双发布公告,向社区披露了一起2000万OP代币丢失的事件。

背景

6月9日,Optimism与Wintermute双双发布公告,向社区披露了一起2000万OP代币丢失的事件。Optimism委托了Wintermute来为OP在二级市场上提供流动性服务,同时将向Wintermute提供2000万枚OP代币。为了接收这笔代币,Wintermute给了Optimism一个多签地址,在Optimism测试发送了两笔交易且Wintermute确认无误后,Optimism将2000万OP转移到了该地址。在Optimism转完币之后,Wintermute却发现自己没办法控制这些代币,因为他们所提供的多签地址暂时只部署在了以太坊主网上,尚未向Optimism网络部署。Wintermute立即启动了补救操作,但已有攻击者察觉到了这一漏洞,并抢在Wintermute之前将多签部署到了Optimism网络的该地址之上,成功控制了这2000万代币。那么问题来了,为什么会出现这种漏洞?

前置知识

首先需要确定交易签名是否符合[EIP155]标准,符合[EIP155]标准的签名会对9个RLP编码元素(nonce,gasprice,gas,to,value,data,chainid,0,0)进行哈希,其中包含了chainid,因此符合[EIP155]标准的签名v值就为{0,1}+chainid*2+35。而对不符合[EIP155]标准的签名,其只对6个元素进行哈希(nonce,gasprice,gas,to,value,data),因此签名后v值为{0,1}+27。而不同的链会定义有不同的chainid,不同的chainid会得到不同的v值。根据ECDSA我们知道在v值不同的情况下,就算r与s值相同,签名所还原出的公钥也是不同的。因此对于符合[EIP155]标准的交易是无法在其他链上成功进行重放的。

值得一提的是在以太坊伦敦升级时实施的[EIP2718]引入了新的交易格式0x02||RLP([chain_id,nonce,max_priority_fee_per_gas,max_fee_per_gas,gas_limit,destination,amount,data,access_list,signature_y_parity,signature_r,signature_s]),chainid是单独编码的,而不包含在签名v值中了,签名v值只是作为一个简单的奇偶校验位,因此当前交易签名得到的v值变为0或1。

交易重放

在我们了解完以上交易签名构造后我们就可以很清晰的知道签名v值为27或28是可以在不同链上被重放的。那么该如何在不同链上进行重放呢?这与我们发送交易并无不同,只需要将原始交易内容再其他链上进行发送即可。

以Wintermute2000万个OP代币被窃取事件为例,攻击者在此次事件中重放了GnosisSafe部署Factory合约的交易。我们在这里尝试重放GnosisSafeDeployer3的nonce为3的交易。

一种较为简单的方法是先通过Etherscan获取原始交易:

然后直接通过Optimistic的eth_sendRawTransaction[RPC]

(https://eth.wiki/json-rpc/API)接口进行发送即可。

若无法直接获取到原始交易内容,我们可以先通过eth_getTransactionByHash

[RPC](https://eth.wiki/json-rpc/API)接口获取交易内容。

再对交易内容进行RLP编码后得到原始交易内容:

然后再通过Optimistic的eth_sendRawTransaction[RPC]

(https://eth.wiki/json-rpc/API)接口进行发送即可。

参考:

https://eips.ethereum.org/EIPS/eip-155

https://eips.ethereum.org/EIPS/eip-2718

https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm

https://github.com/ethereum/go-ethereum/blob/master/core/types/transaction_signing.go

你可能也喜欢

比特币矿工抛售接近枯竭 – 接下来会发生什么

近期链上数据显示,比特币矿工的抛售压力可能正接近枯竭,这为市场下一轮上涨阶段奠定了基础。这一进展出现在4月份比特币呈现韧性上涨的背景下。 分析师指出,随着市场结构开始出现供应枯竭,比特币正进入需求主导的价格扩张阶段。数据显示,上市矿企在2026年第一季度抛售了超过3.2万枚BTC,创下历史最大季度流出纪录。这轮抛售主要源于2024年比特币减半后区块奖励从6.25BTC降至3.125BTC,导致收入大幅减少。同时网络算力持续上升进一步压缩利润,迫使矿工清算持仓维持现金流。部分矿工还将资源转向AI和高性能计算基础设施,加速了比特币的分布。 链上指标显示,矿工储备持续下降,净头寸变化保持负值,但关键信号在于近期流动动态:虽然矿工头寸指数(MPI)仍为负值,但矿工抛售力量已急剧下降,表明抛售强度正在减弱。分析师认为,这种结构演变形成两阶段动态:一方面减半后存在持续的结构性抛售,另一方面当前数据表明这个阶段可能即将结束。 历史上比特币周期会从供应扩张过渡到供应枯竭,最终进入需求驱动增长阶段。随着矿工驱动的供应限制缓解,未来价格方向将更多取决于需求侧催化剂,包括ETF资金流入、机构参与和宏观经环境。截至发稿,比特币交易价格为77,169美元,24小时上涨2.69%。

bitcoinist1小时前

比特币矿工抛售接近枯竭 – 接下来会发生什么

bitcoinist1小时前

交易

现货
合约
活动图片