-
Notifications
You must be signed in to change notification settings - Fork 8
0xSpearmint1 - Malicious user can take advantage of auto-accruing WETH in the PrizePool contract on blast to unfairly increase winning odds #12
Comments
This issue and it's duplicates should be a high severity issue Root cause: Auto-accruing WETH in the PrizePool contract can be used by a single user to increase their chances of winning, decreasing all other user's chance of winning Impact: Malicious actors can steal yield generated by the prize pool, inflating their vault's portion and unfairly increasing their win chances. This decreases legitimate players' portion and winning probabilities. The protocol clearly stated in the README that they will deploy to blast They also stated the following
If the code is deployed as is to blast the impact is large enough to warrant high severity |
Escalate |
You've created a valid escalation! To remove the escalation from consideration: Delete your comment. You may delete or edit your escalation comment anytime before the 48-hour escalation window closes. After that, the escalation becomes final. |
What is the numerical unfairness of winning chance increase considering the WETH rebasing. Also what is the % rebase per year for WETH? Nevertheless I believe the escalation should be rejected since it doesn't provide any additional evidence and is simply repeating the issue. |
It's fair to judge this issue as high severity. |
I agree that this warrants high severity, cause the users can increase their chances of winning for free and stealing the yield. But, I also agree that the escalation doesn't bring value why it's High and not Medium, since it just repeats what was said in the report. I understand that the rules don't require anything specific to write as a reason for escalation, but I believe it's understandable, that if you want to upgrade the severity from M to H, you should explain why, not summarise the report. Planning to reject the escalation, but update the report to High severity (and duplicates). And advice for future, if you want the upgrade severity of the entire family (or invalidate the entire family), please escalated the main issue, not a duplicate, it would be just easier for me, thank you in advance. |
Result: |
Escalations have been resolved successfully! Escalation status:
|
0xSpearmint1
high
Malicious user can take advantage of auto-accruing WETH in the PrizePool contract on blast to unfairly increase winning odds
Summary
Malicious user can take advantage of auto-accruing WETH in the PrizePool contract on blast to unfairly increase winning odds
Vulnerability Detail
The protocol has clearly stated they plan on deploying to Blast
They also state the following
On blast, smart contracts holding WETH have Automatic yield by default. It is auto-accruing, so over time the WETH balance of the contract will increase as yield comes in.
A user can take advantage of this by calling
PrizePool.contributePrizeTokens()
once the yield enters the contract, passing in their vault and the exact amount of blast WETH yield that just entered the contract.Once the yield enter the contract the
prizeToken.balanceOf(address(this))
will increase, therefore_deltaBalance
will increase too. All an attacker has to do is wait for the yield, pre compute the_deltaBalance
and then callcontributePrizeTokens
passing the calculated_deltaBalance
as the_amount
parameterThis is unfair because the WETH balance of the PrizePool contract is generated by all the users of the protocol. Hence the blast yield on that WETH should be distributed equitably, not to a single user.
Impact
A malicious user has unfairly increased their odds of winning at 0 cost at the expense of all other protocol users.
Code Snippet
https://github.com/sherlock-audit/2024-05-pooltogether/blob/1aa1b8c028b659585e4c7a6b9b652fb075f86db3/pt-v5-prize-pool/src/PrizePool.sol#L412-L422
Tool used
Manual Review
Recommendation
Implement a system so the blast yield is distributed in a fair way
Duplicate of #114
The text was updated successfully, but these errors were encountered: