名称:空循环问题
solidityproject/vulnerable-defi at master · XuHugo/solidityproject · GitHub
描述:
由于验证不充分,攻击者只需传递一个空数组即可绕过循环和签名验证。
补救措施:
检查签名数量 require(sigs.length > 0, “No signatures provided”);
问题合约:
withdraw函数中for循环,是用来校验参数sigs的,但是如果有人传入一个空数组,那么就会直接跳过for循环的校验。
contract SimpleBank {
struct Signature {
bytes32 hash;
uint8 v;
bytes32 r;
bytes32 s;
}
function verifySignatures(Signature calldata sig) public {
require(
msg.sende