Vader Protocol contest - pauliax's results

Capital efficient liquidity protocol

General Information

Platform: Code4rena

Start Date: 22/04/2021

Pot Size: $120,000 USDC

Total HM: 41

Participants: 10

Period: 7 days

Judge: LSDan

Total Solo HM: 28

Id: 5

League: ETH

Vader Protocol

Findings Distribution

Researcher Performance

Rank: 3/10

Findings: 14

Award: $7,190.26

🌟 Selected for report: 14

🚀 Solo Findings: 0

Findings Information

🌟 Selected for report: cmichel

Also found by: a_delamo, pauliax, shw

Labels

bug
duplicate
3 (High Risk)
filed

Awards

5.9395 VETH - $308.86

0.1425 ETH - $356.37

External Links

Handle

paulius.eth

Vulnerability details

Impact

Anyone can call functions lockUnits and unlockUnits (not only router) as it does not have any authorization checks. Thus it is possible to set any values for an account and thus make functions that rely on these values misbehave or fail.

Add authorization so only the intended entities would be able to lock and unlock units.

#2 - dmvt

2021-05-26T22:23:19Z

duplicate of #208

Findings Information

🌟 Selected for report: 0xRajeev

Also found by: pauliax

Labels

bug
duplicate
3 (High Risk)

Awards

14.6655 VETH - $762.61

0.352 ETH - $879.93

External Links

Handle

paulius.eth

Vulnerability details

Impact

function _convert only performs the conversion when minting is turned on: if(minting()){ However, the funds are collected before and it does not reimburse the sender: function convertForMember(address member, uint amount) public returns(uint) { getFunds(VADER, amount); return _convert(member, amount); } Same situation with function redeemForMember. I see no reason why the user should send and lose his tokens when the minting is turned off.

Probably it would be better to replace "if" with "require" so that users won't be tricked into such an accident.

#1 - dmvt

2021-05-26T22:09:47Z

duplicate of #238

Findings Information

🌟 Selected for report: cmichel

Also found by: pauliax, s1m0

Labels

bug
duplicate
disagree with severity
2 (Med Risk)
sponsor confirmed

Awards

2.6398 VETH - $137.27

0.0634 ETH - $158.39

External Links

Handle

paulius.eth

Vulnerability details

Impact

function completeProposal which is the last step sets mapPID_finalised to true and resets mapPID_finalising to false. Function voteProposal only checks that mapPID_finalising is false, it does not check that the mapPID_finalised, thus the same proposal can be voted again, then finalized and executed.

voteProposal should require that mapPID_finalised is false.

#0 - strictly-scarce

2021-05-01T07:32:25Z

Valid attack path, although questionable if high-risk since funds-not-at-risk

#1 - Mervyn853

2021-05-01T08:17:35Z

Our decision matrix for severity:

0: No-risk: Code style, clarity, off-chain monitoring (events etc), exclude gas-optimisations 1: Low Risk: UX, state handling, function incorrect as to spec 2: Funds-Not-At-Risk, but can impact the functioning of the protocol, or leak value with a hypothetical attack path with stated assumptions, but external requirements 3: Funds can be stolen/lost directly, or indirectly if a valid attack path shown that does not have handwavey hypotheticals.

Recommended: 2

#3 - 0xBrian

2021-05-11T08:36:10Z

Well, the unused mapPID_finalised was addressed, but this issue probably still remains.

#4 - dmvt

2021-05-26T22:46:32Z

duplicate of #229

Findings Information

🌟 Selected for report: 0xRajeev

Also found by: gpersoon, pauliax

Labels

bug
duplicate
2 (Med Risk)
addressed

Awards

2.6398 VETH - $137.27

0.0634 ETH - $158.39

External Links

Handle

paulius.eth

Vulnerability details

Impact

function deploySynth checks that token is not VADER or not USDV. The condition should be && (not ||) as OR condition always holds when VADER != USDV: function deploySynth(address token) external { require(token != VADER || token != USDV); iFACTORY(FACTORY).deploySynth(token); }

The condition should be &&, not ||.

#2 - dmvt

2021-05-26T22:49:08Z

duplicate of #124

Findings Information

🌟 Selected for report: 0xRajeev

Also found by: pauliax

Labels

bug
duplicate
2 (Med Risk)

Awards

4.3997 VETH - $228.78

0.1056 ETH - $263.98

External Links

Handle

paulius.eth

Vulnerability details

Impact

identical if-else branches (redundant code): if(iPOOLS(POOLS).isAsset(iSYNTH(synth).TOKEN())){ uint _adjustedReserve = iROUTER(ROUTER).getUSDVAmount(reserveVADER()) + reserveUSDV(); // Aggregrate reserves return iUTILS(UTILS()).calcShare(_weight, totalWeight, _adjustedReserve / erasToEarn); // Get member's share of that } else{ uint _adjustedReserve = iROUTER(ROUTER).getUSDVAmount(reserveVADER()) + reserveUSDV(); return iUTILS(UTILS()).calcShare(_weight, totalWeight, _adjustedReserve / erasToEarn);
}

#0 - dmvt

2021-05-25T14:41:35Z

duplicate of #51

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