Frankencoin - Jiamin's results

A decentralized and fully collateralized stablecoin.

General Information

Platform: Code4rena

Start Date: 12/04/2023

Pot Size: $60,500 USDC

Total HM: 21

Participants: 199

Period: 7 days

Judge: hansfriese

Total Solo HM: 5

Id: 231

League: ETH

Frankencoin

Findings Distribution

Researcher Performance

Rank: 195/199

Findings: 1

Award: $0.07

🌟 Selected for report: 0

🚀 Solo Findings: 0

Lines of code

https://github.com/code-423n4/2023-04-frankencoin/blob/1022cb106919fba963a89205d3b90bf62543f68f/contracts/Equity.sol#L309-L316

Vulnerability details

Impact

In Equity.sol, restructureCapTable(address[] calldata helpers, address[] calldata addressesToWipe) is called by qualified FPS shareholders to burn other users' token and to restructure the system, however, due to invalid implementation, only the first user's token will be burned.

Proof of Concept

Let's examine the function:

function restructureCapTable(address[] calldata helpers, address[] calldata addressesToWipe) public { require(zchf.equity() < MINIMUM_EQUITY); checkQualified(msg.sender, helpers); for (uint256 i = 0; i<addressesToWipe.length; i++){ address current = addressesToWipe[0]; _burn(current, balanceOf(current)); } }

As we can the in the for loop, the current address is assigned with the value of the first address:

address current = addressesToWipe[0];

So only the first user's token in the address array will be burned.

Tools Used

Manual Review

address current = addressesToWipe[i];

#0 - c4-pre-sort

2023-04-20T14:27:49Z

0xA5DF marked the issue as duplicate of #941

#1 - c4-judge

2023-05-18T14:26:13Z

hansfriese 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