Reproduced Exploit
Next Generation — Cross-chain signature replay via user-supplied domainSeparator
_verifySig takes domainSeparator from the caller. Two chain deployments both accept the same domain label; independent nonces allow draining EURF on each chain under that domain.
Chain
Other
Category
untagged
Date
Jan 2025
Source
AuditVault
EVM Playground
Source-level debugger — step opcodes and Solidity in sync
The attack is replayed in an in-browser EVM preloaded with the exact dumped fork state. The execution tree shows every call; step by Solidity line or by opcode across all depths — source, Stack, Memory, Storage, Balances (native / ERC-20 / NFT), Transient storage and Return value stay in sync. Click a tree node, opcode, or source line to jump. No backend, no live RPC.
Source & credit. Reproduction of a public audit finding curated by AuditVault — the original finding: 56703-h-01-cross-chain-signature-replay-attack-due-to-user-supplie. Standalone Foundry PoC and full write-up: 56703-h-01-cross-chain-signature-replay-attack-due-to-user-supplie_exp in the
evm-hack-registrymirror.
Reproduction: self-contained Foundry PoC (forge-std only) — no fork. Full trace: output.txt.
AuditVault taxonomy: lang/solidity · platform/code4rena · severity/high · sector/bridge · genome: permit-fork-replay · replay · cross-chain-message
Key info#
| Impact | HIGH — domain A accepted on chain B → unauthorized EURF transfers cross-chain |
| Protocol | Next Generation |
| Bug class | User-supplied domainSeparator not bound to block.chainid |
| Finding | Code4rena 2025-01-next-generation H-01 · #56703 |
| Report | https://code4rena.com/reports/2025-01-next-generation |
| Source | AuditVault |
| Status | Audit finding — reproduced as a standalone local synthetic |
| Compiler | ^0.8.24 (PoC) |
TL;DR#
_verifySig takes domainSeparator from the caller. Two chain deployments both accept the same domain label; independent nonces allow draining EURF on each chain under that domain.
HARM: attacker receives full user EURF balance on both modeled chains.
Root cause#
Domain separator is not computed on-chain with chainid / verifyingContract; no deadline.
Preconditions#
Same CREATE2-style deployment intent across chains; user has matching nonces and balances.
Attack walkthrough#
Execute meta-tx on chain A with DOMAIN_A → replay DOMAIN_A on chain B for independent nonce 0.
Diagrams#
Impact#
Cross-chain unauthorized transfers of EURF via gasless forwarder.
Sources#
- AuditVault finding
- Report: https://code4rena.com/reports/2025-01-next-generation
- Reduced source provenance: github.com/code-423n4/2025-01-next-generation@499cfa50 contracts/Forwarder.sol
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 56703-h-01-cross-chain-signature-replay-attack-due-to-user-supplie_exp (evm-hack-registry mirror).
- AuditVault finding: 56703-h-01-cross-chain-signature-replay-attack-due-to-user-supplie.
Alerts & third-party analyses
These dashboards index community alerts tweets, post-mortems, and independent write-ups. Reach them through the protocol name above to cross-check this reproduction against other analyses.