BGEO代币增发 漏洞分析

1. BGEO漏洞简介

https://twitter.com/peckshield/status/1582892058800685058

2. 相关地址或交易

攻击交易: https://bscscan.com/tx/0x2673936a1191a35c24b60dd697644c953da321b4395b836439faa319b8335886 攻击合约:0x4760fe83d891dae46950c98af3f795e1c2d637a3 攻击账号:0xde01f6ce91e4f4bdb94bb934d30647d72182320f 被攻击合约:BGEO 0xc342774492b54ce5f8ac662113ed702fc1b34972

3. 获利分析

4. 攻击过程&漏洞原因

查看攻击交易过程, 发现攻击者直接调用合约的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步的校验也被绕过。

评论