SWC-121/未保护签名重放攻击
有时有必要在智能合约中执行签名验证,以实现更好的可用性或节省gas成本。一个安全的 实现需要通过例如跟踪所有已处理的消息哈希并仅允许处理新的消息哈希来防止签名重放攻击。 恶意用户可能会在没有这种控制的情况下攻击合约,并获得多次处理的另一个用户发送的消息哈希。
CWE漏洞分类
整改方案
为了防止签名重放攻击,请考虑以下建议:
- 存储智能合约已处理的每个消息哈希,仅针对新消息执行业务逻辑
- 包括处理消息的合约的地址。这样可以确保该消息只能在单个合约中使用。
- 在任何情况下都不生成包含签名的消息哈希。因为ecrecover功能易受签名延展性的影响(参见SWC-117)。