Reproduced Exploit
NetMind: one distribution signature pays the GPU provider twice
Chain
Other
Category
auth
Date
Apr 2024
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: 59205-signature-replay-quantstamp-netmind-markdown. Standalone Foundry PoC and full write-up: 59205-signature-replay-quantstamp-netmind-markdown_exp in the
evm-hack-registrymirror.
Vulnerability classes: vuln/auth/signature-replay
Bob deposits 10 NMT. An authorized signer signs one distribution: payment id 1, the GPU provider, 2 NMT GPU fee, 1 NMT platform fee, expiry 2000000000. The digest is keccak256(abi.encode(...)) and is never marked used. The same 65-byte signature, precomputed offline, is submitted a second time. The GPU provider ends with 4 NMT and feeTo with 2 NMT. Only 2 NMT and 1 NMT were authorized. The second use moved another 3 NMT.
require(signer == authorizedSigner, "sig");
p.distributed += gpuFee + platFee; // @> VULN: digest is not consumed
token.transfer(gpu, gpuFee);
token.transfer(feeTo, platFee);
Diagrams#
Impact#
GPU provider balance is 4 NMT. feeTo balance is 2 NMT. distributed is 6 NMT. The payment contract still holds 4 NMT. The fixed contract stores the digest and the second call reverts, leaving the GPU provider at 2 NMT and feeTo at 1 NMT.
PoC#
cd 59205-signature-replay-quantstamp-netmind-markdown_exp
forge test -vv
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 59205-signature-replay-quantstamp-netmind-markdown_exp (evm-hack-registry mirror).
- AuditVault finding: 59205-signature-replay-quantstamp-netmind-markdown.
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.