Renzo
protocol Execution Layer Rewards
are lost
#500
Labels
bug
Something isn't working
downgraded by judge
Judge downgraded the risk level of this issue
duplicate-498
grade-a
Q-32
QA (Quality Assurance)
Assets are not at risk. State handling, function incorrect as to spec, issues with clarity, syntax
🤖_230_group
AI based duplicate group recommendation
sufficient quality report
This report is of sufficient quality
Lines of code
https://github.com/code-423n4/2024-04-renzo/blob/main/contracts/Deposits/DepositQueue.sol#L163
Vulnerability details
Impact
In the contest details, the protocol mentions the following regarding
Protocol Fees
:"Native ETH earned from outside EigenLayer (such as Execution Layer Rewards or MEV) will be sent to the DepositQueue receive() function. The protocol will then forward a configured fee percentage to an external address."
However,
Execution Layer Rewards
are not transferred, but rathercredited
. This means that theDepositQueue::receive()
function will not trigger when these rewards are earned, and rewards will be lost.Proof of Concept
DepositQueue::receive
https://github.com/code-423n4/2024-04-renzo/blob/main/contracts/Deposits/DepositQueue.sol#L163
As we can observe from the function and dev comments, it is expected that this function will trigger when
Execution Layer
rewards are received.However, that is not the case.
Execution Layer Rewards
are credited rather than transferred:"Under proof of stake, the block reward is credited to the validator's beacon chain balance, and the transaction fees are credited to the fee_recipient Ethereum address"
.Source: https://eth2book.info/capella/annotated-spec/#:~:text=fee_recipient%20is%20the,fee_recipient%20Ethereum%20address
The
receive()
function will not trigger and rewards will be lost.Tools Used
Manual Review.
Recommended Mitigation Steps
Add a function to the
DepositQueue
contract to distribute Execution Layer rewards from the contract.Assessed type
ETH-Transfer
The text was updated successfully, but these errors were encountered: