Signature replay across chains → token drain
EIP-2612 permit() signed without chainId / domain separator binding. Capture the off-chain signature on one chain and replay it on another to drain ERC-20 approvals.
§ Context
Assumed environment: target dApp uses permit-style off-chain signatures. The signing structure omits chainId or verifyingContract — a multi-chain deployment shares the same approvals.
§ Steps
- 01transferFrom the approved tokensExfiltrationT1041— Exfiltration Over C2 Channel
- 02Find permit() endpoint without chainId bindingReconnaissanceW-RECON-API-DISCO— API Endpoint Discovery
- 03Submit same signature on other chainCredential AccessW3-SIG-REPLAY— Signature Replay
- 04Capture victim signature (mempool / off-chain)Credential AccessW3-SIG-REPLAY— Signature Replay
§ References
§ Frequently asked
- What is the "Signature replay across chains → token drain" attack path?
- EIP-2612 permit() signed without chainId / domain separator binding. Capture the off-chain signature on one chain and replay it on another to drain ERC-20 approvals. It chains 4 steps drawn from real-world offensive-security techniques.
- What starting position does this attack require?
- The first step is transferFrom the approved tokens (T1041) — a exfiltration primitive. Assumed environment: target dApp uses permit-style off-chain signatures.
- What is the final impact of this kill-chain?
- The final step lands on Capture victim signature (mempool / off-chain) (W3-SIG-REPLAY), which falls under Credential Access. From here, an operator typically pivots into post-exploitation or maintains persistence.
- How can defenders detect or prevent this attack?
- Detection and prevention vary per step. Refer to each linked MITRE ATT&CK entry under "References" — every technique on that page lists defensive controls, detection telemetry, and known threat-actor usage.
§ Related dossiers
- Shared techniques2
Open MongoDB → dump every collection
Shodan-indexed MongoDB on 27017 with no auth. Connect, list databases, dump every collection. Often the second stage is a ransom note in a new 'README' collection.
- Shared techniques2
JWT RS256 → HS256 algorithm confusion → admin
Server verifies any algorithm declared in the JWT header. Sign an HS256 token using the public RSA key as the HMAC secret — server accepts it as legit.
- Shared techniques2
GraphQL introspection → BOLA → mass enum
GraphQL endpoint exposes its full schema. Discover an unauth'd or under-authorized resolver, enumerate every user's data by iterating IDs.
- Shared techniques2
Single-packet race → coupon stacking
Coupon redemption check happens before the apply step. Send 20 redemptions in a single TCP packet — the app validates each in parallel and applies all of them.
- Shared techniques2
NoSQL injection → auth bypass → admin
Login endpoint passes user-supplied JSON into a MongoDB query. Send {"$ne": null} to bypass the password check.