Dopex - Anirruth's results

A rebate system for option writers in the Dopex Protocol.

General Information

Platform: Code4rena

Start Date: 21/08/2023

Pot Size: $125,000 USDC

Total HM: 26

Participants: 189

Period: 16 days

Judge: GalloDaSballo

Total Solo HM: 3

Id: 278

League: ETH

Dopex

Findings Distribution

Researcher Performance

Rank: 175/189

Findings: 1

Award: $0.01

🌟 Selected for report: 0

🚀 Solo Findings: 0

Lines of code

https://github.com/code-423n4/2023-08-dopex/blob/main/contracts/perp-vault/PerpetualAtlanticVault.sol#L359-L360 https://github.com/code-423n4/2023-08-dopex/blob/main/contracts/perp-vault/PerpetualAtlanticVaultLP.sol#L201

Vulnerability details

Impact

The settle function can be griefed and always revert

Proof of Concept

The PerpetualAtlanticVault.sol contains settle function which uses subtractLoss from PerpetualAtlanticVaultLP.sol, the bug is in subtractloss function as it requires collateral.balanceOf(address(this)) == _totalCollateral - loss so anyone can forcefully send a small amount of collateral token and make the require revert.

Tools Used

VS Code

Change to: collateral.balanceOf(address(this)) >= _totalCollateral - loss

Assessed type

Error

#0 - c4-pre-sort

2023-09-09T10:00:42Z

bytes032 marked the issue as duplicate of #619

#1 - c4-pre-sort

2023-09-11T16:15:11Z

bytes032 marked the issue as sufficient quality report

#2 - c4-judge

2023-10-20T20:02:12Z

GalloDaSballo marked the issue as satisfactory

#3 - c4-judge

2023-10-21T07:26:28Z

GalloDaSballo changed the severity to 3 (High Risk)

#4 - c4-judge

2023-10-21T07:26:28Z

GalloDaSballo changed the severity to 3 (High Risk)

#5 - c4-judge

2023-10-21T07:26:29Z

GalloDaSballo changed the severity to 3 (High Risk)

Lines of code

https://github.com/code-423n4/2023-08-dopex/blob/main/contracts/perp-vault/PerpetualAtlanticVaultLP.sol#L199-L205

Vulnerability details

Impact

subtractLoss will always revert

Proof of Concept

function subtractLoss(uint256 loss) public onlyPerpVault { require( collateral.balanceOf(address(this)) == _totalCollateral - loss, "Not enough collateral was sent out" ); _totalCollateral -= loss; }

the function requires that collateral.balanceOf(address(this)) == _totalCollateral - loss, this check can be reverted by sending the collateral token directly to the contract (for example self destruct set to this address) causing this check to be false. Due to this attack other contracts depending on this function can also revert

Tools Used

VS code

change it to collateral.balanceOf(address(this)) >= _totalCollateral - loss

Assessed type

Error

#0 - c4-pre-sort

2023-09-09T06:40:15Z

bytes032 marked the issue as duplicate of #619

#1 - c4-pre-sort

2023-09-11T16:14:09Z

bytes032 marked the issue as sufficient quality report

#2 - c4-judge

2023-10-20T20:01:48Z

GalloDaSballo marked the issue as satisfactory

#3 - c4-judge

2023-10-21T07:26:28Z

GalloDaSballo changed the severity to 3 (High Risk)

#4 - c4-judge

2023-10-21T07:26:28Z

GalloDaSballo changed the severity to 3 (High Risk)

#5 - c4-judge

2023-10-21T07:26:28Z

GalloDaSballo changed the severity to 3 (High Risk)

#6 - c4-judge

2023-10-21T07:26:28Z

GalloDaSballo changed the severity to 3 (High Risk)

#7 - c4-judge

2023-10-21T07:26:28Z

GalloDaSballo changed the severity to 3 (High Risk)

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