Gnosis hack - Incident report
The vulnerability
function _isValidContractSignature(
address signer,
bytes32 hash,
bytes calldata signature
) internal view returns (bool result) {
uint256 size;
assembly { size := extcodesize(signer) }
if (size == 0) {
return false;
}
(, bytes memory returnData) = signer.staticcall( // <-- 'success' boolean is not checked
abi.encodeWithSelector(
IERC1271.isValidSignature.selector,
hash,
signature
)
);
return bytes4(returnData) == EIP1271_MAGIC_VALUE;
}Mitigation
Addresses
Why Ante Vaults were not drained?
Next steps
Last updated