The RootProxy
contract delegates calls to branch contracts but lacks access control on post-deployment upgrades. Attackers can replace critical logic to drain funds or brick the protocol.
Affected Code:
If RootUpgrade
allows post-deployment upgrades (not shown but implied by upgrade
function), unauthorized changes to branch implementations are possible.
Exploit Scenario:
Attacker gains temporary admin access (phishing/compromised key).
Calls RootUpgrade.upgrade()
to replace the transfer
branch with malicious logic.
Drains all funds via transfer(address attacker, totalAssets())
.
Exploit Scenario:
Theft of All Funds: High likelihood via logic override.
Protocol Shutdown: Attacker can deploy broken implementations.
Manual code analysis
Foundry
Implement role-based access control:
Use OpenZeppelin’s TimelockController for delay enforcement.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.