1/ 🚨 BREAKING: HYDN rescued over $600k of user funds during an attack on @SushiSwap.
Our team was the first to identify a critical vulnerability and worked quickly with SushiSwap to rescue user funds.
Here's the inside scoop on how it all went down.👇
#blockchain #sushi
Keeper keys often hold admin-grade power on a schedule.
If one bot can liquidate, harvest, or rebalance with no on-chain rate limit, that laptop is a hot upgrade key. Cap call destinations, rotate the signer, and log every path it can hit.
19
Before the pen test starts, freeze deploys and feature flags.
If staging keeps changing under the tester, half the write-up is stale on delivery day. One tagged environment for the window beats three "latest" builds.
13
Same factory bytecode does not mean the same owner.
Clone factories keep shipping vaults where instance 47 got initialized to an EOA that never hit the docs or the multisig runbook. Diff the implementation once. Dump owner and admin on every live clone after deploy.
14
If your agent can turn a chat message into a signed approve or transfer, the chat is a privileged control plane.
Natural language is not a policy language. Pin destinations and amount caps outside the model. First-time spender always needs a human.
2
56
The fake coding interview still works. The last mile changed.
Once the laptop is owned, EIP-7702 can let that EOA temporarily run like a contract. Transfers look like ordinary wallet activity until the auth is gone.
If a daily driver can set 7702 authorization, treat that machine as a live signer.
27
An audit that only covers on-chain bytecode can still greenlight a full drain.
If nobody walks Permit2, eth_signTypedData, and the live frontend origin against the expected domain separator, users sign a spend no contract bug required. Wallet UX is part of the attack surface.
1
2
21
Upgrade shipped. Old contract still held the role.
Vault drains keep landing here: rebalancer, keeper, or router retired in the docs, still approved on-chain. After every cutover, dump live roles against the current design. The README is not the source of truth.
11
If your agent can edit its own system prompt or tool list at runtime, that is an upgrade with no review window.
Pin the policy file, hash it, and refuse boot when the hash drifts. Anything that widens spend rights or destinations mid-session is production change control, not a convenience toggle.
1
8
Emergency withdraw that skips the normal path is a second protocol.
If it can move funds with fewer checks than deposit or redeem, treat it as the real attack surface, not a footnote in the report.
Run the same invariants, auth, and tests on that path that you run on the happy path.
22
A successful bridge receive is not a truth check.
If the source can mint or cache a fake balance before the packet leaves, your destination contract still executes cleanly. Real reserves leave against a lie that arrived on time.
Put remote state proofs in the invariant, not just transport status.
16
Flash loans do not invent new bugs. They pack multi-step accounting mistakes into one block so an invariant only fails under size and ordering you never fuzzed.
If share price or collateral value can move inside the same tx before your checks settle, that path belongs in every deposit and redeem review.
1
17
An agent with a hot key "for small txs only" still needs a hard daily notional cap.
If it can transfer or approve without a separate human check on amount and destination, one bad tool result empties the wallet. Call-count limits do nothing when each call can be max.
Agent proposes. Hardware or multisig settles above a threshold.
20
L2 downtime is not a free pause for your protocol.
If the sequencer is dark and your oracle still serves the last good price with no grace window, the first blocks after recovery liquidate and mint against a market that moved offline.
Pair sequencer uptime with staleness. Treat either alone as incomplete.
15
onlyOwner on pause looks clean in the report.
If that owner is one hot EOA on the same laptop as Discord and deploys, a phish skips the contracts entirely. Pause becomes their kill switch, or yours goes missing when you need it.
Cold multisig for privileged roles. Dry-run the path before mainnet.
1
32
Pen tests die when the build keeps moving.
If main gets merges after kickoff and nobody re-baselines the scope, you're testing a ghost. Findings map to commits that no longer ship.
Freeze a hash, write it in the SOW, and treat every later change as a delta that needs its own pass.
28
The smartest drain this year still starts with a job offer.
Fake recruiter, real-looking company page, "review this branch before the call." Setup script or poisoned dependency on the lead laptop. Deployer key walks out before any auditor opens the contracts.
Unsolicited code review is hostile input until you prove who sent it.
2
51
When a wallet empties overnight, start with the allowances.
A lot of "contract hacks" were just an infinite ERC-20 approve to a lookalike spender. The bytecode was fine. The signature was not.
Check allowance(owner, spender) before you rewrite the postmortem.
1
28
If your agent can call a tool, treat every tool response as untrusted input.
A "successful" API call can still carry instructions. Scraped docs, ticket text, a support reply. The model will follow them if you give it the keys.
Separate read access from write/sign. Don't let the same session do both.
15
Auditing source without the init calldata is half a job.
Wrong owner, wrong oracle, wrong fee recipient on the first call can brick or drain before any later upgrade lands.
Freeze the deploy script and the initializer args with the commit hash.
23
