BGEO代币增发 漏洞分析
https://twitter.com/peckshield/status/1582892058800685058
攻击交易: https://bscscan.com/tx/0x2673936a1191a35c24b60dd697644c953da321b4395b836439faa319b8335886 攻击合约:0x4760fe83d891dae46950c98af3f795e1c2d637a3 攻击账号:0xde01f6ce91e4f4bdb94bb934d30647d72182320f 被攻击合约:BGEO 0xc342774492b54ce5f8ac662113ed702fc1b34972
查看攻击交易过程, 发现攻击者直接调用合约的mint增发了代币,注意攻击者传入的参数 _r、_s、_v均为空:
查看BGED代币的合约代码,mint函数存在修饰符isSigned校验签名,查看其具体实现逻辑:
1) 第1步查看签名参数是否满足要求,分析代码逻辑发现只要_r、_s、_v三个参数的长度一致即可,攻击者将这3个参数均设置为空可满足要求:
2) 第2步通过for循环恢复签名地址,但是当_r为空时可跳过该循环; 3) 查看第3步的校验中isSigners的代码实现,发现也是通过for循环判断,当数组_signers为空时将不会执行该判断,而signers是由第2步中的for循环赋值的。因第2步的for未执行,导致第3步执行时_signers的值也为空,最终第3步的校验也被绕过。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!