Skip to content
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

[Hacken 2022-11-25 High #1] Denial of Service Vulnerability #30

Closed
zhongfu opened this issue Dec 1, 2022 · 0 comments · Fixed by #51
Closed

[Hacken 2022-11-25 High #1] Denial of Service Vulnerability #30

zhongfu opened this issue Dec 1, 2022 · 0 comments · Fixed by #51
Labels
sev:p1 High type:bug Something isn't working

Comments

@zhongfu
Copy link
Contributor

zhongfu commented Dec 1, 2022

The internal function _remainingAllowance() will revert with overflow in situations where the approveRenewable() or permitRenewable() functions will be used to approve a max uint256 value with a recoveryRate > 0.

The overflow can occur with different edge cases:

approveRenewable(, type(uint256).max - type(uint192).max + 1, type(uint192).max)
approveRenewable(, type(uint256).max - type(uint64).max + 1, type(uint64).max)

The _remainingAllowance() function is used by allowance() and transferFrom(). These functions will be unusable after such approval.

Path

./src/Funnel.sol: allowance(), _remainingAllowance(), transferFrom()

Recommendation

Rewrite the logic to prevent overflows.

Status

New

@zhongfu zhongfu added type:bug Something isn't working sev:p1 High labels Dec 1, 2022
@zhongfu zhongfu added this to the Hacken Audit 2022-11-25 milestone Dec 1, 2022
zlace0x added a commit that referenced this issue Dec 5, 2022
@zlace0x zlace0x linked a pull request Dec 5, 2022 that will close this issue
zlace0x added a commit that referenced this issue Dec 12, 2022
* fix: addresses #32, allowance() amount should reflect transferable amounts for transferFrom() and transfer()

* fix: comment contradition #43

* wip: added overflow test cases according to #30, identified area of overflow

* fix: potential fix for #30

* refactor: adhere to checks-effects-interaction pattern #35

* fix: make allowance() external #45

* fix: dropped virtual from permit, permitRenewable #44

* refactor: added require reason

* chore: added gas reports

* fix: solidity compiler for deploy script

* Chore/natspec (#53)

* style: grouped functions

* forge install: openzeppelin-contracts

* chore: updates to lib

* chore: natspec comments for contracts

* chore: closes #39 and #40

* chore: removed unused solmate

* refactor: moved saturatingAdd to mathUtil

* chore: cleanup

* Apply suggestions from code review

Co-authored-by: zlace0x <81418809+zlace0x@users.noreply.github.com>

* fix: resolve some comments

* doc: generated docs under doc/

* chore: cleanups on comments

* style: use custom errors instead (#56)

* style: use custom errors instead

* fix: structured files for custom errors

* style: change INITIAL values to upper-case

* Update src/Funnel.sol

Co-authored-by: zlace0x <81418809+zlace0x@users.noreply.github.com>

Co-authored-by: Edison <6057323+edison0x@users.noreply.github.com>
Co-authored-by: zlace0x <81418809+zlace0x@users.noreply.github.com>

* chore: fix comments slashes

* fix: apply linter version changes

Co-authored-by: Edison <6057323+edison0x@users.noreply.github.com>
Co-authored-by: zlace0x <zlace0x@gmail.com>
Co-authored-by: zlace0x <81418809+zlace0x@users.noreply.github.com>

Co-authored-by: Edison <6057323+edison0xyz@users.noreply.github.com>
Co-authored-by: Edison <6057323+edison0x@users.noreply.github.com>
@zlace0x zlace0x closed this as completed Dec 12, 2022
zlace0x added a commit that referenced this issue Dec 12, 2022
* fix: resolves #48 resolves 45 resolves #44 resolves #41 resolves #38

* fix: closes #34

* fix: zero address validation and make functions external. Closes #42 closes #45

* fixed pragma. closes #36

* fix as 0.8.17

* fix: remove solmate

* refactor: PR comments
- reorder imports, fix qoutes
- removed virtual for _checkOn* functions
- added virtual to supportsInterface
- fix compiler version to 0.8.17

* fix: addresses #32, allowance() amount should reflect transferable amounts for transferFrom() and transfer()

* fix: comment contradition #43

* wip: added overflow test cases according to #30, identified area of overflow

* fix: potential fix for #30

* refactor: adhere to checks-effects-interaction pattern #35

* fix: make allowance() external #45

* fix: dropped virtual from permit, permitRenewable #44

* refactor: added require reason

* chore: added gas reports

* fix: solidity compiler for deploy script

* Chore/natspec (#53)

* style: grouped functions

* forge install: openzeppelin-contracts

* chore: updates to lib

* chore: natspec comments for contracts

* chore: closes #39 and #40

* chore: removed unused solmate

* refactor: moved saturatingAdd to mathUtil

* chore: cleanup

* Apply suggestions from code review

Co-authored-by: zlace0x <81418809+zlace0x@users.noreply.github.com>

* fix: resolve some comments

* doc: generated docs under doc/

* chore: cleanups on comments

* style: use custom errors instead (#56)

* style: use custom errors instead

* fix: structured files for custom errors

* style: change INITIAL values to upper-case

* Update src/Funnel.sol

Co-authored-by: zlace0x <81418809+zlace0x@users.noreply.github.com>

Co-authored-by: Edison <6057323+edison0x@users.noreply.github.com>
Co-authored-by: zlace0x <81418809+zlace0x@users.noreply.github.com>

* chore: fix comments slashes

* fix: apply linter version changes

Co-authored-by: Edison <6057323+edison0x@users.noreply.github.com>
Co-authored-by: zlace0x <zlace0x@gmail.com>
Co-authored-by: zlace0x <81418809+zlace0x@users.noreply.github.com>

Co-authored-by: Edison <6057323+edison0x@users.noreply.github.com>
Co-authored-by: Edison <6057323+edison0xyz@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
sev:p1 High type:bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants