Delegatecall Attack
Exploitation
1. Vulnerable Contract
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract DelegateA {
address public owner;
constructor(address _owner) {
owner = _owner;
}
function pwn() public {
owner = msg.sender;
}
}
contract DelegateB {
address public owner;
DelegateA delegateA;
constructor(address _delegateA) {
delegateA = Delegate(_delegateA);
owner = msg.sender;
}
fallback() external {
(bool result,) = address(delegateA).delegatecall(msg.data);
if (result) {
this;
}
}
}2. Attack
Upgradeable Contract Storage Overriding
References
Last updated