Nimiq Hack

Reported loss $50K
Polygon
Signature Verification Flaw

What happened

On September 16, 2026, an attacker drained about $50,463 from Nimiq's swap-liquidity wallet on Polygon: 26,130.64 USDC, 24,332.49 USDT0 and 0.66 USDC.e. The wallet held unlimited token approvals to two of Nimiq's HTLC handler contracts, which power the Nimiq Wallet's gas-abstracted stablecoin swaps through OpenGSN meta-transactions.

Each handler acted as its own OpenGSN forwarder, paymaster and recipient. Its execute() entrypoint, callable by the RelayHub, performed no signature or nonce check and relied on the handler's own paymaster to verify requests in preRelayedCall(). Because an OpenGSN relay chooses which paymaster to use, the attacker registered their own relay with a paymaster that approved everything, so the real verification never ran. Forged requests in the liquidity wallet's name opened HTLCs that the attacker then redeemed.

Attacker: 0x2258491525C21f334c5a2dc22CE55e55023FC45D. Setup tx: 0xb067efae73637f3564f58af7f6027afc497e81e47624b0048636085c678858c0. Exploit tx: 0xb2ca76dfbfe571742b4b66465b777ab1e06988a8632be1631bef9654cc64d169. According to Verichains, Nimiq suspended gas-abstracted stablecoin trading while it investigated.

How it happened

  1. The attacker staked 1 POL with the OpenGSN StakeManager and registered a relay manager and worker, becoming a valid relay for the real RelayHub.
  2. They deployed a malicious paymaster whose preRelayedCall() accepted every request unconditionally.
  3. For each token they sent a forged relay request through RelayHub.relayCall() with request.from set to Nimiq's liquidity wallet, forwarder set to the HTLC handler, paymaster set to their own contract, and request.data encoding an open() call whose recipient was a precomputed CREATE2 address.
  4. The hub asked the attacker's paymaster to approve (it did), then called the handler's execute(), which skipped signature, nonce and precondition checks and called transferFrom on the liquidity wallet into a new HTLC.
  5. The attacker deployed the recipient contract at the precomputed address and called redeem() with a secret they had chosen, moving the USDC, USDT0 and USDC.e to themselves.

Protocol details

Classification Input Validation
Protocol Type DeFi Protocol
Implementation language Solidity
Protocol links Website @nimiq

Market Context at Time of Hack

Token Price at Hack $0.00038689
Market Cap at Hack $5.4M
Reported loss / token market cap 0.94%
Token Categories
Smart Contract Platform Layer 1 (L1) Payment Solutions Proof of Stake (PoS) Proof of Work (PoW)

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.