fix: add input validation for recipient and chain ID in Bridge transfer functions #4539
+16
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Add validation checks to prevent transfers to zero address and invalid chain IDs in Token Bridge functions.
Problem
Currently, the Bridge contract accepts
bytes32(0)
as recipient address and0
as chain ID without validation. This allows users to accidentally send funds to unrecoverable destinations through:Solution
Implement defense-in-depth by adding input validation at the smart contract level:
require(recipient != bytes32(0), "invalid recipient")
require(recipientChain != 0, "invalid chain")
Changes
transferTokens()
- add recipient and chain validationwrapAndTransferETH()
- add recipient and chain validationtransferTokensWithPayload()
- add recipient and chain validationwrapAndTransferETHWithPayload()
- add recipient and chain validationTesting
All existing tests pass:
Impact
Related
This fix addresses a lack of defense-in-depth issue identified through security research.