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
Rank: 94/113
Findings: 1
Award: $0.12
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: NPCsCorp
Also found by: 0x11singh99, 0xAadi, 0xBugSlayer, 0xE1, 0xPluto, 0xSimeon, 0xSmartContract, 0xabhay, 0xdice91, 0xprinc, Aamir, Aymen0909, CDSecurity, DadeKuma, DarkTower, EV_om, Eeyore, GeekyLumberjack, GhK3Ndf, Giorgio, Greed, Inference, JanuaryPersimmon2024, Kaysoft, Krace, Matue, MrPotatoMagic, NentoR, Nikki, PUSH0, Soliditors, Tendency, Tigerfrake, Timeless, Timenov, ZanyBonzy, ZdravkoHr, abiih, adeolu, al88nsk, azanux, bareli, boredpukar, cu5t0mpeo, d4r3d3v1l, darksnow, deth, dutra, ether_sky, haxatron, ke1caM, kodyvim, m4ttm, mgf15, mrudenko, nmirchev8, nobody2018, nuthan2x, peanuts, piyushshukla, ravikiranweb3, rouhsamad, seraviz, simplor, slylandro_star, stealth, th13vn, vnavascues, wangxx2026, zaevlad
0.1172 USDC - $0.12
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.
setRouter()
to change router address to it's addressfunction 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.
function mint(address _to, uint256 _amount) public onlyRouter { _mint(_to, _amount); } function burn(address _from, uint256 _amount) public onlyRouter { _burn(_from, _amount); }
manual review
add onlyOwner()
modifier to the setRouter()
function.
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