Decent - adeolu's results

Decent enables one-click transactions using any token across chains.

General Information

Platform: Code4rena

Start Date: 19/01/2024

Pot Size: $36,500 USDC

Total HM: 9

Participants: 113

Period: 3 days

Judge: 0xsomeone

Id: 322

League: ETH

Decent

Findings Distribution

Researcher Performance

Rank: 94/113

Findings: 1

Award: $0.12

🌟 Selected for report: 0

🚀 Solo Findings: 0

Lines of code

https://github.com/decentxyz/decent-bridge/blob/7f90fd4489551b69c20d11eeecb17a3f564afb18/src/DcntEth.sol#L20

Vulnerability details

Impact

the function setRouter has no access control allowing anyone to call it and set the router address to whatever address the caller likes. Unrestricted access to this function will by extension cause unrestricted access to the functions that implement the onlyRouter() modifier because an attacker can simply change the router address to its address and call the mint() and burn() functions to mint unlimited amount of tokens or burn tokens from a legitimate holder/user address.

exploit scenario

  • attacker call setRouter() to change router address to it's address
  • calls mint() to mint unlimited amount of tokens and swap to usdc in a uniswap pool
  • calls burn() to burn tokens from another address, can be a legitimate user or even the pool address.

Proof of Concept

https://github.com/decentxyz/decent-bridge/blob/7f90fd4489551b69c20d11eeecb17a3f564afb18/src/DcntEth.sol#L20C2-L22C6

function setRouter(address _router) public { router = _router; }

as we can see in the setRouter() code there is unrestricted access to the setRouter() function. The mint and burn functions below use the onlyRouter modifier and are to be called by only the router address. unrestricted access to the setRouter() will cause an attacker to change the address to its address and call the mint and burn functions sucesfully.

https://github.com/decentxyz/decent-bridge/blob/7f90fd4489551b69c20d11eeecb17a3f564afb18/src/DcntEth.sol#L24C1-L30C6

function mint(address _to, uint256 _amount) public onlyRouter { _mint(_to, _amount); } function burn(address _from, uint256 _amount) public onlyRouter { _burn(_from, _amount); }

Tools Used

manual review

add onlyOwner() modifier to the setRouter() function.

Assessed type

Access Control

#0 - c4-pre-sort

2024-01-23T22:34:38Z

raymondfam marked the issue as sufficient quality report

#1 - c4-pre-sort

2024-01-23T22:34:50Z

raymondfam marked the issue as duplicate of #14

#2 - c4-judge

2024-02-03T13:30:49Z

alex-ppg marked the issue as satisfactory

AuditHub

A portfolio for auditors, a security profile for protocols, a hub for web3 security.

Built bymalatrax © 2024

Auditors

Browse

Contests

Browse

Get in touch

ContactTwitter