Validate Soroban simulation auth before signing#56
Open
Sparexonzy95 wants to merge 1 commit into
Open
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.
Summary
Closes #24
This PR adds a focused security validation layer for Soroban simulation authorization entries before any transaction is assembled and sent to Freighter for signing.
The purpose is to ensure that the dApp does not trust simulation authorization payloads blindly. Before wallet signing, the returned Soroban auth entries are checked against the exact SmartDrop contract action the user intended to perform.
Security rationale
Freighter signing is a sensitive trust boundary. If a compromised or malicious RPC response injects unexpected authorization entries into the simulation result, the user could be asked to sign authorization for behavior that was not intended by the UI flow.
This PR reduces that risk by enforcing strict validation before
rpc.assembleTransaction(...)and before Freighter signing.What changed
Added
validateSimulationAuth(simResult, expected)insrc/lib/soroban.ts.Added
SecurityErrorfor user-facing signing safety failures.Validates
simResult.result?.authbefore transaction assembly/signing.Verifies the expected contract ID and contract function name for each authorization entry.
Rejects missing, malformed, shorter, longer, extra, or unexpected authorization entries.
Rejects unexpected nested
subInvocations()so nested malicious auth payloads cannot bypass root-level validation.Integrated validation into:
lockAssetsunlockAssetssetBoostAdded unit coverage for:
Files changed
This PR is intentionally focused on the issue #24 security fix:
src/lib/soroban.tssrc/lib/soroban.auth.test.tssrc/lib/error-handler.tsValidation
Issue-specific validation passed locally:
Result:
Build note
Full
npm.cmd run buildis currently blocked onupstream/mainby pre-existing issues unrelated to this PR, including a Next.js App Router export issue insrc/app/farm/page.tsxand existingno-explicit-anylint errors in context/error boundary files.I verified these failures on pure
upstream/mainafter stashing this PR’s changes, so they are not introduced by this branch.