Frankencoin - markus_ether'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: 190/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-L315

Vulnerability details

Impact

The restructureCapTable function is designed to wipe the balances of other accounts in the event that the system is at high risk and FPS holders want to restructure the system. It takes as input an array called addressesToWipe containing the addresses whose balances should be burned. However, the current implementation of the function only burns the balance of the first address in the array, leaving all others untouched. This could lead to unexpected scenarios where balances are not properly burned, posing a significant risk to the system. While making multiple calls could be a solution, this would result in additional gas costs. Therefore, a more effective approach would be to update the function to correctly burn the balances of all addresses in the addressesToWipe array, thereby mitigating the risk posed by the current implementation.

Proof of Concept

In the code they loop over all addresses and try to set their balances to zero.

The code has a bug that causes it to always take the 0th address instead of the ith address during each iteration. As a result, only the balance of the first address is burned.

Tools Used

manual analysis

To mitigate the issue, the loop in the restructureCapTablefunction should be updated to iterate over each address in theaddressesToWipe` array, and burn the balance of each account. This can be achieved by changing the loop to the following:

for (uint256 i = 0; i<addressesToWipe.length; i++){
    address current = addressesToWipe[i];
    _burn(current, balanceOf(current));
}

This will ensure that the balances of all accounts in the addressesToWipe array are burned.

#0 - c4-pre-sort

2023-04-20T14:23:35Z

0xA5DF marked the issue as duplicate of #941

#1 - c4-judge

2023-05-18T14:28:12Z

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