Closed code423n4 closed 1 year ago
0xSorryNotSorry marked the issue as primary issue
deanamiel marked the issue as sponsor disputed
Proposals are meant to be created only via the governance address on Axelarnet, there is no intention for proposals to be created from the source chain itself.
berndartmueller marked the issue as unsatisfactory: Invalid
Lines of code
https://github.com/code-423n4/2023-07-axelar/blob/main/contracts/cgp/governance/AxelarServiceGovernance.sol#L72-L107 https://github.com/code-423n4/2023-07-axelar/blob/main/contracts/cgp/governance/InterchainGovernance.sol#L87-L103
Vulnerability details
Description
According to this flow chart in the docs:
Cross chain commands will be proposed by "Gov" contract to "Timelock" on the same chain. Since
AxelarServiceGovernance
is the only contract in scope that inheritsTimelock
(throughInterchainGovernance
) we must assume this is the contract referred to as "Timelock"The issue is that proposals can only be added through a cross chain command. Thus, if there is an urgent task, any proposal will always need to be passed through a
relayer
first adding time to the task.Impact
Urgent actions will take longer since they need to be passed through
relayer
before being timelocked or added tomultisigApprovals
.Proof of Concept
AxelarServiceGovernance
inheritsInterchainGovernance
which in turn inheritsAxelarExecutable
.A proposal is registered in
AxelarServiceGovernance::_processCommand
(which overrides_processCommand
inInterchainGovernance
):https://github.com/code-423n4/2023-07-axelar/blob/main/contracts/cgp/governance/AxelarServiceGovernance.sol#L72-L107
This is only triggered from
InterchainGovernance::_execute
where it is enforced that the command is passed fromgovernanceChainHash
andgovernanceAddressHash
:https://github.com/code-423n4/2023-07-axelar/blob/main/contracts/cgp/governance/InterchainGovernance.sol#L87-L103
_execute
is in turn only called fromAxelarExecutable::execute
which requires it to be registered inAxelarGatway
Thus, a call to schedule a proposal in
Timelock
needs to be passed to arelayer
first. This will unecessary time to each proposal, speciallymultisigApprovals
who don't need to pass Timelock. It is also not in line with how the docs portray the setup.Tools Used
Manual audit
Recommended Mitigation Steps
Consider adding a way to schedule
multisigApprovals
and timelock proposals from "home" chain. I.e haveAxelarServiceGovernance
deployed on the same chain as the "Gov" contract (as the documentation suggests).Assessed type
Governance