It appears that Axelar staff are not taking the security issue that I had highlighted last month:
github com/axelarnetwork/interchain-token-service/issues/101
(This forum platform doesn’t let me post links, I get the error: “Sorry you cannot post a link to that host.”)
The issue is big enough that Coinbase has published at least 4 articles that cover this kind of issue (“superuser risk”) within the past year:
How Coinbase Protects Users From Risky Assets
coinbase com/blog/how-coinbase-protects-users-from-risky-assets
How Coinbase reviews tokens on Ethereum for technical security risks
coinbase com/blog/how-coinbase-reviews-tokens-on-ethereum-for-technical-security-risks
Security PSA: Protecting ERC-20 assets from malicious actors
coinbase com/blog/security-psa-protecting-erc-20-assets-from-malicious-actors
Token Custody Risks: Defining Security in the Crypto World
coinbase com/blog/token-custody-risks-defining-security-in-the-crypto-world
In the third one I’ve listed above, they even explicitly show this code:
… which looks almost exactly like the sample code that Axelar has published:
function burn(address from, uint256 amount) external onlyOwner {
_burn(from, amount);
}
Source: github com/axelarnetwork/axelar-docs/blob/5c2cb34c424a0c28f2dafff24f04c08a0ca4f6e8/public/samples/interchain-token-iinterchaintoken.sol#L41-L43
I’m aware that in the case of the Interchain Token Service, the suggestion is to transfer ownership of the contract to the token manager so that it can freely burn and mint the tokens. But that would mean token issuers would completely lose control of the contract, so they’d be against such a crazy suggestion. So in a separate GitHub issue about that I suggested replacing onlyOwner
with onlyRole
(function burn(address from, uint256 amount) external onlyRole(BURNER_ROLE)
) , assigning the token manager burner role and minter role. But that is still insecure because an admin of the contract could one day assign the burner role to herself and burn everyone’s tokens.
The proper way to do it is instead of having token issuers add such a risky burn
function, request approval from the token holder (by calling permit
or approve
) and call burnFrom
or transferFrom
when executing an interchain transfer. That’s how Chainlink’s Cross-Chain Interoperability Protocol (CCIP) does it, as I’ve explained with code references in the GitHub issue.
The risk for Axelar is the possibility that one or more tokens that contains your suggested burn
function gets compromised by an admin of the token, causing loss of others’ tokens. The blame would go back to Axelar for condoning such risky code and dismissing the concerns that are being raised in this present time, causing reputational damage, loss of AXL token value, etc… I really hope that would never happen.
Luckily the Interchain Token Service is not yet live on mainnets, so @sergey please correct this and any other critical issues while you can do so more easily than if it was in production.