Reproduced Exploit
SXT — [C-01] Accepting duplicate signatures from one signer
Threshold = 2. Attacker submits the same valid (v,r,s) twice. Both recover to one attestor; both count. validateMessage returns true.
Chain
Other
Category
untagged
Date
Mar 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: 63314-c-01-accepting-duplicate-signatures-from-one-signer-pashov-a. Standalone Foundry PoC and full write-up: 63314-c-01-accepting-duplicate-signatures-from-one-signer-pashov-a_exp in the
evm-hack-registrymirror.
Vulnerability classes: broken-logic · role-bypass · bridge-validator-threshold
Reproduction: self-contained Foundry PoC, forge-std only.
AuditVault taxonomy: severity/high · sector/staking · platform/pashov · broken-logic · role-bypass · bridge-validator-threshold
Key info#
| Impact | HIGH — single attestor meets multi-sig threshold via replayed signature |
| Protocol | SXT SubstrateSignatureValidator |
| Vulnerable code | validateMessage increments count without signer dedup |
| Bug class | Missing signature uniqueness check |
| Finding | Pashov · SXT 2025-03-31 · #63314 |
TL;DR#
Threshold = 2. Attacker submits the same valid (v,r,s) twice. Both recover to one attestor; both count. validateMessage returns true.
The vulnerable code#
if (attestorIndex < attestorsLength && _attestors[attestorIndex] == recoveredAddress) {
++validSignaturesCount; // @> VULN no dedup
}
// FIX: skip if signer already counted
Diagrams#
Impact#
Forged multi-attestor consensus from one honest signature → bridge/message validation bypass.
Sources#
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 63314-c-01-accepting-duplicate-signatures-from-one-signer-pashov-a_exp (evm-hack-registry mirror).
- AuditVault finding: 63314-c-01-accepting-duplicate-signatures-from-one-signer-pashov-a.
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.