-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Protocol can be repeatedly gas griefed in AutoRange
external call
#459
Comments
0xEVom marked the issue as sufficient quality report |
0xEVom marked the issue as primary issue |
Grouping all gas griefing submissions under this but note that there are multiple versions of it:
|
kalinbas (sponsor) acknowledged |
All these cases are possible but we are monitoring these off-chain bots and also implement gas-limiting, and taking action where needed. |
valid gas grief, but not a persistent dos, so M |
jhsagd76 changed the severity to 2 (Med Risk) |
jhsagd76 marked the issue as satisfactory |
jhsagd76 marked the issue as selected for report |
Hi @jhsagd76, When user adds their position's config details via |
The logic which positions to execute is the responsability of the bot. If there are worthless tokens detected or the tx simulation is not what expected the bot doesn't execute the operation. So this is a risk which is controlled off-chain. |
How would that work? It doesn't seem possible to foresee getting griefed at least the first time and after that would the tokenId be blacklisted to prevent further griefing which necessitates the shutting down of the contract? Also, the mitigation of bots monitoring the contract is not documented under the list of known issues of the Contest's README so i think it's fair to flag this issue and leave up to the judge to decide if mitigation can be applied retrospectively after the contest. |
I cannot understand what the warden is referring to with the "shutting down of the AutoRange contract". There is no reason for the operator to waste gas on a transaction that continuously fails. Gas griefing is valid, and it will indeed continue to deplete the resources of the off-chain operator, but this does not constitute a substantial DoS. For predictions on any future actions/deployments, please refer to code-423n4/org#72 . |
Lines of code
https://github.com/code-423n4/2024-03-revert-lend/blob/435b054f9ad2404173f36f0f74a5096c894b12b7/src/transformers/AutoRange.sol#L111-L272
Vulnerability details
Summary
Revert controlled
AutoRange
bot can be gas griefed andexecute()
reverted by maliciousonERC721Received
implementationVulnerability Details
The initiator of a transaction pays the transaction gas; in the case of
AutoRange::execute()
andAutoRange::executeWithVault()
, this will be a Revert controlled bot which is set up as anoperator
.Newly minted NFTs are sent to users via
NPM::safeTransferFrom()
which uses theonERC721Received
callback.An attacker can implement a malicious implementation of this callback; waste all the transaction gas and revreting the function to grief the protocol.
It is expected that the gas spent by bots initiating transactions will be covered by protocol fees; however no protocol fees will be generated from the attacker's position as
AutoRange::execute()
will not complete; so the protocol will experience a loss.Furthermore, once attacker has set the token's config from
positionConfigs
, the protocol has no way to stop the griefing occuring each time the bot detects that the tokenId meets the conditions for a Range Change.Token Config is only removed from
positionConfigs
at the end ofexecute()
which the gas grief will prevent from being reached making it a recurring attack.The only recourse to the protocol is shutting down the contract completely by removing the bot address as an
operator
and DOSing the contract.All this makes the likelihood of this attack quite high as it is a very inexpensive attack; user does not even need an open position and loan in the vault.
A determined attacker
POC
Attacker would need to create a malicious contract to which they send their NPM NFT.
Via this contract they can then add token config for this NFT to the AutoRange contract via
AutoRange::configToken()
.The malicious contract would need to have a malicious implementation such as the one below which uses as much gas as possible before reverting.
Impact
Protocol fees can be completely drained; particularly if a determined attacker sets token configs for multiple NFTs in
AutoRange
all linked to the same malicious contract.Lack of fees can DOS multiple functions like the bot initiated
AutoRange
functions and affect the protocol's profitability by draining fees.Tools Used
Manual Review
Foundry Testing
Recommendations
Enact a
pull
mechanism by transferring the newly minted NFT to a protocol owned contract such as theAutoRange
contract itself from where the user initiates the transaction to transfer the NFT to themselves.Assessed type
Other
The text was updated successfully, but these errors were encountered: