fix: F-2026-18194 | [Dual Defense] Unbacked Gas PRC20 Mint on INBOUND_REVERT via applyGasRefund - #321
Open
0xNilesh wants to merge 1 commit into
Open
fix: F-2026-18194 | [Dual Defense] Unbacked Gas PRC20 Mint on INBOUND_REVERT via applyGasRefund#3210xNilesh wants to merge 1 commit into
0xNilesh wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Ports the existing
developfix (b425c5d0) ontoaudit-fixes.Problem
applyGasRefundruns for every terminal outbound with no tx-type gate.INBOUND_REVERToutbounds are protocol-initiated —buildRevertOutboundpopulatesGasFee/GasTokenfromUniversalCore.getOutboundTxGasAndFeesas a relayer gas hint, but the user was never charged for the revert and nothing was burned viaswapAndBurnGas.When the observed
GasFeeUsedcame in below that hint, the "excess" was refunded throughUniversalCore.refundUnusedGas→IPRC20.deposit→_mint, with no escrow or burn backing it. That mints unbacked gas PRC20 to a user who never paid, while they also recover their principal on the source chain.Fix
Return early from
applyGasRefundwhenTxType == INBOUND_REVERT— regardless of PC20/PRC20 or whetherGasFeeis set — since there is no user-paid budget to refund against.Notes
b425c5d0fromdevelop; original authorship preserved.audit-fixespredates it.TestInboundRevertGasNotRefunded(test/integration/uexecutor/gas_refund_test.go).go test -tags="ledger test_ledger_mock test" ./x/uexecutor/... ./test/integration/uexecutor/...— all packages ok.