-
Notifications
You must be signed in to change notification settings - Fork 2
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
Block-list ERC20s would lead to unwanted functionality #10
Comments
Thanks. |
Current fix: Convert the |
We have decided to classify this issue as Low. Our decision is based on the following arguments:
According to these arguments, the issue is low. Internally, we have deemed the proposed fix bad. Instead, it will be implemented as a low level call to |
I believe, also based on the same arguments you list, this issue should be medium severity. The most popular stable coins USDC and USDT employ this behavior and there is no doubt they will be one of the first and most widely-used tokens with your protocol. A better fix I believe it to use a pull functionality over the current pull, allowing the user to specify which address should receive the tokens in a separate call on his own. This way you will avoid introducing more problems with low level calls (unless contract size is a problem, but this is 1 short function). This issue is a historical medium, the 2 examples are the most widely used tokens in the eco-system. I will respect any further decision you make. Edit: PAX, BUSD, TUSD, general stable coins across chains |
Please provide arguments for why it would be medium beyond the impact it would immediately have on the blacklisted user. |
The freeing of the escow, which is the point of revert, is the last step of the acknowledgement relay. This means that the transaction chain would fail at the very end, denying the relayer his reward and wasting his gas. Any further attempt to relay the same ack would also fail. |
Assuming you have the right proof, acking packages will in general not revert: If you can build a contract such that you cannot ack the package => denying the delivery relayer their reward it would be a medium issue in itself. |
Also it is impact only on the immediate user, but there is no other recovery mechanism so these are undeniably stuck and lost funds. Impacts as bracketed by the provided medium(this is a long-term freezing of user funds which is classified as high, but it's the likelihood that is low): |
Notice the fix: catalystdao#77 It unfreezes the user's funds by sending them to the vault. The fix will still lead to lost user funds, however, it is much clear that the code is working as intended. Note that the difference between blacklisted and transfer fails is almost meaningless. My comment directly refers to this differentiation which you havn't argued against. |
Yes but the ack function that fails would always fail for that given user. You meet a revert that was never expected to be there and user funds really are frozen. If the contract fails at the ack, then that means the funds on the source were already burned. |
I don't understand that point. You repeat what I say is how it supposed to be. You do not argue against my point that in those cases, loss of funds is intended. |
I am pointing out you are confirming that loss of funds will occur for the user. These losses and the short-term DoS that this issue causes are why I am debating for medium severity, based on impacts we were provided to work with. |
Correct. Given that in both cases, the result is that the user loses access to their funds, the loss of funds must be seen as intended. |
Github username: @PlamenTSV
Twitter username: @p_tsanev
Submission hash (on-chain): 0xf930b1b718a0813dd151c796cfebc2e72c86a78c2a6f8f26fbe6fa98fe278d92
Severity: low
Description:
Description
Several function serving as fallbacks like
onSendAssetSuccess
,onSendAssetFailure
etc. by design should never revert and their functionality makes sure they do so. A problem occurs since the failure callback imploys a direct token transfer of escrow tokens which might have the fallback address be block-listedAttack Scenario
The most popular such token is USDC. A user sends some USDC assets and defines his own address as the fallback one for the escrow. For some reason his asset sending fails and the contract attempts to return the tokens and emit an event to catch the failure. If the address provided got blocklisted prior to the failed send action, the function would revert, contrary to intended design
Attachments
In such a scenario it would be best to allow the fallback address to be change-able by itself. If the fallback address got blacklisted, provide another one and send the tokens there.
The text was updated successfully, but these errors were encountered: