治理劫持示例
EveSwap 用户不太可能注意到这个过程,因为交易总是成功的,但是最终会给 AliceSwap 带来毁灭性的打击。 跨链重放示例EIP-3074 合理地建议 commit 应该包含 chainid。但是,这是由调用者,而非协议执行的。在另一条链上有着相同地址的调用者可能会跳过该检查(或与此相关的检查)。
用户从未在以太坊上交易过,运行在 BobSpongeChain 上的调用者程序又经过了严格的安全审查。尽管如此,用户还是丢失了全部资产。 以太坊通过 EIP-155 的重放保护来防范这种情况。AUTHCALL 没有重放保护。由于所有 commit 检查都交给调用者完成,我们失去了以太坊提供的一切交易保护。攻击是在所难免的,因为保护措施很随意。如果要接受 EIP-3074,AUTH 消息必须明确包含 chainid,而非将其作为 commit 的一部分。 我们还能采取什么别的手段?我的提议是实现一个更明确的机制,在协议层面强制规定 commit 的含义。commit 结构将是类型化的(如 EIP-712 所述),钱包会以用户可读的形式将 commit 呈现出来。用户可以确切地知道事务是什么样子的,并确信这个事务不会在任何链上重放,无需依赖于调用者程序开发者的品行和能力。 一个可能的实现: AUTH 将使用包含授权调用列表的类型化结构代替 commit 哈希值。每个调用都将指定 {nonce,to,gas,calldata,value,chainid}。签名将被验证,整个授权调用列表将保存为 authorized_transactions 而非 authorized 地址变量。 (责任编辑:admin) |